@microsoft/terraform-cdk-constructs 1.9.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +38110 -28389
- package/API.md +40683 -30877
- package/lib/azure-actiongroup/lib/action-group.d.ts +3 -3
- package/lib/azure-actiongroup/lib/action-group.js +5 -5
- package/lib/azure-actiongroup/test/action-group.integ.d.ts +1 -1
- package/lib/azure-actiongroup/test/action-group.integ.js +5 -5
- package/lib/azure-actiongroup/test/action-group.spec.js +9 -9
- package/lib/azure-activitylogalert/lib/activity-log-alert.d.ts +3 -3
- package/lib/azure-activitylogalert/lib/activity-log-alert.js +5 -5
- package/lib/azure-activitylogalert/test/activity-log-alert.integ.d.ts +1 -1
- package/lib/azure-activitylogalert/test/activity-log-alert.integ.js +6 -6
- package/lib/azure-activitylogalert/test/activity-log-alert.spec.js +9 -9
- package/lib/azure-aks/lib/aks-cluster.d.ts +6 -6
- package/lib/azure-aks/lib/aks-cluster.js +8 -8
- package/lib/azure-aks/test/aks-cluster.integ.d.ts +1 -1
- package/lib/azure-aks/test/aks-cluster.integ.js +5 -5
- package/lib/azure-aks/test/aks-cluster.spec.js +12 -12
- package/lib/azure-containerapps/index.d.ts +1 -0
- package/lib/azure-containerapps/index.js +18 -0
- package/lib/azure-containerapps/lib/container-app-environment-schemas.d.ts +50 -0
- package/lib/azure-containerapps/lib/container-app-environment-schemas.js +522 -0
- package/lib/azure-containerapps/lib/container-app-environment.d.ts +374 -0
- package/lib/azure-containerapps/lib/container-app-environment.js +310 -0
- package/lib/azure-containerapps/lib/container-app-schemas.d.ts +48 -0
- package/lib/azure-containerapps/lib/container-app-schemas.js +466 -0
- package/lib/azure-containerapps/lib/container-app.d.ts +925 -0
- package/lib/azure-containerapps/lib/container-app.js +320 -0
- package/lib/azure-containerapps/lib/index.d.ts +4 -0
- package/lib/azure-containerapps/lib/index.js +21 -0
- package/lib/azure-containerapps/test/container-app-environment.integ.d.ts +10 -0
- package/lib/azure-containerapps/test/container-app-environment.integ.js +82 -0
- package/lib/azure-containerapps/test/container-app-environment.spec.d.ts +9 -0
- package/lib/azure-containerapps/test/container-app-environment.spec.js +412 -0
- package/lib/azure-containerapps/test/container-app.integ.d.ts +10 -0
- package/lib/azure-containerapps/test/container-app.integ.js +119 -0
- package/lib/azure-containerapps/test/container-app.spec.d.ts +9 -0
- package/lib/azure-containerapps/test/container-app.spec.js +839 -0
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.d.ts +3 -3
- package/lib/azure-diagnosticsettings/lib/diagnostic-settings.js +5 -5
- package/lib/azure-diagnosticsettings/test/diagnostic-settings.spec.js +9 -9
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.d.ts +7 -7
- package/lib/azure-dnsforwardingruleset/lib/dns-forwarding-ruleset.js +9 -9
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.d.ts +4 -4
- package/lib/azure-dnsforwardingruleset/lib/forwarding-rule.js +6 -6
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.d.ts +4 -4
- package/lib/azure-dnsforwardingruleset/lib/virtual-network-link.js +6 -6
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.d.ts +1 -1
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.integ.js +5 -5
- package/lib/azure-dnsforwardingruleset/test/dns-forwarding-ruleset.spec.js +11 -11
- package/lib/azure-dnsforwardingruleset/test/forwarding-rule.spec.js +14 -14
- package/lib/azure-dnsforwardingruleset/test/virtual-network-link.spec.js +12 -12
- package/lib/azure-dnsresolver/lib/dns-resolver.d.ts +8 -8
- package/lib/azure-dnsresolver/lib/dns-resolver.js +10 -10
- package/lib/azure-dnsresolver/lib/inbound-endpoint.d.ts +6 -6
- package/lib/azure-dnsresolver/lib/inbound-endpoint.js +8 -8
- package/lib/azure-dnsresolver/lib/outbound-endpoint.d.ts +7 -7
- package/lib/azure-dnsresolver/lib/outbound-endpoint.js +9 -9
- package/lib/azure-dnsresolver/test/dns-resolver.integ.d.ts +1 -1
- package/lib/azure-dnsresolver/test/dns-resolver.integ.js +5 -5
- package/lib/azure-dnsresolver/test/dns-resolver.spec.js +11 -11
- package/lib/azure-dnsresolver/test/inbound-endpoint.integ.d.ts +1 -1
- package/lib/azure-dnsresolver/test/inbound-endpoint.integ.js +5 -5
- package/lib/azure-dnsresolver/test/inbound-endpoint.spec.js +12 -12
- package/lib/azure-dnsresolver/test/outbound-endpoint.integ.d.ts +1 -1
- package/lib/azure-dnsresolver/test/outbound-endpoint.integ.js +5 -5
- package/lib/azure-dnsresolver/test/outbound-endpoint.spec.js +9 -9
- package/lib/azure-dnszone/lib/dns-zone.d.ts +6 -6
- package/lib/azure-dnszone/lib/dns-zone.js +8 -8
- package/lib/azure-dnszone/lib/records/dns-records.d.ts +31 -31
- package/lib/azure-dnszone/lib/records/dns-records.js +42 -42
- package/lib/azure-dnszone/test/dns-records.integ.d.ts +1 -1
- package/lib/azure-dnszone/test/dns-records.integ.js +5 -5
- package/lib/azure-dnszone/test/dns-records.spec.js +57 -57
- package/lib/azure-dnszone/test/dns-zone.integ.d.ts +1 -1
- package/lib/azure-dnszone/test/dns-zone.integ.js +5 -5
- package/lib/azure-dnszone/test/dns-zone.spec.js +11 -11
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.d.ts +1 -1
- package/lib/azure-loganalyticsworkspace/lib/log-analytics-workspace.js +3 -3
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.d.ts +1 -1
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.integ.js +6 -6
- package/lib/azure-loganalyticsworkspace/test/log-analytics-workspace.spec.js +6 -6
- package/lib/azure-metricalert/lib/metric-alert.d.ts +3 -3
- package/lib/azure-metricalert/lib/metric-alert.js +5 -5
- package/lib/azure-metricalert/test/metric-alert.integ.d.ts +1 -1
- package/lib/azure-metricalert/test/metric-alert.integ.js +5 -5
- package/lib/azure-metricalert/test/metric-alert.spec.js +9 -9
- package/lib/azure-networkinterface/lib/network-interface.d.ts +5 -5
- package/lib/azure-networkinterface/lib/network-interface.js +7 -7
- package/lib/azure-networkinterface/test/network-interface.integ.d.ts +1 -1
- package/lib/azure-networkinterface/test/network-interface.integ.js +5 -5
- package/lib/azure-networkinterface/test/network-interface.spec.js +11 -11
- package/lib/azure-networksecuritygroup/lib/network-security-group.d.ts +6 -6
- package/lib/azure-networksecuritygroup/lib/network-security-group.js +8 -8
- package/lib/azure-networksecuritygroup/test/network-security-group.integ.d.ts +1 -1
- package/lib/azure-networksecuritygroup/test/network-security-group.integ.js +5 -5
- package/lib/azure-networksecuritygroup/test/network-security-group.spec.js +12 -12
- package/lib/azure-networkwatcher/lib/network-watcher.d.ts +1 -1
- package/lib/azure-networkwatcher/lib/network-watcher.js +3 -3
- package/lib/azure-networkwatcher/test/network-watcher.integ.d.ts +1 -1
- package/lib/azure-networkwatcher/test/network-watcher.integ.js +6 -6
- package/lib/azure-networkwatcher/test/network-watcher.spec.js +6 -6
- package/lib/azure-policyassignment/lib/policy-assignment.d.ts +3 -3
- package/lib/azure-policyassignment/lib/policy-assignment.js +5 -5
- package/lib/azure-policyassignment/test/policy-assignment.integ.d.ts +1 -1
- package/lib/azure-policyassignment/test/policy-assignment.integ.js +5 -5
- package/lib/azure-policyassignment/test/policy-assignment.spec.js +12 -12
- package/lib/azure-policydefinition/lib/policy-definition.d.ts +3 -3
- package/lib/azure-policydefinition/lib/policy-definition.js +5 -5
- package/lib/azure-policydefinition/test/policy-definition.integ.d.ts +1 -1
- package/lib/azure-policydefinition/test/policy-definition.integ.js +5 -5
- package/lib/azure-policydefinition/test/policy-definition.spec.js +19 -19
- package/lib/azure-policysetdefinition/lib/policy-set-definition.d.ts +1 -1
- package/lib/azure-policysetdefinition/lib/policy-set-definition.js +3 -3
- package/lib/azure-policysetdefinition/test/policy-set-definition.integ.d.ts +1 -1
- package/lib/azure-policysetdefinition/test/policy-set-definition.integ.js +6 -6
- package/lib/azure-policysetdefinition/test/policy-set-definition.spec.js +6 -6
- package/lib/azure-privatednszone/lib/private-dns-zone.d.ts +10 -10
- package/lib/azure-privatednszone/lib/private-dns-zone.js +12 -12
- package/lib/azure-privatednszone/lib/records/private-dns-records.d.ts +25 -25
- package/lib/azure-privatednszone/lib/records/private-dns-records.js +34 -34
- package/lib/azure-privatednszone/test/private-dns-records.integ.d.ts +1 -1
- package/lib/azure-privatednszone/test/private-dns-records.integ.js +5 -5
- package/lib/azure-privatednszone/test/private-dns-records.spec.js +49 -49
- package/lib/azure-privatednszone/test/private-dns-zone.integ.d.ts +1 -1
- package/lib/azure-privatednszone/test/private-dns-zone.integ.js +5 -5
- package/lib/azure-privatednszone/test/private-dns-zone.spec.js +12 -12
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.d.ts +6 -6
- package/lib/azure-privatednszonelink/lib/private-dns-zone-link.js +8 -8
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.d.ts +1 -1
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.integ.js +5 -5
- package/lib/azure-privatednszonelink/test/private-dns-zone-link.spec.js +12 -12
- package/lib/azure-publicipaddress/lib/public-ip-address.d.ts +5 -5
- package/lib/azure-publicipaddress/lib/public-ip-address.js +7 -7
- package/lib/azure-publicipaddress/test/public-ip-address.integ.d.ts +1 -1
- package/lib/azure-publicipaddress/test/public-ip-address.integ.js +6 -6
- package/lib/azure-publicipaddress/test/public-ip-address.spec.js +11 -11
- package/lib/azure-resourcegroup/lib/resource-group.d.ts +5 -5
- package/lib/azure-resourcegroup/lib/resource-group.js +7 -7
- package/lib/azure-resourcegroup/test/resource-group.integ.d.ts +1 -1
- package/lib/azure-resourcegroup/test/resource-group.integ.js +5 -5
- package/lib/azure-resourcegroup/test/resource-group.spec.js +14 -14
- package/lib/azure-roleassignment/lib/role-assignment.d.ts +3 -3
- package/lib/azure-roleassignment/lib/role-assignment.js +5 -5
- package/lib/azure-roleassignment/test/role-assignment.integ.d.ts +1 -1
- package/lib/azure-roleassignment/test/role-assignment.integ.js +5 -5
- package/lib/azure-roleassignment/test/role-assignment.spec.js +12 -12
- package/lib/azure-roledefinition/lib/role-definition.d.ts +3 -3
- package/lib/azure-roledefinition/lib/role-definition.js +5 -5
- package/lib/azure-roledefinition/test/role-definition.integ.d.ts +1 -1
- package/lib/azure-roledefinition/test/role-definition.integ.js +5 -5
- package/lib/azure-roledefinition/test/role-definition.spec.js +12 -12
- package/lib/azure-storageaccount/lib/storage-account.d.ts +6 -6
- package/lib/azure-storageaccount/lib/storage-account.js +8 -8
- package/lib/azure-storageaccount/test/storage-account.integ.d.ts +1 -1
- package/lib/azure-storageaccount/test/storage-account.integ.js +5 -5
- package/lib/azure-storageaccount/test/storage-account.spec.js +11 -11
- package/lib/azure-subnet/lib/subnet.d.ts +3 -3
- package/lib/azure-subnet/lib/subnet.js +5 -5
- package/lib/azure-subnet/test/subnet.integ.d.ts +1 -1
- package/lib/azure-subnet/test/subnet.integ.js +5 -5
- package/lib/azure-subnet/test/subnet.spec.js +9 -9
- package/lib/azure-virtualmachine/lib/virtual-machine.d.ts +6 -6
- package/lib/azure-virtualmachine/lib/virtual-machine.js +8 -8
- package/lib/azure-virtualmachine/test/virtual-machine.integ.d.ts +1 -1
- package/lib/azure-virtualmachine/test/virtual-machine.integ.js +5 -5
- package/lib/azure-virtualmachine/test/virtual-machine.spec.js +17 -17
- package/lib/azure-virtualnetwork/lib/virtual-network.d.ts +6 -6
- package/lib/azure-virtualnetwork/lib/virtual-network.js +8 -8
- package/lib/azure-virtualnetwork/test/virtual-network.integ.d.ts +1 -1
- package/lib/azure-virtualnetwork/test/virtual-network.integ.js +5 -5
- package/lib/azure-virtualnetwork/test/virtual-network.spec.js +12 -12
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.d.ts +5 -5
- package/lib/azure-virtualnetworkgateway/lib/virtual-network-gateway.js +7 -7
- package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.integ.d.ts +1 -1
- package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.integ.js +5 -5
- package/lib/azure-virtualnetworkgateway/test/virtual-network-gateway.spec.js +13 -13
- package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.d.ts +5 -5
- package/lib/azure-virtualnetworkgatewayconnection/lib/virtual-network-gateway-connection.js +7 -7
- package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.integ.d.ts +1 -1
- package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.integ.js +5 -5
- package/lib/azure-virtualnetworkgatewayconnection/test/virtual-network-gateway-connection.spec.js +20 -20
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/connectivity-configuration.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool-static-cidr.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/ipam-pool.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/network-group-static-member.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/network-group.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/network-group.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/security-admin-configuration.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule-collection.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.d.ts +4 -4
- package/lib/azure-virtualnetworkmanager/lib/security-admin-rule.js +6 -6
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.d.ts +7 -7
- package/lib/azure-virtualnetworkmanager/lib/virtual-network-manager.js +9 -9
- package/lib/azure-virtualnetworkmanager/test/ipam-pool-static-cidr.spec.js +17 -17
- package/lib/azure-virtualnetworkmanager/test/ipam-pool.spec.js +15 -15
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.d.ts +1 -1
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.integ.js +5 -5
- package/lib/azure-virtualnetworkmanager/test/virtual-network-manager.spec.js +57 -57
- package/lib/azure-vmss/lib/virtual-machine-scale-set.d.ts +6 -6
- package/lib/azure-vmss/lib/virtual-machine-scale-set.js +8 -8
- package/lib/azure-vmss/test/virtual-machine-scale-set.integ.d.ts +1 -1
- package/lib/azure-vmss/test/virtual-machine-scale-set.integ.js +5 -5
- package/lib/azure-vmss/test/virtual-machine-scale-set.spec.js +12 -12
- package/lib/core-azure/lib/azapi/azapi-resource-tags.spec.js +6 -6
- package/lib/core-azure/lib/azapi/azapi-resource.d.ts +7 -7
- package/lib/core-azure/lib/azapi/azapi-resource.js +6 -6
- package/lib/core-azure/lib/azapi/azapi-resource.spec.js +7 -7
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.d.ts +12 -12
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-client-config/index.js +15 -15
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.d.ts +35 -35
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource/index.js +58 -58
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.d.ts +25 -25
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-action/index.js +49 -49
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.d.ts +13 -13
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-id/index.js +22 -22
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.d.ts +24 -24
- package/lib/core-azure/lib/azapi/providers-azapi/data-azapi-resource-list/index.js +40 -40
- package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.d.ts +44 -44
- package/lib/core-azure/lib/azapi/providers-azapi/data-plane-resource/index.js +72 -72
- package/lib/core-azure/lib/azapi/providers-azapi/index.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/lazy-index.js +2 -2
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.d.ts +54 -54
- package/lib/core-azure/lib/azapi/providers-azapi/provider/index.js +86 -86
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.d.ts +65 -65
- package/lib/core-azure/lib/azapi/providers-azapi/resource/index.js +102 -102
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.d.ts +25 -25
- package/lib/core-azure/lib/azapi/providers-azapi/resource-action/index.js +62 -62
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.d.ts +36 -36
- package/lib/core-azure/lib/azapi/providers-azapi/update-resource/index.js +69 -69
- package/lib/core-azure/lib/azapi/schema-mapper/schema-mapper.js +1 -1
- package/lib/core-azure/lib/version-manager/api-version-manager.js +1 -1
- package/lib/core-azure/lib/version-manager/interfaces/version-interfaces.js +7 -7
- package/lib/index.d.ts +3 -0
- package/lib/index.js +5 -2
- package/lib/testing/index.d.ts +1 -1
- package/lib/testing/index.js +8 -8
- package/lib/testing/lib/cleanup.js +1 -1
- package/lib/testing/lib/metadata.js +1 -1
- package/package.json +10 -22
- package/setup.js +2 -2
|
@@ -26,7 +26,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
26
26
|
* - NS records: Only available in public DNS
|
|
27
27
|
* - targetResource: Public DNS A, AAAA, and CNAME records support alias records
|
|
28
28
|
*/
|
|
29
|
-
const
|
|
29
|
+
const cdktn = require("cdktn");
|
|
30
30
|
const dns_record_schemas_1 = require("./dns-record-schemas");
|
|
31
31
|
const azapi_resource_1 = require("../../../core-azure/lib/azapi/azapi-resource");
|
|
32
32
|
/**
|
|
@@ -61,15 +61,15 @@ class DnsARecord extends azapi_resource_1.AzapiResource {
|
|
|
61
61
|
constructor(scope, id, props) {
|
|
62
62
|
super(scope, id, props);
|
|
63
63
|
this.props = props;
|
|
64
|
-
this.idOutput = new
|
|
64
|
+
this.idOutput = new cdktn.TerraformOutput(this, "id", {
|
|
65
65
|
value: this.id,
|
|
66
66
|
description: "The ID of the A Record",
|
|
67
67
|
});
|
|
68
|
-
this.nameOutput = new
|
|
68
|
+
this.nameOutput = new cdktn.TerraformOutput(this, "name", {
|
|
69
69
|
value: `\${${this.terraformResource.fqn}.name}`,
|
|
70
70
|
description: "The name of the A Record",
|
|
71
71
|
});
|
|
72
|
-
this.fqdnOutput = new
|
|
72
|
+
this.fqdnOutput = new cdktn.TerraformOutput(this, "fqdn", {
|
|
73
73
|
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
74
74
|
description: "The FQDN of the A Record",
|
|
75
75
|
});
|
|
@@ -123,7 +123,7 @@ class DnsARecord extends azapi_resource_1.AzapiResource {
|
|
|
123
123
|
}
|
|
124
124
|
exports.DnsARecord = DnsARecord;
|
|
125
125
|
_a = JSII_RTTI_SYMBOL_1;
|
|
126
|
-
DnsARecord[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsARecord", version: "
|
|
126
|
+
DnsARecord[_a] = { fqn: "@microsoft/terraform-cdk-constructs.DnsARecord", version: "2.2.0" };
|
|
127
127
|
(() => {
|
|
128
128
|
azapi_resource_1.AzapiResource.registerSchemas(dns_record_schemas_1.DNS_A_RECORD_TYPE, dns_record_schemas_1.ALL_DNS_A_RECORD_VERSIONS);
|
|
129
129
|
})();
|
|
@@ -150,15 +150,15 @@ class DnsAaaaRecord extends azapi_resource_1.AzapiResource {
|
|
|
150
150
|
constructor(scope, id, props) {
|
|
151
151
|
super(scope, id, props);
|
|
152
152
|
this.props = props;
|
|
153
|
-
this.idOutput = new
|
|
153
|
+
this.idOutput = new cdktn.TerraformOutput(this, "id", {
|
|
154
154
|
value: this.id,
|
|
155
155
|
description: "The ID of the AAAA Record",
|
|
156
156
|
});
|
|
157
|
-
this.nameOutput = new
|
|
157
|
+
this.nameOutput = new cdktn.TerraformOutput(this, "name", {
|
|
158
158
|
value: `\${${this.terraformResource.fqn}.name}`,
|
|
159
159
|
description: "The name of the AAAA Record",
|
|
160
160
|
});
|
|
161
|
-
this.fqdnOutput = new
|
|
161
|
+
this.fqdnOutput = new cdktn.TerraformOutput(this, "fqdn", {
|
|
162
162
|
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
163
163
|
description: "The FQDN of the AAAA Record",
|
|
164
164
|
});
|
|
@@ -212,7 +212,7 @@ class DnsAaaaRecord extends azapi_resource_1.AzapiResource {
|
|
|
212
212
|
}
|
|
213
213
|
exports.DnsAaaaRecord = DnsAaaaRecord;
|
|
214
214
|
_b = JSII_RTTI_SYMBOL_1;
|
|
215
|
-
DnsAaaaRecord[_b] = { fqn: "@microsoft/terraform-cdk-constructs.DnsAaaaRecord", version: "
|
|
215
|
+
DnsAaaaRecord[_b] = { fqn: "@microsoft/terraform-cdk-constructs.DnsAaaaRecord", version: "2.2.0" };
|
|
216
216
|
(() => {
|
|
217
217
|
azapi_resource_1.AzapiResource.registerSchemas(dns_record_schemas_1.DNS_AAAA_RECORD_TYPE, dns_record_schemas_1.ALL_DNS_AAAA_RECORD_VERSIONS);
|
|
218
218
|
})();
|
|
@@ -241,15 +241,15 @@ class DnsCaaRecord extends azapi_resource_1.AzapiResource {
|
|
|
241
241
|
constructor(scope, id, props) {
|
|
242
242
|
super(scope, id, props);
|
|
243
243
|
this.props = props;
|
|
244
|
-
this.idOutput = new
|
|
244
|
+
this.idOutput = new cdktn.TerraformOutput(this, "id", {
|
|
245
245
|
value: this.id,
|
|
246
246
|
description: "The ID of the CAA Record",
|
|
247
247
|
});
|
|
248
|
-
this.nameOutput = new
|
|
248
|
+
this.nameOutput = new cdktn.TerraformOutput(this, "name", {
|
|
249
249
|
value: `\${${this.terraformResource.fqn}.name}`,
|
|
250
250
|
description: "The name of the CAA Record",
|
|
251
251
|
});
|
|
252
|
-
this.fqdnOutput = new
|
|
252
|
+
this.fqdnOutput = new cdktn.TerraformOutput(this, "fqdn", {
|
|
253
253
|
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
254
254
|
description: "The FQDN of the CAA Record",
|
|
255
255
|
});
|
|
@@ -300,7 +300,7 @@ class DnsCaaRecord extends azapi_resource_1.AzapiResource {
|
|
|
300
300
|
}
|
|
301
301
|
exports.DnsCaaRecord = DnsCaaRecord;
|
|
302
302
|
_c = JSII_RTTI_SYMBOL_1;
|
|
303
|
-
DnsCaaRecord[_c] = { fqn: "@microsoft/terraform-cdk-constructs.DnsCaaRecord", version: "
|
|
303
|
+
DnsCaaRecord[_c] = { fqn: "@microsoft/terraform-cdk-constructs.DnsCaaRecord", version: "2.2.0" };
|
|
304
304
|
(() => {
|
|
305
305
|
azapi_resource_1.AzapiResource.registerSchemas(dns_record_schemas_1.DNS_CAA_RECORD_TYPE, dns_record_schemas_1.ALL_DNS_CAA_RECORD_VERSIONS);
|
|
306
306
|
})();
|
|
@@ -326,15 +326,15 @@ class DnsCnameRecord extends azapi_resource_1.AzapiResource {
|
|
|
326
326
|
constructor(scope, id, props) {
|
|
327
327
|
super(scope, id, props);
|
|
328
328
|
this.props = props;
|
|
329
|
-
this.idOutput = new
|
|
329
|
+
this.idOutput = new cdktn.TerraformOutput(this, "id", {
|
|
330
330
|
value: this.id,
|
|
331
331
|
description: "The ID of the CNAME Record",
|
|
332
332
|
});
|
|
333
|
-
this.nameOutput = new
|
|
333
|
+
this.nameOutput = new cdktn.TerraformOutput(this, "name", {
|
|
334
334
|
value: `\${${this.terraformResource.fqn}.name}`,
|
|
335
335
|
description: "The name of the CNAME Record",
|
|
336
336
|
});
|
|
337
|
-
this.fqdnOutput = new
|
|
337
|
+
this.fqdnOutput = new cdktn.TerraformOutput(this, "fqdn", {
|
|
338
338
|
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
339
339
|
description: "The FQDN of the CNAME Record",
|
|
340
340
|
});
|
|
@@ -386,7 +386,7 @@ class DnsCnameRecord extends azapi_resource_1.AzapiResource {
|
|
|
386
386
|
}
|
|
387
387
|
exports.DnsCnameRecord = DnsCnameRecord;
|
|
388
388
|
_d = JSII_RTTI_SYMBOL_1;
|
|
389
|
-
DnsCnameRecord[_d] = { fqn: "@microsoft/terraform-cdk-constructs.DnsCnameRecord", version: "
|
|
389
|
+
DnsCnameRecord[_d] = { fqn: "@microsoft/terraform-cdk-constructs.DnsCnameRecord", version: "2.2.0" };
|
|
390
390
|
(() => {
|
|
391
391
|
azapi_resource_1.AzapiResource.registerSchemas(dns_record_schemas_1.DNS_CNAME_RECORD_TYPE, dns_record_schemas_1.ALL_DNS_CNAME_RECORD_VERSIONS);
|
|
392
392
|
})();
|
|
@@ -413,15 +413,15 @@ class DnsMxRecord extends azapi_resource_1.AzapiResource {
|
|
|
413
413
|
constructor(scope, id, props) {
|
|
414
414
|
super(scope, id, props);
|
|
415
415
|
this.props = props;
|
|
416
|
-
this.idOutput = new
|
|
416
|
+
this.idOutput = new cdktn.TerraformOutput(this, "id", {
|
|
417
417
|
value: this.id,
|
|
418
418
|
description: "The ID of the MX Record",
|
|
419
419
|
});
|
|
420
|
-
this.nameOutput = new
|
|
420
|
+
this.nameOutput = new cdktn.TerraformOutput(this, "name", {
|
|
421
421
|
value: `\${${this.terraformResource.fqn}.name}`,
|
|
422
422
|
description: "The name of the MX Record",
|
|
423
423
|
});
|
|
424
|
-
this.fqdnOutput = new
|
|
424
|
+
this.fqdnOutput = new cdktn.TerraformOutput(this, "fqdn", {
|
|
425
425
|
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
426
426
|
description: "The FQDN of the MX Record",
|
|
427
427
|
});
|
|
@@ -471,7 +471,7 @@ class DnsMxRecord extends azapi_resource_1.AzapiResource {
|
|
|
471
471
|
}
|
|
472
472
|
exports.DnsMxRecord = DnsMxRecord;
|
|
473
473
|
_e = JSII_RTTI_SYMBOL_1;
|
|
474
|
-
DnsMxRecord[_e] = { fqn: "@microsoft/terraform-cdk-constructs.DnsMxRecord", version: "
|
|
474
|
+
DnsMxRecord[_e] = { fqn: "@microsoft/terraform-cdk-constructs.DnsMxRecord", version: "2.2.0" };
|
|
475
475
|
(() => {
|
|
476
476
|
azapi_resource_1.AzapiResource.registerSchemas(dns_record_schemas_1.DNS_MX_RECORD_TYPE, dns_record_schemas_1.ALL_DNS_MX_RECORD_VERSIONS);
|
|
477
477
|
})();
|
|
@@ -499,15 +499,15 @@ class DnsNsRecord extends azapi_resource_1.AzapiResource {
|
|
|
499
499
|
constructor(scope, id, props) {
|
|
500
500
|
super(scope, id, props);
|
|
501
501
|
this.props = props;
|
|
502
|
-
this.idOutput = new
|
|
502
|
+
this.idOutput = new cdktn.TerraformOutput(this, "id", {
|
|
503
503
|
value: this.id,
|
|
504
504
|
description: "The ID of the NS Record",
|
|
505
505
|
});
|
|
506
|
-
this.nameOutput = new
|
|
506
|
+
this.nameOutput = new cdktn.TerraformOutput(this, "name", {
|
|
507
507
|
value: `\${${this.terraformResource.fqn}.name}`,
|
|
508
508
|
description: "The name of the NS Record",
|
|
509
509
|
});
|
|
510
|
-
this.fqdnOutput = new
|
|
510
|
+
this.fqdnOutput = new cdktn.TerraformOutput(this, "fqdn", {
|
|
511
511
|
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
512
512
|
description: "The FQDN of the NS Record",
|
|
513
513
|
});
|
|
@@ -556,7 +556,7 @@ class DnsNsRecord extends azapi_resource_1.AzapiResource {
|
|
|
556
556
|
}
|
|
557
557
|
exports.DnsNsRecord = DnsNsRecord;
|
|
558
558
|
_f = JSII_RTTI_SYMBOL_1;
|
|
559
|
-
DnsNsRecord[_f] = { fqn: "@microsoft/terraform-cdk-constructs.DnsNsRecord", version: "
|
|
559
|
+
DnsNsRecord[_f] = { fqn: "@microsoft/terraform-cdk-constructs.DnsNsRecord", version: "2.2.0" };
|
|
560
560
|
(() => {
|
|
561
561
|
azapi_resource_1.AzapiResource.registerSchemas(dns_record_schemas_1.DNS_NS_RECORD_TYPE, dns_record_schemas_1.ALL_DNS_NS_RECORD_VERSIONS);
|
|
562
562
|
})();
|
|
@@ -582,15 +582,15 @@ class DnsPtrRecord extends azapi_resource_1.AzapiResource {
|
|
|
582
582
|
constructor(scope, id, props) {
|
|
583
583
|
super(scope, id, props);
|
|
584
584
|
this.props = props;
|
|
585
|
-
this.idOutput = new
|
|
585
|
+
this.idOutput = new cdktn.TerraformOutput(this, "id", {
|
|
586
586
|
value: this.id,
|
|
587
587
|
description: "The ID of the PTR Record",
|
|
588
588
|
});
|
|
589
|
-
this.nameOutput = new
|
|
589
|
+
this.nameOutput = new cdktn.TerraformOutput(this, "name", {
|
|
590
590
|
value: `\${${this.terraformResource.fqn}.name}`,
|
|
591
591
|
description: "The name of the PTR Record",
|
|
592
592
|
});
|
|
593
|
-
this.fqdnOutput = new
|
|
593
|
+
this.fqdnOutput = new cdktn.TerraformOutput(this, "fqdn", {
|
|
594
594
|
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
595
595
|
description: "The FQDN of the PTR Record",
|
|
596
596
|
});
|
|
@@ -639,7 +639,7 @@ class DnsPtrRecord extends azapi_resource_1.AzapiResource {
|
|
|
639
639
|
}
|
|
640
640
|
exports.DnsPtrRecord = DnsPtrRecord;
|
|
641
641
|
_g = JSII_RTTI_SYMBOL_1;
|
|
642
|
-
DnsPtrRecord[_g] = { fqn: "@microsoft/terraform-cdk-constructs.DnsPtrRecord", version: "
|
|
642
|
+
DnsPtrRecord[_g] = { fqn: "@microsoft/terraform-cdk-constructs.DnsPtrRecord", version: "2.2.0" };
|
|
643
643
|
(() => {
|
|
644
644
|
azapi_resource_1.AzapiResource.registerSchemas(dns_record_schemas_1.DNS_PTR_RECORD_TYPE, dns_record_schemas_1.ALL_DNS_PTR_RECORD_VERSIONS);
|
|
645
645
|
})();
|
|
@@ -670,15 +670,15 @@ class DnsSoaRecord extends azapi_resource_1.AzapiResource {
|
|
|
670
670
|
constructor(scope, id, props) {
|
|
671
671
|
super(scope, id, props);
|
|
672
672
|
this.props = props;
|
|
673
|
-
this.idOutput = new
|
|
673
|
+
this.idOutput = new cdktn.TerraformOutput(this, "id", {
|
|
674
674
|
value: this.id,
|
|
675
675
|
description: "The ID of the SOA Record",
|
|
676
676
|
});
|
|
677
|
-
this.nameOutput = new
|
|
677
|
+
this.nameOutput = new cdktn.TerraformOutput(this, "name", {
|
|
678
678
|
value: `\${${this.terraformResource.fqn}.name}`,
|
|
679
679
|
description: "The name of the SOA Record",
|
|
680
680
|
});
|
|
681
|
-
this.fqdnOutput = new
|
|
681
|
+
this.fqdnOutput = new cdktn.TerraformOutput(this, "fqdn", {
|
|
682
682
|
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
683
683
|
description: "The FQDN of the SOA Record",
|
|
684
684
|
});
|
|
@@ -747,7 +747,7 @@ class DnsSoaRecord extends azapi_resource_1.AzapiResource {
|
|
|
747
747
|
}
|
|
748
748
|
exports.DnsSoaRecord = DnsSoaRecord;
|
|
749
749
|
_h = JSII_RTTI_SYMBOL_1;
|
|
750
|
-
DnsSoaRecord[_h] = { fqn: "@microsoft/terraform-cdk-constructs.DnsSoaRecord", version: "
|
|
750
|
+
DnsSoaRecord[_h] = { fqn: "@microsoft/terraform-cdk-constructs.DnsSoaRecord", version: "2.2.0" };
|
|
751
751
|
(() => {
|
|
752
752
|
azapi_resource_1.AzapiResource.registerSchemas(dns_record_schemas_1.DNS_SOA_RECORD_TYPE, dns_record_schemas_1.ALL_DNS_SOA_RECORD_VERSIONS);
|
|
753
753
|
})();
|
|
@@ -774,15 +774,15 @@ class DnsSrvRecord extends azapi_resource_1.AzapiResource {
|
|
|
774
774
|
constructor(scope, id, props) {
|
|
775
775
|
super(scope, id, props);
|
|
776
776
|
this.props = props;
|
|
777
|
-
this.idOutput = new
|
|
777
|
+
this.idOutput = new cdktn.TerraformOutput(this, "id", {
|
|
778
778
|
value: this.id,
|
|
779
779
|
description: "The ID of the SRV Record",
|
|
780
780
|
});
|
|
781
|
-
this.nameOutput = new
|
|
781
|
+
this.nameOutput = new cdktn.TerraformOutput(this, "name", {
|
|
782
782
|
value: `\${${this.terraformResource.fqn}.name}`,
|
|
783
783
|
description: "The name of the SRV Record",
|
|
784
784
|
});
|
|
785
|
-
this.fqdnOutput = new
|
|
785
|
+
this.fqdnOutput = new cdktn.TerraformOutput(this, "fqdn", {
|
|
786
786
|
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
787
787
|
description: "The FQDN of the SRV Record",
|
|
788
788
|
});
|
|
@@ -834,7 +834,7 @@ class DnsSrvRecord extends azapi_resource_1.AzapiResource {
|
|
|
834
834
|
}
|
|
835
835
|
exports.DnsSrvRecord = DnsSrvRecord;
|
|
836
836
|
_j = JSII_RTTI_SYMBOL_1;
|
|
837
|
-
DnsSrvRecord[_j] = { fqn: "@microsoft/terraform-cdk-constructs.DnsSrvRecord", version: "
|
|
837
|
+
DnsSrvRecord[_j] = { fqn: "@microsoft/terraform-cdk-constructs.DnsSrvRecord", version: "2.2.0" };
|
|
838
838
|
(() => {
|
|
839
839
|
azapi_resource_1.AzapiResource.registerSchemas(dns_record_schemas_1.DNS_SRV_RECORD_TYPE, dns_record_schemas_1.ALL_DNS_SRV_RECORD_VERSIONS);
|
|
840
840
|
})();
|
|
@@ -860,15 +860,15 @@ class DnsTxtRecord extends azapi_resource_1.AzapiResource {
|
|
|
860
860
|
constructor(scope, id, props) {
|
|
861
861
|
super(scope, id, props);
|
|
862
862
|
this.props = props;
|
|
863
|
-
this.idOutput = new
|
|
863
|
+
this.idOutput = new cdktn.TerraformOutput(this, "id", {
|
|
864
864
|
value: this.id,
|
|
865
865
|
description: "The ID of the TXT Record",
|
|
866
866
|
});
|
|
867
|
-
this.nameOutput = new
|
|
867
|
+
this.nameOutput = new cdktn.TerraformOutput(this, "name", {
|
|
868
868
|
value: `\${${this.terraformResource.fqn}.name}`,
|
|
869
869
|
description: "The name of the TXT Record",
|
|
870
870
|
});
|
|
871
|
-
this.fqdnOutput = new
|
|
871
|
+
this.fqdnOutput = new cdktn.TerraformOutput(this, "fqdn", {
|
|
872
872
|
value: `\${${this.terraformResource.fqn}.output.properties.fqdn}`,
|
|
873
873
|
description: "The FQDN of the TXT Record",
|
|
874
874
|
});
|
|
@@ -917,8 +917,8 @@ class DnsTxtRecord extends azapi_resource_1.AzapiResource {
|
|
|
917
917
|
}
|
|
918
918
|
exports.DnsTxtRecord = DnsTxtRecord;
|
|
919
919
|
_k = JSII_RTTI_SYMBOL_1;
|
|
920
|
-
DnsTxtRecord[_k] = { fqn: "@microsoft/terraform-cdk-constructs.DnsTxtRecord", version: "
|
|
920
|
+
DnsTxtRecord[_k] = { fqn: "@microsoft/terraform-cdk-constructs.DnsTxtRecord", version: "2.2.0" };
|
|
921
921
|
(() => {
|
|
922
922
|
azapi_resource_1.AzapiResource.registerSchemas(dns_record_schemas_1.DNS_TXT_RECORD_TYPE, dns_record_schemas_1.ALL_DNS_TXT_RECORD_VERSIONS);
|
|
923
923
|
})();
|
|
924
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXJlY29yZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXp1cmUtZG5zem9uZS9saWIvcmVjb3Jkcy9kbnMtcmVjb3Jkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsK0JBQStCO0FBRS9CLDZEQXFCOEI7QUFDOUIsaUZBR3NEO0FBaUV0RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsOEJBQWE7SUFVM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3BELEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLFdBQVcsRUFBRSx3QkFBd0I7U0FDdEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxRQUFRO1lBQy9DLFdBQVcsRUFBRSwwQkFBMEI7U0FDeEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRywwQkFBMEI7WUFDakUsV0FBVyxFQUFFLDBCQUEwQjtTQUN4QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRVMsZUFBZSxDQUFDLEtBQVU7UUFDbEMsTUFBTSxVQUFVLEdBQUcsS0FBd0IsQ0FBQztRQUM1QyxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDOUIsQ0FBQztJQUVTLGNBQWM7UUFDdEIsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVTLFlBQVk7UUFDcEIsT0FBTyxzQ0FBaUIsQ0FBQztJQUMzQixDQUFDO0lBRVMsU0FBUztRQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRVMsZ0JBQWdCO1FBQ3hCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVTLFlBQVk7UUFDcEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsa0JBQWtCLENBQUMsS0FBVTtRQUNyQyxNQUFNLFVBQVUsR0FBRyxLQUF3QixDQUFDO1FBQzVDLE1BQU0sVUFBVSxHQUErQjtZQUM3QyxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsSUFBSSxJQUFJO1NBQzVCLENBQUM7UUFFRixJQUFJLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEQsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkQsV0FBVyxFQUFFLENBQUMsQ0FBQyxXQUFXO2FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUVELElBQUksVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDaEMsVUFBVSxDQUFDLGNBQWMsR0FBRyxFQUFFLEVBQUUsRUFBRSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNsRSxDQUFDO1FBRUQsSUFBSSxVQUFVLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RSxVQUFVLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDNUMsQ0FBQztRQUVELE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLElBQUk7UUFDYixPQUFPLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsMEJBQTBCLENBQUM7SUFDcEUsQ0FBQzs7QUF2RkgsZ0NBd0ZDOzs7QUF2RkM7SUFDRSw4QkFBYSxDQUFDLGVBQWUsQ0FBQyxzQ0FBaUIsRUFBRSw4Q0FBeUIsQ0FBQyxDQUFDO0FBQzlFLENBQUMsR0FBQSxDQUFBO0FBdUhIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFhLGFBQWMsU0FBUSw4QkFBYTtJQWE5QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXlCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLDJCQUEyQjtTQUN6QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLDZCQUE2QjtTQUMzQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLDBCQUEwQjtZQUNqRSxXQUFXLEVBQUUsNkJBQTZCO1NBQzNDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFUyxlQUFlLENBQUMsS0FBVTtRQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUEyQixDQUFDO1FBQy9DLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRVMsY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRVMsWUFBWTtRQUNwQixPQUFPLHlDQUFvQixDQUFDO0lBQzlCLENBQUM7SUFFUyxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFUyxnQkFBZ0I7UUFDeEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsWUFBWTtRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxLQUFVO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQTJCLENBQUM7UUFDL0MsTUFBTSxVQUFVLEdBQStCO1lBQzdDLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLElBQUk7U0FDNUIsQ0FBQztRQUVGLElBQUksVUFBVSxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxVQUFVLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN0RCxXQUFXLEVBQUUsQ0FBQyxDQUFDLFdBQVc7YUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO1FBRUQsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNoQyxVQUFVLENBQUMsY0FBYyxHQUFHLEVBQUUsRUFBRSxFQUFFLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2xFLENBQUM7UUFFRCxJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsSUFBSTtRQUNiLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRywwQkFBMEIsQ0FBQztJQUNwRSxDQUFDOztBQTFGSCxzQ0EyRkM7OztBQTFGQztJQUNFLDhCQUFhLENBQUMsZUFBZSxDQUMzQix5Q0FBb0IsRUFDcEIsaURBQTRCLENBQzdCLENBQUM7QUFDSixDQUFDLEdBQUEsQ0FBQTtBQThISDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFhLFlBQWEsU0FBUSw4QkFBYTtJQWE3QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLDBCQUEwQjtTQUN4QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLDRCQUE0QjtTQUMxQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLDBCQUEwQjtZQUNqRSxXQUFXLEVBQUUsNEJBQTRCO1NBQzFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFUyxlQUFlLENBQUMsS0FBVTtRQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUEwQixDQUFDO1FBQzlDLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRVMsY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRVMsWUFBWTtRQUNwQixPQUFPLHdDQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFUyxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFUyxnQkFBZ0I7UUFDeEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsWUFBWTtRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxLQUFVO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQTBCLENBQUM7UUFDOUMsTUFBTSxVQUFVLEdBQStCO1lBQzdDLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLElBQUk7WUFDM0IsVUFBVSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7Z0JBQ2QsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHO2dCQUNWLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSzthQUNmLENBQUMsQ0FBQztTQUNKLENBQUM7UUFFRixJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsSUFBSTtRQUNiLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRywwQkFBMEIsQ0FBQztJQUNwRSxDQUFDOztBQXJGSCxvQ0FzRkM7OztBQXJGQztJQUNFLDhCQUFhLENBQUMsZUFBZSxDQUMzQix3Q0FBbUIsRUFDbkIsZ0RBQTJCLENBQzVCLENBQUM7QUFDSixDQUFDLEdBQUEsQ0FBQTtBQXdHSDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFhLGNBQWUsU0FBUSw4QkFBYTtJQWEvQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTBCO1FBQ2xFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLDRCQUE0QjtTQUMxQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLDhCQUE4QjtTQUM1QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLDBCQUEwQjtZQUNqRSxXQUFXLEVBQUUsOEJBQThCO1NBQzVDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFUyxlQUFlLENBQUMsS0FBVTtRQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUE0QixDQUFDO1FBQ2hELE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRVMsY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRVMsWUFBWTtRQUNwQixPQUFPLDBDQUFxQixDQUFDO0lBQy9CLENBQUM7SUFFUyxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFUyxnQkFBZ0I7UUFDeEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsWUFBWTtRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxLQUFVO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQTRCLENBQUM7UUFDaEQsTUFBTSxVQUFVLEdBQStCO1lBQzdDLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLElBQUk7U0FDNUIsQ0FBQztRQUVGLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JCLFVBQVUsQ0FBQyxXQUFXLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZELENBQUM7UUFFRCxJQUFJLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2hDLFVBQVUsQ0FBQyxjQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDbEUsQ0FBQztRQUVELElBQUksVUFBVSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkUsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQzVDLENBQUM7UUFFRCxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxJQUFJO1FBQ2IsT0FBTyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0lBQ3BFLENBQUM7O0FBeEZILHdDQXlGQzs7O0FBeEZDO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQzNCLDBDQUFxQixFQUNyQixrREFBNkIsQ0FDOUIsQ0FBQztBQUNKLENBQUMsR0FBQSxDQUFBO0FBb0hIOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxNQUFhLFdBQVksU0FBUSw4QkFBYTtJQWE1QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLHlCQUF5QjtTQUN2QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLDJCQUEyQjtTQUN6QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLDBCQUEwQjtZQUNqRSxXQUFXLEVBQUUsMkJBQTJCO1NBQ3pDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFUyxlQUFlLENBQUMsS0FBVTtRQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUF5QixDQUFDO1FBQzdDLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRVMsY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRVMsWUFBWTtRQUNwQixPQUFPLHVDQUFrQixDQUFDO0lBQzVCLENBQUM7SUFFUyxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFUyxnQkFBZ0I7UUFDeEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsWUFBWTtRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxLQUFVO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQXlCLENBQUM7UUFDN0MsTUFBTSxVQUFVLEdBQStCO1lBQzdDLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLElBQUk7WUFDM0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVU7Z0JBQ3hCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTthQUNyQixDQUFDLENBQUM7U0FDSixDQUFDO1FBRUYsSUFBSSxVQUFVLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RSxVQUFVLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDNUMsQ0FBQztRQUVELE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLElBQUk7UUFDYixPQUFPLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsMEJBQTBCLENBQUM7SUFDcEUsQ0FBQzs7QUFwRkgsa0NBcUZDOzs7QUFwRkM7SUFDRSw4QkFBYSxDQUFDLGVBQWUsQ0FDM0IsdUNBQWtCLEVBQ2xCLCtDQUEwQixDQUMzQixDQUFDO0FBQ0osQ0FBQyxHQUFBLENBQUE7QUEwR0g7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFhLFdBQVksU0FBUSw4QkFBYTtJQWE1QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXVCO1FBQy9ELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLHlCQUF5QjtTQUN2QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLDJCQUEyQjtTQUN6QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLDBCQUEwQjtZQUNqRSxXQUFXLEVBQUUsMkJBQTJCO1NBQ3pDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFUyxlQUFlLENBQUMsS0FBVTtRQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUF5QixDQUFDO1FBQzdDLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRVMsY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRVMsWUFBWTtRQUNwQixPQUFPLHVDQUFrQixDQUFDO0lBQzVCLENBQUM7SUFFUyxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFUyxnQkFBZ0I7UUFDeEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsWUFBWTtRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxLQUFVO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQXlCLENBQUM7UUFDN0MsTUFBTSxVQUFVLEdBQStCO1lBQzdDLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLElBQUk7WUFDM0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU87YUFDbkIsQ0FBQyxDQUFDO1NBQ0osQ0FBQztRQUVGLElBQUksVUFBVSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkUsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQzVDLENBQUM7UUFFRCxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxJQUFJO1FBQ2IsT0FBTyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0lBQ3BFLENBQUM7O0FBbkZILGtDQW9GQzs7O0FBbkZDO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQzNCLHVDQUFrQixFQUNsQiwrQ0FBMEIsQ0FDM0IsQ0FBQztBQUNKLENBQUMsR0FBQSxDQUFBO0FBeUdIOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQWEsWUFBYSxTQUFRLDhCQUFhO0lBYTdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0I7UUFDaEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUNwRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZCxXQUFXLEVBQUUsMEJBQTBCO1NBQ3hDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEQsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsUUFBUTtZQUMvQyxXQUFXLEVBQUUsNEJBQTRCO1NBQzFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEQsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsMEJBQTBCO1lBQ2pFLFdBQVcsRUFBRSw0QkFBNEI7U0FDMUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVTLGVBQWUsQ0FBQyxLQUFVO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLEtBQTBCLENBQUM7UUFDOUMsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFFUyxjQUFjO1FBQ3RCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFUyxZQUFZO1FBQ3BCLE9BQU8sd0NBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVTLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVTLGdCQUFnQjtRQUN4QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxZQUFZO1FBQ3BCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVTLGtCQUFrQixDQUFDLEtBQVU7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBMEIsQ0FBQztRQUM5QyxNQUFNLFVBQVUsR0FBK0I7WUFDN0MsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLElBQUksSUFBSTtZQUMzQixVQUFVLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTthQUNyQixDQUFDLENBQUM7U0FDSixDQUFDO1FBRUYsSUFBSSxVQUFVLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RSxVQUFVLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDNUMsQ0FBQztRQUVELE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLElBQUk7UUFDYixPQUFPLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsMEJBQTBCLENBQUM7SUFDcEUsQ0FBQzs7QUFuRkgsb0NBb0ZDOzs7QUFuRkM7SUFDRSw4QkFBYSxDQUFDLGVBQWUsQ0FDM0Isd0NBQW1CLEVBQ25CLGdEQUEyQixDQUM1QixDQUFDO0FBQ0osQ0FBQyxHQUFBLENBQUE7QUF1SUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFDSCxNQUFhLFlBQWEsU0FBUSw4QkFBYTtJQWE3QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXdCO1FBQ2hFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUU7WUFDcEQsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ2QsV0FBVyxFQUFFLDBCQUEwQjtTQUN4QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFFBQVE7WUFDL0MsV0FBVyxFQUFFLDRCQUE0QjtTQUMxQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3hELEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLDBCQUEwQjtZQUNqRSxXQUFXLEVBQUUsNEJBQTRCO1NBQzFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFUyxlQUFlLENBQUMsS0FBVTtRQUNsQyxNQUFNLFVBQVUsR0FBRyxLQUEwQixDQUFDO1FBQzlDLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRVMsY0FBYztRQUN0QixPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDO0lBRVMsWUFBWTtRQUNwQixPQUFPLHdDQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFUyxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFUyxnQkFBZ0I7UUFDeEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsWUFBWTtRQUNwQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxLQUFVO1FBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQTBCLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdBQStCLEVBQUUsQ0FBQztRQUVqRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDN0MsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0MsU0FBUyxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUMvQyxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwRCxTQUFTLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsV0FBVyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25ELFNBQVMsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUM7UUFDM0QsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsU0FBUyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsU0FBUyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNsRCxTQUFTLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1FBQ3pELENBQUM7UUFDRCxJQUFJLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2xELFNBQVMsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7UUFDekQsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUErQjtZQUM3QyxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsSUFBSSxJQUFJO1lBQzNCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7UUFFRixJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsSUFBSTtRQUNiLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRywwQkFBMEIsQ0FBQztJQUNwRSxDQUFDOztBQXpHSCxvQ0EwR0M7OztBQXpHQztJQUNFLDhCQUFhLENBQUMsZUFBZSxDQUMzQix3Q0FBbUIsRUFDbkIsZ0RBQTJCLENBQzVCLENBQUM7QUFDSixDQUFDLEdBQUEsQ0FBQTtBQThJSDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsOEJBQWE7SUFhN0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3BELEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLFdBQVcsRUFBRSwwQkFBMEI7U0FDeEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxRQUFRO1lBQy9DLFdBQVcsRUFBRSw0QkFBNEI7U0FDMUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRywwQkFBMEI7WUFDakUsV0FBVyxFQUFFLDRCQUE0QjtTQUMxQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRVMsZUFBZSxDQUFDLEtBQVU7UUFDbEMsTUFBTSxVQUFVLEdBQUcsS0FBMEIsQ0FBQztRQUM5QyxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDOUIsQ0FBQztJQUVTLGNBQWM7UUFDdEIsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVTLFlBQVk7UUFDcEIsT0FBTyx3Q0FBbUIsQ0FBQztJQUM3QixDQUFDO0lBRVMsU0FBUztRQUNqQixPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRVMsZ0JBQWdCO1FBQ3hCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVTLFlBQVk7UUFDcEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsa0JBQWtCLENBQUMsS0FBVTtRQUNyQyxNQUFNLFVBQVUsR0FBRyxLQUEwQixDQUFDO1FBQzlDLE1BQU0sVUFBVSxHQUErQjtZQUM3QyxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsSUFBSSxJQUFJO1lBQzNCLFVBQVUsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDekMsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO2dCQUNwQixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07Z0JBQ2hCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtnQkFDWixNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU07YUFDakIsQ0FBQyxDQUFDO1NBQ0osQ0FBQztRQUVGLElBQUksVUFBVSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkUsVUFBVSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQzVDLENBQUM7UUFFRCxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxJQUFJO1FBQ2IsT0FBTyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0lBQ3BFLENBQUM7O0FBdEZILG9DQXVGQzs7O0FBdEZDO0lBQ0UsOEJBQWEsQ0FBQyxlQUFlLENBQzNCLHdDQUFtQixFQUNuQixnREFBMkIsQ0FDNUIsQ0FBQztBQUNKLENBQUMsR0FBQSxDQUFBO0FBNkdIOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQWEsWUFBYSxTQUFRLDhCQUFhO0lBYTdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0I7UUFDaEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRTtZQUNwRCxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDZCxXQUFXLEVBQUUsMEJBQTBCO1NBQ3hDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEQsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsUUFBUTtZQUMvQyxXQUFXLEVBQUUsNEJBQTRCO1NBQzFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEQsS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsMEJBQTBCO1lBQ2pFLFdBQVcsRUFBRSw0QkFBNEI7U0FDMUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVTLGVBQWUsQ0FBQyxLQUFVO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLEtBQTBCLENBQUM7UUFDOUMsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFFUyxjQUFjO1FBQ3RCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFUyxZQUFZO1FBQ3BCLE9BQU8sd0NBQW1CLENBQUM7SUFDN0IsQ0FBQztJQUVTLFNBQVM7UUFDakIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVTLGdCQUFnQjtRQUN4QixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFUyxZQUFZO1FBQ3BCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVTLGtCQUFrQixDQUFDLEtBQVU7UUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBMEIsQ0FBQztRQUM5QyxNQUFNLFVBQVUsR0FBK0I7WUFDN0MsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLElBQUksSUFBSTtZQUMzQixVQUFVLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSzthQUNmLENBQUMsQ0FBQztTQUNKLENBQUM7UUFFRixJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsSUFBSTtRQUNiLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRywwQkFBMEIsQ0FBQztJQUNwRSxDQUFDOztBQW5GSCxvQ0FvRkM7OztBQW5GQztJQUNFLDhCQUFhLENBQUMsZUFBZSxDQUMzQix3Q0FBbUIsRUFDbkIsZ0RBQTJCLENBQzVCLENBQUM7QUFDSixDQUFDLEdBQUEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXp1cmUgUHVibGljIEROUyBab25lIFJlY29yZCBpbXBsZW1lbnRhdGlvbnMgdXNpbmcgQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqXG4gKiBUaGlzIGZpbGUgcHJvdmlkZXMgaW1wbGVtZW50YXRpb25zIGZvciBhbGwgUHVibGljIEROUyBab25lIHJlY29yZCB0eXBlczpcbiAqIC0gRG5zQVJlY29yZCAoQSByZWNvcmRzIHdpdGggSVB2NCBhZGRyZXNzZXMpXG4gKiAtIERuc0FhYWFSZWNvcmQgKEFBQUEgcmVjb3JkcyB3aXRoIElQdjYgYWRkcmVzc2VzKVxuICogLSBEbnNDYWFSZWNvcmQgKENBQSByZWNvcmRzIGZvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgQXV0aG9yaXphdGlvbikgLSBQVUJMSUMgT05MWVxuICogLSBEbnNDbmFtZVJlY29yZCAoQ05BTUUgcmVjb3JkcylcbiAqIC0gRG5zTXhSZWNvcmQgKE1YIHJlY29yZHMgd2l0aCBleGNoYW5nZSBhbmQgcHJlZmVyZW5jZSlcbiAqIC0gRG5zTnNSZWNvcmQgKE5TIHJlY29yZHMgZm9yIE5hbWUgU2VydmVycykgLSBQVUJMSUMgT05MWVxuICogLSBEbnNQdHJSZWNvcmQgKFBUUiByZWNvcmRzKVxuICogLSBEbnNTb2FSZWNvcmQgKFNPQSByZWNvcmRzKVxuICogLSBEbnNTcnZSZWNvcmQgKFNSViByZWNvcmRzIHdpdGggcHJpb3JpdHksIHdlaWdodCwgcG9ydCwgdGFyZ2V0KVxuICogLSBEbnNUeHRSZWNvcmQgKFRYVCByZWNvcmRzKVxuICpcbiAqIEFQSSBWZXJzaW9uOiAyMDE4LTA1LTAxXG4gKlxuICogS2V5IGRpZmZlcmVuY2VzIGZyb20gUHJpdmF0ZSBETlM6XG4gKiAtIFByb3BlcnR5IGNhc2luZzogUHVibGljIEROUyB1c2VzIFBhc2NhbENhc2UgKEFSZWNvcmRzLCBUVEwgdnMgYVJlY29yZHMsIHR0bClcbiAqIC0gQ0FBIHJlY29yZHM6IE9ubHkgYXZhaWxhYmxlIGluIHB1YmxpYyBETlNcbiAqIC0gTlMgcmVjb3JkczogT25seSBhdmFpbGFibGUgaW4gcHVibGljIEROU1xuICogLSB0YXJnZXRSZXNvdXJjZTogUHVibGljIEROUyBBLCBBQUFBLCBhbmQgQ05BTUUgcmVjb3JkcyBzdXBwb3J0IGFsaWFzIHJlY29yZHNcbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tIFwiY2RrdGZcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfRE5TX0FfUkVDT1JEX1ZFUlNJT05TLFxuICBBTExfRE5TX0FBQUFfUkVDT1JEX1ZFUlNJT05TLFxuICBBTExfRE5TX0NBQV9SRUNPUkRfVkVSU0lPTlMsXG4gIEFMTF9ETlNfQ05BTUVfUkVDT1JEX1ZFUlNJT05TLFxuICBBTExfRE5TX01YX1JFQ09SRF9WRVJTSU9OUyxcbiAgQUxMX0ROU19OU19SRUNPUkRfVkVSU0lPTlMsXG4gIEFMTF9ETlNfUFRSX1JFQ09SRF9WRVJTSU9OUyxcbiAgQUxMX0ROU19TT0FfUkVDT1JEX1ZFUlNJT05TLFxuICBBTExfRE5TX1NSVl9SRUNPUkRfVkVSU0lPTlMsXG4gIEFMTF9ETlNfVFhUX1JFQ09SRF9WRVJTSU9OUyxcbiAgRE5TX0FfUkVDT1JEX1RZUEUsXG4gIEROU19BQUFBX1JFQ09SRF9UWVBFLFxuICBETlNfQ0FBX1JFQ09SRF9UWVBFLFxuICBETlNfQ05BTUVfUkVDT1JEX1RZUEUsXG4gIEROU19NWF9SRUNPUkRfVFlQRSxcbiAgRE5TX05TX1JFQ09SRF9UWVBFLFxuICBETlNfUFRSX1JFQ09SRF9UWVBFLFxuICBETlNfU09BX1JFQ09SRF9UWVBFLFxuICBETlNfU1JWX1JFQ09SRF9UWVBFLFxuICBETlNfVFhUX1JFQ09SRF9UWVBFLFxufSBmcm9tIFwiLi9kbnMtcmVjb3JkLXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT01NT04gSU5URVJGQUNFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCYXNlIHByb3BlcnRpZXMgc2hhcmVkIGJ5IGFsbCBQdWJsaWMgRE5TIHJlY29yZCB0eXBlc1xuICpcbiAqIE5vdGU6IFRoZSBgbmFtZWAgcHJvcGVydHkgaXMgaW5oZXJpdGVkIGZyb20gQXphcGlSZXNvdXJjZVByb3BzLlxuICogRm9yIEROUyByZWNvcmRzLCB1c2UgQCBmb3IgYXBleCByZWNvcmRzIG9yIHByb3ZpZGUgYSByZWxhdGl2ZSBuYW1lIGxpa2UgXCJ3d3dcIiBvciBcIm1haWxcIi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbnNSZWNvcmRCYXNlUHJvcHMgZXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogUmVzb3VyY2UgSUQgb2YgdGhlIHBhcmVudCBETlMgWm9uZVxuICAgKiBAZXhhbXBsZSB6b25lLmlkIG9yIFwiL3N1YnNjcmlwdGlvbnMvLi4uL3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay9kbnNab25lcy9leGFtcGxlLmNvbVwiXG4gICAqL1xuICByZWFkb25seSBkbnNab25lSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGltZSB0byBMaXZlIGluIHNlY29uZHNcbiAgICogQGRlZmF1bHQgMzYwMFxuICAgKi9cbiAgcmVhZG9ubHkgdHRsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSByZWNvcmQgc2V0XG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBBIFJFQ09SRFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFbnRyeSBmb3IgYW4gQSByZWNvcmQgd2l0aCBJUHY0IGFkZHJlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbnNBUmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIElQdjQgYWRkcmVzcyBvZiB0aGlzIEEgcmVjb3JkXG4gICAqIEBleGFtcGxlIFwiMjAuMzAuNDAuNTBcIlxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NEFkZHJlc3M6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQdWJsaWMgRE5TIEEgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zQVJlY29yZFByb3BzIGV4dGVuZHMgRG5zUmVjb3JkQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIEFycmF5IG9mIEEgcmVjb3JkcyB3aXRoIElQdjQgYWRkcmVzc2VzXG4gICAqIEVpdGhlciByZWNvcmRzIG9yIHRhcmdldFJlc291cmNlSWQgbXVzdCBiZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZHM/OiBEbnNBUmVjb3JkRW50cnlbXTtcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIGFuIEF6dXJlIHJlc291cmNlIGZyb20gd2hlcmUgdGhlIElQIGNvbnRlbnQgaXMgdGFrZW4gKGFsaWFzIHJlY29yZClcbiAgICogRWl0aGVyIHJlY29yZHMgb3IgdGFyZ2V0UmVzb3VyY2VJZCBtdXN0IGJlIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBwdWJsaWNJcC5pZFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0UmVzb3VyY2VJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBenVyZSBQdWJsaWMgRE5TIEEgUmVjb3JkIGltcGxlbWVudGF0aW9uXG4gKlxuICogQSByZWNvcmRzIG1hcCBhIGhvc3RuYW1lIHRvIG9uZSBvciBtb3JlIElQdjQgYWRkcmVzc2VzLlxuICogU3VwcG9ydHMgYWxpYXMgcmVjb3JkcyB2aWEgdGFyZ2V0UmVzb3VyY2VJZCBmb3IgcG9pbnRpbmcgdG8gQXp1cmUgcmVzb3VyY2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYW4gQSByZWNvcmQgd2l0aCBJUCBhZGRyZXNzZXM6XG4gKiBjb25zdCBhUmVjb3JkID0gbmV3IERuc0FSZWNvcmQodGhpcywgXCJ3ZWItYS1yZWNvcmRcIiwge1xuICogICBuYW1lOiBcInd3d1wiLFxuICogICBkbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzAwLFxuICogICByZWNvcmRzOiBbXG4gKiAgICAgeyBpcHY0QWRkcmVzczogXCIyMC4zMC40MC41MFwiIH0sXG4gKiAgIF0sXG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGFuIGFsaWFzIEEgcmVjb3JkIHBvaW50aW5nIHRvIGFuIEF6dXJlIHJlc291cmNlOlxuICogY29uc3QgYWxpYXNSZWNvcmQgPSBuZXcgRG5zQVJlY29yZCh0aGlzLCBcImFsaWFzLWEtcmVjb3JkXCIsIHtcbiAqICAgbmFtZTogXCJ3d3dcIixcbiAqICAgZG5zWm9uZUlkOiB6b25lLmlkLFxuICogICB0dGw6IDMwMCxcbiAqICAgdGFyZ2V0UmVzb3VyY2VJZDogcHVibGljSXAuaWQsXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgRG5zQVJlY29yZCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKEROU19BX1JFQ09SRF9UWVBFLCBBTExfRE5TX0FfUkVDT1JEX1ZFUlNJT05TKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogRG5zQVJlY29yZFByb3BzO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IGZxZG5PdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRG5zQVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgQSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBBIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5mcWRuT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImZxZG5cIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIEZRRE4gb2YgdGhlIEEgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zQVJlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLmRuc1pvbmVJZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMTgtMDUtMDFcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRE5TX0FfUkVDT1JEX1RZUEU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRzVGFncygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNBUmVjb3JkUHJvcHM7XG4gICAgY29uc3QgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7XG4gICAgICBUVEw6IHR5cGVkUHJvcHMudHRsID8/IDM2MDAsXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLnJlY29yZHMgJiYgdHlwZWRQcm9wcy5yZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnRpZXMuQVJlY29yZHMgPSB0eXBlZFByb3BzLnJlY29yZHMubWFwKChyKSA9PiAoe1xuICAgICAgICBpcHY0QWRkcmVzczogci5pcHY0QWRkcmVzcyxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZWRQcm9wcy50YXJnZXRSZXNvdXJjZUlkKSB7XG4gICAgICBwcm9wZXJ0aWVzLnRhcmdldFJlc291cmNlID0geyBpZDogdHlwZWRQcm9wcy50YXJnZXRSZXNvdXJjZUlkIH07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVkUHJvcHMubWV0YWRhdGEgJiYgT2JqZWN0LmtleXModHlwZWRQcm9wcy5tZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcGVydGllcy5tZXRhZGF0YSA9IHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRlFETiBvZiB0aGUgcmVjb3JkXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZxZG4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWA7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFBQUEgUkVDT1JEXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEVudHJ5IGZvciBhbiBBQUFBIHJlY29yZCB3aXRoIElQdjYgYWRkcmVzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc0FhYWFSZWNvcmRFbnRyeSB7XG4gIC8qKlxuICAgKiBUaGUgSVB2NiBhZGRyZXNzIG9mIHRoaXMgQUFBQSByZWNvcmRcbiAgICogQGV4YW1wbGUgXCIyMDAxOmRiODo6MVwiXG4gICAqL1xuICByZWFkb25seSBpcHY2QWRkcmVzczogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFB1YmxpYyBETlMgQUFBQSBSZWNvcmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbnNBYWFhUmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgQUFBQSByZWNvcmRzIHdpdGggSVB2NiBhZGRyZXNzZXNcbiAgICogRWl0aGVyIHJlY29yZHMgb3IgdGFyZ2V0UmVzb3VyY2VJZCBtdXN0IGJlIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3Jkcz86IERuc0FhYWFSZWNvcmRFbnRyeVtdO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gYW4gQXp1cmUgcmVzb3VyY2UgZnJvbSB3aGVyZSB0aGUgSVAgY29udGVudCBpcyB0YWtlbiAoYWxpYXMgcmVjb3JkKVxuICAgKiBFaXRoZXIgcmVjb3JkcyBvciB0YXJnZXRSZXNvdXJjZUlkIG11c3QgYmUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF6dXJlIFB1YmxpYyBETlMgQUFBQSBSZWNvcmQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBBQUFBIHJlY29yZHMgbWFwIGEgaG9zdG5hbWUgdG8gb25lIG9yIG1vcmUgSVB2NiBhZGRyZXNzZXMuXG4gKiBTdXBwb3J0cyBhbGlhcyByZWNvcmRzIHZpYSB0YXJnZXRSZXNvdXJjZUlkIGZvciBwb2ludGluZyB0byBBenVyZSByZXNvdXJjZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhbiBBQUFBIHJlY29yZDpcbiAqIGNvbnN0IGFhYWFSZWNvcmQgPSBuZXcgRG5zQWFhYVJlY29yZCh0aGlzLCBcIndlYi1hYWFhLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwid3d3XCIsXG4gKiAgIGRuc1pvbmVJZDogem9uZS5pZCxcbiAqICAgdHRsOiAzMDAsXG4gKiAgIHJlY29yZHM6IFtcbiAqICAgICB7IGlwdjZBZGRyZXNzOiBcIjIwMDE6ZGI4OjoxXCIgfSxcbiAqICAgXSxcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBEbnNBYWFhUmVjb3JkIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBETlNfQUFBQV9SRUNPUkRfVFlQRSxcbiAgICAgIEFMTF9ETlNfQUFBQV9SRUNPUkRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogRG5zQWFhYVJlY29yZFByb3BzO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IGZxZG5PdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRG5zQWFhYVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgQUFBQSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBBQUFBIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5mcWRuT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImZxZG5cIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIEZRRE4gb2YgdGhlIEFBQUEgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zQWFhYVJlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLmRuc1pvbmVJZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMTgtMDUtMDFcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRE5TX0FBQUFfUkVDT1JEX1RZUEU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRzVGFncygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNBYWFhUmVjb3JkUHJvcHM7XG4gICAgY29uc3QgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7XG4gICAgICBUVEw6IHR5cGVkUHJvcHMudHRsID8/IDM2MDAsXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLnJlY29yZHMgJiYgdHlwZWRQcm9wcy5yZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnRpZXMuQUFBQVJlY29yZHMgPSB0eXBlZFByb3BzLnJlY29yZHMubWFwKChyKSA9PiAoe1xuICAgICAgICBpcHY2QWRkcmVzczogci5pcHY2QWRkcmVzcyxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZWRQcm9wcy50YXJnZXRSZXNvdXJjZUlkKSB7XG4gICAgICBwcm9wZXJ0aWVzLnRhcmdldFJlc291cmNlID0geyBpZDogdHlwZWRQcm9wcy50YXJnZXRSZXNvdXJjZUlkIH07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVkUHJvcHMubWV0YWRhdGEgJiYgT2JqZWN0LmtleXModHlwZWRQcm9wcy5tZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcGVydGllcy5tZXRhZGF0YSA9IHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRlFETiBvZiB0aGUgcmVjb3JkXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZxZG4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWA7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENBQSBSRUNPUkQgKFBVQkxJQyBETlMgT05MWSlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRW50cnkgZm9yIGEgQ0FBIHJlY29yZCAoQ2VydGlmaWNhdGUgQXV0aG9yaXR5IEF1dGhvcml6YXRpb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zQ2FhUmVjb3JkRW50cnkge1xuICAvKipcbiAgICogRmxhZ3MgZm9yIHRoaXMgQ0FBIHJlY29yZCAoMC0yNTUpXG4gICAqIDAgPSBub24tY3JpdGljYWwsIDEyOCA9IGNyaXRpY2FsXG4gICAqIEBleGFtcGxlIDBcbiAgICovXG4gIHJlYWRvbmx5IGZsYWdzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSB0YWcgZm9yIHRoaXMgQ0FBIHJlY29yZFxuICAgKiBDb21tb24gdmFsdWVzOiBcImlzc3VlXCIsIFwiaXNzdWV3aWxkXCIsIFwiaW9kZWZcIlxuICAgKiBAZXhhbXBsZSBcImlzc3VlXCJcbiAgICovXG4gIHJlYWRvbmx5IHRhZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWdcbiAgICogQGV4YW1wbGUgXCJsZXRzZW5jcnlwdC5vcmdcIlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQdWJsaWMgRE5TIENBQSBSZWNvcmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbnNDYWFSZWNvcmRQcm9wcyBleHRlbmRzIERuc1JlY29yZEJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBDQUEgcmVjb3JkcyB3aXRoIGZsYWdzLCB0YWcsIGFuZCB2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3JkczogRG5zQ2FhUmVjb3JkRW50cnlbXTtcbn1cblxuLyoqXG4gKiBBenVyZSBQdWJsaWMgRE5TIENBQSBSZWNvcmQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBDQUEgcmVjb3JkcyBzcGVjaWZ5IHdoaWNoIENlcnRpZmljYXRlIEF1dGhvcml0aWVzIGFyZSBhdXRob3JpemVkIHRvIGlzc3VlXG4gKiBjZXJ0aWZpY2F0ZXMgZm9yIGEgZG9tYWluLiBUaGlzIHJlY29yZCB0eXBlIGlzIG9ubHkgYXZhaWxhYmxlIGluIFB1YmxpYyBETlMgWm9uZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIENBQSByZWNvcmQgdG8gYXV0aG9yaXplIExldCdzIEVuY3J5cHQ6XG4gKiBjb25zdCBjYWFSZWNvcmQgPSBuZXcgRG5zQ2FhUmVjb3JkKHRoaXMsIFwiY2FhLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwiQFwiLFxuICogICBkbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzYwMCxcbiAqICAgcmVjb3JkczogW1xuICogICAgIHsgZmxhZ3M6IDAsIHRhZzogXCJpc3N1ZVwiLCB2YWx1ZTogXCJsZXRzZW5jcnlwdC5vcmdcIiB9LFxuICogICAgIHsgZmxhZ3M6IDAsIHRhZzogXCJpc3N1ZXdpbGRcIiwgdmFsdWU6IFwiO1wiIH0sIC8vIERpc2FsbG93IHdpbGRjYXJkIGNlcnRzXG4gKiAgICAgeyBmbGFnczogMCwgdGFnOiBcImlvZGVmXCIsIHZhbHVlOiBcIm1haWx0bzpzZWN1cml0eUBleGFtcGxlLmNvbVwiIH0sXG4gKiAgIF0sXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgRG5zQ2FhUmVjb3JkIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBETlNfQ0FBX1JFQ09SRF9UWVBFLFxuICAgICAgQUxMX0ROU19DQUFfUkVDT1JEX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IERuc0NhYVJlY29yZFByb3BzO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IGZxZG5PdXRwdXQ6IGNka3RmLlRlcnJhZm9ybU91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRG5zQ2FhUmVjb3JkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBDQUEgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgQ0FBIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5mcWRuT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImZxZG5cIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIEZRRE4gb2YgdGhlIENBQSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuICAgIHRoaXMuZnFkbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImZxZG5cIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNDYWFSZWNvcmRQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5kbnNab25lSWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDE4LTA1LTAxXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEROU19DQUFfUkVDT1JEX1RZUEU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRzVGFncygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNDYWFSZWNvcmRQcm9wcztcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHtcbiAgICAgIFRUTDogdHlwZWRQcm9wcy50dGwgPz8gMzYwMCxcbiAgICAgIGNhYVJlY29yZHM6IHR5cGVkUHJvcHMucmVjb3Jkcy5tYXAoKHIpID0+ICh7XG4gICAgICAgIGZsYWdzOiByLmZsYWdzLFxuICAgICAgICB0YWc6IHIudGFnLFxuICAgICAgICB2YWx1ZTogci52YWx1ZSxcbiAgICAgIH0pKSxcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVkUHJvcHMubWV0YWRhdGEgJiYgT2JqZWN0LmtleXModHlwZWRQcm9wcy5tZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcGVydGllcy5tZXRhZGF0YSA9IHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRlFETiBvZiB0aGUgcmVjb3JkXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZxZG4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWA7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENOQU1FIFJFQ09SRFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQdWJsaWMgRE5TIENOQU1FIFJlY29yZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc0NuYW1lUmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogVGhlIGNhbm9uaWNhbCBuYW1lIGZvciB0aGlzIENOQU1FIHJlY29yZFxuICAgKiBFaXRoZXIgY25hbWUgb3IgdGFyZ2V0UmVzb3VyY2VJZCBtdXN0IGJlIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBcInd3dy5jb250b3NvLmNvbVwiXG4gICAqL1xuICByZWFkb25seSBjbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIGFuIEF6dXJlIHJlc291cmNlIGZyb20gd2hlcmUgdGhlIEROUyBjb250ZW50IGlzIHRha2VuIChhbGlhcyByZWNvcmQpXG4gICAqIEVpdGhlciBjbmFtZSBvciB0YXJnZXRSZXNvdXJjZUlkIG11c3QgYmUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF6dXJlIFB1YmxpYyBETlMgQ05BTUUgUmVjb3JkIGltcGxlbWVudGF0aW9uXG4gKlxuICogQ05BTUUgcmVjb3JkcyBjcmVhdGUgYW4gYWxpYXMgZnJvbSBvbmUgaG9zdG5hbWUgdG8gYW5vdGhlci5cbiAqIFN1cHBvcnRzIGFsaWFzIHJlY29yZHMgdmlhIHRhcmdldFJlc291cmNlSWQgZm9yIHBvaW50aW5nIHRvIEF6dXJlIHJlc291cmNlcy5cbiAqIE5vdGU6IENOQU1FIHJlY29yZHMgY2Fubm90IGNvZXhpc3Qgd2l0aCBvdGhlciByZWNvcmQgdHlwZXMgYXQgdGhlIHNhbWUgbmFtZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgQ05BTUUgcmVjb3JkOlxuICogY29uc3QgY25hbWVSZWNvcmQgPSBuZXcgRG5zQ25hbWVSZWNvcmQodGhpcywgXCJhbGlhcy1yZWNvcmRcIiwge1xuICogICBuYW1lOiBcImFwcFwiLFxuICogICBkbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzYwMCxcbiAqICAgY25hbWU6IFwid3d3LmV4YW1wbGUuY29tXCIsXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgRG5zQ25hbWVSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIEROU19DTkFNRV9SRUNPUkRfVFlQRSxcbiAgICAgIEFMTF9ETlNfQ05BTUVfUkVDT1JEX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IERuc0NuYW1lUmVjb3JkUHJvcHM7XG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgZnFkbk91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEbnNDbmFtZVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgQ05BTUUgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgQ05BTUUgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgQ05BTUUgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zQ25hbWVSZWNvcmRQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5kbnNab25lSWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDE4LTA1LTAxXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEROU19DTkFNRV9SRUNPUkRfVFlQRTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIERuc0NuYW1lUmVjb3JkUHJvcHM7XG4gICAgY29uc3QgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7XG4gICAgICBUVEw6IHR5cGVkUHJvcHMudHRsID8/IDM2MDAsXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLmNuYW1lKSB7XG4gICAgICBwcm9wZXJ0aWVzLkNOQU1FUmVjb3JkID0geyBjbmFtZTogdHlwZWRQcm9wcy5jbmFtZSB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlZFByb3BzLnRhcmdldFJlc291cmNlSWQpIHtcbiAgICAgIHByb3BlcnRpZXMudGFyZ2V0UmVzb3VyY2UgPSB7IGlkOiB0eXBlZFByb3BzLnRhcmdldFJlc291cmNlSWQgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZWRQcm9wcy5tZXRhZGF0YSAmJiBPYmplY3Qua2V5cyh0eXBlZFByb3BzLm1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9wZXJ0aWVzLm1ldGFkYXRhID0gdHlwZWRQcm9wcy5tZXRhZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBwcm9wZXJ0aWVzIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBGUUROIG9mIHRoZSByZWNvcmRcbiAgICovXG4gIHB1YmxpYyBnZXQgZnFkbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YDtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTVggUkVDT1JEXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEVudHJ5IGZvciBhbiBNWCByZWNvcmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbnNNeFJlY29yZEVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwcmVmZXJlbmNlIHZhbHVlIGZvciB0aGlzIE1YIHJlY29yZCAobG93ZXIgdmFsdWVzIGhhdmUgaGlnaGVyIHByaW9yaXR5KVxuICAgKiBAZXhhbXBsZSAxMFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZmVyZW5jZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFpbCBleGNoYW5nZSBzZXJ2ZXIgaG9zdG5hbWVcbiAgICogQGV4YW1wbGUgXCJtYWlsMS5leGFtcGxlLmNvbVwiXG4gICAqL1xuICByZWFkb25seSBleGNoYW5nZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFB1YmxpYyBETlMgTVggUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zTXhSZWNvcmRQcm9wcyBleHRlbmRzIERuc1JlY29yZEJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBNWCByZWNvcmRzIHdpdGggZXhjaGFuZ2UgYW5kIHByZWZlcmVuY2VcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZHM6IERuc014UmVjb3JkRW50cnlbXTtcbn1cblxuLyoqXG4gKiBBenVyZSBQdWJsaWMgRE5TIE1YIFJlY29yZCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIE1YIHJlY29yZHMgc3BlY2lmeSBtYWlsIGV4Y2hhbmdlIHNlcnZlcnMgZm9yIGEgZG9tYWluLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYW4gTVggcmVjb3JkOlxuICogY29uc3QgbXhSZWNvcmQgPSBuZXcgRG5zTXhSZWNvcmQodGhpcywgXCJtYWlsLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwiQFwiLFxuICogICBkbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzYwMCxcbiAqICAgcmVjb3JkczogW1xuICogICAgIHsgcHJlZmVyZW5jZTogMTAsIGV4Y2hhbmdlOiBcIm1haWwxLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgICB7IHByZWZlcmVuY2U6IDIwLCBleGNoYW5nZTogXCJtYWlsMi5leGFtcGxlLmNvbVwiIH0sXG4gKiAgIF0sXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgRG5zTXhSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIEROU19NWF9SRUNPUkRfVFlQRSxcbiAgICAgIEFMTF9ETlNfTVhfUkVDT1JEX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IERuc014UmVjb3JkUHJvcHM7XG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgZnFkbk91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEbnNNeFJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgTVggUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgTVggUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgTVggUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zTXhSZWNvcmRQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5kbnNab25lSWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDE4LTA1LTAxXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEROU19NWF9SRUNPUkRfVFlQRTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIERuc014UmVjb3JkUHJvcHM7XG4gICAgY29uc3QgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7XG4gICAgICBUVEw6IHR5cGVkUHJvcHMudHRsID8/IDM2MDAsXG4gICAgICBNWFJlY29yZHM6IHR5cGVkUHJvcHMucmVjb3Jkcy5tYXAoKHIpID0+ICh7XG4gICAgICAgIHByZWZlcmVuY2U6IHIucHJlZmVyZW5jZSxcbiAgICAgICAgZXhjaGFuZ2U6IHIuZXhjaGFuZ2UsXG4gICAgICB9KSksXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHR5cGVkUHJvcHMubWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnRpZXMubWV0YWRhdGEgPSB0eXBlZFByb3BzLm1ldGFkYXRhO1xuICAgIH1cblxuICAgIHJldHVybiB7IHByb3BlcnRpZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEZRRE4gb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcHVibGljIGdldCBmcWRuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBOUyBSRUNPUkQgKFBVQkxJQyBETlMgT05MWSlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRW50cnkgZm9yIGFuIE5TIHJlY29yZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc05zUmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIG5hbWUgc2VydmVyIGRvbWFpbiBuYW1lXG4gICAqIEBleGFtcGxlIFwibnMxLmV4YW1wbGUuY29tXCJcbiAgICovXG4gIHJlYWRvbmx5IG5zZG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQdWJsaWMgRE5TIE5TIFJlY29yZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc05zUmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgTlMgcmVjb3JkcyB3aXRoIG5zZG5hbWUgdmFsdWVzXG4gICAqL1xuICByZWFkb25seSByZWNvcmRzOiBEbnNOc1JlY29yZEVudHJ5W107XG59XG5cbi8qKlxuICogQXp1cmUgUHVibGljIEROUyBOUyBSZWNvcmQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBOUyByZWNvcmRzIHNwZWNpZnkgdGhlIGF1dGhvcml0YXRpdmUgbmFtZSBzZXJ2ZXJzIGZvciBhIGRvbWFpbiBvciBzdWJkb21haW4uXG4gKiBUaGlzIHJlY29yZCB0eXBlIGlzIG9ubHkgYXZhaWxhYmxlIGluIFB1YmxpYyBETlMgWm9uZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhbiBOUyByZWNvcmQgZm9yIGEgc3ViZG9tYWluIGRlbGVnYXRpb246XG4gKiBjb25zdCBuc1JlY29yZCA9IG5ldyBEbnNOc1JlY29yZCh0aGlzLCBcIm5zLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwic3ViZG9tYWluXCIsXG4gKiAgIGRuc1pvbmVJZDogem9uZS5pZCxcbiAqICAgdHRsOiAzNjAwLFxuICogICByZWNvcmRzOiBbXG4gKiAgICAgeyBuc2RuYW1lOiBcIm5zMS5zdWJkb21haW4uZXhhbXBsZS5jb21cIiB9LFxuICogICAgIHsgbnNkbmFtZTogXCJuczIuc3ViZG9tYWluLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgXSxcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBEbnNOc1JlY29yZCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgRE5TX05TX1JFQ09SRF9UWVBFLFxuICAgICAgQUxMX0ROU19OU19SRUNPUkRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogRG5zTnNSZWNvcmRQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBmcWRuT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERuc05zUmVjb3JkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBOUyBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBOUyBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuZnFkbk91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJmcWRuXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBGUUROIG9mIHRoZSBOUyBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuICAgIHRoaXMuZnFkbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImZxZG5cIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNOc1JlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLmRuc1pvbmVJZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMTgtMDUtMDFcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRE5TX05TX1JFQ09SRF9UWVBFO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXF1aXJlc0xvY2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdXBwb3J0c1RhZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zTnNSZWNvcmRQcm9wcztcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHtcbiAgICAgIFRUTDogdHlwZWRQcm9wcy50dGwgPz8gMzYwMCxcbiAgICAgIE5TUmVjb3JkczogdHlwZWRQcm9wcy5yZWNvcmRzLm1hcCgocikgPT4gKHtcbiAgICAgICAgbnNkbmFtZTogci5uc2RuYW1lLFxuICAgICAgfSkpLFxuICAgIH07XG5cbiAgICBpZiAodHlwZWRQcm9wcy5tZXRhZGF0YSAmJiBPYmplY3Qua2V5cyh0eXBlZFByb3BzLm1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9wZXJ0aWVzLm1ldGFkYXRhID0gdHlwZWRQcm9wcy5tZXRhZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBwcm9wZXJ0aWVzIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBGUUROIG9mIHRoZSByZWNvcmRcbiAgICovXG4gIHB1YmxpYyBnZXQgZnFkbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YDtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUFRSIFJFQ09SRFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFbnRyeSBmb3IgYSBQVFIgcmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zUHRyUmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIFBUUiB0YXJnZXQgZG9tYWluIG5hbWVcbiAgICogQGV4YW1wbGUgXCJzZXJ2ZXIxLmV4YW1wbGUuY29tXCJcbiAgICovXG4gIHJlYWRvbmx5IHB0cmRuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUHVibGljIEROUyBQVFIgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zUHRyUmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgUFRSIHJlY29yZHMgd2l0aCBwdHJkbmFtZSB2YWx1ZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZHM6IERuc1B0clJlY29yZEVudHJ5W107XG59XG5cbi8qKlxuICogQXp1cmUgUHVibGljIEROUyBQVFIgUmVjb3JkIGltcGxlbWVudGF0aW9uXG4gKlxuICogUFRSIHJlY29yZHMgYXJlIHVzZWQgZm9yIHJldmVyc2UgRE5TIGxvb2t1cHMsIG1hcHBpbmcgSVAgYWRkcmVzc2VzIHRvIGhvc3RuYW1lcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgUFRSIHJlY29yZDpcbiAqIGNvbnN0IHB0clJlY29yZCA9IG5ldyBEbnNQdHJSZWNvcmQodGhpcywgXCJwdHItcmVjb3JkXCIsIHtcbiAqICAgbmFtZTogXCI1MFwiLFxuICogICBkbnNab25lSWQ6IHJldmVyc2Vab25lLmlkLFxuICogICB0dGw6IDM2MDAsXG4gKiAgIHJlY29yZHM6IFtcbiAqICAgICB7IHB0cmRuYW1lOiBcInNlcnZlcjEuZXhhbXBsZS5jb21cIiB9LFxuICogICBdLFxuICogfSk7XG4gKlxuICogQHN0YWJpbGl0eSBzdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIERuc1B0clJlY29yZCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgRE5TX1BUUl9SRUNPUkRfVFlQRSxcbiAgICAgIEFMTF9ETlNfUFRSX1JFQ09SRF9WRVJTSU9OUyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBEbnNQdHJSZWNvcmRQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBmcWRuT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERuc1B0clJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgUFRSIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIFBUUiBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuZnFkbk91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJmcWRuXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBGUUROIG9mIHRoZSBQVFIgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zUHRyUmVjb3JkUHJvcHM7XG4gICAgcmV0dXJuIHR5cGVkUHJvcHMuZG5zWm9uZUlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiMjAxOC0wNS0wMVwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBETlNfUFRSX1JFQ09SRF9UWVBFO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXF1aXJlc0xvY2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdXBwb3J0c1RhZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zUHRyUmVjb3JkUHJvcHM7XG4gICAgY29uc3QgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7XG4gICAgICBUVEw6IHR5cGVkUHJvcHMudHRsID8/IDM2MDAsXG4gICAgICBQVFJSZWNvcmRzOiB0eXBlZFByb3BzLnJlY29yZHMubWFwKChyKSA9PiAoe1xuICAgICAgICBwdHJkbmFtZTogci5wdHJkbmFtZSxcbiAgICAgIH0pKSxcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVkUHJvcHMubWV0YWRhdGEgJiYgT2JqZWN0LmtleXModHlwZWRQcm9wcy5tZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcGVydGllcy5tZXRhZGF0YSA9IHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRlFETiBvZiB0aGUgcmVjb3JkXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZxZG4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWA7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNPQSBSRUNPUkRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU09BIHJlY29yZCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zU29hUmVjb3JkQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBkb21haW4gbmFtZSBvZiB0aGUgYXV0aG9yaXRhdGl2ZSBuYW1lIHNlcnZlclxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVtYWlsIGNvbnRhY3QgZm9yIHRoaXMgem9uZSAod2l0aCBAIHJlcGxhY2VkIGJ5IC4pXG4gICAqIEBleGFtcGxlIFwiYWRtaW4uZXhhbXBsZS5jb21cIiAoZm9yIGFkbWluQGV4YW1wbGUuY29tKVxuICAgKi9cbiAgcmVhZG9ubHkgZW1haWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJpYWwgbnVtYmVyIGZvciB0aGlzIHpvbmVcbiAgICovXG4gIHJlYWRvbmx5IHNlcmlhbE51bWJlcj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHJlZnJlc2ggdGltZSBpbiBzZWNvbmRzXG4gICAqL1xuICByZWFkb25seSByZWZyZXNoVGltZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHJldHJ5IHRpbWUgaW4gc2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgcmV0cnlUaW1lPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhwaXJlIHRpbWUgaW4gc2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhwaXJlVGltZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gVFRMIGluIHNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1UVEw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUHVibGljIEROUyBTT0EgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zU29hUmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogU09BIHJlY29yZCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBzb2FSZWNvcmQ6IERuc1NvYVJlY29yZENvbmZpZztcbn1cblxuLyoqXG4gKiBBenVyZSBQdWJsaWMgRE5TIFNPQSBSZWNvcmQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBTT0EgcmVjb3JkcyBjb250YWluIGFkbWluaXN0cmF0aXZlIGluZm9ybWF0aW9uIGFib3V0IGEgRE5TIHpvbmUuXG4gKiBOb3RlOiBFYWNoIHpvbmUgYXV0b21hdGljYWxseSBoYXMgYW4gU09BIHJlY29yZDsgdGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byB1cGRhdGUgaXQuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFVwZGF0ZSB0aGUgU09BIHJlY29yZDpcbiAqIGNvbnN0IHNvYVJlY29yZCA9IG5ldyBEbnNTb2FSZWNvcmQodGhpcywgXCJzb2EtcmVjb3JkXCIsIHtcbiAqICAgbmFtZTogXCJAXCIsXG4gKiAgIGRuc1pvbmVJZDogem9uZS5pZCxcbiAqICAgdHRsOiAzNjAwLFxuICogICBzb2FSZWNvcmQ6IHtcbiAqICAgICBlbWFpbDogXCJhZG1pbi5leGFtcGxlLmNvbVwiLFxuICogICAgIHJlZnJlc2hUaW1lOiAzNjAwLFxuICogICAgIHJldHJ5VGltZTogMzAwLFxuICogICAgIGV4cGlyZVRpbWU6IDI0MTkyMDAsXG4gKiAgICAgbWluaW11bVRUTDogMzAwLFxuICogICB9LFxuICogfSk7XG4gKlxuICogQHN0YWJpbGl0eSBzdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIERuc1NvYVJlY29yZCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgRE5TX1NPQV9SRUNPUkRfVFlQRSxcbiAgICAgIEFMTF9ETlNfU09BX1JFQ09SRF9WRVJTSU9OUyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBEbnNTb2FSZWNvcmRQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBmcWRuT3V0cHV0OiBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERuc1NvYVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgU09BIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RmLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIFNPQSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuZnFkbk91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJmcWRuXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBGUUROIG9mIHRoZSBTT0EgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zU29hUmVjb3JkUHJvcHM7XG4gICAgcmV0dXJuIHR5cGVkUHJvcHMuZG5zWm9uZUlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiMjAxOC0wNS0wMVwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBETlNfU09BX1JFQ09SRF9UWVBFO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXF1aXJlc0xvY2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdXBwb3J0c1RhZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zU29hUmVjb3JkUHJvcHM7XG4gICAgY29uc3Qgc29hUmVjb3JkOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHt9O1xuXG4gICAgaWYgKHR5cGVkUHJvcHMuc29hUmVjb3JkLmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc29hUmVjb3JkLmhvc3QgPSB0eXBlZFByb3BzLnNvYVJlY29yZC5ob3N0O1xuICAgIH1cbiAgICBpZiAodHlwZWRQcm9wcy5zb2FSZWNvcmQuZW1haWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc29hUmVjb3JkLmVtYWlsID0gdHlwZWRQcm9wcy5zb2FSZWNvcmQuZW1haWw7XG4gICAgfVxuICAgIGlmICh0eXBlZFByb3BzLnNvYVJlY29yZC5zZXJpYWxOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc29hUmVjb3JkLnNlcmlhbE51bWJlciA9IHR5cGVkUHJvcHMuc29hUmVjb3JkLnNlcmlhbE51bWJlcjtcbiAgICB9XG4gICAgaWYgKHR5cGVkUHJvcHMuc29hUmVjb3JkLnJlZnJlc2hUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNvYVJlY29yZC5yZWZyZXNoVGltZSA9IHR5cGVkUHJvcHMuc29hUmVjb3JkLnJlZnJlc2hUaW1lO1xuICAgIH1cbiAgICBpZiAodHlwZWRQcm9wcy5zb2FSZWNvcmQucmV0cnlUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNvYVJlY29yZC5yZXRyeVRpbWUgPSB0eXBlZFByb3BzLnNvYVJlY29yZC5yZXRyeVRpbWU7XG4gICAgfVxuICAgIGlmICh0eXBlZFByb3BzLnNvYVJlY29yZC5leHBpcmVUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNvYVJlY29yZC5leHBpcmVUaW1lID0gdHlwZWRQcm9wcy5zb2FSZWNvcmQuZXhwaXJlVGltZTtcbiAgICB9XG4gICAgaWYgKHR5cGVkUHJvcHMuc29hUmVjb3JkLm1pbmltdW1UVEwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc29hUmVjb3JkLm1pbmltdW1UVEwgPSB0eXBlZFByb3BzLnNvYVJlY29yZC5taW5pbXVtVFRMO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0ge1xuICAgICAgVFRMOiB0eXBlZFByb3BzLnR0bCA/PyAzNjAwLFxuICAgICAgU09BUmVjb3JkOiBzb2FSZWNvcmQsXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHR5cGVkUHJvcHMubWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnRpZXMubWV0YWRhdGEgPSB0eXBlZFByb3BzLm1ldGFkYXRhO1xuICAgIH1cblxuICAgIHJldHVybiB7IHByb3BlcnRpZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEZRRE4gb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcHVibGljIGdldCBmcWRuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTUlYgUkVDT1JEXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEVudHJ5IGZvciBhbiBTUlYgcmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zU3J2UmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIHByaW9yaXR5IG9mIHRoaXMgU1JWIHJlY29yZCAobG93ZXIgdmFsdWVzIGhhdmUgaGlnaGVyIHByaW9yaXR5KVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpb3JpdHk6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHdlaWdodCBvZiB0aGlzIFNSViByZWNvcmQgKHVzZWQgZm9yIGxvYWQgYmFsYW5jaW5nIGFtb25nIHJlY29yZHMgd2l0aCBzYW1lIHByaW9yaXR5KVxuICAgKi9cbiAgcmVhZG9ubHkgd2VpZ2h0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3J0IG51bWJlciBmb3IgdGhlIHNlcnZpY2VcbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBob3N0bmFtZSBwcm92aWRpbmcgdGhlIHNlcnZpY2VcbiAgICogQGV4YW1wbGUgXCJzaXBzZXJ2ZXIuZXhhbXBsZS5jb21cIlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUHVibGljIEROUyBTUlYgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zU3J2UmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgU1JWIHJlY29yZHMgd2l0aCBwcmlvcml0eSwgd2VpZ2h0LCBwb3J0LCBhbmQgdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSByZWNvcmRzOiBEbnNTcnZSZWNvcmRFbnRyeVtdO1xufVxuXG4vKipcbiAqIEF6dXJlIFB1YmxpYyBETlMgU1JWIFJlY29yZCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFNSViByZWNvcmRzIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHNlcnZpY2VzIGxpa2UgU0lQLCBYTVBQLCBldGMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhbiBTUlYgcmVjb3JkIGZvciBhIFNJUCBzZXJ2aWNlOlxuICogY29uc3Qgc3J2UmVjb3JkID0gbmV3IERuc1NydlJlY29yZCh0aGlzLCBcInNpcC1yZWNvcmRcIiwge1xuICogICBuYW1lOiBcIl9zaXAuX3RjcFwiLFxuICogICBkbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzYwMCxcbiAqICAgcmVjb3JkczogW1xuICogICAgIHsgcHJpb3JpdHk6IDEwLCB3ZWlnaHQ6IDYwLCBwb3J0OiA1MDYwLCB0YXJnZXQ6IFwic2lwc2VydmVyMS5leGFtcGxlLmNvbVwiIH0sXG4gKiAgICAgeyBwcmlvcml0eTogMTAsIHdlaWdodDogNDAsIHBvcnQ6IDUwNjAsIHRhcmdldDogXCJzaXBzZXJ2ZXIyLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgXSxcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBEbnNTcnZSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIEROU19TUlZfUkVDT1JEX1RZUEUsXG4gICAgICBBTExfRE5TX1NSVl9SRUNPUkRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogRG5zU3J2UmVjb3JkUHJvcHM7XG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgZnFkbk91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEbnNTcnZSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFNSViBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBTUlYgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgU1JWIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5mcWRuT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiZnFkblwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvbHZlUGFyZW50SWQocHJvcHM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIERuc1NydlJlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLmRuc1pvbmVJZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMTgtMDUtMDFcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRE5TX1NSVl9SRUNPUkRfVFlQRTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIERuc1NydlJlY29yZFByb3BzO1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0ge1xuICAgICAgVFRMOiB0eXBlZFByb3BzLnR0bCA/PyAzNjAwLFxuICAgICAgU1JWUmVjb3JkczogdHlwZWRQcm9wcy5yZWNvcmRzLm1hcCgocikgPT4gKHtcbiAgICAgICAgcHJpb3JpdHk6IHIucHJpb3JpdHksXG4gICAgICAgIHdlaWdodDogci53ZWlnaHQsXG4gICAgICAgIHBvcnQ6IHIucG9ydCxcbiAgICAgICAgdGFyZ2V0OiByLnRhcmdldCxcbiAgICAgIH0pKSxcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVkUHJvcHMubWV0YWRhdGEgJiYgT2JqZWN0LmtleXModHlwZWRQcm9wcy5tZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcGVydGllcy5tZXRhZGF0YSA9IHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRlFETiBvZiB0aGUgcmVjb3JkXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZxZG4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWA7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRYVCBSRUNPUkRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRW50cnkgZm9yIGEgVFhUIHJlY29yZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc1R4dFJlY29yZEVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHZhbHVlIG9mIHRoaXMgVFhUIHJlY29yZCAoYXJyYXkgb2Ygc3RyaW5ncywgZWFjaCB1cCB0byAyNTUgY2hhcnMpXG4gICAqIExvbmcgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IHNwbGl0IGludG8gbXVsdGlwbGUgc3RyaW5nc1xuICAgKiBAZXhhbXBsZSBbXCJ2PXNwZjEgaW5jbHVkZTpzcGYucHJvdGVjdGlvbi5vdXRsb29rLmNvbSAtYWxsXCJdXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUHVibGljIEROUyBUWFQgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zVHh0UmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgVFhUIHJlY29yZHMgd2l0aCBzdHJpbmcgdmFsdWVzXG4gICAqL1xuICByZWFkb25seSByZWNvcmRzOiBEbnNUeHRSZWNvcmRFbnRyeVtdO1xufVxuXG4vKipcbiAqIEF6dXJlIFB1YmxpYyBETlMgVFhUIFJlY29yZCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFRYVCByZWNvcmRzIHN0b3JlIGFyYml0cmFyeSB0ZXh0IGRhdGEsIGNvbW1vbmx5IHVzZWQgZm9yIFNQRiwgREtJTSwgZG9tYWluIHZlcmlmaWNhdGlvbiwgZXRjLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBUWFQgcmVjb3JkIGZvciBTUEY6XG4gKiBjb25zdCB0eHRSZWNvcmQgPSBuZXcgRG5zVHh0UmVjb3JkKHRoaXMsIFwic3BmLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwiQFwiLFxuICogICBkbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzYwMCxcbiAqICAgcmVjb3JkczogW1xuICogICAgIHsgdmFsdWU6IFtcInY9c3BmMSBpbmNsdWRlOnNwZi5wcm90ZWN0aW9uLm91dGxvb2suY29tIC1hbGxcIl0gfSxcbiAqICAgXSxcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBEbnNUeHRSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIEROU19UWFRfUkVDT1JEX1RZUEUsXG4gICAgICBBTExfRE5TX1RYVF9SRUNPUkRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogRG5zVHh0UmVjb3JkUHJvcHM7XG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgZnFkbk91dHB1dDogY2RrdGYuVGVycmFmb3JtT3V0cHV0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEbnNUeHRSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFRYVCBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0Zi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBUWFQgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdGYuVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgVFhUIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5mcWRuT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiZnFkblwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvbHZlUGFyZW50SWQocHJvcHM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIERuc1R4dFJlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLmRuc1pvbmVJZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMTgtMDUtMDFcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRE5TX1RYVF9SRUNPUkRfVFlQRTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIERuc1R4dFJlY29yZFByb3BzO1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0ge1xuICAgICAgVFRMOiB0eXBlZFByb3BzLnR0bCA/PyAzNjAwLFxuICAgICAgVFhUUmVjb3JkczogdHlwZWRQcm9wcy5yZWNvcmRzLm1hcCgocikgPT4gKHtcbiAgICAgICAgdmFsdWU6IHIudmFsdWUsXG4gICAgICB9KSksXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHR5cGVkUHJvcHMubWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnRpZXMubWV0YWRhdGEgPSB0eXBlZFByb3BzLm1ldGFkYXRhO1xuICAgIH1cblxuICAgIHJldHVybiB7IHByb3BlcnRpZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEZRRE4gb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcHVibGljIGdldCBmcWRuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gO1xuICB9XG59XG4iXX0=
|
|
924
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5zLXJlY29yZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXp1cmUtZG5zem9uZS9saWIvcmVjb3Jkcy9kbnMtcmVjb3Jkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBRUgsK0JBQStCO0FBRS9CLDZEQXFCOEI7QUFDOUIsaUZBR3NEO0FBaUV0RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsTUFBYSxVQUFXLFNBQVEsOEJBQWE7SUFVM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFzQjtRQUM5RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3BELEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNkLFdBQVcsRUFBRSx3QkFBd0I7U0FDdEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxRQUFRO1lBQy9DLFdBQVcsRUFBRSwwQkFBMEI7U0FDeEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN4RCxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRywwQkFBMEI7WUFDakUsV0FBVyxFQUFFLDBCQUEwQjtTQUN4QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxD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QUFVLEdBQUcsS0FBMEIsQ0FBQztRQUM5QyxNQUFNLFVBQVUsR0FBK0I7WUFDN0MsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLElBQUksSUFBSTtZQUMzQixVQUFVLEVBQUUsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSzthQUNmLENBQUMsQ0FBQztTQUNKLENBQUM7UUFFRixJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsSUFBSTtRQUNiLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRywwQkFBMEIsQ0FBQztJQUNwRSxDQUFDOztBQW5GSCxvQ0FvRkM7OztBQW5GQztJQUNFLDhCQUFhLENBQUMsZUFBZSxDQUMzQix3Q0FBbUIsRUFDbkIsZ0RBQTJCLENBQzVCLENBQUM7QUFDSixDQUFDLEdBQUEsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXp1cmUgUHVibGljIEROUyBab25lIFJlY29yZCBpbXBsZW1lbnRhdGlvbnMgdXNpbmcgQXphcGlSZXNvdXJjZSBmcmFtZXdvcmtcbiAqXG4gKiBUaGlzIGZpbGUgcHJvdmlkZXMgaW1wbGVtZW50YXRpb25zIGZvciBhbGwgUHVibGljIEROUyBab25lIHJlY29yZCB0eXBlczpcbiAqIC0gRG5zQVJlY29yZCAoQSByZWNvcmRzIHdpdGggSVB2NCBhZGRyZXNzZXMpXG4gKiAtIERuc0FhYWFSZWNvcmQgKEFBQUEgcmVjb3JkcyB3aXRoIElQdjYgYWRkcmVzc2VzKVxuICogLSBEbnNDYWFSZWNvcmQgKENBQSByZWNvcmRzIGZvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgQXV0aG9yaXphdGlvbikgLSBQVUJMSUMgT05MWVxuICogLSBEbnNDbmFtZVJlY29yZCAoQ05BTUUgcmVjb3JkcylcbiAqIC0gRG5zTXhSZWNvcmQgKE1YIHJlY29yZHMgd2l0aCBleGNoYW5nZSBhbmQgcHJlZmVyZW5jZSlcbiAqIC0gRG5zTnNSZWNvcmQgKE5TIHJlY29yZHMgZm9yIE5hbWUgU2VydmVycykgLSBQVUJMSUMgT05MWVxuICogLSBEbnNQdHJSZWNvcmQgKFBUUiByZWNvcmRzKVxuICogLSBEbnNTb2FSZWNvcmQgKFNPQSByZWNvcmRzKVxuICogLSBEbnNTcnZSZWNvcmQgKFNSViByZWNvcmRzIHdpdGggcHJpb3JpdHksIHdlaWdodCwgcG9ydCwgdGFyZ2V0KVxuICogLSBEbnNUeHRSZWNvcmQgKFRYVCByZWNvcmRzKVxuICpcbiAqIEFQSSBWZXJzaW9uOiAyMDE4LTA1LTAxXG4gKlxuICogS2V5IGRpZmZlcmVuY2VzIGZyb20gUHJpdmF0ZSBETlM6XG4gKiAtIFByb3BlcnR5IGNhc2luZzogUHVibGljIEROUyB1c2VzIFBhc2NhbENhc2UgKEFSZWNvcmRzLCBUVEwgdnMgYVJlY29yZHMsIHR0bClcbiAqIC0gQ0FBIHJlY29yZHM6IE9ubHkgYXZhaWxhYmxlIGluIHB1YmxpYyBETlNcbiAqIC0gTlMgcmVjb3JkczogT25seSBhdmFpbGFibGUgaW4gcHVibGljIEROU1xuICogLSB0YXJnZXRSZXNvdXJjZTogUHVibGljIEROUyBBLCBBQUFBLCBhbmQgQ05BTUUgcmVjb3JkcyBzdXBwb3J0IGFsaWFzIHJlY29yZHNcbiAqL1xuXG5pbXBvcnQgKiBhcyBjZGt0biBmcm9tIFwiY2RrdG5cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBBTExfRE5TX0FfUkVDT1JEX1ZFUlNJT05TLFxuICBBTExfRE5TX0FBQUFfUkVDT1JEX1ZFUlNJT05TLFxuICBBTExfRE5TX0NBQV9SRUNPUkRfVkVSU0lPTlMsXG4gIEFMTF9ETlNfQ05BTUVfUkVDT1JEX1ZFUlNJT05TLFxuICBBTExfRE5TX01YX1JFQ09SRF9WRVJTSU9OUyxcbiAgQUxMX0ROU19OU19SRUNPUkRfVkVSU0lPTlMsXG4gIEFMTF9ETlNfUFRSX1JFQ09SRF9WRVJTSU9OUyxcbiAgQUxMX0ROU19TT0FfUkVDT1JEX1ZFUlNJT05TLFxuICBBTExfRE5TX1NSVl9SRUNPUkRfVkVSU0lPTlMsXG4gIEFMTF9ETlNfVFhUX1JFQ09SRF9WRVJTSU9OUyxcbiAgRE5TX0FfUkVDT1JEX1RZUEUsXG4gIEROU19BQUFBX1JFQ09SRF9UWVBFLFxuICBETlNfQ0FBX1JFQ09SRF9UWVBFLFxuICBETlNfQ05BTUVfUkVDT1JEX1RZUEUsXG4gIEROU19NWF9SRUNPUkRfVFlQRSxcbiAgRE5TX05TX1JFQ09SRF9UWVBFLFxuICBETlNfUFRSX1JFQ09SRF9UWVBFLFxuICBETlNfU09BX1JFQ09SRF9UWVBFLFxuICBETlNfU1JWX1JFQ09SRF9UWVBFLFxuICBETlNfVFhUX1JFQ09SRF9UWVBFLFxufSBmcm9tIFwiLi9kbnMtcmVjb3JkLXNjaGVtYXNcIjtcbmltcG9ydCB7XG4gIEF6YXBpUmVzb3VyY2UsXG4gIEF6YXBpUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSBcIi4uLy4uLy4uL2NvcmUtYXp1cmUvbGliL2F6YXBpL2F6YXBpLXJlc291cmNlXCI7XG5pbXBvcnQgeyBBcGlTY2hlbWEgfSBmcm9tIFwiLi4vLi4vLi4vY29yZS1henVyZS9saWIvdmVyc2lvbi1tYW5hZ2VyL2ludGVyZmFjZXMvdmVyc2lvbi1pbnRlcmZhY2VzXCI7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDT01NT04gSU5URVJGQUNFU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBCYXNlIHByb3BlcnRpZXMgc2hhcmVkIGJ5IGFsbCBQdWJsaWMgRE5TIHJlY29yZCB0eXBlc1xuICpcbiAqIE5vdGU6IFRoZSBgbmFtZWAgcHJvcGVydHkgaXMgaW5oZXJpdGVkIGZyb20gQXphcGlSZXNvdXJjZVByb3BzLlxuICogRm9yIEROUyByZWNvcmRzLCB1c2UgQCBmb3IgYXBleCByZWNvcmRzIG9yIHByb3ZpZGUgYSByZWxhdGl2ZSBuYW1lIGxpa2UgXCJ3d3dcIiBvciBcIm1haWxcIi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbnNSZWNvcmRCYXNlUHJvcHMgZXh0ZW5kcyBBemFwaVJlc291cmNlUHJvcHMge1xuICAvKipcbiAgICogUmVzb3VyY2UgSUQgb2YgdGhlIHBhcmVudCBETlMgWm9uZVxuICAgKiBAZXhhbXBsZSB6b25lLmlkIG9yIFwiL3N1YnNjcmlwdGlvbnMvLi4uL3Byb3ZpZGVycy9NaWNyb3NvZnQuTmV0d29yay9kbnNab25lcy9leGFtcGxlLmNvbVwiXG4gICAqL1xuICByZWFkb25seSBkbnNab25lSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGltZSB0byBMaXZlIGluIHNlY29uZHNcbiAgICogQGRlZmF1bHQgMzYwMFxuICAgKi9cbiAgcmVhZG9ubHkgdHRsPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBrZXktdmFsdWUgcGFpcnMgZm9yIHRoZSByZWNvcmQgc2V0XG4gICAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBBIFJFQ09SRFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFbnRyeSBmb3IgYW4gQSByZWNvcmQgd2l0aCBJUHY0IGFkZHJlc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbnNBUmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIElQdjQgYWRkcmVzcyBvZiB0aGlzIEEgcmVjb3JkXG4gICAqIEBleGFtcGxlIFwiMjAuMzAuNDAuNTBcIlxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NEFkZHJlc3M6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQdWJsaWMgRE5TIEEgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zQVJlY29yZFByb3BzIGV4dGVuZHMgRG5zUmVjb3JkQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIEFycmF5IG9mIEEgcmVjb3JkcyB3aXRoIElQdjQgYWRkcmVzc2VzXG4gICAqIEVpdGhlciByZWNvcmRzIG9yIHRhcmdldFJlc291cmNlSWQgbXVzdCBiZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZHM/OiBEbnNBUmVjb3JkRW50cnlbXTtcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIGFuIEF6dXJlIHJlc291cmNlIGZyb20gd2hlcmUgdGhlIElQIGNvbnRlbnQgaXMgdGFrZW4gKGFsaWFzIHJlY29yZClcbiAgICogRWl0aGVyIHJlY29yZHMgb3IgdGFyZ2V0UmVzb3VyY2VJZCBtdXN0IGJlIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBwdWJsaWNJcC5pZFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0UmVzb3VyY2VJZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBenVyZSBQdWJsaWMgRE5TIEEgUmVjb3JkIGltcGxlbWVudGF0aW9uXG4gKlxuICogQSByZWNvcmRzIG1hcCBhIGhvc3RuYW1lIHRvIG9uZSBvciBtb3JlIElQdjQgYWRkcmVzc2VzLlxuICogU3VwcG9ydHMgYWxpYXMgcmVjb3JkcyB2aWEgdGFyZ2V0UmVzb3VyY2VJZCBmb3IgcG9pbnRpbmcgdG8gQXp1cmUgcmVzb3VyY2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYW4gQSByZWNvcmQgd2l0aCBJUCBhZGRyZXNzZXM6XG4gKiBjb25zdCBhUmVjb3JkID0gbmV3IERuc0FSZWNvcmQodGhpcywgXCJ3ZWItYS1yZWNvcmRcIiwge1xuICogICBuYW1lOiBcInd3d1wiLFxuICogICBkbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzAwLFxuICogICByZWNvcmRzOiBbXG4gKiAgICAgeyBpcHY0QWRkcmVzczogXCIyMC4zMC40MC41MFwiIH0sXG4gKiAgIF0sXG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGFuIGFsaWFzIEEgcmVjb3JkIHBvaW50aW5nIHRvIGFuIEF6dXJlIHJlc291cmNlOlxuICogY29uc3QgYWxpYXNSZWNvcmQgPSBuZXcgRG5zQVJlY29yZCh0aGlzLCBcImFsaWFzLWEtcmVjb3JkXCIsIHtcbiAqICAgbmFtZTogXCJ3d3dcIixcbiAqICAgZG5zWm9uZUlkOiB6b25lLmlkLFxuICogICB0dGw6IDMwMCxcbiAqICAgdGFyZ2V0UmVzb3VyY2VJZDogcHVibGljSXAuaWQsXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgRG5zQVJlY29yZCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKEROU19BX1JFQ09SRF9UWVBFLCBBTExfRE5TX0FfUkVDT1JEX1ZFUlNJT05TKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogRG5zQVJlY29yZFByb3BzO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RuLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RuLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IGZxZG5PdXRwdXQ6IGNka3RuLlRlcnJhZm9ybU91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRG5zQVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgQSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBBIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5mcWRuT3V0cHV0ID0gbmV3IGNka3RuLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImZxZG5cIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIEZRRE4gb2YgdGhlIEEgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zQVJlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLmRuc1pvbmVJZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMTgtMDUtMDFcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRE5TX0FfUkVDT1JEX1RZUEU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRzVGFncygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNBUmVjb3JkUHJvcHM7XG4gICAgY29uc3QgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7XG4gICAgICBUVEw6IHR5cGVkUHJvcHMudHRsID8/IDM2MDAsXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLnJlY29yZHMgJiYgdHlwZWRQcm9wcy5yZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnRpZXMuQVJlY29yZHMgPSB0eXBlZFByb3BzLnJlY29yZHMubWFwKChyKSA9PiAoe1xuICAgICAgICBpcHY0QWRkcmVzczogci5pcHY0QWRkcmVzcyxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZWRQcm9wcy50YXJnZXRSZXNvdXJjZUlkKSB7XG4gICAgICBwcm9wZXJ0aWVzLnRhcmdldFJlc291cmNlID0geyBpZDogdHlwZWRQcm9wcy50YXJnZXRSZXNvdXJjZUlkIH07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVkUHJvcHMubWV0YWRhdGEgJiYgT2JqZWN0LmtleXModHlwZWRQcm9wcy5tZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcGVydGllcy5tZXRhZGF0YSA9IHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRlFETiBvZiB0aGUgcmVjb3JkXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZxZG4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWA7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEFBQUEgUkVDT1JEXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEVudHJ5IGZvciBhbiBBQUFBIHJlY29yZCB3aXRoIElQdjYgYWRkcmVzc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc0FhYWFSZWNvcmRFbnRyeSB7XG4gIC8qKlxuICAgKiBUaGUgSVB2NiBhZGRyZXNzIG9mIHRoaXMgQUFBQSByZWNvcmRcbiAgICogQGV4YW1wbGUgXCIyMDAxOmRiODo6MVwiXG4gICAqL1xuICByZWFkb25seSBpcHY2QWRkcmVzczogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFB1YmxpYyBETlMgQUFBQSBSZWNvcmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbnNBYWFhUmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgQUFBQSByZWNvcmRzIHdpdGggSVB2NiBhZGRyZXNzZXNcbiAgICogRWl0aGVyIHJlY29yZHMgb3IgdGFyZ2V0UmVzb3VyY2VJZCBtdXN0IGJlIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3Jkcz86IERuc0FhYWFSZWNvcmRFbnRyeVtdO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gYW4gQXp1cmUgcmVzb3VyY2UgZnJvbSB3aGVyZSB0aGUgSVAgY29udGVudCBpcyB0YWtlbiAoYWxpYXMgcmVjb3JkKVxuICAgKiBFaXRoZXIgcmVjb3JkcyBvciB0YXJnZXRSZXNvdXJjZUlkIG11c3QgYmUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF6dXJlIFB1YmxpYyBETlMgQUFBQSBSZWNvcmQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBBQUFBIHJlY29yZHMgbWFwIGEgaG9zdG5hbWUgdG8gb25lIG9yIG1vcmUgSVB2NiBhZGRyZXNzZXMuXG4gKiBTdXBwb3J0cyBhbGlhcyByZWNvcmRzIHZpYSB0YXJnZXRSZXNvdXJjZUlkIGZvciBwb2ludGluZyB0byBBenVyZSByZXNvdXJjZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhbiBBQUFBIHJlY29yZDpcbiAqIGNvbnN0IGFhYWFSZWNvcmQgPSBuZXcgRG5zQWFhYVJlY29yZCh0aGlzLCBcIndlYi1hYWFhLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwid3d3XCIsXG4gKiAgIGRuc1pvbmVJZDogem9uZS5pZCxcbiAqICAgdHRsOiAzMDAsXG4gKiAgIHJlY29yZHM6IFtcbiAqICAgICB7IGlwdjZBZGRyZXNzOiBcIjIwMDE6ZGI4OjoxXCIgfSxcbiAqICAgXSxcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBEbnNBYWFhUmVjb3JkIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBETlNfQUFBQV9SRUNPUkRfVFlQRSxcbiAgICAgIEFMTF9ETlNfQUFBQV9SRUNPUkRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogRG5zQWFhYVJlY29yZFByb3BzO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RuLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RuLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IGZxZG5PdXRwdXQ6IGNka3RuLlRlcnJhZm9ybU91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRG5zQWFhYVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgQUFBQSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBBQUFBIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5mcWRuT3V0cHV0ID0gbmV3IGNka3RuLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImZxZG5cIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIEZRRE4gb2YgdGhlIEFBQUEgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zQWFhYVJlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLmRuc1pvbmVJZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMTgtMDUtMDFcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRE5TX0FBQUFfUkVDT1JEX1RZUEU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRzVGFncygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNBYWFhUmVjb3JkUHJvcHM7XG4gICAgY29uc3QgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7XG4gICAgICBUVEw6IHR5cGVkUHJvcHMudHRsID8/IDM2MDAsXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLnJlY29yZHMgJiYgdHlwZWRQcm9wcy5yZWNvcmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnRpZXMuQUFBQVJlY29yZHMgPSB0eXBlZFByb3BzLnJlY29yZHMubWFwKChyKSA9PiAoe1xuICAgICAgICBpcHY2QWRkcmVzczogci5pcHY2QWRkcmVzcyxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZWRQcm9wcy50YXJnZXRSZXNvdXJjZUlkKSB7XG4gICAgICBwcm9wZXJ0aWVzLnRhcmdldFJlc291cmNlID0geyBpZDogdHlwZWRQcm9wcy50YXJnZXRSZXNvdXJjZUlkIH07XG4gICAgfVxuXG4gICAgaWYgKHR5cGVkUHJvcHMubWV0YWRhdGEgJiYgT2JqZWN0LmtleXModHlwZWRQcm9wcy5tZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcGVydGllcy5tZXRhZGF0YSA9IHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRlFETiBvZiB0aGUgcmVjb3JkXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZxZG4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWA7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENBQSBSRUNPUkQgKFBVQkxJQyBETlMgT05MWSlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRW50cnkgZm9yIGEgQ0FBIHJlY29yZCAoQ2VydGlmaWNhdGUgQXV0aG9yaXR5IEF1dGhvcml6YXRpb24pXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zQ2FhUmVjb3JkRW50cnkge1xuICAvKipcbiAgICogRmxhZ3MgZm9yIHRoaXMgQ0FBIHJlY29yZCAoMC0yNTUpXG4gICAqIDAgPSBub24tY3JpdGljYWwsIDEyOCA9IGNyaXRpY2FsXG4gICAqIEBleGFtcGxlIDBcbiAgICovXG4gIHJlYWRvbmx5IGZsYWdzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9wZXJ0eSB0YWcgZm9yIHRoaXMgQ0FBIHJlY29yZFxuICAgKiBDb21tb24gdmFsdWVzOiBcImlzc3VlXCIsIFwiaXNzdWV3aWxkXCIsIFwiaW9kZWZcIlxuICAgKiBAZXhhbXBsZSBcImlzc3VlXCJcbiAgICovXG4gIHJlYWRvbmx5IHRhZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWdcbiAgICogQGV4YW1wbGUgXCJsZXRzZW5jcnlwdC5vcmdcIlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQdWJsaWMgRE5TIENBQSBSZWNvcmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbnNDYWFSZWNvcmRQcm9wcyBleHRlbmRzIERuc1JlY29yZEJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBDQUEgcmVjb3JkcyB3aXRoIGZsYWdzLCB0YWcsIGFuZCB2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3JkczogRG5zQ2FhUmVjb3JkRW50cnlbXTtcbn1cblxuLyoqXG4gKiBBenVyZSBQdWJsaWMgRE5TIENBQSBSZWNvcmQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBDQUEgcmVjb3JkcyBzcGVjaWZ5IHdoaWNoIENlcnRpZmljYXRlIEF1dGhvcml0aWVzIGFyZSBhdXRob3JpemVkIHRvIGlzc3VlXG4gKiBjZXJ0aWZpY2F0ZXMgZm9yIGEgZG9tYWluLiBUaGlzIHJlY29yZCB0eXBlIGlzIG9ubHkgYXZhaWxhYmxlIGluIFB1YmxpYyBETlMgWm9uZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIENBQSByZWNvcmQgdG8gYXV0aG9yaXplIExldCdzIEVuY3J5cHQ6XG4gKiBjb25zdCBjYWFSZWNvcmQgPSBuZXcgRG5zQ2FhUmVjb3JkKHRoaXMsIFwiY2FhLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwiQFwiLFxuICogICBkbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzYwMCxcbiAqICAgcmVjb3JkczogW1xuICogICAgIHsgZmxhZ3M6IDAsIHRhZzogXCJpc3N1ZVwiLCB2YWx1ZTogXCJsZXRzZW5jcnlwdC5vcmdcIiB9LFxuICogICAgIHsgZmxhZ3M6IDAsIHRhZzogXCJpc3N1ZXdpbGRcIiwgdmFsdWU6IFwiO1wiIH0sIC8vIERpc2FsbG93IHdpbGRjYXJkIGNlcnRzXG4gKiAgICAgeyBmbGFnczogMCwgdGFnOiBcImlvZGVmXCIsIHZhbHVlOiBcIm1haWx0bzpzZWN1cml0eUBleGFtcGxlLmNvbVwiIH0sXG4gKiAgIF0sXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgRG5zQ2FhUmVjb3JkIGV4dGVuZHMgQXphcGlSZXNvdXJjZSB7XG4gIHN0YXRpYyB7XG4gICAgQXphcGlSZXNvdXJjZS5yZWdpc3RlclNjaGVtYXMoXG4gICAgICBETlNfQ0FBX1JFQ09SRF9UWVBFLFxuICAgICAgQUxMX0ROU19DQUFfUkVDT1JEX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IERuc0NhYVJlY29yZFByb3BzO1xuICBwdWJsaWMgcmVhZG9ubHkgaWRPdXRwdXQ6IGNka3RuLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWVPdXRwdXQ6IGNka3RuLlRlcnJhZm9ybU91dHB1dDtcbiAgcHVibGljIHJlYWRvbmx5IGZxZG5PdXRwdXQ6IGNka3RuLlRlcnJhZm9ybU91dHB1dDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRG5zQ2FhUmVjb3JkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RuLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBDQUEgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdG4uVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgQ0FBIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5mcWRuT3V0cHV0ID0gbmV3IGNka3RuLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImZxZG5cIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIEZRRE4gb2YgdGhlIENBQSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuICAgIHRoaXMuZnFkbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImZxZG5cIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNDYWFSZWNvcmRQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5kbnNab25lSWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDE4LTA1LTAxXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEROU19DQUFfUkVDT1JEX1RZUEU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXBpU2NoZW1hKCk6IEFwaVNjaGVtYSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZVNjaGVtYSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlcXVpcmVzTG9jYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN1cHBvcnRzVGFncygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlUmVzb3VyY2VCb2R5KHByb3BzOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNDYWFSZWNvcmRQcm9wcztcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHtcbiAgICAgIFRUTDogdHlwZWRQcm9wcy50dGwgPz8gMzYwMCxcbiAgICAgIGNhYVJlY29yZHM6IHR5cGVkUHJvcHMucmVjb3Jkcy5tYXAoKHIpID0+ICh7XG4gICAgICAgIGZsYWdzOiByLmZsYWdzLFxuICAgICAgICB0YWc6IHIudGFnLFxuICAgICAgICB2YWx1ZTogci52YWx1ZSxcbiAgICAgIH0pKSxcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVkUHJvcHMubWV0YWRhdGEgJiYgT2JqZWN0LmtleXModHlwZWRQcm9wcy5tZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcGVydGllcy5tZXRhZGF0YSA9IHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRlFETiBvZiB0aGUgcmVjb3JkXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZxZG4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWA7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENOQU1FIFJFQ09SRFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQdWJsaWMgRE5TIENOQU1FIFJlY29yZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc0NuYW1lUmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogVGhlIGNhbm9uaWNhbCBuYW1lIGZvciB0aGlzIENOQU1FIHJlY29yZFxuICAgKiBFaXRoZXIgY25hbWUgb3IgdGFyZ2V0UmVzb3VyY2VJZCBtdXN0IGJlIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBcInd3dy5jb250b3NvLmNvbVwiXG4gICAqL1xuICByZWFkb25seSBjbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIGFuIEF6dXJlIHJlc291cmNlIGZyb20gd2hlcmUgdGhlIEROUyBjb250ZW50IGlzIHRha2VuIChhbGlhcyByZWNvcmQpXG4gICAqIEVpdGhlciBjbmFtZSBvciB0YXJnZXRSZXNvdXJjZUlkIG11c3QgYmUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRSZXNvdXJjZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEF6dXJlIFB1YmxpYyBETlMgQ05BTUUgUmVjb3JkIGltcGxlbWVudGF0aW9uXG4gKlxuICogQ05BTUUgcmVjb3JkcyBjcmVhdGUgYW4gYWxpYXMgZnJvbSBvbmUgaG9zdG5hbWUgdG8gYW5vdGhlci5cbiAqIFN1cHBvcnRzIGFsaWFzIHJlY29yZHMgdmlhIHRhcmdldFJlc291cmNlSWQgZm9yIHBvaW50aW5nIHRvIEF6dXJlIHJlc291cmNlcy5cbiAqIE5vdGU6IENOQU1FIHJlY29yZHMgY2Fubm90IGNvZXhpc3Qgd2l0aCBvdGhlciByZWNvcmQgdHlwZXMgYXQgdGhlIHNhbWUgbmFtZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgQ05BTUUgcmVjb3JkOlxuICogY29uc3QgY25hbWVSZWNvcmQgPSBuZXcgRG5zQ25hbWVSZWNvcmQodGhpcywgXCJhbGlhcy1yZWNvcmRcIiwge1xuICogICBuYW1lOiBcImFwcFwiLFxuICogICBkbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzYwMCxcbiAqICAgY25hbWU6IFwid3d3LmV4YW1wbGUuY29tXCIsXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgRG5zQ25hbWVSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIEROU19DTkFNRV9SRUNPUkRfVFlQRSxcbiAgICAgIEFMTF9ETlNfQ05BTUVfUkVDT1JEX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IERuc0NuYW1lUmVjb3JkUHJvcHM7XG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgZnFkbk91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEbnNDbmFtZVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgQ05BTUUgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdG4uVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgQ05BTUUgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdG4uVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgQ05BTUUgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zQ25hbWVSZWNvcmRQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5kbnNab25lSWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDE4LTA1LTAxXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEROU19DTkFNRV9SRUNPUkRfVFlQRTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIERuc0NuYW1lUmVjb3JkUHJvcHM7XG4gICAgY29uc3QgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7XG4gICAgICBUVEw6IHR5cGVkUHJvcHMudHRsID8/IDM2MDAsXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLmNuYW1lKSB7XG4gICAgICBwcm9wZXJ0aWVzLkNOQU1FUmVjb3JkID0geyBjbmFtZTogdHlwZWRQcm9wcy5jbmFtZSB9O1xuICAgIH1cblxuICAgIGlmICh0eXBlZFByb3BzLnRhcmdldFJlc291cmNlSWQpIHtcbiAgICAgIHByb3BlcnRpZXMudGFyZ2V0UmVzb3VyY2UgPSB7IGlkOiB0eXBlZFByb3BzLnRhcmdldFJlc291cmNlSWQgfTtcbiAgICB9XG5cbiAgICBpZiAodHlwZWRQcm9wcy5tZXRhZGF0YSAmJiBPYmplY3Qua2V5cyh0eXBlZFByb3BzLm1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9wZXJ0aWVzLm1ldGFkYXRhID0gdHlwZWRQcm9wcy5tZXRhZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBwcm9wZXJ0aWVzIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBGUUROIG9mIHRoZSByZWNvcmRcbiAgICovXG4gIHB1YmxpYyBnZXQgZnFkbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YDtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gTVggUkVDT1JEXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEVudHJ5IGZvciBhbiBNWCByZWNvcmRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEbnNNeFJlY29yZEVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwcmVmZXJlbmNlIHZhbHVlIGZvciB0aGlzIE1YIHJlY29yZCAobG93ZXIgdmFsdWVzIGhhdmUgaGlnaGVyIHByaW9yaXR5KVxuICAgKiBAZXhhbXBsZSAxMFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZmVyZW5jZTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFpbCBleGNoYW5nZSBzZXJ2ZXIgaG9zdG5hbWVcbiAgICogQGV4YW1wbGUgXCJtYWlsMS5leGFtcGxlLmNvbVwiXG4gICAqL1xuICByZWFkb25seSBleGNoYW5nZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFB1YmxpYyBETlMgTVggUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zTXhSZWNvcmRQcm9wcyBleHRlbmRzIERuc1JlY29yZEJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBBcnJheSBvZiBNWCByZWNvcmRzIHdpdGggZXhjaGFuZ2UgYW5kIHByZWZlcmVuY2VcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZHM6IERuc014UmVjb3JkRW50cnlbXTtcbn1cblxuLyoqXG4gKiBBenVyZSBQdWJsaWMgRE5TIE1YIFJlY29yZCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIE1YIHJlY29yZHMgc3BlY2lmeSBtYWlsIGV4Y2hhbmdlIHNlcnZlcnMgZm9yIGEgZG9tYWluLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYW4gTVggcmVjb3JkOlxuICogY29uc3QgbXhSZWNvcmQgPSBuZXcgRG5zTXhSZWNvcmQodGhpcywgXCJtYWlsLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwiQFwiLFxuICogICBkbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzYwMCxcbiAqICAgcmVjb3JkczogW1xuICogICAgIHsgcHJlZmVyZW5jZTogMTAsIGV4Y2hhbmdlOiBcIm1haWwxLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgICB7IHByZWZlcmVuY2U6IDIwLCBleGNoYW5nZTogXCJtYWlsMi5leGFtcGxlLmNvbVwiIH0sXG4gKiAgIF0sXG4gKiB9KTtcbiAqXG4gKiBAc3RhYmlsaXR5IHN0YWJsZVxuICovXG5leHBvcnQgY2xhc3MgRG5zTXhSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIEROU19NWF9SRUNPUkRfVFlQRSxcbiAgICAgIEFMTF9ETlNfTVhfUkVDT1JEX1ZFUlNJT05TLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgcHJvcHM6IERuc014UmVjb3JkUHJvcHM7XG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgZnFkbk91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEbnNNeFJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgTVggUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLm5hbWVPdXRwdXQgPSBuZXcgY2RrdG4uVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5uYW1lfWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgbmFtZSBvZiB0aGUgTVggUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdG4uVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgTVggUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zTXhSZWNvcmRQcm9wcztcbiAgICByZXR1cm4gdHlwZWRQcm9wcy5kbnNab25lSWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVmYXVsdFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCIyMDE4LTA1LTAxXCI7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb3VyY2VUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEROU19NWF9SRUNPUkRfVFlQRTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIERuc014UmVjb3JkUHJvcHM7XG4gICAgY29uc3QgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7XG4gICAgICBUVEw6IHR5cGVkUHJvcHMudHRsID8/IDM2MDAsXG4gICAgICBNWFJlY29yZHM6IHR5cGVkUHJvcHMucmVjb3Jkcy5tYXAoKHIpID0+ICh7XG4gICAgICAgIHByZWZlcmVuY2U6IHIucHJlZmVyZW5jZSxcbiAgICAgICAgZXhjaGFuZ2U6IHIuZXhjaGFuZ2UsXG4gICAgICB9KSksXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHR5cGVkUHJvcHMubWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnRpZXMubWV0YWRhdGEgPSB0eXBlZFByb3BzLm1ldGFkYXRhO1xuICAgIH1cblxuICAgIHJldHVybiB7IHByb3BlcnRpZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEZRRE4gb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcHVibGljIGdldCBmcWRuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBOUyBSRUNPUkQgKFBVQkxJQyBETlMgT05MWSlcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRW50cnkgZm9yIGFuIE5TIHJlY29yZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc05zUmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIG5hbWUgc2VydmVyIGRvbWFpbiBuYW1lXG4gICAqIEBleGFtcGxlIFwibnMxLmV4YW1wbGUuY29tXCJcbiAgICovXG4gIHJlYWRvbmx5IG5zZG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBQdWJsaWMgRE5TIE5TIFJlY29yZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc05zUmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgTlMgcmVjb3JkcyB3aXRoIG5zZG5hbWUgdmFsdWVzXG4gICAqL1xuICByZWFkb25seSByZWNvcmRzOiBEbnNOc1JlY29yZEVudHJ5W107XG59XG5cbi8qKlxuICogQXp1cmUgUHVibGljIEROUyBOUyBSZWNvcmQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBOUyByZWNvcmRzIHNwZWNpZnkgdGhlIGF1dGhvcml0YXRpdmUgbmFtZSBzZXJ2ZXJzIGZvciBhIGRvbWFpbiBvciBzdWJkb21haW4uXG4gKiBUaGlzIHJlY29yZCB0eXBlIGlzIG9ubHkgYXZhaWxhYmxlIGluIFB1YmxpYyBETlMgWm9uZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhbiBOUyByZWNvcmQgZm9yIGEgc3ViZG9tYWluIGRlbGVnYXRpb246XG4gKiBjb25zdCBuc1JlY29yZCA9IG5ldyBEbnNOc1JlY29yZCh0aGlzLCBcIm5zLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwic3ViZG9tYWluXCIsXG4gKiAgIGRuc1pvbmVJZDogem9uZS5pZCxcbiAqICAgdHRsOiAzNjAwLFxuICogICByZWNvcmRzOiBbXG4gKiAgICAgeyBuc2RuYW1lOiBcIm5zMS5zdWJkb21haW4uZXhhbXBsZS5jb21cIiB9LFxuICogICAgIHsgbnNkbmFtZTogXCJuczIuc3ViZG9tYWluLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgXSxcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBEbnNOc1JlY29yZCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgRE5TX05TX1JFQ09SRF9UWVBFLFxuICAgICAgQUxMX0ROU19OU19SRUNPUkRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogRG5zTnNSZWNvcmRQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0bi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0bi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBmcWRuT3V0cHV0OiBjZGt0bi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERuc05zUmVjb3JkUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICB0aGlzLmlkT3V0cHV0ID0gbmV3IGNka3RuLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcImlkXCIsIHtcbiAgICAgIHZhbHVlOiB0aGlzLmlkLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIElEIG9mIHRoZSBOUyBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBOUyBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuZnFkbk91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJmcWRuXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBGUUROIG9mIHRoZSBOUyBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuaWRPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJpZFwiKTtcbiAgICB0aGlzLm5hbWVPdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJuYW1lXCIpO1xuICAgIHRoaXMuZnFkbk91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImZxZG5cIik7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZVBhcmVudElkKHByb3BzOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVkUHJvcHMgPSBwcm9wcyBhcyBEbnNOc1JlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLmRuc1pvbmVJZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMTgtMDUtMDFcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRE5TX05TX1JFQ09SRF9UWVBFO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXF1aXJlc0xvY2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdXBwb3J0c1RhZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zTnNSZWNvcmRQcm9wcztcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHtcbiAgICAgIFRUTDogdHlwZWRQcm9wcy50dGwgPz8gMzYwMCxcbiAgICAgIE5TUmVjb3JkczogdHlwZWRQcm9wcy5yZWNvcmRzLm1hcCgocikgPT4gKHtcbiAgICAgICAgbnNkbmFtZTogci5uc2RuYW1lLFxuICAgICAgfSkpLFxuICAgIH07XG5cbiAgICBpZiAodHlwZWRQcm9wcy5tZXRhZGF0YSAmJiBPYmplY3Qua2V5cyh0eXBlZFByb3BzLm1ldGFkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICBwcm9wZXJ0aWVzLm1ldGFkYXRhID0gdHlwZWRQcm9wcy5tZXRhZGF0YTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBwcm9wZXJ0aWVzIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBGUUROIG9mIHRoZSByZWNvcmRcbiAgICovXG4gIHB1YmxpYyBnZXQgZnFkbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YDtcbiAgfVxufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUFRSIFJFQ09SRFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBFbnRyeSBmb3IgYSBQVFIgcmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zUHRyUmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIFBUUiB0YXJnZXQgZG9tYWluIG5hbWVcbiAgICogQGV4YW1wbGUgXCJzZXJ2ZXIxLmV4YW1wbGUuY29tXCJcbiAgICovXG4gIHJlYWRvbmx5IHB0cmRuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUHVibGljIEROUyBQVFIgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zUHRyUmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgUFRSIHJlY29yZHMgd2l0aCBwdHJkbmFtZSB2YWx1ZXNcbiAgICovXG4gIHJlYWRvbmx5IHJlY29yZHM6IERuc1B0clJlY29yZEVudHJ5W107XG59XG5cbi8qKlxuICogQXp1cmUgUHVibGljIEROUyBQVFIgUmVjb3JkIGltcGxlbWVudGF0aW9uXG4gKlxuICogUFRSIHJlY29yZHMgYXJlIHVzZWQgZm9yIHJldmVyc2UgRE5TIGxvb2t1cHMsIG1hcHBpbmcgSVAgYWRkcmVzc2VzIHRvIGhvc3RuYW1lcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgUFRSIHJlY29yZDpcbiAqIGNvbnN0IHB0clJlY29yZCA9IG5ldyBEbnNQdHJSZWNvcmQodGhpcywgXCJwdHItcmVjb3JkXCIsIHtcbiAqICAgbmFtZTogXCI1MFwiLFxuICogICBkbnNab25lSWQ6IHJldmVyc2Vab25lLmlkLFxuICogICB0dGw6IDM2MDAsXG4gKiAgIHJlY29yZHM6IFtcbiAqICAgICB7IHB0cmRuYW1lOiBcInNlcnZlcjEuZXhhbXBsZS5jb21cIiB9LFxuICogICBdLFxuICogfSk7XG4gKlxuICogQHN0YWJpbGl0eSBzdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIERuc1B0clJlY29yZCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgRE5TX1BUUl9SRUNPUkRfVFlQRSxcbiAgICAgIEFMTF9ETlNfUFRSX1JFQ09SRF9WRVJTSU9OUyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBEbnNQdHJSZWNvcmRQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0bi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0bi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBmcWRuT3V0cHV0OiBjZGt0bi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERuc1B0clJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgUFRSIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RuLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIFBUUiBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuZnFkbk91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJmcWRuXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBGUUROIG9mIHRoZSBQVFIgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zUHRyUmVjb3JkUHJvcHM7XG4gICAgcmV0dXJuIHR5cGVkUHJvcHMuZG5zWm9uZUlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiMjAxOC0wNS0wMVwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBETlNfUFRSX1JFQ09SRF9UWVBFO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXF1aXJlc0xvY2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdXBwb3J0c1RhZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zUHRyUmVjb3JkUHJvcHM7XG4gICAgY29uc3QgcHJvcGVydGllczogeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0gPSB7XG4gICAgICBUVEw6IHR5cGVkUHJvcHMudHRsID8/IDM2MDAsXG4gICAgICBQVFJSZWNvcmRzOiB0eXBlZFByb3BzLnJlY29yZHMubWFwKChyKSA9PiAoe1xuICAgICAgICBwdHJkbmFtZTogci5wdHJkbmFtZSxcbiAgICAgIH0pKSxcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVkUHJvcHMubWV0YWRhdGEgJiYgT2JqZWN0LmtleXModHlwZWRQcm9wcy5tZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcGVydGllcy5tZXRhZGF0YSA9IHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRlFETiBvZiB0aGUgcmVjb3JkXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZxZG4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWA7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNPQSBSRUNPUkRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogU09BIHJlY29yZCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zU29hUmVjb3JkQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBkb21haW4gbmFtZSBvZiB0aGUgYXV0aG9yaXRhdGl2ZSBuYW1lIHNlcnZlclxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVtYWlsIGNvbnRhY3QgZm9yIHRoaXMgem9uZSAod2l0aCBAIHJlcGxhY2VkIGJ5IC4pXG4gICAqIEBleGFtcGxlIFwiYWRtaW4uZXhhbXBsZS5jb21cIiAoZm9yIGFkbWluQGV4YW1wbGUuY29tKVxuICAgKi9cbiAgcmVhZG9ubHkgZW1haWw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJpYWwgbnVtYmVyIGZvciB0aGlzIHpvbmVcbiAgICovXG4gIHJlYWRvbmx5IHNlcmlhbE51bWJlcj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHJlZnJlc2ggdGltZSBpbiBzZWNvbmRzXG4gICAqL1xuICByZWFkb25seSByZWZyZXNoVGltZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHJldHJ5IHRpbWUgaW4gc2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgcmV0cnlUaW1lPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhwaXJlIHRpbWUgaW4gc2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhwaXJlVGltZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gVFRMIGluIHNlY29uZHNcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1UVEw/OiBudW1iZXI7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUHVibGljIEROUyBTT0EgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zU29hUmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogU09BIHJlY29yZCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBzb2FSZWNvcmQ6IERuc1NvYVJlY29yZENvbmZpZztcbn1cblxuLyoqXG4gKiBBenVyZSBQdWJsaWMgRE5TIFNPQSBSZWNvcmQgaW1wbGVtZW50YXRpb25cbiAqXG4gKiBTT0EgcmVjb3JkcyBjb250YWluIGFkbWluaXN0cmF0aXZlIGluZm9ybWF0aW9uIGFib3V0IGEgRE5TIHpvbmUuXG4gKiBOb3RlOiBFYWNoIHpvbmUgYXV0b21hdGljYWxseSBoYXMgYW4gU09BIHJlY29yZDsgdGhpcyBpcyB0eXBpY2FsbHkgdXNlZCB0byB1cGRhdGUgaXQuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFVwZGF0ZSB0aGUgU09BIHJlY29yZDpcbiAqIGNvbnN0IHNvYVJlY29yZCA9IG5ldyBEbnNTb2FSZWNvcmQodGhpcywgXCJzb2EtcmVjb3JkXCIsIHtcbiAqICAgbmFtZTogXCJAXCIsXG4gKiAgIGRuc1pvbmVJZDogem9uZS5pZCxcbiAqICAgdHRsOiAzNjAwLFxuICogICBzb2FSZWNvcmQ6IHtcbiAqICAgICBlbWFpbDogXCJhZG1pbi5leGFtcGxlLmNvbVwiLFxuICogICAgIHJlZnJlc2hUaW1lOiAzNjAwLFxuICogICAgIHJldHJ5VGltZTogMzAwLFxuICogICAgIGV4cGlyZVRpbWU6IDI0MTkyMDAsXG4gKiAgICAgbWluaW11bVRUTDogMzAwLFxuICogICB9LFxuICogfSk7XG4gKlxuICogQHN0YWJpbGl0eSBzdGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIERuc1NvYVJlY29yZCBleHRlbmRzIEF6YXBpUmVzb3VyY2Uge1xuICBzdGF0aWMge1xuICAgIEF6YXBpUmVzb3VyY2UucmVnaXN0ZXJTY2hlbWFzKFxuICAgICAgRE5TX1NPQV9SRUNPUkRfVFlQRSxcbiAgICAgIEFMTF9ETlNfU09BX1JFQ09SRF9WRVJTSU9OUyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBEbnNTb2FSZWNvcmRQcm9wcztcbiAgcHVibGljIHJlYWRvbmx5IGlkT3V0cHV0OiBjZGt0bi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lT3V0cHV0OiBjZGt0bi5UZXJyYWZvcm1PdXRwdXQ7XG4gIHB1YmxpYyByZWFkb25seSBmcWRuT3V0cHV0OiBjZGt0bi5UZXJyYWZvcm1PdXRwdXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERuc1NvYVJlY29yZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5pZE91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJpZFwiLCB7XG4gICAgICB2YWx1ZTogdGhpcy5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBJRCBvZiB0aGUgU09BIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uYW1lT3V0cHV0ID0gbmV3IGNka3RuLlRlcnJhZm9ybU91dHB1dCh0aGlzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ubmFtZX1gLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIG5hbWUgb2YgdGhlIFNPQSBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMuZnFkbk91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJmcWRuXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm91dHB1dC5wcm9wZXJ0aWVzLmZxZG59YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBGUUROIG9mIHRoZSBTT0EgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmlkT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiaWRcIik7XG4gICAgdGhpcy5uYW1lT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwibmFtZVwiKTtcbiAgICB0aGlzLmZxZG5PdXRwdXQub3ZlcnJpZGVMb2dpY2FsSWQoXCJmcWRuXCIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVQYXJlbnRJZChwcm9wczogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zU29hUmVjb3JkUHJvcHM7XG4gICAgcmV0dXJuIHR5cGVkUHJvcHMuZG5zWm9uZUlkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmF1bHRWZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiMjAxOC0wNS0wMVwiO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc291cmNlVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBETlNfU09BX1JFQ09SRF9UWVBFO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFwaVNjaGVtYSgpOiBBcGlTY2hlbWEge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVTY2hlbWEoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXF1aXJlc0xvY2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdXBwb3J0c1RhZ3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVJlc291cmNlQm9keShwcm9wczogYW55KTogYW55IHtcbiAgICBjb25zdCB0eXBlZFByb3BzID0gcHJvcHMgYXMgRG5zU29hUmVjb3JkUHJvcHM7XG4gICAgY29uc3Qgc29hUmVjb3JkOiB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSA9IHt9O1xuXG4gICAgaWYgKHR5cGVkUHJvcHMuc29hUmVjb3JkLmhvc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc29hUmVjb3JkLmhvc3QgPSB0eXBlZFByb3BzLnNvYVJlY29yZC5ob3N0O1xuICAgIH1cbiAgICBpZiAodHlwZWRQcm9wcy5zb2FSZWNvcmQuZW1haWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc29hUmVjb3JkLmVtYWlsID0gdHlwZWRQcm9wcy5zb2FSZWNvcmQuZW1haWw7XG4gICAgfVxuICAgIGlmICh0eXBlZFByb3BzLnNvYVJlY29yZC5zZXJpYWxOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc29hUmVjb3JkLnNlcmlhbE51bWJlciA9IHR5cGVkUHJvcHMuc29hUmVjb3JkLnNlcmlhbE51bWJlcjtcbiAgICB9XG4gICAgaWYgKHR5cGVkUHJvcHMuc29hUmVjb3JkLnJlZnJlc2hUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNvYVJlY29yZC5yZWZyZXNoVGltZSA9IHR5cGVkUHJvcHMuc29hUmVjb3JkLnJlZnJlc2hUaW1lO1xuICAgIH1cbiAgICBpZiAodHlwZWRQcm9wcy5zb2FSZWNvcmQucmV0cnlUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNvYVJlY29yZC5yZXRyeVRpbWUgPSB0eXBlZFByb3BzLnNvYVJlY29yZC5yZXRyeVRpbWU7XG4gICAgfVxuICAgIGlmICh0eXBlZFByb3BzLnNvYVJlY29yZC5leHBpcmVUaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNvYVJlY29yZC5leHBpcmVUaW1lID0gdHlwZWRQcm9wcy5zb2FSZWNvcmQuZXhwaXJlVGltZTtcbiAgICB9XG4gICAgaWYgKHR5cGVkUHJvcHMuc29hUmVjb3JkLm1pbmltdW1UVEwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc29hUmVjb3JkLm1pbmltdW1UVEwgPSB0eXBlZFByb3BzLnNvYVJlY29yZC5taW5pbXVtVFRMO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0ge1xuICAgICAgVFRMOiB0eXBlZFByb3BzLnR0bCA/PyAzNjAwLFxuICAgICAgU09BUmVjb3JkOiBzb2FSZWNvcmQsXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHR5cGVkUHJvcHMubWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnRpZXMubWV0YWRhdGEgPSB0eXBlZFByb3BzLm1ldGFkYXRhO1xuICAgIH1cblxuICAgIHJldHVybiB7IHByb3BlcnRpZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEZRRE4gb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcHVibGljIGdldCBmcWRuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gO1xuICB9XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTUlYgUkVDT1JEXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEVudHJ5IGZvciBhbiBTUlYgcmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zU3J2UmVjb3JkRW50cnkge1xuICAvKipcbiAgICogVGhlIHByaW9yaXR5IG9mIHRoaXMgU1JWIHJlY29yZCAobG93ZXIgdmFsdWVzIGhhdmUgaGlnaGVyIHByaW9yaXR5KVxuICAgKi9cbiAgcmVhZG9ubHkgcHJpb3JpdHk6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHdlaWdodCBvZiB0aGlzIFNSViByZWNvcmQgKHVzZWQgZm9yIGxvYWQgYmFsYW5jaW5nIGFtb25nIHJlY29yZHMgd2l0aCBzYW1lIHByaW9yaXR5KVxuICAgKi9cbiAgcmVhZG9ubHkgd2VpZ2h0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBwb3J0IG51bWJlciBmb3IgdGhlIHNlcnZpY2VcbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHRhcmdldCBob3N0bmFtZSBwcm92aWRpbmcgdGhlIHNlcnZpY2VcbiAgICogQGV4YW1wbGUgXCJzaXBzZXJ2ZXIuZXhhbXBsZS5jb21cIlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUHVibGljIEROUyBTUlYgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zU3J2UmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgU1JWIHJlY29yZHMgd2l0aCBwcmlvcml0eSwgd2VpZ2h0LCBwb3J0LCBhbmQgdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSByZWNvcmRzOiBEbnNTcnZSZWNvcmRFbnRyeVtdO1xufVxuXG4vKipcbiAqIEF6dXJlIFB1YmxpYyBETlMgU1JWIFJlY29yZCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFNSViByZWNvcmRzIHNwZWNpZnkgdGhlIGxvY2F0aW9uIG9mIHNlcnZpY2VzIGxpa2UgU0lQLCBYTVBQLCBldGMuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhbiBTUlYgcmVjb3JkIGZvciBhIFNJUCBzZXJ2aWNlOlxuICogY29uc3Qgc3J2UmVjb3JkID0gbmV3IERuc1NydlJlY29yZCh0aGlzLCBcInNpcC1yZWNvcmRcIiwge1xuICogICBuYW1lOiBcIl9zaXAuX3RjcFwiLFxuICogICBkbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzYwMCxcbiAqICAgcmVjb3JkczogW1xuICogICAgIHsgcHJpb3JpdHk6IDEwLCB3ZWlnaHQ6IDYwLCBwb3J0OiA1MDYwLCB0YXJnZXQ6IFwic2lwc2VydmVyMS5leGFtcGxlLmNvbVwiIH0sXG4gKiAgICAgeyBwcmlvcml0eTogMTAsIHdlaWdodDogNDAsIHBvcnQ6IDUwNjAsIHRhcmdldDogXCJzaXBzZXJ2ZXIyLmV4YW1wbGUuY29tXCIgfSxcbiAqICAgXSxcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBEbnNTcnZSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIEROU19TUlZfUkVDT1JEX1RZUEUsXG4gICAgICBBTExfRE5TX1NSVl9SRUNPUkRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogRG5zU3J2UmVjb3JkUHJvcHM7XG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgZnFkbk91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEbnNTcnZSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdG4uVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFNSViBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBTUlYgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdG4uVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgU1JWIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5mcWRuT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiZnFkblwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvbHZlUGFyZW50SWQocHJvcHM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIERuc1NydlJlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLmRuc1pvbmVJZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMTgtMDUtMDFcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRE5TX1NSVl9SRUNPUkRfVFlQRTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIERuc1NydlJlY29yZFByb3BzO1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0ge1xuICAgICAgVFRMOiB0eXBlZFByb3BzLnR0bCA/PyAzNjAwLFxuICAgICAgU1JWUmVjb3JkczogdHlwZWRQcm9wcy5yZWNvcmRzLm1hcCgocikgPT4gKHtcbiAgICAgICAgcHJpb3JpdHk6IHIucHJpb3JpdHksXG4gICAgICAgIHdlaWdodDogci53ZWlnaHQsXG4gICAgICAgIHBvcnQ6IHIucG9ydCxcbiAgICAgICAgdGFyZ2V0OiByLnRhcmdldCxcbiAgICAgIH0pKSxcbiAgICB9O1xuXG4gICAgaWYgKHR5cGVkUHJvcHMubWV0YWRhdGEgJiYgT2JqZWN0LmtleXModHlwZWRQcm9wcy5tZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgcHJvcGVydGllcy5tZXRhZGF0YSA9IHR5cGVkUHJvcHMubWV0YWRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgRlFETiBvZiB0aGUgcmVjb3JkXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZxZG4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWA7XG4gIH1cbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFRYVCBSRUNPUkRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogRW50cnkgZm9yIGEgVFhUIHJlY29yZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERuc1R4dFJlY29yZEVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSB0ZXh0IHZhbHVlIG9mIHRoaXMgVFhUIHJlY29yZCAoYXJyYXkgb2Ygc3RyaW5ncywgZWFjaCB1cCB0byAyNTUgY2hhcnMpXG4gICAqIExvbmcgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IHNwbGl0IGludG8gbXVsdGlwbGUgc3RyaW5nc1xuICAgKiBAZXhhbXBsZSBbXCJ2PXNwZjEgaW5jbHVkZTpzcGYucHJvdGVjdGlvbi5vdXRsb29rLmNvbSAtYWxsXCJdXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgUHVibGljIEROUyBUWFQgUmVjb3JkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRG5zVHh0UmVjb3JkUHJvcHMgZXh0ZW5kcyBEbnNSZWNvcmRCYXNlUHJvcHMge1xuICAvKipcbiAgICogQXJyYXkgb2YgVFhUIHJlY29yZHMgd2l0aCBzdHJpbmcgdmFsdWVzXG4gICAqL1xuICByZWFkb25seSByZWNvcmRzOiBEbnNUeHRSZWNvcmRFbnRyeVtdO1xufVxuXG4vKipcbiAqIEF6dXJlIFB1YmxpYyBETlMgVFhUIFJlY29yZCBpbXBsZW1lbnRhdGlvblxuICpcbiAqIFRYVCByZWNvcmRzIHN0b3JlIGFyYml0cmFyeSB0ZXh0IGRhdGEsIGNvbW1vbmx5IHVzZWQgZm9yIFNQRiwgREtJTSwgZG9tYWluIHZlcmlmaWNhdGlvbiwgZXRjLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBUWFQgcmVjb3JkIGZvciBTUEY6XG4gKiBjb25zdCB0eHRSZWNvcmQgPSBuZXcgRG5zVHh0UmVjb3JkKHRoaXMsIFwic3BmLXJlY29yZFwiLCB7XG4gKiAgIG5hbWU6IFwiQFwiLFxuICogICBkbnNab25lSWQ6IHpvbmUuaWQsXG4gKiAgIHR0bDogMzYwMCxcbiAqICAgcmVjb3JkczogW1xuICogICAgIHsgdmFsdWU6IFtcInY9c3BmMSBpbmNsdWRlOnNwZi5wcm90ZWN0aW9uLm91dGxvb2suY29tIC1hbGxcIl0gfSxcbiAqICAgXSxcbiAqIH0pO1xuICpcbiAqIEBzdGFiaWxpdHkgc3RhYmxlXG4gKi9cbmV4cG9ydCBjbGFzcyBEbnNUeHRSZWNvcmQgZXh0ZW5kcyBBemFwaVJlc291cmNlIHtcbiAgc3RhdGljIHtcbiAgICBBemFwaVJlc291cmNlLnJlZ2lzdGVyU2NoZW1hcyhcbiAgICAgIEROU19UWFRfUkVDT1JEX1RZUEUsXG4gICAgICBBTExfRE5TX1RYVF9SRUNPUkRfVkVSU0lPTlMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogRG5zVHh0UmVjb3JkUHJvcHM7XG4gIHB1YmxpYyByZWFkb25seSBpZE91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZU91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuICBwdWJsaWMgcmVhZG9ubHkgZnFkbk91dHB1dDogY2RrdG4uVGVycmFmb3JtT3V0cHV0O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEbnNUeHRSZWNvcmRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMuaWRPdXRwdXQgPSBuZXcgY2RrdG4uVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiaWRcIiwge1xuICAgICAgdmFsdWU6IHRoaXMuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgSUQgb2YgdGhlIFRYVCBSZWNvcmRcIixcbiAgICB9KTtcblxuICAgIHRoaXMubmFtZU91dHB1dCA9IG5ldyBjZGt0bi5UZXJyYWZvcm1PdXRwdXQodGhpcywgXCJuYW1lXCIsIHtcbiAgICAgIHZhbHVlOiBgXFwkeyR7dGhpcy50ZXJyYWZvcm1SZXNvdXJjZS5mcW59Lm5hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlRoZSBuYW1lIG9mIHRoZSBUWFQgUmVjb3JkXCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmZxZG5PdXRwdXQgPSBuZXcgY2RrdG4uVGVycmFmb3JtT3V0cHV0KHRoaXMsIFwiZnFkblwiLCB7XG4gICAgICB2YWx1ZTogYFxcJHske3RoaXMudGVycmFmb3JtUmVzb3VyY2UuZnFufS5vdXRwdXQucHJvcGVydGllcy5mcWRufWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgRlFETiBvZiB0aGUgVFhUIFJlY29yZFwiLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pZE91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcImlkXCIpO1xuICAgIHRoaXMubmFtZU91dHB1dC5vdmVycmlkZUxvZ2ljYWxJZChcIm5hbWVcIik7XG4gICAgdGhpcy5mcWRuT3V0cHV0Lm92ZXJyaWRlTG9naWNhbElkKFwiZnFkblwiKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvbHZlUGFyZW50SWQocHJvcHM6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIERuc1R4dFJlY29yZFByb3BzO1xuICAgIHJldHVybiB0eXBlZFByb3BzLmRuc1pvbmVJZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWZhdWx0VmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjIwMTgtMDUtMDFcIjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNvdXJjZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRE5TX1RYVF9SRUNPUkRfVFlQRTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcGlTY2hlbWEoKTogQXBpU2NoZW1hIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlU2NoZW1hKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWlyZXNMb2NhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3VwcG9ydHNUYWdzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVSZXNvdXJjZUJvZHkocHJvcHM6IGFueSk6IGFueSB7XG4gICAgY29uc3QgdHlwZWRQcm9wcyA9IHByb3BzIGFzIERuc1R4dFJlY29yZFByb3BzO1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9ID0ge1xuICAgICAgVFRMOiB0eXBlZFByb3BzLnR0bCA/PyAzNjAwLFxuICAgICAgVFhUUmVjb3JkczogdHlwZWRQcm9wcy5yZWNvcmRzLm1hcCgocikgPT4gKHtcbiAgICAgICAgdmFsdWU6IHIudmFsdWUsXG4gICAgICB9KSksXG4gICAgfTtcblxuICAgIGlmICh0eXBlZFByb3BzLm1ldGFkYXRhICYmIE9iamVjdC5rZXlzKHR5cGVkUHJvcHMubWV0YWRhdGEpLmxlbmd0aCA+IDApIHtcbiAgICAgIHByb3BlcnRpZXMubWV0YWRhdGEgPSB0eXBlZFByb3BzLm1ldGFkYXRhO1xuICAgIH1cblxuICAgIHJldHVybiB7IHByb3BlcnRpZXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIEZRRE4gb2YgdGhlIHJlY29yZFxuICAgKi9cbiAgcHVibGljIGdldCBmcWRuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcXCR7JHt0aGlzLnRlcnJhZm9ybVJlc291cmNlLmZxbn0ub3V0cHV0LnByb3BlcnRpZXMuZnFkbn1gO1xuICB9XG59XG4iXX0=
|