From 8f581d3f173caf7cbfb906bf3031c5d153edc081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Mon, 31 Jul 2017 13:24:11 +0200 Subject: [PATCH 001/136] Added Service Fabric deployment scripts & docu --- deploy/az/servicefabric/readme.md | 24 + .../az/servicefabric/servicefabricdeploy.json | 590 ++++++++++++++++++ .../servicefabricdeploy.parameters.json | 66 ++ 3 files changed, 680 insertions(+) create mode 100644 deploy/az/servicefabric/readme.md create mode 100644 deploy/az/servicefabric/servicefabricdeploy.json create mode 100644 deploy/az/servicefabric/servicefabricdeploy.parameters.json diff --git a/deploy/az/servicefabric/readme.md b/deploy/az/servicefabric/readme.md new file mode 100644 index 000000000..8779931e2 --- /dev/null +++ b/deploy/az/servicefabric/readme.md @@ -0,0 +1,24 @@ +# Deploying Azure Service Fabric + +The ARM template `servicefabricdeploy.json` and its parameter file (`servicefabricdeploy.parameters.json`) are used to create a service fabric cluster environment. + +## Editing servicefabricdeploy.parameters.json file + +You can edit the `servicefabricdeploy.parameters.parameters.json` file to set your values, but is not needed. + +## Deploy the template + +Once parameter file is edited you can deploy it using [create-resources script](../readme.md). + +i. e. if you are in windows, to deploy sql databases in a new resourcegroup located in westus, go to `deploy\az` folder and type: + +``` +create-resources.cmd servicefabric\servicefabricdeploy newResourceGroup -c westus +``` +## Deploy eShopOnServiceFabric with Visual Studio. + +Alternatively, instead of using ARM templates, you can deploy eShop on service fabric directly by publishing the project eShopOnServiceFabric in eShopOnContainers-ServicesAndWebApps.sln with Visual Studio publish tool. + + + + diff --git a/deploy/az/servicefabric/servicefabricdeploy.json b/deploy/az/servicefabric/servicefabricdeploy.json new file mode 100644 index 000000000..09509d360 --- /dev/null +++ b/deploy/az/servicefabric/servicefabricdeploy.json @@ -0,0 +1,590 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterLocation": { + "type": "string", + "metadata": { + "description": "Location of the Cluster" + } + }, + "clusterName": { + "type": "string", + "defaultValue": "Cluster", + "metadata": { + "description": "Name of your cluster - Between 3 and 23 characters. Letters and numbers only" + } + }, + "nt0applicationStartPort": { + "type": "int", + "defaultValue": 20000 + }, + "nt0applicationEndPort": { + "type": "int", + "defaultValue": 30000 + }, + "nt0ephemeralStartPort": { + "type": "int", + "defaultValue": 49152 + }, + "nt0ephemeralEndPort": { + "type": "int", + "defaultValue": 65534 + }, + "nt0fabricTcpGatewayPort": { + "type": "int", + "defaultValue": 19000 + }, + "nt0fabricHttpGatewayPort": { + "type": "int", + "defaultValue": 19080 + }, + "nt0reverseProxyEndpointPort": { + "type": "int", + "defaultValue": 19081 + }, + "subnet0Name": { + "type": "string", + "defaultValue": "Subnet-0" + }, + "subnet0Prefix": { + "type": "string", + "defaultValue": "10.0.0.0/24" + }, + "computeLocation": { + "type": "string" + }, + "publicIPAddressName": { + "type": "string", + "defaultValue": "PublicIP-VM" + }, + "publicIPAddressType": { + "type": "string", + "allowedValues": [ + "Dynamic" + ], + "defaultValue": "Dynamic" + }, + "vmStorageAccountContainerName": { + "type": "string", + "defaultValue": "vhds" + }, + "adminUserName": { + "type": "string", + "defaultValue": "testadm", + "metadata": { + "description": "Remote desktop user Id" + } + }, + "adminPassword": { + "type": "securestring", + "metadata": { + "description": "Remote desktop user password. Must be a strong password" + } + }, + "virtualNetworkName": { + "type": "string", + "defaultValue": "VNet" + }, + "addressPrefix": { + "type": "string", + "defaultValue": "10.0.0.0/16" + }, + "dnsName": { + "type": "string" + }, + "nicName": { + "type": "string", + "defaultValue": "NIC" + }, + "lbName": { + "type": "string", + "defaultValue": "LoadBalancer" + }, + "lbIPName": { + "type": "string", + "defaultValue": "PublicIP-LB-FE" + }, + "overProvision": { + "type": "string", + "defaultValue": "false" + }, + "vmImagePublisher": { + "type": "string", + "defaultValue": "MicrosoftWindowsServer" + }, + "vmImageOffer": { + "type": "string", + "defaultValue": "WindowsServer" + }, + "vmImageSku": { + "type": "string", + "defaultValue": "2012-R2-Datacenter" + }, + "vmImageVersion": { + "type": "string", + "defaultValue": "latest" + }, + "storageAccountType": { + "type": "string", + "allowedValues": [ + "Standard_LRS", + "Standard_GRS" + ], + "defaultValue": "Standard_LRS", + "metadata": { + "description": "Replication option for the VM image storage account" + } + }, + "supportLogStorageAccountType": { + "type": "string", + "allowedValues": [ + "Standard_LRS", + "Standard_GRS" + ], + "defaultValue": "Standard_LRS", + "metadata": { + "description": "Replication option for the support log storage account" + } + }, + "supportLogStorageAccountName": { + "type": "string", + "defaultValue": "[toLower( concat('sflogs', uniqueString(resourceGroup().id),'2'))]", + "metadata": { + "description": "Name for the storage account that contains support logs from the cluster" + } + }, + "nt0InstanceCount": { + "type": "int", + "defaultValue": 1, + "metadata": { + "description": "Instance count for node type" + } + }, + "vmNodeType0Name": { + "type": "string", + "defaultValue": "primary", + "maxLength": 9 + }, + "vmNodeType0Size": { + "type": "string", + "defaultValue": "Standard_D1_v2" + }, + "SFReverseProxyPort": { + "type": "int", + "defaultValue": 19081, + "metadata": { + "description": "Endpoint for Service Fabric Reverse proxy" + } + } + }, + "variables": { + "vmssApiVersion": "2017-03-30", + "lbApiVersion": "2015-06-15", + "vNetApiVersion": "2015-06-15", + "storageApiVersion": "2016-01-01", + "publicIPApiVersion": "2015-06-15", + "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]", + "subnet0Ref": "[concat(variables('vnetID'),'/subnets/',parameters('subnet0Name'))]", + "lbID0": "[resourceId('Microsoft.Network/loadBalancers', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", + "lbIPConfig0": "[concat(variables('lbID0'),'/frontendIPConfigurations/LoadBalancerIPConfig')]", + "lbPoolID0": "[concat(variables('lbID0'),'/backendAddressPools/LoadBalancerBEAddressPool')]", + "lbProbeID0": "[concat(variables('lbID0'),'/probes/FabricGatewayProbe')]", + "lbHttpProbeID0": "[concat(variables('lbID0'),'/probes/FabricHttpGatewayProbe')]", + "lbNatPoolID0": "[concat(variables('lbID0'),'/inboundNatPools/LoadBalancerBEAddressNatPool')]", + "vmStorageAccountName0": "[toLower(concat(uniqueString(resourceGroup().id), '1', '0' ))]", + "uniqueStringArray0": [ + "[concat(variables('vmStorageAccountName0'), '0')]", + "[concat(variables('vmStorageAccountName0'), '1')]", + "[concat(variables('vmStorageAccountName0'), '2')]", + "[concat(variables('vmStorageAccountName0'), '3')]", + "[concat(variables('vmStorageAccountName0'), '4')]" + ] + }, + "resources": [ + { + "apiVersion": "[variables('storageApiVersion')]", + "type": "Microsoft.Storage/storageAccounts", + "name": "[parameters('supportLogStorageAccountName')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": {}, + "kind": "Storage", + "sku": { + "name": "[parameters('supportLogStorageAccountType')]" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('vNetApiVersion')]", + "type": "Microsoft.Network/virtualNetworks", + "name": "[parameters('virtualNetworkName')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": { + "addressSpace": { + "addressPrefixes": [ + "[parameters('addressPrefix')]" + ] + }, + "subnets": [ + { + "name": "[parameters('subnet0Name')]", + "properties": { + "addressPrefix": "[parameters('subnet0Prefix')]" + } + } + ] + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('publicIPApiVersion')]", + "type": "Microsoft.Network/publicIPAddresses", + "name": "[concat(parameters('lbIPName'),'-','0')]", + "location": "[parameters('computeLocation')]", + "properties": { + "dnsSettings": { + "domainNameLabel": "[parameters('dnsName')]" + }, + "publicIPAllocationMethod": "Dynamic" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('lbApiVersion')]", + "type": "Microsoft.Network/loadBalancers", + "name": "[concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name'))]", + "location": "[parameters('computeLocation')]", + "dependsOn": [ + "[concat('Microsoft.Network/publicIPAddresses/',concat(parameters('lbIPName'),'-','0'))]" + ], + "properties": { + "frontendIPConfigurations": [ + { + "name": "LoadBalancerIPConfig", + "properties": { + "publicIPAddress": { + "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPName'),'-','0'))]" + } + } + } + ], + "backendAddressPools": [ + { + "name": "LoadBalancerBEAddressPool", + "properties": {} + } + ], + "loadBalancingRules": [ + { + "name": "LBRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('nt0fabricTcpGatewayPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('nt0fabricTcpGatewayPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "LBHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('nt0fabricHttpGatewayPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('nt0fabricHttpGatewayPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "LBSFReverseProxyRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('SFReverseProxyPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('SFReverseProxyPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[concat(variables('lbID0'),'/probes/SFReverseProxyProbe')]" + }, + "protocol": "tcp" + } + } + ], + "probes": [ + { + "name": "FabricGatewayProbe", + "properties": { + "intervalInSeconds": 5, + "numberOfProbes": 2, + "port": "[parameters('nt0fabricTcpGatewayPort')]", + "protocol": "tcp" + } + }, + { + "name": "FabricHttpGatewayProbe", + "properties": { + "intervalInSeconds": 5, + "numberOfProbes": 2, + "port": "[parameters('nt0fabricHttpGatewayPort')]", + "protocol": "tcp" + } + }, + { + "name": "SFReverseProxyProbe", + "properties": { + "intervalInSeconds": 5, + "numberOfProbes": 2, + "port": "[parameters('SFReverseProxyPort')]", + "protocol": "tcp" + } + } + ], + "inboundNatPools": [ + { + "name": "LoadBalancerBEAddressNatPool", + "properties": { + "backendPort": "3389", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPortRangeEnd": "4500", + "frontendPortRangeStart": "3389", + "protocol": "tcp" + } + } + ] + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('storageApiVersion')]", + "type": "Microsoft.Storage/storageAccounts", + "name": "[variables('uniqueStringArray0')[copyIndex()]]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": {}, + "copy": { + "name": "storageLoop", + "count": 5 + }, + "kind": "Storage", + "sku": { + "name": "[parameters('storageAccountType')]" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('vmssApiVersion')]", + "type": "Microsoft.Compute/virtualMachineScaleSets", + "name": "[parameters('vmNodeType0Name')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [ + "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]", + "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[0])]", + "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[1])]", + "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[2])]", + "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[3])]", + "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[4])]", + "[concat('Microsoft.Network/loadBalancers/', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", + "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]" + ], + "properties": { + "overprovision": "[parameters('overProvision')]", + "upgradePolicy": { + "mode": "Automatic" + }, + "virtualMachineProfile": { + "extensionProfile": { + "extensions": [ + { + "name": "[concat(parameters('vmNodeType0Name'),'_ServiceFabricNode')]", + "properties": { + "type": "ServiceFabricNode", + "autoUpgradeMinorVersion": true, + "protectedSettings": { + "StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key1]", + "StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key2]" + }, + "publisher": "Microsoft.Azure.ServiceFabric", + "settings": { + "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]", + "nodeTypeRef": "[parameters('vmNodeType0Name')]", + "dataPath": "D:\\\\SvcFab", + "durabilityLevel": "Bronze", + "enableParallelJobs": true, + "nicPrefixOverride": "[parameters('subnet0Prefix')]" + }, + "typeHandlerVersion": "1.0" + } + } + ] + }, + "networkProfile": { + "networkInterfaceConfigurations": [ + { + "name": "[concat(parameters('nicName'), '-0')]", + "properties": { + "ipConfigurations": [ + { + "name": "[concat(parameters('nicName'),'-',0)]", + "properties": { + "loadBalancerBackendAddressPools": [ + { + "id": "[variables('lbPoolID0')]" + } + ], + "loadBalancerInboundNatPools": [ + { + "id": "[variables('lbNatPoolID0')]" + } + ], + "subnet": { + "id": "[variables('subnet0Ref')]" + } + } + } + ], + "primary": true + } + } + ] + }, + "osProfile": { + "adminPassword": "[parameters('adminPassword')]", + "adminUsername": "[parameters('adminUsername')]", + "computernamePrefix": "[parameters('vmNodeType0Name')]" + }, + "storageProfile": { + "imageReference": { + "publisher": "[parameters('vmImagePublisher')]", + "offer": "[parameters('vmImageOffer')]", + "sku": "[parameters('vmImageSku')]", + "version": "[parameters('vmImageVersion')]" + }, + "osDisk": { + "caching": "ReadOnly", + "createOption": "FromImage", + "vhdContainers": [ + "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[0]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]", + "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[1]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]", + "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[2]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]", + "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[3]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]", + "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[4]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]" + ], + "name": "vmssosdisk" + } + } + } + }, + "sku": { + "name": "[parameters('vmNodeType0Size')]", + "capacity": "[parameters('nt0InstanceCount')]", + "tier": "Standard" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "2017-07-01-preview", + "type": "Microsoft.ServiceFabric/clusters", + "name": "[parameters('clusterName')]", + "location": "[parameters('clusterLocation')]", + "dependsOn": [ + "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]" + ], + "properties": { + "clientCertificateCommonNames": [], + "clientCertificateThumbprints": [], + "clusterCodeVersion": "5.6.231.9494", + "clusterState": "Default", + "diagnosticsStorageAccountConfig": { + "blobEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.blob]", + "protectedAccountKeyName": "StorageAccountKey1", + "queueEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.queue]", + "storageAccountName": "[parameters('supportLogStorageAccountName')]", + "tableEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.table]" + }, + "fabricSettings": [], + "addonFeatures": [ + "DnsService" + ], + "managementEndpoint": "[concat('http://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]", + "nodeTypes": [ + { + "name": "[parameters('vmNodeType0Name')]", + "applicationPorts": { + "endPort": "[parameters('nt0applicationEndPort')]", + "startPort": "[parameters('nt0applicationStartPort')]" + }, + "clientConnectionEndpointPort": "[parameters('nt0fabricTcpGatewayPort')]", + "durabilityLevel": "Bronze", + "ephemeralPorts": { + "endPort": "[parameters('nt0ephemeralEndPort')]", + "startPort": "[parameters('nt0ephemeralStartPort')]" + }, + "httpGatewayEndpointPort": "[parameters('nt0fabricHttpGatewayPort')]", + "isPrimary": true, + "reverseProxyEndpointPort": "[parameters('nt0reverseProxyEndpointPort')]", + "vmInstanceCount": "[parameters('nt0InstanceCount')]" + } + ], + "provisioningState": "Default", + "reliabilityLevel": "None", + "upgradeMode": "Manual", + "vmImage": "Windows" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + } + ], + "outputs": { + "clusterProperties": { + "value": "[reference(parameters('clusterName'))]", + "type": "object" + } + } +} \ No newline at end of file diff --git a/deploy/az/servicefabric/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/servicefabricdeploy.parameters.json new file mode 100644 index 000000000..74f6acaae --- /dev/null +++ b/deploy/az/servicefabric/servicefabricdeploy.parameters.json @@ -0,0 +1,66 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "value": "eshoponservicefabric" + }, + "clusterLocation": { + "value": "westeurope" + }, + "computeLocation": { + "value": "westeurope" + }, + "adminUserName": { + "value": "eshop" + }, + "adminPassword": { + "value": "YourPassword" + }, + "nicName": { + "value": "NIC-eshoponservicefabric" + }, + "publicIPAddressName": { + "value": "eshoponservicefabric-PubIP" + }, + "dnsName": { + "value": "eshoponservicefabric" + }, + "virtualNetworkName": { + "value": "VNet-eshoponservicefabric" + }, + "lbName": { + "value": "LB-eshoponservicefabric" + }, + "lbIPName": { + "value": "LBIP-eshoponservicefabric" + }, + "supportLogStorageAccountName": { + "value": "sflogseshoponservice3296" + }, + "vmImageSku": { + "value": "2016-Datacenter-with-Containers" + }, + "nt0ephemeralStartPort": { + "value": 49152 + }, + "nt0ephemeralEndPort": { + "value": 65534 + }, + "nt0applicationStartPort": { + "value": 20000 + }, + "nt0applicationEndPort": { + "value": 30000 + }, + "nt0fabricTcpGatewayPort": { + "value": 19000 + }, + "nt0fabricHttpGatewayPort": { + "value": 19080 + }, + "nt0reverseProxyEndpointPort": { + "value": 19081 + } + } +} \ No newline at end of file From f57a0b0b4b5dde80ba9bf614cce115976b405e16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Mon, 31 Jul 2017 17:39:19 +0200 Subject: [PATCH 002/136] Added Service Fabric project --- .../ApplicationManifest.xml | 139 ++++++++++ .../BasketApiPkg/Config/Settings.xml | 9 + .../BasketApiPkg/ServiceManifest.xml | 44 +++ .../CatalogApiPkg/Config/Settings.xml | 9 + .../CatalogApiPkg/ServiceManifest.xml | 44 +++ .../IdentityApiPkg/Config/Settings.xml | 9 + .../IdentityApiPkg/ServiceManifest.xml | 44 +++ .../OrderingApiPkg/Config/Settings.xml | 9 + .../OrderingApiPkg/ServiceManifest.xml | 43 +++ .../SqlServerPkg/Config/Settings.xml | 9 + .../SqlServerPkg/ServiceManifest.xml | 40 +++ .../WebMVCPkg/Config/Settings.xml | 9 + .../WebMVCPkg/ServiceManifest.xml | 44 +++ .../WebSPAPkg/Config/Settings.xml | 9 + .../WebSPAPkg/ServiceManifest.xml | 45 +++ .../WebStatusPkg/Config/Settings.xml | 9 + .../WebStatusPkg/ServiceManifest.xml | 46 ++++ .../ApplicationParameters/Cloud.xml | 13 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../PublishProfiles/Cloud.xml | 25 ++ .../PublishProfiles/Local.1Node.xml | 11 + .../PublishProfiles/Local.5Node.xml | 11 + .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../eShopOnServiceFabric.sfproj | 38 +++ .../eShopOnServiceFabric/packages.config | 4 + .../azurefunctions/azurefunctionsdeploy.json | 24 +- eShopOnContainers-ServicesAndWebApps.sln | 59 +++- 28 files changed, 992 insertions(+), 22 deletions(-) create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj create mode 100644 ServiceFabric/eShopOnServiceFabric/packages.config diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..d617d7453 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..c66853133 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + eshop/basket.api-win + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..6b9853f8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + eshop/catalog.api-win + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..f56e36e80 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + eshop/identity.api-win + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..cd6ab22a3 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + eshop/ordering.api-win + + + + + + + + + + + + + + + + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml new file mode 100644 index 000000000..27b25bcbf --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + microsoft/mssql-server-windows + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml new file mode 100644 index 000000000..f60a71d19 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + eshop/webmvc-win + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml new file mode 100644 index 000000000..e6267c2ef --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + eshop/webspa-win + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml new file mode 100644 index 000000000..e8ed4dbe5 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + eshop/webstatus-win + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..12f32c13b --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..e579cbf89 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..e579cbf89 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..1301dd83f --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj b/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj new file mode 100644 index 000000000..d5c721633 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj @@ -0,0 +1,38 @@ + + + + + 983eab84-65c5-4793-a300-08f97c791a15 + 1.6 + 1.5 + + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + diff --git a/ServiceFabric/eShopOnServiceFabric/packages.config b/ServiceFabric/eShopOnServiceFabric/packages.config new file mode 100644 index 000000000..c5f59e48e --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/deploy/az/azurefunctions/azurefunctionsdeploy.json b/deploy/az/azurefunctions/azurefunctionsdeploy.json index 4143d73e5..e3f25f430 100644 --- a/deploy/az/azurefunctions/azurefunctionsdeploy.json +++ b/deploy/az/azurefunctions/azurefunctionsdeploy.json @@ -6,7 +6,8 @@ "type": "string", "metadata": { "description": "Name of the Azure Functions namespace" - } + }, + "defaultValue": "mktfunctionsdemo" } }, "variables": { @@ -17,26 +18,7 @@ "ServerFarmPlan": "[concat(trim(variables('location')), 'Plan')]", "StorageAccounts": "[concat(variables('SitesEshopfunctionsName'), 'st')]" }, - "resources": [ - { - "type": "Microsoft.DocumentDB/databaseAccounts", - "kind": "GlobalDocumentDB", - "name": "[variables('EshopAccountsDatabase')]", - "apiVersion": "2015-04-08", - "location": "[variables('Location')]", - "tags": {}, - "scale": null, - "properties": { - "databaseAccountOfferType": "Standard", - "consistencyPolicy": { - "defaultConsistencyLevel": "Session", - "maxIntervalInSeconds": 5, - "maxStalenessPrefix": 100 - }, - "name": null - }, - "dependsOn": [] - }, + "resources": [ { "type": "Microsoft.Storage/storageAccounts", "sku": { diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln index 9dd6308a4..01ea95a22 100644 --- a/eShopOnContainers-ServicesAndWebApps.sln +++ b/eShopOnContainers-ServicesAndWebApps.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26430.6 +VisualStudioVersion = 15.0.26430.14 MinimumVisualStudioVersion = 10.0.40219.1 Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}" EndProject @@ -101,6 +101,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Health EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LoadTest", "test\Services\LoadTest\LoadTest.csproj", "{969E793C-C413-490E-9C9D-B2B46DA5AF32}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ServiceFabric", "ServiceFabric", "{0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8}" +EndProject +Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "eShopOnServiceFabric", "ServiceFabric\eShopOnServiceFabric\eShopOnServiceFabric.sfproj", "{983EAB84-65C5-4793-A300-08F97C791A15}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Ad-Hoc|Any CPU = Ad-Hoc|Any CPU @@ -1411,6 +1415,58 @@ Global {969E793C-C413-490E-9C9D-B2B46DA5AF32}.Release|x64.Build.0 = Release|Any CPU {969E793C-C413-490E-9C9D-B2B46DA5AF32}.Release|x86.ActiveCfg = Release|Any CPU {969E793C-C413-490E-9C9D-B2B46DA5AF32}.Release|x86.Build.0 = Release|Any CPU + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|Any CPU.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|ARM.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|ARM.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|ARM.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|iPhone.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|x64.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|x64.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|x64.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|x86.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|x86.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|x86.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|Any CPU.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|Any CPU.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|Any CPU.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|ARM.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|ARM.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|ARM.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|iPhone.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|iPhone.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|iPhone.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|iPhoneSimulator.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|x64.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|x64.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|x64.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|x86.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|x86.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|x86.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|Any CPU.ActiveCfg = Debug|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|ARM.ActiveCfg = Debug|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|iPhone.ActiveCfg = Debug|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|x64.ActiveCfg = Debug|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|x64.Build.0 = Debug|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|x64.Deploy.0 = Debug|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|x86.ActiveCfg = Debug|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Release|Any CPU.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Release|ARM.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Release|iPhone.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Release|iPhoneSimulator.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Release|x64.ActiveCfg = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Release|x64.Build.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Release|x64.Deploy.0 = Release|x64 + {983EAB84-65C5-4793-A300-08F97C791A15}.Release|x86.ActiveCfg = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1459,5 +1515,6 @@ Global {69AF10D3-AA76-4FF7-B187-EC7E8CC5F5B8} = {807BB76E-B2BB-47A2-A57B-3D1B20FF5E7F} {768C887F-C229-4B94-ACD8-0C7F65686524} = {A81ECBC2-6B00-4DCD-8388-469174033379} {969E793C-C413-490E-9C9D-B2B46DA5AF32} = {EF0337F2-ED00-4643-89FD-EE10863F1870} + {983EAB84-65C5-4793-A300-08F97C791A15} = {0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8} EndGlobalSection EndGlobal From 40ae2efd3cfbd5ac3dc78ca5dd0e89668896bcb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Tue, 1 Aug 2017 08:43:14 +0200 Subject: [PATCH 003/136] Update sfproj --- .../eShopOnServiceFabric.sfproj | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj b/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj index d5c721633..4f2e288a3 100644 --- a/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj +++ b/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj @@ -1,12 +1,11 @@  - - + + 983eab84-65c5-4793-a300-08f97c791a15 1.6 1.5 - Debug @@ -17,22 +16,25 @@ x64 - + - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - - + + + + + + + \ No newline at end of file From dabc374ff3639f861edc119adecce62773d5e688 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Wed, 2 Aug 2017 15:16:28 +0200 Subject: [PATCH 004/136] Moved SF ARM templates to WindowsContainers directory --- deploy/az/servicefabric/{ => WindowsContainers}/readme.md | 6 +++--- .../{ => WindowsContainers}/servicefabricdeploy.json | 0 .../servicefabricdeploy.parameters.json | 0 3 files changed, 3 insertions(+), 3 deletions(-) rename deploy/az/servicefabric/{ => WindowsContainers}/readme.md (74%) rename deploy/az/servicefabric/{ => WindowsContainers}/servicefabricdeploy.json (100%) rename deploy/az/servicefabric/{ => WindowsContainers}/servicefabricdeploy.parameters.json (100%) diff --git a/deploy/az/servicefabric/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md similarity index 74% rename from deploy/az/servicefabric/readme.md rename to deploy/az/servicefabric/WindowsContainers/readme.md index 8779931e2..2e7f09c4c 100644 --- a/deploy/az/servicefabric/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -1,10 +1,10 @@ # Deploying Azure Service Fabric -The ARM template `servicefabricdeploy.json` and its parameter file (`servicefabricdeploy.parameters.json`) are used to create a service fabric cluster environment. +The ARM template `servicefabricdeploy.json` and its parameter file (`servicefabricdeploy.parameters.json`) are used to create a service fabric cluster environment for windows containers. ## Editing servicefabricdeploy.parameters.json file -You can edit the `servicefabricdeploy.parameters.parameters.json` file to set your values, but is not needed. +You can edit the `servicefabricdeploy.parameters.json` file to set your values, but is not needed. ## Deploy the template @@ -13,7 +13,7 @@ Once parameter file is edited you can deploy it using [create-resources script]( i. e. if you are in windows, to deploy sql databases in a new resourcegroup located in westus, go to `deploy\az` folder and type: ``` -create-resources.cmd servicefabric\servicefabricdeploy newResourceGroup -c westus +create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploy newResourceGroup -c westus ``` ## Deploy eShopOnServiceFabric with Visual Studio. diff --git a/deploy/az/servicefabric/servicefabricdeploy.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json similarity index 100% rename from deploy/az/servicefabric/servicefabricdeploy.json rename to deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json diff --git a/deploy/az/servicefabric/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json similarity index 100% rename from deploy/az/servicefabric/servicefabricdeploy.parameters.json rename to deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json From ce1234f0e0a5aafde433d3ae349bfc055b4ad163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Thu, 3 Aug 2017 08:55:15 +0200 Subject: [PATCH 005/136] Updated sfproj --- .../eShopOnServiceFabric.sfproj | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj b/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj index 4f2e288a3..4e185ec14 100644 --- a/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj +++ b/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj @@ -27,6 +27,23 @@ + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets From 62ea7064c2ef2a0312e9365de2d44c51f0a68e9e Mon Sep 17 00:00:00 2001 From: Egor Grishechko Date: Sat, 2 Sep 2017 20:02:55 +0300 Subject: [PATCH 006/136] Fix "DRY up RedisBasketRepository" https://github.com/dotnet-architecture/eShopOnContainers/issues/62 --- ...ductPriceChangedIntegrationEventHandler.cs | 2 +- .../Basket.API/Model/IBasketRepository.cs | 2 +- .../Basket.API/Model/RedisBasketRepository.cs | 62 +++++-------------- .../Basket/RedisBasketRepositoryTests.cs | 9 +-- 4 files changed, 21 insertions(+), 54 deletions(-) diff --git a/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/ProductPriceChangedIntegrationEventHandler.cs b/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/ProductPriceChangedIntegrationEventHandler.cs index 88244404a..76a78bad7 100644 --- a/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/ProductPriceChangedIntegrationEventHandler.cs +++ b/src/Services/Basket/Basket.API/IntegrationEvents/EventHandling/ProductPriceChangedIntegrationEventHandler.cs @@ -18,7 +18,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.IntegrationEvents.Even public async Task Handle(ProductPriceChangedIntegrationEvent @event) { - var userIds = await _repository.GetUsersAsync(); + var userIds = _repository.GetUsers(); foreach (var id in userIds) { diff --git a/src/Services/Basket/Basket.API/Model/IBasketRepository.cs b/src/Services/Basket/Basket.API/Model/IBasketRepository.cs index fcdc69faa..850b5b637 100644 --- a/src/Services/Basket/Basket.API/Model/IBasketRepository.cs +++ b/src/Services/Basket/Basket.API/Model/IBasketRepository.cs @@ -6,7 +6,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Model public interface IBasketRepository { Task GetBasketAsync(string customerId); - Task> GetUsersAsync(); + IEnumerable GetUsers(); Task UpdateBasketAsync(CustomerBasket basket); Task DeleteBasketAsync(string id); } diff --git a/src/Services/Basket/Basket.API/Model/RedisBasketRepository.cs b/src/Services/Basket/Basket.API/Model/RedisBasketRepository.cs index e896c0773..f748d2c25 100644 --- a/src/Services/Basket/Basket.API/Model/RedisBasketRepository.cs +++ b/src/Services/Basket/Basket.API/Model/RedisBasketRepository.cs @@ -1,5 +1,4 @@ using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; using Newtonsoft.Json; using StackExchange.Redis; using System.Collections.Generic; @@ -10,40 +9,33 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Model { public class RedisBasketRepository : IBasketRepository { - private ILogger _logger; - private BasketSettings _settings; + private readonly ILogger _logger; - private ConnectionMultiplexer _redis; + private readonly ConnectionMultiplexer _redis; + private readonly IDatabase _database; - public RedisBasketRepository(IOptionsSnapshot options, ILoggerFactory loggerFactory) + public RedisBasketRepository(ILoggerFactory loggerFactory, ConnectionMultiplexer redis) { - _settings = options.Value; _logger = loggerFactory.CreateLogger(); + _redis = redis; + _database = redis.GetDatabase(); } public async Task DeleteBasketAsync(string id) { - var database = await GetDatabase(); - return await database.KeyDeleteAsync(id.ToString()); + return await _database.KeyDeleteAsync(id); } - public async Task> GetUsersAsync() + public IEnumerable GetUsers() { - var server = await GetServer(); - - IEnumerable data = server.Keys(); - if (data == null) - { - return null; - } - return data.Select(k => k.ToString()); + var server = GetServer(); + var data = server.Keys(); + return data?.Select(k => k.ToString()); } public async Task GetBasketAsync(string customerId) { - var database = await GetDatabase(); - - var data = await database.StringGetAsync(customerId.ToString()); + var data = await _database.StringGetAsync(customerId); if (data.IsNullOrEmpty) { return null; @@ -54,9 +46,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Model public async Task UpdateBasketAsync(CustomerBasket basket) { - var database = await GetDatabase(); - - var created = await database.StringSetAsync(basket.BuyerId, JsonConvert.SerializeObject(basket)); + var created = await _database.StringSetAsync(basket.BuyerId, JsonConvert.SerializeObject(basket)); if (!created) { _logger.LogInformation("Problem occur persisting the item."); @@ -68,34 +58,10 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Model return await GetBasketAsync(basket.BuyerId); } - private async Task GetDatabase() - { - if (_redis == null) - { - await ConnectToRedisAsync(); - } - - return _redis.GetDatabase(); - } - - private async Task GetServer() + private IServer GetServer() { - if (_redis == null) - { - await ConnectToRedisAsync(); - } var endpoint = _redis.GetEndPoints(); - return _redis.GetServer(endpoint.First()); } - - private async Task ConnectToRedisAsync() - { - var configuration = ConfigurationOptions.Parse(_settings.ConnectionString, true); - configuration.ResolveDns = true; - - _logger.LogInformation($"Connecting to database {configuration.SslHost}."); - _redis = await ConnectionMultiplexer.ConnectAsync(configuration); - } } } diff --git a/test/Services/IntegrationTests/Services/Basket/RedisBasketRepositoryTests.cs b/test/Services/IntegrationTests/Services/Basket/RedisBasketRepositoryTests.cs index aa763e4bb..5bc9240e1 100644 --- a/test/Services/IntegrationTests/Services/Basket/RedisBasketRepositoryTests.cs +++ b/test/Services/IntegrationTests/Services/Basket/RedisBasketRepositoryTests.cs @@ -1,4 +1,6 @@  +using StackExchange.Redis; + namespace IntegrationTests.Services.Basket { using Microsoft.eShopOnContainers.Services.Basket.API; @@ -57,10 +59,9 @@ namespace IntegrationTests.Services.Basket RedisBasketRepository BuildBasketRepository() { var loggerFactory = new LoggerFactory(); - var basketSettings = new BasketSettings() { ConnectionString = "127.0.0.1" }; - _optionsMock.Setup(x => x.Value).Returns(basketSettings); - - return new RedisBasketRepository(_optionsMock.Object, loggerFactory); + var configuration = ConfigurationOptions.Parse("127.0.0.1", true); + configuration.ResolveDns = true; + return new RedisBasketRepository(loggerFactory, ConnectionMultiplexer.Connect(configuration)); } List BuildBasketItems() From 03e4559b30f0885fcc3a037c01940b2c4d36c003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Wed, 6 Sep 2017 15:23:14 +0200 Subject: [PATCH 007/136] Created last services added to eShop Updated with latest configurations --- .../ApplicationManifest.xml | 93 ++++++++++++++++++- .../BasketApiPkg/ServiceManifest.xml | 13 ++- .../BasketDataPkg/Config/Settings.xml | 9 ++ .../BasketDataPkg/ServiceManifest.xml | 41 ++++++++ .../CatalogApiPkg/ServiceManifest.xml | 14 ++- .../IdentityApiPkg/ServiceManifest.xml | 15 ++- .../LocationsApiPkg/Config/Settings.xml | 9 ++ .../LocationsApiPkg/ServiceManifest.xml | 48 ++++++++++ .../MarketingApiPkg/Config/Settings.xml | 9 ++ .../MarketingApiPkg/ServiceManifest.xml | 52 +++++++++++ .../MongoDBPkg/Config/Settings.xml | 9 ++ .../MongoDBPkg/ServiceManifest.xml | 41 ++++++++ .../OrderingApiPkg/ServiceManifest.xml | 15 ++- .../PaymentApiPkg/Config/Settings.xml | 9 ++ .../PaymentApiPkg/ServiceManifest.xml | 44 +++++++++ .../RabbitMQPkg/Config/Settings.xml | 9 ++ .../RabbitMQPkg/ServiceManifest.xml | 40 ++++++++ .../SqlServerPkg/ServiceManifest.xml | 2 +- .../WebMVCPkg/ServiceManifest.xml | 9 +- .../WebSPAPkg/ServiceManifest.xml | 14 ++- .../WebStatusPkg/ServiceManifest.xml | 14 +-- .../ApplicationParameters/Cloud.xml | 7 ++ .../eShopOnServiceFabric.sfproj | 14 +++ eShopOnContainers-ServicesAndWebApps.sln | 2 +- src/Web/WebMVC/WebMVC.csproj | 1 + 25 files changed, 498 insertions(+), 35 deletions(-) create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml create mode 100644 ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml index d617d7453..533674d5d 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -5,7 +5,13 @@ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - + + + + + + + @@ -17,6 +23,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -95,11 +155,42 @@ ServiceFabric PowerShell module. The attribute ServiceTypeName below must match the name defined in the imported ServiceManifest.xml file. --> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml index c66853133..df7b0cda9 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml @@ -22,10 +22,13 @@ - - - - + + + + + + + @@ -41,4 +44,4 @@ - \ No newline at end of file + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml new file mode 100644 index 000000000..ea9deb355 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + redis:nanoserver + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml index 6b9853f8a..2036ae14d 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml @@ -22,10 +22,16 @@ - - - - + + + + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml index f56e36e80..ae0a51b29 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml @@ -22,10 +22,15 @@ - - - - + + + + + + + + + @@ -38,7 +43,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..f93ea0c1e --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + eshop/locations.api-win + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..b9677f96b --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + eshop/marketing.api-win + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml new file mode 100644 index 000000000..aba3ba1ec --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + mongo:windowsservercore + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml index cd6ab22a3..7488b7473 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml @@ -22,9 +22,16 @@ - - - + + + + + + + + + + @@ -37,7 +44,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..dbf0e4d81 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + eshop/payment.api-win + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml new file mode 100644 index 000000000..0edd5b431 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + spring2/rabbitmq + + + + + + + + + + + + + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml index 27b25bcbf..676cf7b6d 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - microsoft/mssql-server-windows + microsoft/mssql-server-windows-developer diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml index f60a71d19..7c8a341ed 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml @@ -22,10 +22,11 @@ - - - - + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml index e6267c2ef..942b5207b 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml @@ -22,11 +22,17 @@ - - - - + + + + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml index e8ed4dbe5..ebd6b463a 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml @@ -22,12 +22,14 @@ - - - - - - + + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml index 12f32c13b..471bd22d9 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml @@ -1,6 +1,13 @@  + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj b/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj index 4e185ec14..cb52adafc 100644 --- a/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj +++ b/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj @@ -30,12 +30,26 @@ + + + + + + + + + + + + + + diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln index a8a6e7ace..3d1072c76 100644 --- a/eShopOnContainers-ServicesAndWebApps.sln +++ b/eShopOnContainers-ServicesAndWebApps.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.8 +VisualStudioVersion = 15.0.26730.12 MinimumVisualStudioVersion = 10.0.40219.1 Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}" EndProject diff --git a/src/Web/WebMVC/WebMVC.csproj b/src/Web/WebMVC/WebMVC.csproj index 5e73cdfda..5325dc942 100644 --- a/src/Web/WebMVC/WebMVC.csproj +++ b/src/Web/WebMVC/WebMVC.csproj @@ -37,6 +37,7 @@ + From d00777008ce8888831ce8b742e1e12cc3874fe6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Wed, 6 Sep 2017 16:00:48 +0200 Subject: [PATCH 008/136] Update ARM template --- .../servicefabricdeploy.json | 136 ++++++++++++------ .../servicefabricdeploy.parameters.json | 17 ++- 2 files changed, 104 insertions(+), 49 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json index 09509d360..ee00f2600 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json @@ -154,6 +154,24 @@ "description": "Name for the storage account that contains support logs from the cluster" } }, + "applicationDiagnosticsStorageAccountType": { + "type": "string", + "allowedValues": [ + "Standard_LRS", + "Standard_GRS" + ], + "defaultValue": "Standard_LRS", + "metadata": { + "description": "Replication option for the application diagnostics storage account" + } + }, + "applicationDiagnosticsStorageAccountName": { + "type": "string", + "defaultValue": "[toLower(concat(uniqueString(resourceGroup().id), '3' ))]", + "metadata": { + "description": "Name for the storage account that contains application diagnostics data from the cluster" + } + }, "nt0InstanceCount": { "type": "int", "defaultValue": 1, @@ -168,14 +186,7 @@ }, "vmNodeType0Size": { "type": "string", - "defaultValue": "Standard_D1_v2" - }, - "SFReverseProxyPort": { - "type": "int", - "defaultValue": 19081, - "metadata": { - "description": "Endpoint for Service Fabric Reverse proxy" - } + "defaultValue": "Standard_D2_v2" } }, "variables": { @@ -218,6 +229,22 @@ "clusterName": "[parameters('clusterName')]" } }, + { + "apiVersion": "[variables('storageApiVersion')]", + "type": "Microsoft.Storage/storageAccounts", + "name": "[parameters('applicationDiagnosticsStorageAccountName')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": {}, + "kind": "Storage", + "sku": { + "name": "[parameters('applicationDiagnosticsStorageAccountType')]" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, { "apiVersion": "[variables('vNetApiVersion')]", "type": "Microsoft.Network/virtualNetworks", @@ -323,25 +350,6 @@ }, "protocol": "tcp" } - }, - { - "name": "LBSFReverseProxyRule", - "properties": { - "backendAddressPool": { - "id": "[variables('lbPoolID0')]" - }, - "backendPort": "[parameters('SFReverseProxyPort')]", - "enableFloatingIP": "false", - "frontendIPConfiguration": { - "id": "[variables('lbIPConfig0')]" - }, - "frontendPort": "[parameters('SFReverseProxyPort')]", - "idleTimeoutInMinutes": "5", - "probe": { - "id": "[concat(variables('lbID0'),'/probes/SFReverseProxyProbe')]" - }, - "protocol": "tcp" - } } ], "probes": [ @@ -362,16 +370,7 @@ "port": "[parameters('nt0fabricHttpGatewayPort')]", "protocol": "tcp" } - }, - { - "name": "SFReverseProxyProbe", - "properties": { - "intervalInSeconds": 5, - "numberOfProbes": 2, - "port": "[parameters('SFReverseProxyPort')]", - "protocol": "tcp" - } - } + } ], "inboundNatPools": [ { @@ -426,7 +425,8 @@ "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[3])]", "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[4])]", "[concat('Microsoft.Network/loadBalancers/', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", - "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]" + "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]", + "[concat('Microsoft.Storage/storageAccounts/', parameters('applicationDiagnosticsStorageAccountName'))]" ], "properties": { "overprovision": "[parameters('overProvision')]", @@ -456,6 +456,58 @@ }, "typeHandlerVersion": "1.0" } + }, + { + "name": "[concat('VMDiagnosticsVmExt','_vmNodeType0Name')]", + "properties": { + "type": "IaaSDiagnostics", + "autoUpgradeMinorVersion": true, + "protectedSettings": { + "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]", + "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]", + "storageAccountEndPoint": "https://core.windows.net/" + }, + "publisher": "Microsoft.Azure.Diagnostics", + "settings": { + "WadCfg": { + "DiagnosticMonitorConfiguration": { + "overallQuotaInMB": "50000", + "EtwProviders": { + "EtwEventSourceProviderConfiguration": [ + { + "provider": "Microsoft-ServiceFabric-Actors", + "scheduledTransferKeywordFilter": "1", + "scheduledTransferPeriod": "PT5M", + "DefaultEvents": { + "eventDestination": "ServiceFabricReliableActorEventTable" + } + }, + { + "provider": "Microsoft-ServiceFabric-Services", + "scheduledTransferPeriod": "PT5M", + "DefaultEvents": { + "eventDestination": "ServiceFabricReliableServiceEventTable" + } + } + ], + "EtwManifestProviderConfiguration": [ + { + "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8", + "scheduledTransferLogLevelFilter": "Information", + "scheduledTransferKeywordFilter": "4611686018427387904", + "scheduledTransferPeriod": "PT5M", + "DefaultEvents": { + "eventDestination": "ServiceFabricSystemEventTable" + } + } + ] + } + } + }, + "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]" + }, + "typeHandlerVersion": "1.5" + } } ] }, @@ -535,9 +587,12 @@ "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]" ], "properties": { + "addonFeatures": [ + "DnsService" + ], "clientCertificateCommonNames": [], "clientCertificateThumbprints": [], - "clusterCodeVersion": "5.6.231.9494", + "clusterCodeVersion": "5.7.207.9494", "clusterState": "Default", "diagnosticsStorageAccountConfig": { "blobEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.blob]", @@ -547,9 +602,6 @@ "tableEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.table]" }, "fabricSettings": [], - "addonFeatures": [ - "DnsService" - ], "managementEndpoint": "[concat('http://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]", "nodeTypes": [ { diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json index 74f6acaae..0331e070b 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json @@ -18,25 +18,28 @@ "value": "YourPassword" }, "nicName": { - "value": "NIC-eshoponservicefabric" + "value": "NIC-eshopsfwin" }, "publicIPAddressName": { - "value": "eshoponservicefabric-PubIP" + "value": "eshopsfwin-PubIP" }, "dnsName": { - "value": "eshoponservicefabric" + "value": "eshopsfwin" }, "virtualNetworkName": { - "value": "VNet-eshoponservicefabric" + "value": "VNet-eshopsfwin" }, "lbName": { - "value": "LB-eshoponservicefabric" + "value": "LB-eshopsfwin" }, "lbIPName": { - "value": "LBIP-eshoponservicefabric" + "value": "LBIP-eshopsfwin" + }, + "applicationDiagnosticsStorageAccountName": { + "value": "sfdgeshopsfwin6744" }, "supportLogStorageAccountName": { - "value": "sflogseshoponservice3296" + "value": "sflogseshopsfwin3480" }, "vmImageSku": { "value": "2016-Datacenter-with-Containers" From 17395497e56b6eb3e8dcf151ea843b89ec7f7d7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Thu, 7 Sep 2017 13:39:13 +0200 Subject: [PATCH 009/136] Added PathBase WebMVC --- .../ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml | 1 + src/Web/WebMVC/Startup.cs | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml index 7c8a341ed..184eeea4a 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml @@ -22,6 +22,7 @@ + diff --git a/src/Web/WebMVC/Startup.cs b/src/Web/WebMVC/Startup.cs index 8b10c1ecc..74a10c15e 100644 --- a/src/Web/WebMVC/Startup.cs +++ b/src/Web/WebMVC/Startup.cs @@ -123,6 +123,13 @@ namespace Microsoft.eShopOnContainers.WebMVC app.UseExceptionHandler("/Error"); } + + if (!string.IsNullOrEmpty(Configuration["PATH_BASE"])) + { + app.UsePathBase(Configuration["PATH_BASE"]); + } + + app.UseSession(); app.UseStaticFiles(); From 89cbbb43f7b13de804922979069a5ff427108fcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Thu, 7 Sep 2017 15:46:08 +0200 Subject: [PATCH 010/136] Test base_path --- .../ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml | 2 +- .../ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml | 2 +- ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml | 2 +- src/Web/WebMVC/Startup.cs | 4 +++- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml index 0edd5b431..801e88f69 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - spring2/rabbitmq + spring2/rabbitmq:3.6.10 diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml index 676cf7b6d..652e30383 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - microsoft/mssql-server-windows-developer + microsoft/mssql-server-windows-developer:2016-sp1-windowsservercore-10.0.14393.1480 diff --git a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml index 1301dd83f..799e3ad5f 100644 --- a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml @@ -20,6 +20,6 @@ AzureActiveDirectory="true" ServerCertThumbprint="0123456789012345678901234567890123456789" /> --> - + \ No newline at end of file diff --git a/src/Web/WebMVC/Startup.cs b/src/Web/WebMVC/Startup.cs index 74a10c15e..8dcebaef0 100644 --- a/src/Web/WebMVC/Startup.cs +++ b/src/Web/WebMVC/Startup.cs @@ -124,8 +124,10 @@ namespace Microsoft.eShopOnContainers.WebMVC } - if (!string.IsNullOrEmpty(Configuration["PATH_BASE"])) + var pathBase = Configuration["PATH_BASE"]; + if (!string.IsNullOrEmpty(pathBase)) { + loggerFactory.CreateLogger("init").LogDebug($"Using PATH BASE '{pathBase}'"); app.UsePathBase(Configuration["PATH_BASE"]); } From ca88050d9db369455aa367df5d66e791824d064a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Fri, 8 Sep 2017 12:12:49 +0200 Subject: [PATCH 011/136] Rename connectionstring variable in Idsrv --- .../IdentityApiPkg/ServiceManifest.xml | 5 +++-- .../ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml | 4 ++-- .../eShopOnServiceFabric/PublishProfiles/Cloud.xml | 2 +- docker-compose.override.yml | 2 +- src/Services/Identity/Identity.API/Startup.cs | 8 ++++---- src/Services/Identity/Identity.API/appsettings.json | 4 +--- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml index ae0a51b29..7a07c825a 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml @@ -22,9 +22,10 @@ + - + @@ -43,7 +44,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml index 184eeea4a..24a348ead 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml @@ -26,7 +26,7 @@ - + @@ -40,7 +40,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml index 799e3ad5f..2e0b2b58d 100644 --- a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml @@ -20,6 +20,6 @@ AzureActiveDirectory="true" ServerCertThumbprint="0123456789012345678901234567890123456789" /> --> - + \ No newline at end of file diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 8757c8f83..83bcbf831 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -45,7 +45,7 @@ services: - ASPNETCORE_URLS=http://0.0.0.0:80 - SpaClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5104 - XamarinCallback=http://${ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP}:5105/xamarincallback #localhost do not work for UWP login, so we have to use "external" IP always - - ConnectionStrings__DefaultConnection=${ESHOP_AZURE_IDENTITY_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Service.IdentityDb;User Id=sa;Password=Pass@word} + - ConnectionString=${ESHOP_AZURE_IDENTITY_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Service.IdentityDb;User Id=sa;Password=Pass@word} - MvcClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5100 #Local: You need to open your local dev-machine firewall at range 5100-5110. - LocationApiClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5109 - MarketingApiClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5110 diff --git a/src/Services/Identity/Identity.API/Startup.cs b/src/Services/Identity/Identity.API/Startup.cs index a07cd69c2..86e6709ba 100644 --- a/src/Services/Identity/Identity.API/Startup.cs +++ b/src/Services/Identity/Identity.API/Startup.cs @@ -55,7 +55,7 @@ namespace eShopOnContainers.Identity // Add framework services. services.AddDbContext(options => - options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); + options.UseSqlServer(Configuration["ConnectionString"])); services.AddIdentity() .AddEntityFrameworkStores() @@ -81,7 +81,7 @@ namespace eShopOnContainers.Identity { minutes = minutesParsed; } - checks.AddSqlCheck("Identity_Db", Configuration.GetConnectionString("DefaultConnection"), TimeSpan.FromMinutes(minutes)); + checks.AddSqlCheck("Identity_Db", Configuration["ConnectionString"], TimeSpan.FromMinutes(minutes)); }); services.AddTransient(); @@ -89,7 +89,7 @@ namespace eShopOnContainers.Identity services.AddTransient, EFLoginService>(); services.AddTransient(); - var connectionString = Configuration.GetConnectionString("DefaultConnection"); + var connectionString = Configuration["ConnectionString"]; var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name; // Adds IdentityServer @@ -114,7 +114,7 @@ namespace eShopOnContainers.Identity { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); - + if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); diff --git a/src/Services/Identity/Identity.API/appsettings.json b/src/Services/Identity/Identity.API/appsettings.json index 09142603a..5633c1022 100644 --- a/src/Services/Identity/Identity.API/appsettings.json +++ b/src/Services/Identity/Identity.API/appsettings.json @@ -1,7 +1,5 @@ { - "ConnectionStrings": { - "DefaultConnection": "Server=tcp:127.0.0.1,5433;Database=Microsoft.eShopOnContainers.Services.IdentityDb;User Id=sa;Password=Pass@word;" - }, + "ConnectionString": "Server=tcp:127.0.0.1,5433;Database=Microsoft.eShopOnContainers.Services.IdentityDb;User Id=sa;Password=Pass@word;", "IsClusterEnv": "False", "MvcClient": "http://localhost:5100", "SpaClient": "http://localhost:5104", From de9b655889a9f07c36d1e7a019975d8dab8082f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Fri, 8 Sep 2017 16:42:56 +0200 Subject: [PATCH 012/136] Added SuffixPath attr to service endpoints Added SetBasePath env. var setting to services --- .../ApplicationPackageRoot/ApplicationManifest.xml | 6 +++--- .../BasketApiPkg/ServiceManifest.xml | 5 +++-- .../CatalogApiPkg/ServiceManifest.xml | 5 +++-- .../IdentityApiPkg/ServiceManifest.xml | 8 ++++---- .../LocationsApiPkg/ServiceManifest.xml | 5 +++-- .../MarketingApiPkg/ServiceManifest.xml | 8 ++++---- .../OrderingApiPkg/ServiceManifest.xml | 5 +++-- .../PaymentApiPkg/ServiceManifest.xml | 3 ++- .../WebMVCPkg/ServiceManifest.xml | 2 +- .../WebSPAPkg/ServiceManifest.xml | 11 ++++++----- .../WebStatusPkg/ServiceManifest.xml | 3 ++- .../eShopOnServiceFabric/PublishProfiles/Cloud.xml | 2 +- 12 files changed, 35 insertions(+), 28 deletions(-) diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml index 533674d5d..e03432228 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -37,7 +37,7 @@ - + @@ -55,7 +55,7 @@ - + @@ -64,7 +64,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml index df7b0cda9..799704e9c 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml @@ -24,11 +24,12 @@ - + + @@ -41,7 +42,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml index 2036ae14d..d0898aa17 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml @@ -23,7 +23,7 @@ - + @@ -32,6 +32,7 @@ + @@ -44,7 +45,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml index 7a07c825a..d9554eed0 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml @@ -23,10 +23,10 @@ - - - - + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml index f93ea0c1e..7a8f3a68b 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml @@ -25,11 +25,12 @@ - + + @@ -42,7 +43,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml index b9677f96b..866976819 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -22,9 +22,8 @@ - - - + @@ -34,6 +33,7 @@ + @@ -46,7 +46,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml index 7488b7473..44270b13d 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml @@ -24,7 +24,7 @@ - + @@ -32,6 +32,7 @@ + @@ -44,7 +45,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml index dbf0e4d81..d42b8bdeb 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml @@ -26,6 +26,7 @@ + @@ -38,7 +39,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml index 24a348ead..6eddc8c54 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml @@ -26,7 +26,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml index 942b5207b..5bf2376d2 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml @@ -22,10 +22,10 @@ - - - - + + + + @@ -33,6 +33,7 @@ + @@ -45,7 +46,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml index ebd6b463a..d11817796 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml @@ -30,6 +30,7 @@ + @@ -42,7 +43,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml index 2e0b2b58d..5daeaca59 100644 --- a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml @@ -20,6 +20,6 @@ AzureActiveDirectory="true" ServerCertThumbprint="0123456789012345678901234567890123456789" /> --> - + \ No newline at end of file From cbb6b580a88542082a829957258cd864736920cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Tue, 12 Sep 2017 01:00:33 +0200 Subject: [PATCH 013/136] Created WebMVC, WebSPA and Webstatus SF application project. Created IdentityServer SF application project --- .../ApplicationManifest.xml | 58 ---- .../BasketApiPkg/ServiceManifest.xml | 2 +- .../CatalogApiPkg/ServiceManifest.xml | 2 +- .../LocationsApiPkg/ServiceManifest.xml | 2 +- .../MarketingApiPkg/ServiceManifest.xml | 4 +- .../OrderingApiPkg/ServiceManifest.xml | 4 +- .../ApplicationParameters/Cloud.xml | 4 - .../PublishProfiles/Cloud.xml | 2 +- .../eShopOnServiceFabric.sfproj | 8 - .../ApplicationManifest.xml | 34 +++ .../IdentityApiPkg/Config/Settings.xml | 0 .../IdentityApiPkg/ServiceManifest.xml | 11 +- .../ApplicationParameters/Cloud.xml | 6 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../PublishProfiles/Cloud.xml | 25 ++ .../PublishProfiles/Local.1Node.xml | 11 + .../PublishProfiles/Local.5Node.xml | 11 + .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../eShopOnServiceFabricIdSrv.sfproj | 46 ++++ .../eShopOnServiceFabricIdSrv/packages.config | 4 + .../ApplicationManifest.xml | 34 +++ .../WebMVCPkg/Config/Settings.xml | 0 .../WebMVCPkg/ServiceManifest.xml | 7 +- .../ApplicationParameters/Cloud.xml | 6 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../PublishProfiles/Cloud.xml | 25 ++ .../PublishProfiles/Local.1Node.xml | 11 + .../PublishProfiles/Local.5Node.xml | 11 + .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../eShopOnServiceFabricWebMVC.sfproj | 46 ++++ .../packages.config | 4 + .../ApplicationManifest.xml | 34 +++ .../WebSPAPkg/Config/Settings.xml | 0 .../WebSPAPkg/ServiceManifest.xml | 13 +- .../ApplicationParameters/Cloud.xml | 6 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../PublishProfiles/Cloud.xml | 25 ++ .../PublishProfiles/Local.1Node.xml | 11 + .../PublishProfiles/Local.5Node.xml | 11 + .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../eShopOnServiceFabricWebSPA.sfproj | 46 ++++ .../packages.config | 4 + .../ApplicationManifest.xml | 34 +++ .../WebStatusPkg/Config/Settings.xml | 0 .../WebStatusPkg/ServiceManifest.xml | 3 +- .../ApplicationParameters/Cloud.xml | 6 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../PublishProfiles/Cloud.xml | 25 ++ .../PublishProfiles/Local.1Node.xml | 11 + .../PublishProfiles/Local.5Node.xml | 11 + .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../eShopOnServiceFabricWebStatus.sfproj | 46 ++++ .../packages.config | 4 + eShopOnContainers-ServicesAndWebApps.sln | 222 ++++++++++++++- 58 files changed, 1865 insertions(+), 97 deletions(-) create mode 100644 ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml rename ServiceFabric/{eShopOnServiceFabric => eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv}/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml (100%) rename ServiceFabric/{eShopOnServiceFabric => eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv}/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml (83%) create mode 100644 ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj create mode 100644 ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config create mode 100644 ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml rename ServiceFabric/{eShopOnServiceFabric => eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC}/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml (100%) rename ServiceFabric/{eShopOnServiceFabric => eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC}/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml (89%) create mode 100644 ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj create mode 100644 ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config create mode 100644 ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml rename ServiceFabric/{eShopOnServiceFabric => eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA}/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml (100%) rename ServiceFabric/{eShopOnServiceFabric => eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA}/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml (83%) create mode 100644 ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj create mode 100644 ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config create mode 100644 ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml rename ServiceFabric/{eShopOnServiceFabric => eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus}/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml (100%) rename ServiceFabric/{eShopOnServiceFabric => eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus}/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml (94%) create mode 100644 ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj create mode 100644 ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml index e03432228..79ef2a10e 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -16,7 +16,6 @@ - @@ -86,33 +85,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -122,15 +94,6 @@ - - - - - - - - - @@ -190,32 +153,11 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml index 799704e9c..d67ae028d 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml @@ -24,7 +24,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml index d0898aa17..88a44bf5c 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml @@ -23,7 +23,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml index 7a8f3a68b..5c01dd68b 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml @@ -25,7 +25,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml index 866976819..8b022545c 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -22,8 +22,8 @@ - + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml index 44270b13d..1ddc3ce4d 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml @@ -24,7 +24,7 @@ - + @@ -45,7 +45,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml index 471bd22d9..712f180a1 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml @@ -8,12 +8,8 @@ - - - - diff --git a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml index 5daeaca59..26804a1fe 100644 --- a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml @@ -20,6 +20,6 @@ AzureActiveDirectory="true" ServerCertThumbprint="0123456789012345678901234567890123456789" /> --> - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj b/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj index cb52adafc..9dd120b9e 100644 --- a/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj +++ b/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj @@ -34,8 +34,6 @@ - - @@ -50,12 +48,6 @@ - - - - - - diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..4dc9c515a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml rename to ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml similarity index 83% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml rename to ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml index d9554eed0..7ce014a27 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml @@ -19,20 +19,21 @@ + - - - + + - + + - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..b8c621447 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..e8623180a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..e8623180a --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..26804a1fe --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj new file mode 100644 index 000000000..a109faa28 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj @@ -0,0 +1,46 @@ + + + + + 39b54901-d57d-416e-b51e-33c4017ca464 + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..8953cb000 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml rename to ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml similarity index 89% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml rename to ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml index 6eddc8c54..210bebe9e 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml @@ -22,12 +22,11 @@ - - - + + @@ -40,7 +39,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..81f48e8f9 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..1d59af5a6 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..1d59af5a6 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..26804a1fe --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj new file mode 100644 index 000000000..3225c22f2 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj @@ -0,0 +1,46 @@ + + + + + 0cf895ff-3616-4d1f-8d2e-5d856cdf3612 + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..cf23a0779 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml rename to ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml similarity index 83% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml rename to ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml index 5bf2376d2..c60705576 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml @@ -22,18 +22,17 @@ - - - - - + + + + + - @@ -46,7 +45,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..44b9681b6 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..92fe692c3 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..92fe692c3 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..26804a1fe --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj new file mode 100644 index 000000000..3c5ee05fd --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj @@ -0,0 +1,46 @@ + + + + + 1670de10-5626-429d-a74a-2dd8281cc0c9 + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..edc3824d0 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml rename to ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml similarity index 94% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml rename to ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml index d11817796..64d2e335f 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml @@ -30,7 +30,6 @@ - @@ -43,7 +42,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..25352d134 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..9864bd050 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..9864bd050 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..26804a1fe --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj new file mode 100644 index 000000000..76a0c36b2 --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj @@ -0,0 +1,46 @@ + + + + + 25f73fd9-b32f-401a-80e8-17c72606a7e1 + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln index 3d1072c76..6e42e4727 100644 --- a/eShopOnContainers-ServicesAndWebApps.sln +++ b/eShopOnContainers-ServicesAndWebApps.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.12 +VisualStudioVersion = 15.0.26730.8 MinimumVisualStudioVersion = 10.0.40219.1 Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}" EndProject @@ -103,6 +103,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ServiceFabric", "ServiceFab EndProject Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "eShopOnServiceFabric", "ServiceFabric\eShopOnServiceFabric\eShopOnServiceFabric.sfproj", "{983EAB84-65C5-4793-A300-08F97C791A15}" EndProject +Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "eShopOnServiceFabricIdSrv", "ServiceFabric\eShopOnServiceFabricIdSrv\eShopOnServiceFabricIdSrv\eShopOnServiceFabricIdSrv.sfproj", "{39B54901-D57D-416E-B51E-33C4017CA464}" +EndProject +Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "eShopOnServiceFabricWebMVC", "ServiceFabric\eShopOnServiceFabricWebMVC\eShopOnServiceFabricWebMVC\eShopOnServiceFabricWebMVC.sfproj", "{0CF895FF-3616-4D1F-8D2E-5D856CDF3612}" +EndProject +Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "eShopOnServiceFabricWebSPA", "ServiceFabric\eShopOnServiceFabricWebSPA\eShopOnServiceFabricWebSPA\eShopOnServiceFabricWebSPA.sfproj", "{1670DE10-5626-429D-A74A-2DD8281CC0C9}" +EndProject +Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "eShopOnServiceFabricWebStatus", "ServiceFabric\eShopOnServiceFabricWebStatus\eShopOnServiceFabricWebStatus\eShopOnServiceFabricWebStatus.sfproj", "{25F73FD9-B32F-401A-80E8-17C72606A7E1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Ad-Hoc|Any CPU = Ad-Hoc|Any CPU @@ -1417,6 +1425,214 @@ Global {983EAB84-65C5-4793-A300-08F97C791A15}.Release|x64.Build.0 = Release|x64 {983EAB84-65C5-4793-A300-08F97C791A15}.Release|x64.Deploy.0 = Release|x64 {983EAB84-65C5-4793-A300-08F97C791A15}.Release|x86.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|Any CPU.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|ARM.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|ARM.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|ARM.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|iPhone.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|x64.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|x64.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|x64.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|x86.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|x86.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|x86.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|Any CPU.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|Any CPU.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|Any CPU.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|ARM.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|ARM.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|ARM.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|iPhone.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|iPhone.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|iPhone.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|iPhoneSimulator.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|x64.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|x64.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|x64.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|x86.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|x86.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|x86.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|Any CPU.ActiveCfg = Debug|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|ARM.ActiveCfg = Debug|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|iPhone.ActiveCfg = Debug|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|x64.ActiveCfg = Debug|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|x64.Build.0 = Debug|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|x64.Deploy.0 = Debug|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|x86.ActiveCfg = Debug|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Release|Any CPU.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Release|ARM.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Release|iPhone.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Release|iPhoneSimulator.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Release|x64.ActiveCfg = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Release|x64.Build.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Release|x64.Deploy.0 = Release|x64 + {39B54901-D57D-416E-B51E-33C4017CA464}.Release|x86.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|Any CPU.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|ARM.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|ARM.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|ARM.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|iPhone.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|x64.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|x64.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|x64.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|x86.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|x86.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|x86.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|Any CPU.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|Any CPU.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|Any CPU.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|ARM.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|ARM.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|ARM.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|iPhone.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|iPhone.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|iPhone.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|iPhoneSimulator.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|x64.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|x64.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|x64.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|x86.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|x86.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|x86.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|Any CPU.ActiveCfg = Debug|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|ARM.ActiveCfg = Debug|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|iPhone.ActiveCfg = Debug|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|x64.ActiveCfg = Debug|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|x64.Build.0 = Debug|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|x64.Deploy.0 = Debug|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|x86.ActiveCfg = Debug|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|Any CPU.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|ARM.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|iPhone.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|iPhoneSimulator.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|x64.ActiveCfg = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|x64.Build.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|x64.Deploy.0 = Release|x64 + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|x86.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|Any CPU.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|ARM.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|ARM.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|ARM.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|iPhone.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|x64.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|x64.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|x64.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|x86.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|x86.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|x86.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|Any CPU.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|Any CPU.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|Any CPU.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|ARM.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|ARM.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|ARM.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|iPhone.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|iPhone.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|iPhone.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|iPhoneSimulator.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|x64.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|x64.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|x64.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|x86.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|x86.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|x86.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|Any CPU.ActiveCfg = Debug|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|ARM.ActiveCfg = Debug|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|iPhone.ActiveCfg = Debug|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|x64.ActiveCfg = Debug|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|x64.Build.0 = Debug|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|x64.Deploy.0 = Debug|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|x86.ActiveCfg = Debug|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|Any CPU.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|ARM.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|iPhone.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|iPhoneSimulator.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|x64.ActiveCfg = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|x64.Build.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|x64.Deploy.0 = Release|x64 + {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|x86.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|Any CPU.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|ARM.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|ARM.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|ARM.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|iPhone.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|x64.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|x64.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|x64.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|x86.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|x86.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|x86.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|Any CPU.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|Any CPU.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|Any CPU.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|ARM.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|ARM.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|ARM.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|iPhone.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|iPhone.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|iPhone.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|iPhoneSimulator.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|x64.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|x64.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|x64.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|x86.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|x86.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|x86.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|Any CPU.ActiveCfg = Debug|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|ARM.ActiveCfg = Debug|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|iPhone.ActiveCfg = Debug|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|x64.ActiveCfg = Debug|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|x64.Build.0 = Debug|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|x64.Deploy.0 = Debug|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|x86.ActiveCfg = Debug|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|Any CPU.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|ARM.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|iPhone.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|iPhoneSimulator.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|x64.ActiveCfg = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|x64.Build.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|x64.Deploy.0 = Release|x64 + {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|x86.ActiveCfg = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1465,6 +1681,10 @@ Global {768C887F-C229-4B94-ACD8-0C7F65686524} = {A81ECBC2-6B00-4DCD-8388-469174033379} {969E793C-C413-490E-9C9D-B2B46DA5AF32} = {EF0337F2-ED00-4643-89FD-EE10863F1870} {983EAB84-65C5-4793-A300-08F97C791A15} = {0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8} + {39B54901-D57D-416E-B51E-33C4017CA464} = {0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8} + {0CF895FF-3616-4D1F-8D2E-5D856CDF3612} = {0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8} + {1670DE10-5626-429D-A74A-2DD8281CC0C9} = {0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8} + {25F73FD9-B32F-401A-80E8-17C72606A7E1} = {0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {25728519-5F0F-4973-8A64-0A81EB4EA8D9} From 5ac3df994376d3995c3b1bfe5a1da5d94d9351f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Tue, 12 Sep 2017 18:19:31 +0200 Subject: [PATCH 014/136] Updated ARM SF templates --- .../servicefabricdeploy.json | 94 ++++++++++++++++++- .../servicefabricdeploy.parameters.json | 19 +++- docker-compose.dcproj | 2 +- src/Services/Ordering/Ordering.API/Startup.cs | 2 +- 4 files changed, 111 insertions(+), 6 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json index ee00f2600..7534d7d4e 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json @@ -39,10 +39,26 @@ "type": "int", "defaultValue": 19080 }, - "nt0reverseProxyEndpointPort": { + "nt0reverseProxyEndpointPort": { "type": "int", "defaultValue": 19081 }, + "webMvcHttpPort": { + "type": "int", + "defaultValue": 5100 + }, + "webSpaHttpPort": { + "type": "int", + "defaultValue": 5104 + }, + "webStatusHttpPort": { + "type": "int", + "defaultValue": 5107 + }, + "IdSrvHttpRule": { + "type": "int", + "defaultValue": 5105 + }, "subnet0Name": { "type": "string", "defaultValue": "Subnet-0" @@ -350,6 +366,82 @@ }, "protocol": "tcp" } + }, + { + "name": "WebMVCHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('webMvcHttpPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('webMvcHttpPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "WebSPAHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('webSpaHttpPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('webSpaHttpPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "WebStatusHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('webStatusHttpPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('webStatusHttpPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "IdSrvHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('IdSrvHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('IdSrvHttpRule')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } } ], "probes": [ diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json index 0331e070b..8d7cf57ac 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json @@ -15,7 +15,7 @@ "value": "eshop" }, "adminPassword": { - "value": "YourPassword" + "value": "your_password" }, "nicName": { "value": "NIC-eshopsfwin" @@ -24,7 +24,7 @@ "value": "eshopsfwin-PubIP" }, "dnsName": { - "value": "eshopsfwin" + "value": "eshoponservicefabric" }, "virtualNetworkName": { "value": "VNet-eshopsfwin" @@ -64,6 +64,19 @@ }, "nt0reverseProxyEndpointPort": { "value": 19081 + }, + "webMvcHttpPort": { + "value": 5100 + }, + "webSpaHttpPort": { + "value": 5104 + }, + "webStatusHttpPort": { + "value": 5107 + }, + "IdSrvHttpRule": { + "value": 5105 } } -} \ No newline at end of file +} + diff --git a/docker-compose.dcproj b/docker-compose.dcproj index 23547b577..8a3522935 100644 --- a/docker-compose.dcproj +++ b/docker-compose.dcproj @@ -5,7 +5,7 @@ True http://localhost:5100 webmvc - Linux + Windows 2.0 diff --git a/src/Services/Ordering/Ordering.API/Startup.cs b/src/Services/Ordering/Ordering.API/Startup.cs index 1bf2fd22c..f2ca10243 100644 --- a/src/Services/Ordering/Ordering.API/Startup.cs +++ b/src/Services/Ordering/Ordering.API/Startup.cs @@ -204,7 +204,7 @@ app.UseSwagger() .UseSwaggerUI(c => { - c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); + c.SwaggerEndpoint($"{ (!string.IsNullOrEmpty(pathBase) ? pathBase : string.Empty) }/swagger/v1/swagger.json", "My API V1"); c.ConfigureOAuth2("orderingswaggerui", "", "", "Ordering Swagger UI"); }); From 2d16a621f30ce9fdd28239807e2eb2ac051cf541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Wed, 13 Sep 2017 15:43:25 +0200 Subject: [PATCH 015/136] Update ARM template for SF deployment --- .../az/servicefabric/WindowsContainers/readme.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 2e7f09c4c..bbfe08bd1 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -4,7 +4,19 @@ The ARM template `servicefabricdeploy.json` and its parameter file (`servicefabr ## Editing servicefabricdeploy.parameters.json file -You can edit the `servicefabricdeploy.parameters.json` file to set your values, but is not needed. +Edit the following params in `servicefabricdeploy.parameters.json` file to set your values: + +- clusterName: Name of your SF cluster +- dnsName: Name assigned to your SF dns +- adminUserName: user name for administration +- adminPassword: user password for administration + +Optionally, you can modify which ports are opened in the LoadBalancer for accessing externally to the apps: + +- webMvcHttpPort: port externally exposed for the WebMVC app +- webSpaHttpPort: port externally exposed for the WebSPA app +- webStatusHttpPort: port externally exposed for the WebStatus app +- IdSrvHttpRule: port externally exposed for the Identity app ## Deploy the template From 49c825d193b50ef1444ce3e19d44191769321a68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Wed, 13 Sep 2017 16:19:27 +0200 Subject: [PATCH 016/136] Added BasePath to swagger endpoint Override environment variables urls --- .../ApplicationManifest.xml | 18 ++++++++++++++---- .../CatalogApiPkg/ServiceManifest.xml | 2 +- .../LocationsApiPkg/ServiceManifest.xml | 2 +- .../MarketingApiPkg/ServiceManifest.xml | 2 +- .../OrderingApiPkg/ServiceManifest.xml | 2 +- .../ApplicationParameters/Cloud.xml | 1 + .../ApplicationManifest.xml | 18 +++++++++++++++++- .../IdentityApiPkg/ServiceManifest.xml | 10 +++++----- .../ApplicationParameters/Cloud.xml | 9 ++++++++- .../ApplicationManifest.xml | 6 +++++- .../WebMVCPkg/ServiceManifest.xml | 2 +- .../ApplicationParameters/Cloud.xml | 1 + .../ApplicationManifest.xml | 14 +++++++++++++- .../ApplicationParameters/Cloud.xml | 7 ++++++- src/Services/Basket/Basket.API/Startup.cs | 2 +- src/Services/Location/Locations.API/Startup.cs | 2 +- .../Marketing/Marketing.API/Startup.cs | 2 +- src/Services/Payment/Payment.API/Startup.cs | 2 +- 18 files changed, 79 insertions(+), 23 deletions(-) diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml index 79ef2a10e..6c745499d 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -18,6 +18,7 @@ + + + + @@ -51,7 +55,9 @@ - + + + @@ -87,7 +93,9 @@ - + + + @@ -105,7 +113,9 @@ - + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml index 88a44bf5c..e978f2ecc 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml @@ -23,7 +23,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml index 5c01dd68b..749d7a051 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml @@ -25,7 +25,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml index 8b022545c..2e40a14a3 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -23,7 +23,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml index 1ddc3ce4d..e858bb8c8 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml @@ -24,7 +24,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml index 712f180a1..d250e1eea 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml @@ -12,5 +12,6 @@ + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml index 4dc9c515a..21990aa56 100644 --- a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml @@ -6,13 +6,29 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + + + + + + + - + + + + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml index 7ce014a27..02ec66197 100644 --- a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml @@ -19,21 +19,21 @@ - + - - + + - + - + - + + + + diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml index 210bebe9e..82f2efa0d 100644 --- a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml @@ -25,7 +25,7 @@ - + diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml index 81f48e8f9..4cfdd41d3 100644 --- a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml index cf23a0779..1631563e9 100644 --- a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml @@ -6,13 +6,25 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> + + + + + - + + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml index 44b9681b6..961839849 100644 --- a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml @@ -2,5 +2,10 @@ + + + + + - \ No newline at end of file + diff --git a/src/Services/Basket/Basket.API/Startup.cs b/src/Services/Basket/Basket.API/Startup.cs index df079e4e6..b82a912d8 100644 --- a/src/Services/Basket/Basket.API/Startup.cs +++ b/src/Services/Basket/Basket.API/Startup.cs @@ -185,7 +185,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API app.UseSwagger() .UseSwaggerUI(c => { - c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); + c.SwaggerEndpoint($"{ (!string.IsNullOrEmpty(pathBase) ? pathBase : string.Empty) }/swagger/v1/swagger.json", "My API V1"); c.ConfigureOAuth2("basketswaggerui", "", "", "Basket Swagger UI"); }); diff --git a/src/Services/Location/Locations.API/Startup.cs b/src/Services/Location/Locations.API/Startup.cs index b2147cbd1..fdc55de87 100644 --- a/src/Services/Location/Locations.API/Startup.cs +++ b/src/Services/Location/Locations.API/Startup.cs @@ -156,7 +156,7 @@ namespace Microsoft.eShopOnContainers.Services.Locations.API app.UseSwagger() .UseSwaggerUI(c => { - c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); + c.SwaggerEndpoint($"{ (!string.IsNullOrEmpty(pathBase) ? pathBase : string.Empty) }/swagger/v1/swagger.json", "My API V1"); c.ConfigureOAuth2("locationsswaggerui", "", "", "Locations Swagger UI"); }); diff --git a/src/Services/Marketing/Marketing.API/Startup.cs b/src/Services/Marketing/Marketing.API/Startup.cs index bac62095f..a509c0c81 100644 --- a/src/Services/Marketing/Marketing.API/Startup.cs +++ b/src/Services/Marketing/Marketing.API/Startup.cs @@ -188,7 +188,7 @@ app.UseSwagger() .UseSwaggerUI(c => { - c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); + c.SwaggerEndpoint($"{ (!string.IsNullOrEmpty(pathBase) ? pathBase : string.Empty) }/swagger/v1/swagger.json", "My API V1"); c.ConfigureOAuth2("marketingswaggerui", "", "", "Marketing Swagger UI"); }); diff --git a/src/Services/Payment/Payment.API/Startup.cs b/src/Services/Payment/Payment.API/Startup.cs index e4378dcef..fba05cb86 100644 --- a/src/Services/Payment/Payment.API/Startup.cs +++ b/src/Services/Payment/Payment.API/Startup.cs @@ -103,7 +103,7 @@ namespace Payment.API app.UseSwagger() .UseSwaggerUI(c => { - c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); + c.SwaggerEndpoint($"{ (!string.IsNullOrEmpty(pathBase) ? pathBase : string.Empty) }/swagger/v1/swagger.json", "My API V1"); }); ConfigureEventBus(app); From f8d5dfde44795a7a8bc0ef5408f90790655a146c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Thu, 14 Sep 2017 14:29:15 +0200 Subject: [PATCH 017/136] Update aspnetcore HealthCheck to 2.0 --- .../Microsoft.AspNetCore.HealthChecks.csproj | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/BuildingBlocks/HealthChecks/src/Microsoft.AspNetCore.HealthChecks/Microsoft.AspNetCore.HealthChecks.csproj b/src/BuildingBlocks/HealthChecks/src/Microsoft.AspNetCore.HealthChecks/Microsoft.AspNetCore.HealthChecks.csproj index 023554e60..3c28e8dbc 100644 --- a/src/BuildingBlocks/HealthChecks/src/Microsoft.AspNetCore.HealthChecks/Microsoft.AspNetCore.HealthChecks.csproj +++ b/src/BuildingBlocks/HealthChecks/src/Microsoft.AspNetCore.HealthChecks/Microsoft.AspNetCore.HealthChecks.csproj @@ -1,7 +1,10 @@  - netstandard1.3 + netstandard2.0 + false + false + false @@ -9,8 +12,11 @@ - + + + + \ No newline at end of file From 2428457172c62509ff286a40d38c108a2ad7030f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Thu, 14 Sep 2017 15:50:18 +0200 Subject: [PATCH 018/136] Update sln version --- eShopOnContainers-ServicesAndWebApps.sln | 50 +++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln index 01dfdddd2..37555c403 100644 --- a/eShopOnContainers-ServicesAndWebApps.sln +++ b/eShopOnContainers-ServicesAndWebApps.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.12 +VisualStudioVersion = 15.0.26730.15 MinimumVisualStudioVersion = 10.0.40219.1 Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}" EndProject @@ -1637,6 +1637,54 @@ Global {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|x64.Build.0 = Release|x64 {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|x64.Deploy.0 = Release|x64 {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|x86.ActiveCfg = Release|x64 + {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|x64.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|x86.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.AppStore|Any CPU.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.AppStore|ARM.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.AppStore|ARM.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.AppStore|iPhone.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.AppStore|iPhone.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.AppStore|x64.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.AppStore|x64.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.AppStore|x86.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.AppStore|x86.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Debug|Any CPU.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Debug|ARM.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Debug|ARM.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Debug|iPhone.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Debug|iPhone.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Debug|x64.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Debug|x64.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Debug|x86.ActiveCfg = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Debug|x86.Build.0 = Debug|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|Any CPU.ActiveCfg = Release|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|Any CPU.Build.0 = Release|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|ARM.ActiveCfg = Release|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|ARM.Build.0 = Release|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|iPhone.ActiveCfg = Release|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|iPhone.Build.0 = Release|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|iPhoneSimulator.Build.0 = Release|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|x64.ActiveCfg = Release|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|x64.Build.0 = Release|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|x86.ActiveCfg = Release|Any CPU + {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 2f47258453aa01fd7c2aedc4e82d742da69ef1cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Thu, 14 Sep 2017 18:25:27 +0200 Subject: [PATCH 019/136] fix namespaces in LoginPartial --- .../Identity/Identity.API/Views/Shared/_LoginPartial.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Services/Identity/Identity.API/Views/Shared/_LoginPartial.cshtml b/src/Services/Identity/Identity.API/Views/Shared/_LoginPartial.cshtml index 71aaf0063..2f9e63fe0 100644 --- a/src/Services/Identity/Identity.API/Views/Shared/_LoginPartial.cshtml +++ b/src/Services/Identity/Identity.API/Views/Shared/_LoginPartial.cshtml @@ -1,5 +1,5 @@ @using Microsoft.AspNetCore.Identity -@using Identity.API.Models +@using Microsoft.eShopOnContainers.Services.Identity.API.Models @inject SignInManager SignInManager @inject UserManager UserManager From e673236bbd3fb824c87cdd05c469e3aca832c643 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Fri, 15 Sep 2017 16:50:10 +0200 Subject: [PATCH 020/136] Added Reverse Proxy LB Rule to ARM template --- .../ApplicationManifest.xml | 5 ++++- .../ApplicationParameters/Cloud.xml | 3 ++- .../WebMVCPkg/ServiceManifest.xml | 1 + .../servicefabricdeploy.json | 19 +++++++++++++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml index 6c745499d..0d3e54d46 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -19,6 +19,7 @@ + - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml index 1b832fb20..26f348fd1 100644 --- a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml @@ -2,12 +2,12 @@ - - - - - - - + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml index 26804a1fe..2ab9df11c 100644 --- a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml @@ -20,6 +20,6 @@ AzureActiveDirectory="true" ServerCertThumbprint="0123456789012345678901234567890123456789" /> --> - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml index 4cfdd41d3..6bdcbe2e1 100644 --- a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml @@ -2,6 +2,6 @@ - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml index 26804a1fe..2ab9df11c 100644 --- a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml @@ -20,6 +20,6 @@ AzureActiveDirectory="true" ServerCertThumbprint="0123456789012345678901234567890123456789" /> --> - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml index c60705576..f907caddc 100644 --- a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml @@ -22,11 +22,11 @@ - - - - - + + + + + diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml index 961839849..1505355be 100644 --- a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml @@ -2,10 +2,10 @@ - - - - - + + + + + diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml index 26804a1fe..2ab9df11c 100644 --- a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml @@ -20,6 +20,6 @@ AzureActiveDirectory="true" ServerCertThumbprint="0123456789012345678901234567890123456789" /> --> - + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml index 26804a1fe..2ab9df11c 100644 --- a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml +++ b/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml @@ -20,6 +20,6 @@ AzureActiveDirectory="true" ServerCertThumbprint="0123456789012345678901234567890123456789" /> --> - + \ No newline at end of file From 274ddc201640543188fd17a5b2605d6d64ecf935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Mon, 2 Oct 2017 14:40:37 +0200 Subject: [PATCH 022/136] Integrate HealthCheck with k8s --- k8s/deployments.yaml | 128 ++++++++++++++++++++++++++++- src/Web/WebStatus/appsettings.json | 4 +- 2 files changed, 130 insertions(+), 2 deletions(-) diff --git a/k8s/deployments.yaml b/k8s/deployments.yaml index 6001f12b5..2a9d6862e 100644 --- a/k8s/deployments.yaml +++ b/k8s/deployments.yaml @@ -38,7 +38,21 @@ spec: name: urls key: IdentityUrl ports: - - containerPort: 80 + - containerPort: 80 + readinessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 imagePullSecrets: - name: registry-key --- @@ -83,6 +97,20 @@ spec: key: CatalogBus ports: - containerPort: 80 + readinessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 imagePullSecrets: - name: registry-key --- @@ -149,6 +177,20 @@ spec: key: OrderingApiClient ports: - containerPort: 80 + readinessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 imagePullSecrets: - name: registry-key --- @@ -203,6 +245,20 @@ spec: key: GracePeriodManager_GracePeriodTime ports: - containerPort: 80 + readinessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 imagePullSecrets: - name: registry-key --- @@ -257,6 +313,20 @@ spec: key: IdentityUrl ports: - containerPort: 80 + readinessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 imagePullSecrets: - name: registry-key --- @@ -321,6 +391,20 @@ spec: key: Marketing_PicBaseUrl ports: - containerPort: 80 + readinessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 imagePullSecrets: - name: registry-key --- @@ -355,6 +439,20 @@ spec: key: PaymentBus ports: - containerPort: 80 + readinessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 imagePullSecrets: - name: registry-key --- @@ -451,6 +549,20 @@ spec: key: PaymentHealthCheckUrl ports: - containerPort: 80 + readinessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 imagePullSecrets: - name: registry-key --- @@ -616,5 +728,19 @@ spec: key: PaymentHealthCheckUrl ports: - containerPort: 80 + readinessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 5 + periodSeconds: 10 + livenessProbe: + httpGet: + path: /hc + port: 80 + scheme: HTTP + initialDelaySeconds: 60 + periodSeconds: 10 imagePullSecrets: - name: registry-key diff --git a/src/Web/WebStatus/appsettings.json b/src/Web/WebStatus/appsettings.json index df07f1703..e8d5a9f60 100644 --- a/src/Web/WebStatus/appsettings.json +++ b/src/Web/WebStatus/appsettings.json @@ -2,7 +2,9 @@ "Logging": { "IncludeScopes": false, "LogLevel": { - "Default": "Warning" + "Default": "Debug", + "System": "Information", + "Microsoft": "Information" } }, "OrderingUrl": "http://localhost:5102/hc", From 83f8bd8f5b65380d5b07ef128d272e79f29dd9db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Mon, 2 Oct 2017 16:20:59 +0200 Subject: [PATCH 023/136] Added swagger to Payment.api --- .../Payment/Payment.API/Payment.API.csproj | 1 + src/Services/Payment/Payment.API/Startup.cs | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/Services/Payment/Payment.API/Payment.API.csproj b/src/Services/Payment/Payment.API/Payment.API.csproj index 5b7fe983b..ab28a210d 100644 --- a/src/Services/Payment/Payment.API/Payment.API.csproj +++ b/src/Services/Payment/Payment.API/Payment.API.csproj @@ -9,6 +9,7 @@ + diff --git a/src/Services/Payment/Payment.API/Startup.cs b/src/Services/Payment/Payment.API/Startup.cs index 44573c972..44393186b 100644 --- a/src/Services/Payment/Payment.API/Startup.cs +++ b/src/Services/Payment/Payment.API/Startup.cs @@ -16,6 +16,7 @@ using Payment.API.IntegrationEvents.Events; using RabbitMQ.Client; using System; using System.Threading.Tasks; +using Swashbuckle.AspNetCore.Swagger; namespace Payment.API { @@ -75,6 +76,19 @@ namespace Payment.API checks.AddValueTaskCheck("HTTP Endpoint", () => new ValueTask(HealthCheckResult.Healthy("Ok"))); }); + // Add framework services. + services.AddSwaggerGen(options => + { + options.DescribeAllEnumsAsStrings(); + options.SwaggerDoc("v1", new Swashbuckle.AspNetCore.Swagger.Info + { + Title = "eShopOnContainers - Payment HTTP API", + Version = "v1", + Description = "The Payment Microservice HTTP API. This is a Data-Driven/CRUD microservice sample", + TermsOfService = "Terms Of Service" + }); + }); + RegisterEventBus(services); var container = new ContainerBuilder(); From 4a8cd4d3bb11b1595d615ee9776d29db10136b33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Mon, 2 Oct 2017 17:38:27 +0200 Subject: [PATCH 024/136] Updated marketing.api service fabric env. vars --- .../MarketingApiPkg/ServiceManifest.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml index 2e40a14a3..0a3fb8fd1 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -34,9 +34,11 @@ + + - + From 883fbbac8eb0792bde32138db450ecf69917d8bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Mon, 2 Oct 2017 19:49:15 +0200 Subject: [PATCH 025/136] Updates marketing.api SF manifest --- .../ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml index 0a3fb8fd1..d69a94d50 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -36,6 +36,7 @@ + From 8ff4856a89be55d11c6a41aabaef3f5ce71d6ba5 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 2 Oct 2017 12:57:19 -0700 Subject: [PATCH 026/136] Git test --- cli-mac/build-bits.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cli-mac/build-bits.sh b/cli-mac/build-bits.sh index 8548ec72b..39ac6e5da 100755 --- a/cli-mac/build-bits.sh +++ b/cli-mac/build-bits.sh @@ -38,3 +38,5 @@ fi # No need to build the images, docker build or docker compose will # do that using the images and containers defined in the docker-compose.yml file. +# +# From 09e35a8c65b6cee21f6a089ef6bf367a555d6eab Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 2 Oct 2017 13:16:11 -0700 Subject: [PATCH 027/136] Update build-bits.sh --- cli-mac/build-bits.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cli-mac/build-bits.sh b/cli-mac/build-bits.sh index 39ac6e5da..a7712b831 100755 --- a/cli-mac/build-bits.sh +++ b/cli-mac/build-bits.sh @@ -1,5 +1,7 @@ #!/bin/sh +# List of microservices here needs to be updated to include all the new microservices (Marketing, etc.) + projectList=( "../src/Services/Catalog/Catalog.API" "../src/Services/Basket/Basket.API" From 34a4271608e1a37f45d2c57cba832733fd808a26 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 2 Oct 2017 13:26:06 -0700 Subject: [PATCH 028/136] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c0218730f..de1a9ab13 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Sample .NET Core reference application, powered by Microsoft, based on a simplif **Note for Pull Requests**: We accept pull request from the community. When doing it, please do it onto the DEV branch which is the consolidated work-in-progress branch. Do not request it onto Master, if possible. ## Moved to .NET Core 2.0 "wave" -We have moved to .NET Core 2.0! +We have moved to .NET Core 2.0 already! * Branch `dev` is in .NET Core 2.0. * Branch `master` is *still* in .NET Core 1.1 (but it will be updated soon) From 2ca72e8f1d04c38006a401e730646cb17cc106c9 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 2 Oct 2017 14:59:30 -0700 Subject: [PATCH 029/136] Set Linux as by default target OS for Docker's project in VS2017 --- docker-compose.dcproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.dcproj b/docker-compose.dcproj index 8a3522935..23547b577 100644 --- a/docker-compose.dcproj +++ b/docker-compose.dcproj @@ -5,7 +5,7 @@ True http://localhost:5100 webmvc - Windows + Linux 2.0 From 01ff19a6133bcd6f101f18d696b518604a88f806 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Tue, 3 Oct 2017 09:19:06 -0700 Subject: [PATCH 030/136] Removed Service Fabric manifests targeting Windows from default eShopOnContainers VS solution which targets Docker Linux --- eShopOnContainers-ServicesAndWebApps.sln | 279 +---------------------- 1 file changed, 1 insertion(+), 278 deletions(-) diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln index 37555c403..cbb34f830 100644 --- a/eShopOnContainers-ServicesAndWebApps.sln +++ b/eShopOnContainers-ServicesAndWebApps.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.15 +VisualStudioVersion = 15.0.26730.16 MinimumVisualStudioVersion = 10.0.40219.1 Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}" EndProject @@ -99,18 +99,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Health EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LoadTest", "test\Services\LoadTest\LoadTest.csproj", "{969E793C-C413-490E-9C9D-B2B46DA5AF32}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ServiceFabric", "ServiceFabric", "{0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8}" -EndProject -Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "eShopOnServiceFabric", "ServiceFabric\eShopOnServiceFabric\eShopOnServiceFabric.sfproj", "{983EAB84-65C5-4793-A300-08F97C791A15}" -EndProject -Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "eShopOnServiceFabricIdSrv", "ServiceFabric\eShopOnServiceFabricIdSrv\eShopOnServiceFabricIdSrv\eShopOnServiceFabricIdSrv.sfproj", "{39B54901-D57D-416E-B51E-33C4017CA464}" -EndProject -Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "eShopOnServiceFabricWebMVC", "ServiceFabric\eShopOnServiceFabricWebMVC\eShopOnServiceFabricWebMVC\eShopOnServiceFabricWebMVC.sfproj", "{0CF895FF-3616-4D1F-8D2E-5D856CDF3612}" -EndProject -Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "eShopOnServiceFabricWebSPA", "ServiceFabric\eShopOnServiceFabricWebSPA\eShopOnServiceFabricWebSPA\eShopOnServiceFabricWebSPA.sfproj", "{1670DE10-5626-429D-A74A-2DD8281CC0C9}" -EndProject -Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "eShopOnServiceFabricWebStatus", "ServiceFabric\eShopOnServiceFabricWebStatus\eShopOnServiceFabricWebStatus\eShopOnServiceFabricWebStatus.sfproj", "{25F73FD9-B32F-401A-80E8-17C72606A7E1}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebHost", "WebHost", "{1815B651-941C-466B-AE33-D1D7EEB8F77F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebHost.Customization", "src\BuildingBlocks\WebHostCustomization\WebHost.Customization\WebHost.Customization.csproj", "{15F4B3AA-89B6-4A0D-9051-414305974781}" @@ -1377,266 +1365,6 @@ Global {969E793C-C413-490E-9C9D-B2B46DA5AF32}.Release|x64.Build.0 = Release|Any CPU {969E793C-C413-490E-9C9D-B2B46DA5AF32}.Release|x86.ActiveCfg = Release|Any CPU {969E793C-C413-490E-9C9D-B2B46DA5AF32}.Release|x86.Build.0 = Release|Any CPU - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|Any CPU.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|ARM.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|ARM.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|ARM.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|iPhone.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|x64.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|x64.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|x64.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|x86.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|x86.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Ad-Hoc|x86.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|Any CPU.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|Any CPU.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|Any CPU.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|ARM.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|ARM.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|ARM.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|iPhone.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|iPhone.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|iPhone.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|iPhoneSimulator.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|x64.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|x64.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|x64.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|x86.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|x86.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.AppStore|x86.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|Any CPU.ActiveCfg = Debug|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|ARM.ActiveCfg = Debug|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|iPhone.ActiveCfg = Debug|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|x64.ActiveCfg = Debug|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|x64.Build.0 = Debug|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|x64.Deploy.0 = Debug|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Debug|x86.ActiveCfg = Debug|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Release|Any CPU.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Release|ARM.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Release|iPhone.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Release|iPhoneSimulator.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Release|x64.ActiveCfg = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Release|x64.Build.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Release|x64.Deploy.0 = Release|x64 - {983EAB84-65C5-4793-A300-08F97C791A15}.Release|x86.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|Any CPU.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|ARM.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|ARM.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|ARM.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|iPhone.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|x64.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|x64.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|x64.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|x86.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|x86.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Ad-Hoc|x86.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|Any CPU.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|Any CPU.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|Any CPU.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|ARM.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|ARM.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|ARM.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|iPhone.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|iPhone.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|iPhone.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|iPhoneSimulator.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|x64.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|x64.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|x64.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|x86.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|x86.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.AppStore|x86.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|Any CPU.ActiveCfg = Debug|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|ARM.ActiveCfg = Debug|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|iPhone.ActiveCfg = Debug|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|x64.ActiveCfg = Debug|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|x64.Build.0 = Debug|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|x64.Deploy.0 = Debug|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Debug|x86.ActiveCfg = Debug|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Release|Any CPU.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Release|ARM.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Release|iPhone.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Release|iPhoneSimulator.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Release|x64.ActiveCfg = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Release|x64.Build.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Release|x64.Deploy.0 = Release|x64 - {39B54901-D57D-416E-B51E-33C4017CA464}.Release|x86.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|Any CPU.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|ARM.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|ARM.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|ARM.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|iPhone.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|x64.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|x64.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|x64.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|x86.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|x86.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Ad-Hoc|x86.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|Any CPU.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|Any CPU.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|Any CPU.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|ARM.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|ARM.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|ARM.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|iPhone.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|iPhone.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|iPhone.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|iPhoneSimulator.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|x64.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|x64.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|x64.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|x86.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|x86.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.AppStore|x86.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|Any CPU.ActiveCfg = Debug|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|ARM.ActiveCfg = Debug|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|iPhone.ActiveCfg = Debug|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|x64.ActiveCfg = Debug|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|x64.Build.0 = Debug|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|x64.Deploy.0 = Debug|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Debug|x86.ActiveCfg = Debug|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|Any CPU.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|ARM.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|iPhone.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|iPhoneSimulator.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|x64.ActiveCfg = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|x64.Build.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|x64.Deploy.0 = Release|x64 - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612}.Release|x86.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|Any CPU.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|ARM.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|ARM.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|ARM.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|iPhone.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|x64.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|x64.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|x64.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|x86.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|x86.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Ad-Hoc|x86.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|Any CPU.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|Any CPU.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|Any CPU.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|ARM.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|ARM.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|ARM.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|iPhone.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|iPhone.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|iPhone.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|iPhoneSimulator.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|x64.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|x64.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|x64.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|x86.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|x86.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.AppStore|x86.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|Any CPU.ActiveCfg = Debug|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|ARM.ActiveCfg = Debug|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|iPhone.ActiveCfg = Debug|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|x64.ActiveCfg = Debug|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|x64.Build.0 = Debug|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|x64.Deploy.0 = Debug|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Debug|x86.ActiveCfg = Debug|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|Any CPU.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|ARM.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|iPhone.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|iPhoneSimulator.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|x64.ActiveCfg = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|x64.Build.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|x64.Deploy.0 = Release|x64 - {1670DE10-5626-429D-A74A-2DD8281CC0C9}.Release|x86.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|Any CPU.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|ARM.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|ARM.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|ARM.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|iPhone.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|x64.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|x64.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|x64.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|x86.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|x86.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Ad-Hoc|x86.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|Any CPU.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|Any CPU.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|Any CPU.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|ARM.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|ARM.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|ARM.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|iPhone.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|iPhone.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|iPhone.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|iPhoneSimulator.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|x64.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|x64.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|x64.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|x86.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|x86.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.AppStore|x86.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|Any CPU.ActiveCfg = Debug|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|ARM.ActiveCfg = Debug|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|iPhone.ActiveCfg = Debug|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|x64.ActiveCfg = Debug|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|x64.Build.0 = Debug|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|x64.Deploy.0 = Debug|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Debug|x86.ActiveCfg = Debug|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|Any CPU.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|ARM.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|iPhone.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|iPhoneSimulator.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|x64.ActiveCfg = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|x64.Build.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|x64.Deploy.0 = Release|x64 - {25F73FD9-B32F-401A-80E8-17C72606A7E1}.Release|x86.ActiveCfg = Release|x64 {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU {15F4B3AA-89B6-4A0D-9051-414305974781}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU @@ -1732,11 +1460,6 @@ Global {69AF10D3-AA76-4FF7-B187-EC7E8CC5F5B8} = {807BB76E-B2BB-47A2-A57B-3D1B20FF5E7F} {768C887F-C229-4B94-ACD8-0C7F65686524} = {A81ECBC2-6B00-4DCD-8388-469174033379} {969E793C-C413-490E-9C9D-B2B46DA5AF32} = {EF0337F2-ED00-4643-89FD-EE10863F1870} - {983EAB84-65C5-4793-A300-08F97C791A15} = {0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8} - {39B54901-D57D-416E-B51E-33C4017CA464} = {0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8} - {0CF895FF-3616-4D1F-8D2E-5D856CDF3612} = {0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8} - {1670DE10-5626-429D-A74A-2DD8281CC0C9} = {0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8} - {25F73FD9-B32F-401A-80E8-17C72606A7E1} = {0D1E7D4E-12DD-4B67-9595-7C0BD347F8C8} {1815B651-941C-466B-AE33-D1D7EEB8F77F} = {DB0EFB20-B024-4E5E-A75C-52143C131D25} {15F4B3AA-89B6-4A0D-9051-414305974781} = {1815B651-941C-466B-AE33-D1D7EEB8F77F} EndGlobalSection From a78626c4d85f6974248e72ed7dd064dfb40bda8f Mon Sep 17 00:00:00 2001 From: Volkan Altan Date: Wed, 4 Oct 2017 16:43:37 +0300 Subject: [PATCH 031/136] Update docker-compose.yml fix mssql version --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 23acd8af7..a9c14c6f7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -97,7 +97,7 @@ services: - rabbitmq sql.data: - image: microsoft/mssql-server-linux:latest + image: microsoft/mssql-server-linux:2017-latest nosql.data: image: mongo @@ -111,4 +111,4 @@ services: image: rabbitmq:3-management ports: - "15672:15672" - - "5672:5672" \ No newline at end of file + - "5672:5672" From 01376ead68eafb1cba4828e1c8cb89b0f6e39aef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Wed, 4 Oct 2017 18:36:08 +0200 Subject: [PATCH 032/136] Created ARM template for deploying a secured SF Created ps1 to generate certificates in keyvault Updated readme --- .../WindowsContainers/gen-keyvaultcert.ps1 | 53 ++ .../servicefabric/WindowsContainers/readme.md | 54 +- .../servicefabricdeploysecure.json | 824 ++++++++++++++++++ .../servicefabricdeploysecure.parameters.json | 91 ++ img/sf/cloud_publishProfile.PNG | Bin 0 -> 14374 bytes img/sf/create-kv.PNG | Bin 0 -> 23823 bytes img/sf/install-cert.PNG | Bin 0 -> 15678 bytes 7 files changed, 1021 insertions(+), 1 deletion(-) create mode 100644 deploy/az/servicefabric/WindowsContainers/gen-keyvaultcert.ps1 create mode 100644 deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.json create mode 100644 deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.parameters.json create mode 100644 img/sf/cloud_publishProfile.PNG create mode 100644 img/sf/create-kv.PNG create mode 100644 img/sf/install-cert.PNG diff --git a/deploy/az/servicefabric/WindowsContainers/gen-keyvaultcert.ps1 b/deploy/az/servicefabric/WindowsContainers/gen-keyvaultcert.ps1 new file mode 100644 index 000000000..c6fc34013 --- /dev/null +++ b/deploy/az/servicefabric/WindowsContainers/gen-keyvaultcert.ps1 @@ -0,0 +1,53 @@ +Param( + [parameter(Mandatory=$true)][string]$vaultName, + [parameter(Mandatory=$true)][string]$certName, + [parameter(Mandatory=$true)][string]$certPwd, + [parameter(Mandatory=$true)][string]$subjectName, + [parameter(Mandatory=$false)][string]$ValidityInMonths=12, + [parameter(Mandatory=$true)][string]$saveDir +) + + +#Log in Azure Account +Login-AzureRmAccount + + +# Create Cert in KeyVault +Write-Host "Creating certificate in Azure KeyVault..." -ForegroundColor Yellow +$policy = New-AzureKeyVaultCertificatePolicy -SubjectName $subjectName -IssuerName Self -ValidityInMonths $ValidityInMonths +Add-AzureKeyVaultCertificate -VaultName $vaultName -Name $certName -CertificatePolicy $policy + +# Downloading Certificate +Write-Host "Downloading Certificate from KeyVault..." -ForegroundColor Yellow + +$Stoploop = $false +$Retrycount = 0 + +do { + try { + + $kvSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certName -ErrorAction SilentlyContinue + $kvSecretBytes = [System.Convert]::FromBase64String($kvSecret.SecretValueText) + $certCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection + $certCollection.Import($kvSecretBytes,$null,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) + $protectedCertificateBytes = $certCollection.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPwd) + [System.IO.File]::WriteAllBytes($saveDir + "\" + $certName + ".pfx", $protectedCertificateBytes) + + $Stoploop = $true + Write-Host "Finished!" -ForegroundColor Yellow + } + catch { + if ($Retrycount -gt 5){ + $Stoploop = $true + Write-Host "Not possible to retrieve the certificate!" -ForegroundColor Yellow + } + else { + Start-Sleep -Seconds 20 + $Retrycount = $Retrycount + 1 + } + } +} +While ($Stoploop -eq $false) + +# Show Certificate Values +Get-AzureKeyVaultCertificate -VaultName $vaultName -Name $certName \ No newline at end of file diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index bbfe08bd1..9d8e7c486 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -1,4 +1,4 @@ -# Deploying Azure Service Fabric +# Deploying Azure Service Fabric (No Secured) The ARM template `servicefabricdeploy.json` and its parameter file (`servicefabricdeploy.parameters.json`) are used to create a service fabric cluster environment for windows containers. @@ -31,6 +31,58 @@ create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploy newReso Alternatively, instead of using ARM templates, you can deploy eShop on service fabric directly by publishing the project eShopOnServiceFabric in eShopOnContainers-ServicesAndWebApps.sln with Visual Studio publish tool. +# Deploying Azure Service Fabric (Secured) + +The ARM template `servicefabricdeploysecured.json` and its parameter file (`servicefabricdeploysecured.parameters.json`) are used to create a service fabric cluster environment for windows containers secured with a certificate. + +## Create Azure Keyvault service +Go to PortalAzure and create a Keyvault service. Make sure Enable access for deployment checkboxes are selected. + + + +## Generate a certificate in Azure Keyvault +Execute the gen-keyvaultcert.ps1 script to generate and download a certificate from Keyvault. + +``` +.\gen-cert.ps1 -vaultName -certName -certPwd -subjectName CN=.westeurope.cloudapp.azure.com -saveDir C:\Users\\Downloads + +``` +## Install the certificate +Install the certificate under 'Current User' store location and check it as exportable. + + + +## Editing servicefabricdeploysecured.parameters.json file + +Edit the following params in `servicefabricdeploysecured.parameters.json` file to set your values: + +- clusterName: Name of your SF cluster +- dnsName: Name assigned to your SF dns +- adminUserName: user name for administration +- adminPassword: user password for administration +- sourceVaultValue: keyvault resource id (check azure keyvault properties) +- certificateUrlValue: certificate url (check azure Keyvault certificate properties) +- certificateThumbprint: certificate thumbprint (check azure Keyvault certificate properties) + +Optionally, you can modify which ports are opened in the LoadBalancer for accessing externally to the apps: + +- webMvcHttpPort: port externally exposed for the WebMVC app +- webSpaHttpPort: port externally exposed for the WebSPA app +- webStatusHttpPort: port externally exposed for the WebStatus app +- IdSrvHttpRule: port externally exposed for the Identity app + +## Deploy the template + +Once parameter file is edited you can deploy it using [create-resources script](../readme.md). + +``` +create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploysecured newResourceGroup -c westus +``` +## Deploy eShopOnServiceFabric with Visual Studio. + +Modify the cloud.xml file of each Service Fabric application in PublishProfile directory and set your certificate settings to be able to deploy eshopOnContainers in the secured cluster: + + diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.json new file mode 100644 index 000000000..b5bbfa55c --- /dev/null +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.json @@ -0,0 +1,824 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterLocation": { + "type": "string", + "metadata": { + "description": "Location of the Cluster" + } + }, + "clusterName": { + "type": "string", + "defaultValue": "Cluster", + "metadata": { + "description": "Name of your cluster - Between 3 and 23 characters. Letters and numbers only" + } + }, + "nt0applicationStartPort": { + "type": "int", + "defaultValue": 20000 + }, + "nt0applicationEndPort": { + "type": "int", + "defaultValue": 30000 + }, + "nt0ephemeralStartPort": { + "type": "int", + "defaultValue": 49152 + }, + "nt0ephemeralEndPort": { + "type": "int", + "defaultValue": 65534 + }, + "nt0fabricTcpGatewayPort": { + "type": "int", + "defaultValue": 19000 + }, + "nt0fabricHttpGatewayPort": { + "type": "int", + "defaultValue": 19080 + }, + "nt0reverseProxyEndpointPort": { + "type": "int", + "defaultValue": 19081 + }, + "webMvcHttpPort": { + "type": "int", + "defaultValue": 5100 + }, + "webSpaHttpPort": { + "type": "int", + "defaultValue": 5104 + }, + "webStatusHttpPort": { + "type": "int", + "defaultValue": 5107 + }, + "IdSrvHttpRule": { + "type": "int", + "defaultValue": 5105 + }, + "subnet0Name": { + "type": "string", + "defaultValue": "Subnet-0" + }, + "subnet0Prefix": { + "type": "string", + "defaultValue": "10.0.0.0/24" + }, + "computeLocation": { + "type": "string" + }, + "publicIPAddressName": { + "type": "string", + "defaultValue": "PublicIP-VM" + }, + "publicIPAddressType": { + "type": "string", + "allowedValues": [ + "Dynamic" + ], + "defaultValue": "Dynamic" + }, + "vmStorageAccountContainerName": { + "type": "string", + "defaultValue": "vhds" + }, + "adminUserName": { + "type": "string", + "defaultValue": "testadm", + "metadata": { + "description": "Remote desktop user Id" + } + }, + "adminPassword": { + "type": "securestring", + "metadata": { + "description": "Remote desktop user password. Must be a strong password" + } + }, + "virtualNetworkName": { + "type": "string", + "defaultValue": "VNet" + }, + "addressPrefix": { + "type": "string", + "defaultValue": "10.0.0.0/16" + }, + "dnsName": { + "type": "string" + }, + "nicName": { + "type": "string", + "defaultValue": "NIC" + }, + "lbName": { + "type": "string", + "defaultValue": "LoadBalancer" + }, + "lbIPName": { + "type": "string", + "defaultValue": "PublicIP-LB-FE" + }, + "overProvision": { + "type": "string", + "defaultValue": "false" + }, + "vmImagePublisher": { + "type": "string", + "defaultValue": "MicrosoftWindowsServer" + }, + "vmImageOffer": { + "type": "string", + "defaultValue": "WindowsServer" + }, + "vmImageSku": { + "type": "string", + "defaultValue": "2012-R2-Datacenter" + }, + "vmImageVersion": { + "type": "string", + "defaultValue": "latest" + }, + "clusterProtectionLevel": { + "type": "string", + "allowedValues": [ + "None", + "Sign", + "EncryptAndSign" + ], + "defaultValue": "EncryptAndSign", + "metadata": { + "description": "Protection level.Three values are allowed - EncryptAndSign, Sign, None. It is best to keep the default of EncryptAndSign, unless you have a need not to" + } + }, + "certificateStoreValue": { + "type": "string", + "allowedValues": [ + "My" + ], + "defaultValue": "My", + "metadata": { + "description": "The store name where the cert will be deployed in the virtual machine" + } + }, + "certificateThumbprint": { + "type": "string", + "metadata": { + "description": "Certificate Thumbprint" + } + }, + "sourceVaultValue": { + "type": "string", + "metadata": { + "description": "Resource Id of the key vault, is should be in the format of /subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/" + } + }, + "certificateUrlValue": { + "type": "string", + "metadata": { + "description": "Refers to the location URL in your key vault where the certificate was uploaded, it is should be in the format of https://.vault.azure.net:443/secrets/" + } + }, + "storageAccountType": { + "type": "string", + "allowedValues": [ + "Standard_LRS", + "Standard_GRS" + ], + "defaultValue": "Standard_LRS", + "metadata": { + "description": "Replication option for the VM image storage account" + } + }, + "supportLogStorageAccountType": { + "type": "string", + "allowedValues": [ + "Standard_LRS", + "Standard_GRS" + ], + "defaultValue": "Standard_LRS", + "metadata": { + "description": "Replication option for the support log storage account" + } + }, + "supportLogStorageAccountName": { + "type": "string", + "defaultValue": "[toLower( concat('sflogs', uniqueString(resourceGroup().id),'2'))]", + "metadata": { + "description": "Name for the storage account that contains support logs from the cluster" + } + }, + "applicationDiagnosticsStorageAccountType": { + "type": "string", + "allowedValues": [ + "Standard_LRS", + "Standard_GRS" + ], + "defaultValue": "Standard_LRS", + "metadata": { + "description": "Replication option for the application diagnostics storage account" + } + }, + "applicationDiagnosticsStorageAccountName": { + "type": "string", + "defaultValue": "[toLower(concat(uniqueString(resourceGroup().id), '3' ))]", + "metadata": { + "description": "Name for the storage account that contains application diagnostics data from the cluster" + } + }, + "nt0InstanceCount": { + "type": "int", + "defaultValue": 5, + "metadata": { + "description": "Instance count for node type" + } + }, + "vmNodeType0Name": { + "type": "string", + "defaultValue": "primary", + "maxLength": 9 + }, + "vmNodeType0Size": { + "type": "string", + "defaultValue": "Standard_D2_v2" + } + }, + "variables": { + "vmssApiVersion": "2017-03-30", + "lbApiVersion": "2015-06-15", + "vNetApiVersion": "2015-06-15", + "storageApiVersion": "2016-01-01", + "publicIPApiVersion": "2015-06-15", + "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]", + "subnet0Ref": "[concat(variables('vnetID'),'/subnets/',parameters('subnet0Name'))]", + "lbID0": "[resourceId('Microsoft.Network/loadBalancers', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", + "lbIPConfig0": "[concat(variables('lbID0'),'/frontendIPConfigurations/LoadBalancerIPConfig')]", + "lbPoolID0": "[concat(variables('lbID0'),'/backendAddressPools/LoadBalancerBEAddressPool')]", + "lbProbeID0": "[concat(variables('lbID0'),'/probes/FabricGatewayProbe')]", + "lbHttpProbeID0": "[concat(variables('lbID0'),'/probes/FabricHttpGatewayProbe')]", + "lbNatPoolID0": "[concat(variables('lbID0'),'/inboundNatPools/LoadBalancerBEAddressNatPool')]", + "vmStorageAccountName0": "[toLower(concat(uniqueString(resourceGroup().id), '1', '0' ))]", + "uniqueStringArray0": [ + "[concat(variables('vmStorageAccountName0'), '0')]", + "[concat(variables('vmStorageAccountName0'), '1')]", + "[concat(variables('vmStorageAccountName0'), '2')]", + "[concat(variables('vmStorageAccountName0'), '3')]", + "[concat(variables('vmStorageAccountName0'), '4')]" + ] + }, + "resources": [ + { + "apiVersion": "[variables('storageApiVersion')]", + "type": "Microsoft.Storage/storageAccounts", + "name": "[parameters('supportLogStorageAccountName')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": {}, + "kind": "Storage", + "sku": { + "name": "[parameters('supportLogStorageAccountType')]" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('storageApiVersion')]", + "type": "Microsoft.Storage/storageAccounts", + "name": "[parameters('applicationDiagnosticsStorageAccountName')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": {}, + "kind": "Storage", + "sku": { + "name": "[parameters('applicationDiagnosticsStorageAccountType')]" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('vNetApiVersion')]", + "type": "Microsoft.Network/virtualNetworks", + "name": "[parameters('virtualNetworkName')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": { + "addressSpace": { + "addressPrefixes": [ + "[parameters('addressPrefix')]" + ] + }, + "subnets": [ + { + "name": "[parameters('subnet0Name')]", + "properties": { + "addressPrefix": "[parameters('subnet0Prefix')]" + } + } + ] + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('publicIPApiVersion')]", + "type": "Microsoft.Network/publicIPAddresses", + "name": "[concat(parameters('lbIPName'),'-','0')]", + "location": "[parameters('computeLocation')]", + "properties": { + "dnsSettings": { + "domainNameLabel": "[parameters('dnsName')]" + }, + "publicIPAllocationMethod": "Dynamic" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('lbApiVersion')]", + "type": "Microsoft.Network/loadBalancers", + "name": "[concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name'))]", + "location": "[parameters('computeLocation')]", + "dependsOn": [ + "[concat('Microsoft.Network/publicIPAddresses/',concat(parameters('lbIPName'),'-','0'))]" + ], + "properties": { + "frontendIPConfigurations": [ + { + "name": "LoadBalancerIPConfig", + "properties": { + "publicIPAddress": { + "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPName'),'-','0'))]" + } + } + } + ], + "backendAddressPools": [ + { + "name": "LoadBalancerBEAddressPool", + "properties": {} + } + ], + "loadBalancingRules": [ + { + "name": "LBRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('nt0fabricTcpGatewayPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('nt0fabricTcpGatewayPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "LBHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('nt0fabricHttpGatewayPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('nt0fabricHttpGatewayPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "ReverseProxyHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('nt0reverseProxyEndpointPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('nt0reverseProxyEndpointPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "WebMVCHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('webMvcHttpPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('webMvcHttpPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "WebSPAHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('webSpaHttpPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('webSpaHttpPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "WebStatusHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('webStatusHttpPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('webStatusHttpPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "IdSrvHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('IdSrvHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('IdSrvHttpRule')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } + } + ], + "probes": [ + { + "name": "FabricGatewayProbe", + "properties": { + "intervalInSeconds": 5, + "numberOfProbes": 2, + "port": "[parameters('nt0fabricTcpGatewayPort')]", + "protocol": "tcp" + } + }, + { + "name": "FabricHttpGatewayProbe", + "properties": { + "intervalInSeconds": 5, + "numberOfProbes": 2, + "port": "[parameters('nt0fabricHttpGatewayPort')]", + "protocol": "tcp" + } + } + ], + "inboundNatPools": [ + { + "name": "LoadBalancerBEAddressNatPool", + "properties": { + "backendPort": "3389", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPortRangeEnd": "4500", + "frontendPortRangeStart": "3389", + "protocol": "tcp" + } + } + ] + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('storageApiVersion')]", + "type": "Microsoft.Storage/storageAccounts", + "name": "[variables('uniqueStringArray0')[copyIndex()]]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": {}, + "copy": { + "name": "storageLoop", + "count": 5 + }, + "kind": "Storage", + "sku": { + "name": "[parameters('storageAccountType')]" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('vmssApiVersion')]", + "type": "Microsoft.Compute/virtualMachineScaleSets", + "name": "[parameters('vmNodeType0Name')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [ + "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]", + "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[0])]", + "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[1])]", + "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[2])]", + "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[3])]", + "[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[4])]", + "[concat('Microsoft.Network/loadBalancers/', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", + "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]", + "[concat('Microsoft.Storage/storageAccounts/', parameters('applicationDiagnosticsStorageAccountName'))]" + ], + "properties": { + "overprovision": "[parameters('overProvision')]", + "upgradePolicy": { + "mode": "Automatic" + }, + "virtualMachineProfile": { + "extensionProfile": { + "extensions": [ + { + "name": "[concat(parameters('vmNodeType0Name'),'_ServiceFabricNode')]", + "properties": { + "type": "ServiceFabricNode", + "autoUpgradeMinorVersion": true, + "protectedSettings": { + "StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key1]", + "StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key2]" + }, + "publisher": "Microsoft.Azure.ServiceFabric", + "settings": { + "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]", + "nodeTypeRef": "[parameters('vmNodeType0Name')]", + "dataPath": "D:\\\\SvcFab", + "durabilityLevel": "Bronze", + "enableParallelJobs": true, + "nicPrefixOverride": "[parameters('subnet0Prefix')]", + "certificate": { + "thumbprint": "[parameters('certificateThumbprint')]", + "x509StoreName": "[parameters('certificateStoreValue')]" + } + }, + "typeHandlerVersion": "1.0" + } + }, + { + "name": "[concat('VMDiagnosticsVmExt','_vmNodeType0Name')]", + "properties": { + "type": "IaaSDiagnostics", + "autoUpgradeMinorVersion": true, + "protectedSettings": { + "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]", + "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]", + "storageAccountEndPoint": "https://core.windows.net/" + }, + "publisher": "Microsoft.Azure.Diagnostics", + "settings": { + "WadCfg": { + "DiagnosticMonitorConfiguration": { + "overallQuotaInMB": "50000", + "EtwProviders": { + "EtwEventSourceProviderConfiguration": [ + { + "provider": "Microsoft-ServiceFabric-Actors", + "scheduledTransferKeywordFilter": "1", + "scheduledTransferPeriod": "PT5M", + "DefaultEvents": { + "eventDestination": "ServiceFabricReliableActorEventTable" + } + }, + { + "provider": "Microsoft-ServiceFabric-Services", + "scheduledTransferPeriod": "PT5M", + "DefaultEvents": { + "eventDestination": "ServiceFabricReliableServiceEventTable" + } + } + ], + "EtwManifestProviderConfiguration": [ + { + "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8", + "scheduledTransferLogLevelFilter": "Information", + "scheduledTransferKeywordFilter": "4611686018427387904", + "scheduledTransferPeriod": "PT5M", + "DefaultEvents": { + "eventDestination": "ServiceFabricSystemEventTable" + } + } + ] + } + } + }, + "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]" + }, + "typeHandlerVersion": "1.5" + } + } + ] + }, + "networkProfile": { + "networkInterfaceConfigurations": [ + { + "name": "[concat(parameters('nicName'), '-0')]", + "properties": { + "ipConfigurations": [ + { + "name": "[concat(parameters('nicName'),'-',0)]", + "properties": { + "loadBalancerBackendAddressPools": [ + { + "id": "[variables('lbPoolID0')]" + } + ], + "loadBalancerInboundNatPools": [ + { + "id": "[variables('lbNatPoolID0')]" + } + ], + "subnet": { + "id": "[variables('subnet0Ref')]" + } + } + } + ], + "primary": true + } + } + ] + }, + "osProfile": { + "adminPassword": "[parameters('adminPassword')]", + "adminUsername": "[parameters('adminUsername')]", + "computernamePrefix": "[parameters('vmNodeType0Name')]", + "secrets": [ + { + "sourceVault": { + "id": "[parameters('sourceVaultValue')]" + }, + "vaultCertificates": [ + { + "certificateStore": "[parameters('certificateStoreValue')]", + "certificateUrl": "[parameters('certificateUrlValue')]" + } + ] + } + ] + }, + "storageProfile": { + "imageReference": { + "publisher": "[parameters('vmImagePublisher')]", + "offer": "[parameters('vmImageOffer')]", + "sku": "[parameters('vmImageSku')]", + "version": "[parameters('vmImageVersion')]" + }, + "osDisk": { + "caching": "ReadOnly", + "createOption": "FromImage", + "vhdContainers": [ + "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[0]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]", + "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[1]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]", + "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[2]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]", + "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[3]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]", + "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[4]), variables('storageApiVersion')).primaryEndpoints.blob, parameters('vmStorageAccountContainerName'))]" + ], + "name": "vmssosdisk" + } + } + } + }, + "sku": { + "name": "[parameters('vmNodeType0Size')]", + "capacity": "[parameters('nt0InstanceCount')]", + "tier": "Standard" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "2017-07-01-preview", + "type": "Microsoft.ServiceFabric/clusters", + "name": "[parameters('clusterName')]", + "location": "[parameters('clusterLocation')]", + "dependsOn": [ + "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]" + ], + "properties": { + "addonFeatures": [ + "DnsService" + ], + "certificate": { + "thumbprint": "[parameters('certificateThumbprint')]", + "x509StoreName": "[parameters('certificateStoreValue')]" + }, + "clientCertificateCommonNames": [], + "clientCertificateThumbprints": [], + "clusterCodeVersion": "5.7.207.9494", + "clusterState": "Default", + "diagnosticsStorageAccountConfig": { + "blobEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.blob]", + "protectedAccountKeyName": "StorageAccountKey1", + "queueEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.queue]", + "storageAccountName": "[parameters('supportLogStorageAccountName')]", + "tableEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.table]" + }, + "fabricSettings": [ + { + "parameters": [ + { + "name": "ClusterProtectionLevel", + "value": "[parameters('clusterProtectionLevel')]" + } + ], + "name": "Security" + } + ], + "managementEndpoint": "[concat('https://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]", + "nodeTypes": [ + { + "name": "[parameters('vmNodeType0Name')]", + "applicationPorts": { + "endPort": "[parameters('nt0applicationEndPort')]", + "startPort": "[parameters('nt0applicationStartPort')]" + }, + "clientConnectionEndpointPort": "[parameters('nt0fabricTcpGatewayPort')]", + "durabilityLevel": "Bronze", + "ephemeralPorts": { + "endPort": "[parameters('nt0ephemeralEndPort')]", + "startPort": "[parameters('nt0ephemeralStartPort')]" + }, + "httpGatewayEndpointPort": "[parameters('nt0fabricHttpGatewayPort')]", + "isPrimary": true, + "reverseProxyEndpointPort": "[parameters('nt0reverseProxyEndpointPort')]", + "vmInstanceCount": "[parameters('nt0InstanceCount')]" + } + ], + "provisioningState": "Default", + "reliabilityLevel": "Silver", + "upgradeMode": "Manual", + "vmImage": "Windows" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + } + ], + "outputs": { + "clusterProperties": { + "value": "[reference(parameters('clusterName'))]", + "type": "object" + } + } +} \ No newline at end of file diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.parameters.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.parameters.json new file mode 100644 index 000000000..22dd82265 --- /dev/null +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.parameters.json @@ -0,0 +1,91 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "value": "your_sf_name" + }, + "clusterLocation": { + "value": "westeurope" + }, + "computeLocation": { + "value": "westeurope" + }, + "adminUserName": { + "value": "eshop" + }, + "adminPassword": { + "value": "your_admin_password" + }, + "nicName": { + "value": "NIC-eshopsfwin" + }, + "publicIPAddressName": { + "value": "eshopsfwin-PubIP" + }, + "dnsName": { + "value": "your_sf_dns" + }, + "virtualNetworkName": { + "value": "VNet-eshopsfwin" + }, + "lbName": { + "value": "LB-eshopsfwin" + }, + "lbIPName": { + "value": "LBIP-eshopsfwin" + }, + "applicationDiagnosticsStorageAccountName": { + "value": "sfdgeshopsfwin6744" + }, + "supportLogStorageAccountName": { + "value": "sflogseshopsfwin3480" + }, + "sourceVaultValue": { + "value": "/subscriptions/6c22bb55-0221-4ce4-9bf1-3c4a10a7294c/resourceGroups/eshop-sf-win/providers/Microsoft.KeyVault/vaults/eshoponsfkeyvault" + }, + "certificateUrlValue": { + "value": "https://eshoponsfkeyvault.vault.azure.net:443/secrets/eshopsfwincert/b4ae55e3a549448c96088cd8dd96c369" + }, + "certificateThumbprint": { + "value": "" + }, + "vmImageSku": { + "value": "2016-Datacenter-with-Containers" + }, + "nt0ephemeralStartPort": { + "value": 49152 + }, + "nt0ephemeralEndPort": { + "value": 65534 + }, + "nt0applicationStartPort": { + "value": 20000 + }, + "nt0applicationEndPort": { + "value": 30000 + }, + "nt0fabricTcpGatewayPort": { + "value": 19000 + }, + "nt0fabricHttpGatewayPort": { + "value": 19080 + }, + "nt0reverseProxyEndpointPort": { + "value": 19081 + }, + "webMvcHttpPort": { + "value": 5100 + }, + "webSpaHttpPort": { + "value": 5104 + }, + "webStatusHttpPort": { + "value": 5107 + }, + "IdSrvHttpRule": { + "value": 5105 + } + } +} + diff --git a/img/sf/cloud_publishProfile.PNG b/img/sf/cloud_publishProfile.PNG new file mode 100644 index 0000000000000000000000000000000000000000..edd5c53e5b761e8c7b0ec49bb29010e6e1145f49 GIT binary patch literal 14374 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 OQ}>?H-EvL)@c#kqZ@b_C literal 0 HcmV?d00001 diff --git a/img/sf/create-kv.PNG b/img/sf/create-kv.PNG new file mode 100644 index 0000000000000000000000000000000000000000..f2c5f91c3b5c7e3359b9d8361fdbdba126db6e83 GIT binary patch literal 23823 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 YuGSqBSl9~O^aYt2Tc0DGxqkou0=OWu>Hq)$ literal 0 HcmV?d00001 From 04cb531b46d41846cab76f88bc1f939048c33618 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Wed, 4 Oct 2017 11:05:04 -0700 Subject: [PATCH 033/136] Revert "Update docker-compose.yml" --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a9c14c6f7..23acd8af7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -97,7 +97,7 @@ services: - rabbitmq sql.data: - image: microsoft/mssql-server-linux:2017-latest + image: microsoft/mssql-server-linux:latest nosql.data: image: mongo @@ -111,4 +111,4 @@ services: image: rabbitmq:3-management ports: - "15672:15672" - - "5672:5672" + - "5672:5672" \ No newline at end of file From e8c8678082d39533c38cc53ebf8c23f263df7762 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Wed, 4 Oct 2017 13:54:34 -0700 Subject: [PATCH 034/136] Changed to new GA SQL Server container Image tag and parameters --- .../ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml | 2 +- docker-compose-external.override.yml | 2 +- docker-compose-external.yml | 2 +- docker-compose-windows.prod.yml | 2 +- docker-compose.nobuild.yml | 2 +- docker-compose.override.yml | 2 +- docker-compose.prod.yml | 2 +- docker-compose.yml | 2 +- k8s/sql-data.yaml | 4 ++-- src/Web/WebMonolithic/docker-compose.override.yml | 2 +- src/Web/WebMonolithic/docker-compose.yml | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml index 652e30383..b71459931 100644 --- a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml +++ b/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml @@ -20,7 +20,7 @@ - + diff --git a/docker-compose-external.override.yml b/docker-compose-external.override.yml index f20440ad7..60764ca54 100644 --- a/docker-compose-external.override.yml +++ b/docker-compose-external.override.yml @@ -3,7 +3,7 @@ version: '2' services: sql.data: environment: - - SA_PASSWORD=Pass@word + - MSSQL_SA_PASSWORD=Pass@word - ACCEPT_EULA=Y ports: - "5433:1433" \ No newline at end of file diff --git a/docker-compose-external.yml b/docker-compose-external.yml index 8d8d61add..50bbd12af 100644 --- a/docker-compose-external.yml +++ b/docker-compose-external.yml @@ -2,7 +2,7 @@ version: '2.1' services: sql.data: - image: microsoft/mssql-server-linux + image: microsoft/mssql-server-linux:2017-latest basket.data: image: redis diff --git a/docker-compose-windows.prod.yml b/docker-compose-windows.prod.yml index d5ea2d1bc..25b78a7a8 100644 --- a/docker-compose-windows.prod.yml +++ b/docker-compose-windows.prod.yml @@ -121,7 +121,7 @@ services: sql.data: environment: - - SA_PASSWORD=Pass@word + - MSSQL_SA_PASSWORD=Pass@word - ACCEPT_EULA=Y ports: - "5433:1433" diff --git a/docker-compose.nobuild.yml b/docker-compose.nobuild.yml index 186ab8639..5c6c691e6 100644 --- a/docker-compose.nobuild.yml +++ b/docker-compose.nobuild.yml @@ -66,7 +66,7 @@ services: - rabbitmq sql.data: - image: microsoft/mssql-server-linux + image: microsoft/mssql-server-linux:2017-latest nosql.data: image: mongo diff --git a/docker-compose.override.yml b/docker-compose.override.yml index bb5cc732f..0d4c420c2 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -177,7 +177,7 @@ services: sql.data: environment: - - SA_PASSWORD=Pass@word + - MSSQL_SA_PASSWORD=Pass@word - ACCEPT_EULA=Y - MSSQL_PID=Developer ports: diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 313811f19..b3d3f1156 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -124,7 +124,7 @@ services: sql.data: environment: - - SA_PASSWORD=Pass@word + - MSSQL_SA_PASSWORD=Pass@word - ACCEPT_EULA=Y - MSSQL_PID=Developer ports: diff --git a/docker-compose.yml b/docker-compose.yml index 23acd8af7..e6d9385a0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -97,7 +97,7 @@ services: - rabbitmq sql.data: - image: microsoft/mssql-server-linux:latest + image: microsoft/mssql-server-linux:2017-latest nosql.data: image: mongo diff --git a/k8s/sql-data.yaml b/k8s/sql-data.yaml index 4b607ac98..245622e83 100644 --- a/k8s/sql-data.yaml +++ b/k8s/sql-data.yaml @@ -25,11 +25,11 @@ spec: spec: containers: - name: sql-data - image: microsoft/mssql-server-linux:latest + image: microsoft/mssql-server-linux:2017-latest env: - name: ACCEPT_EULA value: "Y" - name: MSSQL_PID value: Developer - - name: SA_PASSWORD + - name: MSSQL_SA_PASSWORD value: Pass@word diff --git a/src/Web/WebMonolithic/docker-compose.override.yml b/src/Web/WebMonolithic/docker-compose.override.yml index e908c1de9..436429c19 100644 --- a/src/Web/WebMonolithic/docker-compose.override.yml +++ b/src/Web/WebMonolithic/docker-compose.override.yml @@ -11,7 +11,7 @@ services: sql.data: environment: - - SA_PASSWORD=Pass@word + - MSSQL_SA_PASSWORD=Pass@word - ACCEPT_EULA=Y ports: - "5433:1433" diff --git a/src/Web/WebMonolithic/docker-compose.yml b/src/Web/WebMonolithic/docker-compose.yml index dceec42c5..7ca7e96b5 100644 --- a/src/Web/WebMonolithic/docker-compose.yml +++ b/src/Web/WebMonolithic/docker-compose.yml @@ -9,4 +9,4 @@ services: depends_on: - sql.data sql.data: - image: microsoft/mssql-server-linux + image: microsoft/mssql-server-linux:2017-latest From 87608ca1dfd3e0c8d0b5c6f632679fd7e3c7dd48 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Thu, 5 Oct 2017 11:50:30 -0700 Subject: [PATCH 035/136] Added links to eReader formats (Kindle/MOBI and EPUB) --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index de1a9ab13..89db9f4de 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,11 @@ You can download them and start reviewing these Guides/eBooks here: | Architecting & Developing | Containers Lifecycle & CI/CD | App patterns with Xamarin.Forms | | ------------ | ------------| ------------| | | | | -| **Download** (First Edition) | **Download** (First Edition) | **Download** (First Edition) | +| + **Download .PDF** (First Edition)
+ **Download .MOBI/Kindle** (First Edition)
+ **Download .EPUB** (First Edition)
+| **Download** (First Edition) | **Download** (First Edition) | Send feedback to [dotnet-architecture-ebooks-feedback@service.microsoft.com](dotnet-architecture-ebooks-feedback@service.microsoft.com)

From 4e660ad4b57a62e56c916ebcdcff1ad9f2c48e76 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Thu, 5 Oct 2017 11:51:13 -0700 Subject: [PATCH 036/136] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 89db9f4de..d668b6a5a 100644 --- a/README.md +++ b/README.md @@ -51,9 +51,9 @@ You can download them and start reviewing these Guides/eBooks here: | ------------ | ------------| ------------| | | | | | - **Download .PDF** (First Edition)
- **Download .MOBI/Kindle** (First Edition)
- **Download .EPUB** (First Edition)
+ **Download .PDF** (First Edition) + **Download .MOBI/Kindle** (First Edition) + **Download .EPUB** (First Edition) | **Download** (First Edition) | **Download** (First Edition) | Send feedback to [dotnet-architecture-ebooks-feedback@service.microsoft.com](dotnet-architecture-ebooks-feedback@service.microsoft.com) From e67a003822d0a2926a4759866d6f998690ebed19 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Thu, 5 Oct 2017 11:52:50 -0700 Subject: [PATCH 037/136] Update README.md --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index d668b6a5a..ff14d3b18 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ To access the .NET Core 1.1 version you can use the `netcore1.1` tag ([https://g However, this sample application should not be considered as an "eCommerce reference model", at all. The implemented business domain might not be ideal from an eCommerce business point of view. It is neither trying to solve all the problems in a large, scalable and mission-critical distributed system. It is just a bootstrap for developers to easily get started in the world of Docker containers and microservices with .NET Core. >

The next step after understanding Docker containers and microservices development with .NET Core, is to select a microservice cluster/orchestrator like Azure Service Fabric or Kubernetes, DC/OS or Docker Swarm (in Azure Container Service). Kubernetes and Service Fabric are being tested with eShopOnContainer. > Additional steps already tested in eShopOnContainers are about moving your databases to HA cloud services (like Azure SQL DB), to implement your EventBus with Azure Service Bus or any other production ready Service Bus in the market. -> + > Read the planned Roadmap and Milestones for future releases of eShopOnContainers within the Wiki for further info about possible new implementations and provide feedback at the ISSUES section if you'd like to see any specific scenario implemented or improved. Also, feel free to discuss on any current issue. **Architecture overview**: This reference application is cross-platform either at the server and client side, thanks to .NET Core services capable of running on Linux or Windows containers depending on your Docker host, and to Xamarin for mobile apps running on Android, iOS or Windows/UWP plus any browser for the client web apps. @@ -50,11 +50,9 @@ You can download them and start reviewing these Guides/eBooks here: | Architecting & Developing | Containers Lifecycle & CI/CD | App patterns with Xamarin.Forms | | ------------ | ------------| ------------| | | | | -| - **Download .PDF** (First Edition) +| **Download .PDF** (First Edition) **Download .MOBI/Kindle** (First Edition) - **Download .EPUB** (First Edition) -| **Download** (First Edition) | **Download** (First Edition) | + **Download .EPUB** (First Edition) | **Download** (First Edition) | **Download** (First Edition) | Send feedback to [dotnet-architecture-ebooks-feedback@service.microsoft.com](dotnet-architecture-ebooks-feedback@service.microsoft.com)

From 5d59c1721ea69b8d6be693a157c4ec1734711df3 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Thu, 5 Oct 2017 11:59:04 -0700 Subject: [PATCH 038/136] Update README.md --- README.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index ff14d3b18..d83ab7728 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Sample .NET Core reference application, powered by Microsoft, based on a simplif ## Moved to .NET Core 2.0 "wave" We have moved to .NET Core 2.0 already! - + * Branch `dev` is in .NET Core 2.0. * Branch `master` is *still* in .NET Core 1.1 (but it will be updated soon) @@ -14,21 +14,22 @@ To access the .NET Core 1.1 version you can use the `netcore1.1` tag ([https://g > ### DISCLAIMER > **IMPORTANT:** The current state of this sample application is **BETA** for the .NET Core 2.0 version, and v1.0 for the .NET Core 1.1.2 version tagged ([https://github.com/dotnet-architecture/eShopOnContainers/tree/netcore1.1](https://github.com/dotnet-architecture/eShopOnContainers/tree/netcore1.1)) -> +P> > This reference application proposes a simplified microservice oriented architecture implementation to introduce technologies like .NET Core with Docker containers through a comprehensive application. The chosen domain is an eShop/eCommerce but simply because it is a well-know domain by most people/developers. However, this sample application should not be considered as an "eCommerce reference model", at all. The implemented business domain might not be ideal from an eCommerce business point of view. It is neither trying to solve all the problems in a large, scalable and mission-critical distributed system. It is just a bootstrap for developers to easily get started in the world of Docker containers and microservices with .NET Core. >

The next step after understanding Docker containers and microservices development with .NET Core, is to select a microservice cluster/orchestrator like Azure Service Fabric or Kubernetes, DC/OS or Docker Swarm (in Azure Container Service). Kubernetes and Service Fabric are being tested with eShopOnContainer. + > Additional steps already tested in eShopOnContainers are about moving your databases to HA cloud services (like Azure SQL DB), to implement your EventBus with Azure Service Bus or any other production ready Service Bus in the market. > Read the planned Roadmap and Milestones for future releases of eShopOnContainers within the Wiki for further info about possible new implementations and provide feedback at the ISSUES section if you'd like to see any specific scenario implemented or improved. Also, feel free to discuss on any current issue. **Architecture overview**: This reference application is cross-platform either at the server and client side, thanks to .NET Core services capable of running on Linux or Windows containers depending on your Docker host, and to Xamarin for mobile apps running on Android, iOS or Windows/UWP plus any browser for the client web apps. The architecture proposes a simplified microservice oriented architecture implementation with multiple autonomous microservices (each one owning its own data/db) and implementing different approaches within each microservice (simple CRUD vs. DDD/CQRS patterns) using Http as the communication protocol between the client apps and the microservices and supports asynchronous communication for data updates propagation across multiple services based on Integration Events and an Event Bus (a light message broker, to choose between RabbitMQ or Azure Service Bus, underneath) plus other features defined at the roadmap. -

+

-The microservices are different in type, meaning different internal architecture patterns approaches depending on it purpose, as shown in the image below. + The microservices are different in type, meaning different internal architecture patterns approaches depending on it purpose, as shown in the image below.

@@ -51,8 +52,14 @@ You can download them and start reviewing these Guides/eBooks here: | ------------ | ------------| ------------| | | | | | **Download .PDF** (First Edition) + **Online pages** (First Edition) **Download .MOBI/Kindle** (First Edition) - **Download .EPUB** (First Edition) | **Download** (First Edition) | **Download** (First Edition) | + **Download .EPUB** (First Edition) | **Download .PDF** (First Edition) +| **Download .PDF** (First Edition) + **Online pages** (First Edition) + --- + --- +| Send feedback to [dotnet-architecture-ebooks-feedback@service.microsoft.com](dotnet-architecture-ebooks-feedback@service.microsoft.com)

From ad758dac3266a4bc1e39d4b431f2d2b819f2b285 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Thu, 5 Oct 2017 12:01:36 -0700 Subject: [PATCH 039/136] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d83ab7728..4534e9594 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,9 @@ You can download them and start reviewing these Guides/eBooks here: **Online pages** (First Edition) **Download .MOBI/Kindle** (First Edition) **Download .EPUB** (First Edition) | **Download .PDF** (First Edition) -| **Download .PDF** (First Edition) + --- + --- + --- | **Download .PDF** (First Edition) **Online pages** (First Edition) --- --- From 5cc56d7c666358a6c953f68a508328f257ad737f Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Thu, 5 Oct 2017 12:07:55 -0700 Subject: [PATCH 040/136] Update README.md --- README.md | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 4534e9594..1a495d79a 100644 --- a/README.md +++ b/README.md @@ -51,17 +51,11 @@ You can download them and start reviewing these Guides/eBooks here: | Architecting & Developing | Containers Lifecycle & CI/CD | App patterns with Xamarin.Forms | | ------------ | ------------| ------------| | | | | -| **Download .PDF** (First Edition) - **Online pages** (First Edition) - **Download .MOBI/Kindle** (First Edition) - **Download .EPUB** (First Edition) | **Download .PDF** (First Edition) - --- - --- - --- | **Download .PDF** (First Edition) - **Online pages** (First Edition) - --- - --- -| +| **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | +| **Online pages** (First Edition) | **Online pages** (First Edition) | ------------ | +| **Download .MOBI/Kindle** (First Edition) | ------------| ------------| +| **Download .EPUB** (First Edition) | | ------------| ------------| +| ------------ | ------------| ------------| Send feedback to [dotnet-architecture-ebooks-feedback@service.microsoft.com](dotnet-architecture-ebooks-feedback@service.microsoft.com)

From f63aa4598887075436502b05d516a041a2a1b60f Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Thu, 5 Oct 2017 12:09:38 -0700 Subject: [PATCH 041/136] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1a495d79a..4d9ef9ce6 100644 --- a/README.md +++ b/README.md @@ -53,9 +53,8 @@ You can download them and start reviewing these Guides/eBooks here: | | | | | **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | | **Online pages** (First Edition) | **Online pages** (First Edition) | ------------ | -| **Download .MOBI/Kindle** (First Edition) | ------------| ------------| -| **Download .EPUB** (First Edition) | | ------------| ------------| -| ------------ | ------------| ------------| +| **Download .MOBI/Kindle** (First Edition) | ------------ | ------------ | +| **Download .EPUB** (First Edition) | | ------------ | ------------ | Send feedback to [dotnet-architecture-ebooks-feedback@service.microsoft.com](dotnet-architecture-ebooks-feedback@service.microsoft.com)

From 6a6af36d893d15853b7089ceb504092789a711ea Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Thu, 5 Oct 2017 12:10:41 -0700 Subject: [PATCH 042/136] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 4d9ef9ce6..3d690ec24 100644 --- a/README.md +++ b/README.md @@ -53,8 +53,7 @@ You can download them and start reviewing these Guides/eBooks here: | | | | | **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | | **Online pages** (First Edition) | **Online pages** (First Edition) | ------------ | -| **Download .MOBI/Kindle** (First Edition) | ------------ | ------------ | -| **Download .EPUB** (First Edition) | | ------------ | ------------ | +| **Download .MOBI/Kindle** (First Edition) | ------------ | ------------ | **Download .EPUB** (First Edition) | | ------------ | ------------ | Send feedback to [dotnet-architecture-ebooks-feedback@service.microsoft.com](dotnet-architecture-ebooks-feedback@service.microsoft.com)

From 4ffdb0d9157f16828ca8a274c5fa3dc04282415a Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Thu, 5 Oct 2017 12:12:16 -0700 Subject: [PATCH 043/136] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3d690ec24..b55ef5af1 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ You can download them and start reviewing these Guides/eBooks here: | ------------ | ------------| ------------| | | | | | **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | -| **Online pages** (First Edition) | **Online pages** (First Edition) | ------------ | +| **Online pages** (First Edition) | ------------ | **Online pages** (First Edition) | | **Download .MOBI/Kindle** (First Edition) | ------------ | ------------ | **Download .EPUB** (First Edition) | | ------------ | ------------ | Send feedback to [dotnet-architecture-ebooks-feedback@service.microsoft.com](dotnet-architecture-ebooks-feedback@service.microsoft.com) From 53d7967581320a477af46af0d95a83a14a2a1111 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Thu, 5 Oct 2017 12:14:50 -0700 Subject: [PATCH 044/136] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b55ef5af1..4e444f149 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ You can download them and start reviewing these Guides/eBooks here: | | | | | **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | | **Online pages** (First Edition) | ------------ | **Online pages** (First Edition) | -| **Download .MOBI/Kindle** (First Edition) | ------------ | ------------ | **Download .EPUB** (First Edition) | | ------------ | ------------ | +| **Download .MOBI/Kindle** (First Edition) | ------------ | ------------ | | **Download .EPUB** (First Edition) | ------------ | ------------ | Send feedback to [dotnet-architecture-ebooks-feedback@service.microsoft.com](dotnet-architecture-ebooks-feedback@service.microsoft.com)

From 3c2efbf6783d396d89f37190639cc8b55eb40fc1 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Thu, 5 Oct 2017 12:16:23 -0700 Subject: [PATCH 045/136] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4e444f149..b97fe0d89 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,8 @@ You can download them and start reviewing these Guides/eBooks here: | | | | | **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | | **Online pages** (First Edition) | ------------ | **Online pages** (First Edition) | -| **Download .MOBI/Kindle** (First Edition) | ------------ | ------------ | | **Download .EPUB** (First Edition) | ------------ | ------------ | +| **Download .MOBI/Kindle** (First Edition) | ------------ | ------------ | +| **Download .EPUB** (First Edition) | ------------ | ------------ | Send feedback to [dotnet-architecture-ebooks-feedback@service.microsoft.com](dotnet-architecture-ebooks-feedback@service.microsoft.com)

From ec5aee5187fe6d58e421de915c868ee9300f78c5 Mon Sep 17 00:00:00 2001 From: Unai Zorrilla Castro Date: Fri, 6 Oct 2017 12:09:16 +0200 Subject: [PATCH 046/136] Remove hardcoded database name from GracePeriodManagerService --- .../Infrastructure/HostedServices/GracePeriodManagerService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/GracePeriodManagerService.cs b/src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/GracePeriodManagerService.cs index f38fc8fd8..3fa70e20b 100644 --- a/src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/GracePeriodManagerService.cs +++ b/src/Services/Ordering/Ordering.API/Infrastructure/HostedServices/GracePeriodManagerService.cs @@ -71,7 +71,7 @@ { conn.Open(); orderIds = conn.Query( - @"SELECT Id FROM [Microsoft.eShopOnContainers.Services.OrderingDb].[ordering].[orders] + @"SELECT Id FROM [ordering].[orders] WHERE DATEDIFF(minute, [OrderDate], GETDATE()) >= @GracePeriodTime AND [OrderStatusId] = 1", new { GracePeriodTime = _settings.GracePeriodTime }); From eb38172abf7661f9435d0e6834cacb6cbf124bb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Fri, 6 Oct 2017 12:18:30 +0200 Subject: [PATCH 047/136] Removed swagger from Payment.api --- src/Services/Payment/Payment.API/Startup.cs | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/src/Services/Payment/Payment.API/Startup.cs b/src/Services/Payment/Payment.API/Startup.cs index 44393186b..0fc94fc1d 100644 --- a/src/Services/Payment/Payment.API/Startup.cs +++ b/src/Services/Payment/Payment.API/Startup.cs @@ -76,19 +76,6 @@ namespace Payment.API checks.AddValueTaskCheck("HTTP Endpoint", () => new ValueTask(HealthCheckResult.Healthy("Ok"))); }); - // Add framework services. - services.AddSwaggerGen(options => - { - options.DescribeAllEnumsAsStrings(); - options.SwaggerDoc("v1", new Swashbuckle.AspNetCore.Swagger.Info - { - Title = "eShopOnContainers - Payment HTTP API", - Version = "v1", - Description = "The Payment Microservice HTTP API. This is a Data-Driven/CRUD microservice sample", - TermsOfService = "Terms Of Service" - }); - }); - RegisterEventBus(services); var container = new ContainerBuilder(); @@ -105,14 +92,6 @@ namespace Payment.API app.UsePathBase(pathBase); } - app.UseMvcWithDefaultRoute(); - - app.UseSwagger() - .UseSwaggerUI(c => - { - c.SwaggerEndpoint($"{ (!string.IsNullOrEmpty(pathBase) ? pathBase : string.Empty) }/swagger/v1/swagger.json", "My API V1"); - }); - ConfigureEventBus(app); } From f4ea3cdfa358c3677070680eb965d81a3dda24b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduard=20Tom=C3=A0s?= Date: Fri, 6 Oct 2017 12:31:47 +0200 Subject: [PATCH 048/136] build script with no parallel msbuild. For using with VSTS (parallel builds seems to cause that some builds fail randomly) --- cli-windows/vsts/build-bits-no-parallel.ps1 | 56 +++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 cli-windows/vsts/build-bits-no-parallel.ps1 diff --git a/cli-windows/vsts/build-bits-no-parallel.ps1 b/cli-windows/vsts/build-bits-no-parallel.ps1 new file mode 100644 index 000000000..4344bdcc8 --- /dev/null +++ b/cli-windows/vsts/build-bits-no-parallel.ps1 @@ -0,0 +1,56 @@ +Param([string] $rootPath) +$scriptPath = Split-Path $script:MyInvocation.MyCommand.Path + +Write-Host "Current script directory is $scriptPath" -ForegroundColor Yellow + +if ([string]::IsNullOrEmpty($rootPath)) { + $rootPath = "$scriptPath\..\.." +} +Write-Host "Root path used is $rootPath" -ForegroundColor Yellow + + +$projectPaths = + @{Path="$rootPath\src\Web\WebMVC";Prj="WebMVC.csproj"}, + @{Path="$rootPath\src\Web\WebSPA";Prj="WebSPA.csproj"}, + @{Path="$rootPath\src\Services\Identity\Identity.API";Prj="Identity.API.csproj"}, + @{Path="$rootPath\src\Services\Catalog\Catalog.API";Prj="Catalog.API.csproj"}, + @{Path="$rootPath\src\Services\Ordering\Ordering.API";Prj="Ordering.API.csproj"}, + @{Path="$rootPath\src\Services\Basket\Basket.API";Prj="Basket.API.csproj"}, + @{Path="$rootPath\src\Services\Location\Locations.API";Prj="Locations.API.csproj"}, + @{Path="$rootPath\src\Services\Marketing\Marketing.API";Prj="Marketing.API.csproj"}, + @{Path="$rootPath\src\Services\Payment\Payment.API";Prj="Payment.API.csproj"}, + @{Path="$rootPath\src\Web\WebStatus";Prj="WebStatus.csproj"} + +$projectPaths | foreach { + $projectPath = $_.Path + $projectFile = $_.Prj + $outPath = $_.Path + "\obj\Docker\publish" + $projectPathAndFile = "$projectPath\$projectFile" + Write-Host "Deleting old publish files in $outPath" -ForegroundColor Yellow + remove-item -path $outPath -Force -Recurse -ErrorAction SilentlyContinue + Write-Host "Publishing $projectPathAndFile to $outPath" -ForegroundColor Yellow + dotnet restore $projectPathAndFile + dotnet build $projectPathAndFile + dotnet publish $projectPathAndFile -o $outPath + } + +######################################################################################## +# Delete old eShop Docker images +######################################################################################## + +$imagesToDelete = docker images --filter=reference="eshop/*" -q + +If (-Not $imagesToDelete) {Write-Host "Not deleting eShop images as there are no eShop images in the current local Docker repo."} +Else +{ + # Delete all containers + Write-Host "Deleting all containers in local Docker Host" + docker rm $(docker ps -a -q) -f + + # Delete all eshop images + Write-Host "Deleting eShop images in local Docker repo" + Write-Host $imagesToDelete + docker rmi $(docker images --filter=reference="eshop/*" -q) -f +} + +# WE DON'T NEED DOCKER BUILD AS WE CAN RUN "DOCKER-COMPOSE BUILD" OR "DOCKER-COMPOSE UP" AND IT WILL BUILD ALL THE IMAGES IN THE .YML FOR US From cc4325cee5592dc18f03acfd7e3d8c3d0c1c5afe Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Sun, 8 Oct 2017 13:24:32 -0700 Subject: [PATCH 049/136] Updated all docker-compose files version from 2.1 to 3 --- docker-compose-external.yml | 2 +- docker-compose-windows.prod.yml | 2 +- docker-compose-windows.yml | 2 +- docker-compose.ci.build.yml | 2 +- docker-compose.nobuild.yml | 2 +- docker-compose.override.windows.yml | 2 +- docker-compose.override.yml | 2 +- docker-compose.prod.yml | 2 +- docker-compose.yml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docker-compose-external.yml b/docker-compose-external.yml index 50bbd12af..8d8e0e760 100644 --- a/docker-compose-external.yml +++ b/docker-compose-external.yml @@ -1,4 +1,4 @@ -version: '2.1' +version: '3' services: sql.data: diff --git a/docker-compose-windows.prod.yml b/docker-compose-windows.prod.yml index 25b78a7a8..0e7602e8f 100644 --- a/docker-compose-windows.prod.yml +++ b/docker-compose-windows.prod.yml @@ -1,4 +1,4 @@ -version: '2.1' +version: '3' # The Production docker-compose file has to have the external/real IPs or DNS names for the services # The ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP environment variable is taken, by default, from the ".env" file defined like: diff --git a/docker-compose-windows.yml b/docker-compose-windows.yml index 294d5f7f5..08785cff1 100644 --- a/docker-compose-windows.yml +++ b/docker-compose-windows.yml @@ -1,4 +1,4 @@ -version: '2.1' +version: '3' services: basket.api: diff --git a/docker-compose.ci.build.yml b/docker-compose.ci.build.yml index 02fe39637..d4b69f9c5 100644 --- a/docker-compose.ci.build.yml +++ b/docker-compose.ci.build.yml @@ -1,4 +1,4 @@ -version: '2.1' +version: '3' services: ci-build: diff --git a/docker-compose.nobuild.yml b/docker-compose.nobuild.yml index 5c6c691e6..4f301cd3c 100644 --- a/docker-compose.nobuild.yml +++ b/docker-compose.nobuild.yml @@ -1,4 +1,4 @@ -version: '2.1' +version: '3' services: basket.api: diff --git a/docker-compose.override.windows.yml b/docker-compose.override.windows.yml index 130405d3b..537b3b098 100644 --- a/docker-compose.override.windows.yml +++ b/docker-compose.override.windows.yml @@ -1,4 +1,4 @@ -version: '2.1' +version: '3' # ONLY NEEDED WHEN RUNNING WINDOWS CONTAINERS # diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 0d4c420c2..39110c1be 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -1,4 +1,4 @@ -version: '2.1' +version: '3' # The default docker-compose.override file can use the "localhost" as the external name for testing web apps within the same dev machine. # The ESHOP_EXTERNAL_DNS_NAME_OR_IP environment variable is taken, by default, from the ".env" file defined like: diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index b3d3f1156..a2301c236 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -1,4 +1,4 @@ -version: '2.1' +version: '3' # The Production docker-compose file has to have the external/real IPs or DNS names for the services # The ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP environment variable is taken, by default, from the ".env" file defined like: diff --git a/docker-compose.yml b/docker-compose.yml index e6d9385a0..d05d5f697 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,4 @@ -version: '2.1' +version: '3' services: From 3385c63cc69f9b707cb2d466cc28296121dfbcf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Mon, 9 Oct 2017 19:00:01 +0200 Subject: [PATCH 050/136] Added eShopOnServiceFabric project for Linux --- .../ApplicationManifest.xml | 0 .../BasketApiPkg/Config/Settings.xml | 0 .../BasketApiPkg/ServiceManifest.xml | 48 ++++ .../BasketDataPkg/Config/Settings.xml | 0 .../BasketDataPkg/ServiceManifest.xml | 41 +++ .../CatalogApiPkg/Config/Settings.xml | 0 .../CatalogApiPkg/ServiceManifest.xml | 51 ++++ .../LocationsApiPkg/Config/Settings.xml | 0 .../LocationsApiPkg/ServiceManifest.xml | 49 ++++ .../MarketingApiPkg/Config/Settings.xml | 0 .../MarketingApiPkg/ServiceManifest.xml | 55 ++++ .../MongoDBPkg/Config/Settings.xml | 0 .../MongoDBPkg/ServiceManifest.xml | 41 +++ .../OrderingApiPkg/Config/Settings.xml | 0 .../OrderingApiPkg/ServiceManifest.xml | 51 ++++ .../PaymentApiPkg/Config/Settings.xml | 0 .../PaymentApiPkg/ServiceManifest.xml | 45 +++ .../RabbitMQPkg/Config/Settings.xml | 0 .../RabbitMQPkg/ServiceManifest.xml | 40 +++ .../SqlServerPkg/Config/Settings.xml | 0 .../SqlServerPkg/ServiceManifest.xml | 41 +++ .../ApplicationParameters/Cloud.xml | 0 .../ApplicationParameters/Local.1Node.xml | 0 .../ApplicationParameters/Local.5Node.xml | 0 .../PublishProfiles/Cloud.xml | 0 .../PublishProfiles/Local.1Node.xml | 0 .../PublishProfiles/Local.5Node.xml | 0 .../Scripts/Deploy-FabricApplication.ps1 | 0 .../eShopOnServiceFabric.sfproj | 63 +++++ .../eShopOnServiceFabric/packages.config | 0 .../ApplicationManifest.xml | 0 .../IdentityApiPkg/Config/Settings.xml | 0 .../IdentityApiPkg/ServiceManifest.xml | 51 ++++ .../ApplicationParameters/Cloud.xml | 0 .../ApplicationParameters/Local.1Node.xml | 0 .../ApplicationParameters/Local.5Node.xml | 0 .../PublishProfiles/Cloud.xml | 0 .../PublishProfiles/Local.1Node.xml | 0 .../PublishProfiles/Local.5Node.xml | 0 .../Scripts/Deploy-FabricApplication.ps1 | 0 .../eShopOnServiceFabricIdSrv.sfproj | 0 .../eShopOnServiceFabricIdSrv/packages.config | 0 .../ApplicationManifest.xml | 0 .../WebMVCPkg/Config/Settings.xml | 0 .../WebMVCPkg/ServiceManifest.xml | 46 ++++ .../ApplicationParameters/Cloud.xml | 0 .../ApplicationParameters/Local.1Node.xml | 0 .../ApplicationParameters/Local.5Node.xml | 0 .../PublishProfiles/Cloud.xml | 0 .../PublishProfiles/Local.1Node.xml | 0 .../PublishProfiles/Local.5Node.xml | 0 .../Scripts/Deploy-FabricApplication.ps1 | 0 .../eShopOnServiceFabricWebMVC.sfproj | 0 .../packages.config | 0 .../ApplicationManifest.xml | 0 .../WebSPAPkg/Config/Settings.xml | 0 .../WebSPAPkg/ServiceManifest.xml | 51 ++++ .../ApplicationParameters/Cloud.xml | 0 .../ApplicationParameters/Local.1Node.xml | 0 .../ApplicationParameters/Local.5Node.xml | 0 .../PublishProfiles/Cloud.xml | 0 .../PublishProfiles/Local.1Node.xml | 0 .../PublishProfiles/Local.5Node.xml | 0 .../Scripts/Deploy-FabricApplication.ps1 | 0 .../eShopOnServiceFabricWebSPA.sfproj | 0 .../packages.config | 0 .../ApplicationManifest.xml | 0 .../WebStatusPkg/Config/Settings.xml | 0 .../WebStatusPkg/ServiceManifest.xml | 48 ++++ .../ApplicationParameters/Cloud.xml | 0 .../ApplicationParameters/Local.1Node.xml | 0 .../ApplicationParameters/Local.5Node.xml | 0 .../PublishProfiles/Cloud.xml | 0 .../PublishProfiles/Local.1Node.xml | 0 .../PublishProfiles/Local.5Node.xml | 0 .../Scripts/Deploy-FabricApplication.ps1 | 0 .../eShopOnServiceFabricWebStatus.sfproj | 0 .../packages.config | 0 .../ApplicationManifest.xml | 185 +++++++++++++ .../BasketApiPkg/Config/Settings.xml | 9 + .../BasketApiPkg/ServiceManifest.xml | 0 .../BasketDataPkg/Config/Settings.xml | 9 + .../BasketDataPkg/ServiceManifest.xml | 0 .../CatalogApiPkg/Config/Settings.xml | 9 + .../CatalogApiPkg/ServiceManifest.xml | 0 .../LocationsApiPkg/Config/Settings.xml | 9 + .../LocationsApiPkg/ServiceManifest.xml | 0 .../MarketingApiPkg/Config/Settings.xml | 9 + .../MarketingApiPkg/ServiceManifest.xml | 0 .../MongoDBPkg/Config/Settings.xml | 9 + .../MongoDBPkg/ServiceManifest.xml | 0 .../OrderingApiPkg/Config/Settings.xml | 9 + .../OrderingApiPkg/ServiceManifest.xml | 0 .../PaymentApiPkg/Config/Settings.xml | 9 + .../PaymentApiPkg/ServiceManifest.xml | 0 .../RabbitMQPkg/Config/Settings.xml | 9 + .../RabbitMQPkg/ServiceManifest.xml | 0 .../SqlServerPkg/Config/Settings.xml | 9 + .../SqlServerPkg/ServiceManifest.xml | 0 .../ApplicationParameters/Cloud.xml | 18 ++ .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../PublishProfiles/Cloud.xml | 25 ++ .../PublishProfiles/Local.1Node.xml | 11 + .../PublishProfiles/Local.5Node.xml | 11 + .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../eShopOnServiceFabric.sfproj | 0 .../eShopOnServiceFabric/packages.config | 4 + .../ApplicationManifest.xml | 50 ++++ .../IdentityApiPkg/Config/Settings.xml | 9 + .../IdentityApiPkg/ServiceManifest.xml | 0 .../ApplicationParameters/Cloud.xml | 13 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../PublishProfiles/Cloud.xml | 25 ++ .../PublishProfiles/Local.1Node.xml | 11 + .../PublishProfiles/Local.5Node.xml | 11 + .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../eShopOnServiceFabricIdSrv.sfproj | 46 ++++ .../eShopOnServiceFabricIdSrv/packages.config | 4 + .../ApplicationManifest.xml | 38 +++ .../WebMVCPkg/Config/Settings.xml | 9 + .../WebMVCPkg/ServiceManifest.xml | 0 .../ApplicationParameters/Cloud.xml | 7 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../PublishProfiles/Cloud.xml | 25 ++ .../PublishProfiles/Local.1Node.xml | 11 + .../PublishProfiles/Local.5Node.xml | 11 + .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../eShopOnServiceFabricWebMVC.sfproj | 46 ++++ .../packages.config | 4 + .../ApplicationManifest.xml | 46 ++++ .../WebSPAPkg/Config/Settings.xml | 9 + .../WebSPAPkg/ServiceManifest.xml | 0 .../ApplicationParameters/Cloud.xml | 11 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../PublishProfiles/Cloud.xml | 25 ++ .../PublishProfiles/Local.1Node.xml | 11 + .../PublishProfiles/Local.5Node.xml | 11 + .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../eShopOnServiceFabricWebSPA.sfproj | 46 ++++ .../packages.config | 4 + .../ApplicationManifest.xml | 34 +++ .../WebStatusPkg/Config/Settings.xml | 9 + .../WebStatusPkg/ServiceManifest.xml | 0 .../ApplicationParameters/Cloud.xml | 6 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../PublishProfiles/Cloud.xml | 25 ++ .../PublishProfiles/Local.1Node.xml | 11 + .../PublishProfiles/Local.5Node.xml | 11 + .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../eShopOnServiceFabricWebStatus.sfproj | 46 ++++ .../packages.config | 4 + eShopOnContainers-ServicesAndWebApps.sln | 2 +- 157 files changed, 3035 insertions(+), 1 deletion(-) rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationParameters/Cloud.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/PublishProfiles/Cloud.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabric/eShopOnServiceFabric.sfproj rename ServiceFabric/{ => Linux}/eShopOnServiceFabric/packages.config (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml (100%) create mode 100644 ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj (100%) rename ServiceFabric/{ => Linux}/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 rename ServiceFabric/{ => Windows}/eShopOnServiceFabric/eShopOnServiceFabric.sfproj (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabric/packages.config create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml rename ServiceFabric/{ => Windows}/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj create mode 100644 ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..35eacbf72 --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + eshop/basket.api + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml new file mode 100644 index 000000000..d2d853e46 --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + redis + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..71ccc94a5 --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + eshop/catalog.api + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..a51a53b62 --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + eshop/locations.api + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..1dee2e1bf --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + eshop/marketing.api + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml new file mode 100644 index 000000000..9fb9a085b --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + mongo + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..eb82e42b1 --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + eshop/ordering.api + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..096ca681e --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + eshop/payment.api + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml new file mode 100644 index 000000000..78f3ca0d5 --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + rabbitmq:3-management + + + + + + + + + + + + + + + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml new file mode 100644 index 000000000..97ff3ded2 --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + microsoft/mssql-server-linux:2017-latest + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Cloud.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml diff --git a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabric/PublishProfiles/Cloud.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/PublishProfiles/Cloud.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/PublishProfiles/Cloud.xml diff --git a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml b/ServiceFabric/Linux/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml diff --git a/ServiceFabric/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml b/ServiceFabric/Linux/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml diff --git a/ServiceFabric/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Linux/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 rename to ServiceFabric/Linux/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/eShopOnServiceFabric.sfproj b/ServiceFabric/Linux/eShopOnServiceFabric/eShopOnServiceFabric.sfproj new file mode 100644 index 000000000..d149a5f5a --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabric/eShopOnServiceFabric.sfproj @@ -0,0 +1,63 @@ + + + + + 983eab84-65c5-4793-a300-08f97c791a15 + 1.6 + 1.5 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/packages.config b/ServiceFabric/Linux/eShopOnServiceFabric/packages.config similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/packages.config rename to ServiceFabric/Linux/eShopOnServiceFabric/packages.config diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml rename to ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml new file mode 100644 index 000000000..38a18c986 --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + eshop/identity.api + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml rename to ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml rename to ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 similarity index 100% rename from ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 rename to ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj similarity index 100% rename from ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj rename to ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config similarity index 100% rename from ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config rename to ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml new file mode 100644 index 000000000..b2b5cb676 --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + eshop/webmvc + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 rename to ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj rename to ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config rename to ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml new file mode 100644 index 000000000..1eddb4266 --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + eshop/webspa + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 rename to ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj rename to ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config rename to ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml new file mode 100644 index 000000000..a6fb1868c --- /dev/null +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + eshop/webstatus + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml rename to ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 rename to ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj rename to ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config rename to ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..0d3e54d46 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,185 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..9f1f007c1 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..e579cbf89 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..e579cbf89 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/PublishProfiles/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabric/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..2ab9df11c --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml b/ServiceFabric/Windows/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml b/ServiceFabric/Windows/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Windows/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj b/ServiceFabric/Windows/eShopOnServiceFabric/eShopOnServiceFabric.sfproj similarity index 100% rename from ServiceFabric/eShopOnServiceFabric/eShopOnServiceFabric.sfproj rename to ServiceFabric/Windows/eShopOnServiceFabric/eShopOnServiceFabric.sfproj diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/packages.config b/ServiceFabric/Windows/eShopOnServiceFabric/packages.config new file mode 100644 index 000000000..c5f59e48e --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabric/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..21990aa56 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..26f348fd1 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..e8623180a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..e8623180a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..2ab9df11c --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj new file mode 100644 index 000000000..a109faa28 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj @@ -0,0 +1,46 @@ + + + + + 39b54901-d57d-416e-b51e-33c4017ca464 + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..9aa837f0b --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..6bdcbe2e1 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..1d59af5a6 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..1d59af5a6 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..2ab9df11c --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj new file mode 100644 index 000000000..3225c22f2 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj @@ -0,0 +1,46 @@ + + + + + 0cf895ff-3616-4d1f-8d2e-5d856cdf3612 + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..1631563e9 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..1505355be --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..92fe692c3 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..92fe692c3 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..2ab9df11c --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj new file mode 100644 index 000000000..3c5ee05fd --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj @@ -0,0 +1,46 @@ + + + + + 1670de10-5626-429d-a74a-2dd8281cc0c9 + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..edc3824d0 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml new file mode 100644 index 000000000..ad84ffd8a --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/Config/Settings.xml @@ -0,0 +1,9 @@ + + + + + diff --git a/ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml rename to ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..25352d134 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..9864bd050 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..9864bd050 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..2ab9df11c --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj new file mode 100644 index 000000000..76a0c36b2 --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj @@ -0,0 +1,46 @@ + + + + + 25f73fd9-b32f-401a-80e8-17c72606a7e1 + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln index cbb34f830..86ba102dd 100644 --- a/eShopOnContainers-ServicesAndWebApps.sln +++ b/eShopOnContainers-ServicesAndWebApps.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.16 +VisualStudioVersion = 15.0.26730.8 MinimumVisualStudioVersion = 10.0.40219.1 Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}" EndProject From b3726c32e3afcc22c64b927d0531818a404ca60f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Tue, 10 Oct 2017 11:17:34 +0200 Subject: [PATCH 051/136] Created deployment scripts for SF Linux --- .../LinuxContainers/gen-keyvaultcert.ps1 | 53 ++ .../servicefabric/LinuxContainers/readme.md | 88 ++ .../LinuxContainers/servicefabricdeploy.json | 751 ++++++++++++++++ .../servicefabricdeploy.parameters.json | 93 ++ .../servicefabricdeploysecured.json | 821 ++++++++++++++++++ ...servicefabricdeploysecured.parameters.json | 102 +++ .../servicefabric/WindowsContainers/readme.md | 2 +- .../servicefabricdeploy.json | 100 +++ .../servicefabricdeploy.parameters.json | 15 + ...e.json => servicefabricdeploysecured.json} | 100 +++ ...ervicefabricdeploysecured.parameters.json} | 19 +- eShopOnContainers-ServicesAndWebApps.sln | 2 +- 12 files changed, 2142 insertions(+), 4 deletions(-) create mode 100644 deploy/az/servicefabric/LinuxContainers/gen-keyvaultcert.ps1 create mode 100644 deploy/az/servicefabric/LinuxContainers/readme.md create mode 100644 deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.json create mode 100644 deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json create mode 100644 deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.json create mode 100644 deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.parameters.json rename deploy/az/servicefabric/WindowsContainers/{servicefabricdeploysecure.json => servicefabricdeploysecured.json} (89%) rename deploy/az/servicefabric/WindowsContainers/{servicefabricdeploysecure.parameters.json => servicefabricdeploysecured.parameters.json} (84%) diff --git a/deploy/az/servicefabric/LinuxContainers/gen-keyvaultcert.ps1 b/deploy/az/servicefabric/LinuxContainers/gen-keyvaultcert.ps1 new file mode 100644 index 000000000..c6fc34013 --- /dev/null +++ b/deploy/az/servicefabric/LinuxContainers/gen-keyvaultcert.ps1 @@ -0,0 +1,53 @@ +Param( + [parameter(Mandatory=$true)][string]$vaultName, + [parameter(Mandatory=$true)][string]$certName, + [parameter(Mandatory=$true)][string]$certPwd, + [parameter(Mandatory=$true)][string]$subjectName, + [parameter(Mandatory=$false)][string]$ValidityInMonths=12, + [parameter(Mandatory=$true)][string]$saveDir +) + + +#Log in Azure Account +Login-AzureRmAccount + + +# Create Cert in KeyVault +Write-Host "Creating certificate in Azure KeyVault..." -ForegroundColor Yellow +$policy = New-AzureKeyVaultCertificatePolicy -SubjectName $subjectName -IssuerName Self -ValidityInMonths $ValidityInMonths +Add-AzureKeyVaultCertificate -VaultName $vaultName -Name $certName -CertificatePolicy $policy + +# Downloading Certificate +Write-Host "Downloading Certificate from KeyVault..." -ForegroundColor Yellow + +$Stoploop = $false +$Retrycount = 0 + +do { + try { + + $kvSecret = Get-AzureKeyVaultSecret -VaultName $vaultName -Name $certName -ErrorAction SilentlyContinue + $kvSecretBytes = [System.Convert]::FromBase64String($kvSecret.SecretValueText) + $certCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection + $certCollection.Import($kvSecretBytes,$null,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) + $protectedCertificateBytes = $certCollection.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $certPwd) + [System.IO.File]::WriteAllBytes($saveDir + "\" + $certName + ".pfx", $protectedCertificateBytes) + + $Stoploop = $true + Write-Host "Finished!" -ForegroundColor Yellow + } + catch { + if ($Retrycount -gt 5){ + $Stoploop = $true + Write-Host "Not possible to retrieve the certificate!" -ForegroundColor Yellow + } + else { + Start-Sleep -Seconds 20 + $Retrycount = $Retrycount + 1 + } + } +} +While ($Stoploop -eq $false) + +# Show Certificate Values +Get-AzureKeyVaultCertificate -VaultName $vaultName -Name $certName \ No newline at end of file diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md new file mode 100644 index 000000000..5bdd86737 --- /dev/null +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -0,0 +1,88 @@ +# Deploying Azure Service Fabric (No Secured) + +The ARM template `servicefabricdeploy.json` and its parameter file (`servicefabricdeploy.parameters.json`) are used to create a service fabric cluster environment for linux containers. + +## Editing servicefabricdeploy.parameters.json file + +Edit the following params in `servicefabricdeploy.parameters.json` file to set your values: + +- clusterName: Name of your SF cluster +- dnsName: Name assigned to your SF dns +- adminUserName: user name for administration +- adminPassword: user password for administration + +Optionally, you can modify which ports are opened in the LoadBalancer for accessing externally to the apps: + +- webMvcHttpPort: port externally exposed for the WebMVC app +- webSpaHttpPort: port externally exposed for the WebSPA app +- webStatusHttpPort: port externally exposed for the WebStatus app +- IdSrvHttpRule: port externally exposed for the Identity app + +## Deploy the template + +Once parameter file is edited you can deploy it using [create-resources script](../readme.md). + +i. e. if you are in windows, to deploy sql databases in a new resourcegroup located in westus, go to `deploy\az` folder and type: + +``` +create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploy newResourceGroup -c westus +``` +## Deploy eShopOnServiceFabric with Visual Studio. + +Alternatively, instead of using ARM templates, you can deploy eShop on service fabric directly by publishing the project eShopOnServiceFabric in eShopOnContainers-ServicesAndWebApps.sln with Visual Studio publish tool. + +# Deploying Azure Service Fabric (Secured) + +The ARM template `servicefabricdeploysecured.json` and its parameter file (`servicefabricdeploysecured.parameters.json`) are used to create a service fabric cluster environment for linux containers secured with a certificate. + +## Create Azure Keyvault service +Go to PortalAzure and create a Keyvault service. Make sure Enable access for deployment checkboxes are selected. + + + +## Generate a certificate in Azure Keyvault +Execute the gen-keyvaultcert.ps1 script to generate and download a certificate from Keyvault. + +``` +.\gen-keyvaultcert.ps1 -vaultName -certName -certPwd -subjectName CN=.westeurope.cloudapp.azure.com -saveDir C:\Users\\Downloads + +``` +## Install the certificate +Install the certificate under 'Current User' store location and check it as exportable. + + + +## Editing servicefabricdeploysecured.parameters.json file + +Edit the following params in `servicefabricdeploysecured.parameters.json` file to set your values: + +- clusterName: Name of your SF cluster +- dnsName: Name assigned to your SF dns +- adminUserName: user name for administration +- adminPassword: user password for administration +- sourceVaultValue: keyvault resource id (check azure keyvault properties) +- certificateUrlValue: certificate url (check azure Keyvault certificate properties) +- certificateThumbprint: certificate thumbprint (check azure Keyvault certificate properties) + +Optionally, you can modify which ports are opened in the LoadBalancer for accessing externally to the apps: + +- webMvcHttpPort: port externally exposed for the WebMVC app +- webSpaHttpPort: port externally exposed for the WebSPA app +- webStatusHttpPort: port externally exposed for the WebStatus app +- IdSrvHttpRule: port externally exposed for the Identity app + +## Deploy the template + +Once parameter file is edited you can deploy it using [create-resources script](../readme.md). + +``` +create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploysecured newResourceGroup -c westus +``` +## Deploy eShopOnServiceFabric with Visual Studio. + +Modify the cloud.xml file of each Service Fabric application in PublishProfile directory and set your certificate settings to be able to deploy eshopOnContainers in the secured cluster: + + + + + diff --git a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.json b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.json new file mode 100644 index 000000000..fb28174db --- /dev/null +++ b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.json @@ -0,0 +1,751 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterLocation": { + "type": "string", + "metadata": { + "description": "Location of the Cluster" + } + }, + "clusterName": { + "type": "string", + "defaultValue": "Cluster", + "metadata": { + "description": "Name of your cluster - Between 3 and 23 characters. Letters and numbers only" + } + }, + "nt0applicationStartPort": { + "type": "int", + "defaultValue": 20000 + }, + "nt0applicationEndPort": { + "type": "int", + "defaultValue": 30000 + }, + "nt0ephemeralStartPort": { + "type": "int", + "defaultValue": 49152 + }, + "nt0ephemeralEndPort": { + "type": "int", + "defaultValue": 65534 + }, + "nt0fabricTcpGatewayPort": { + "type": "int", + "defaultValue": 19000 + }, + "nt0fabricHttpGatewayPort": { + "type": "int", + "defaultValue": 19080 + }, + "webMvcHttpPort": { + "type": "int", + "defaultValue": 5100 + }, + "webSpaHttpPort": { + "type": "int", + "defaultValue": 5104 + }, + "webStatusHttpPort": { + "type": "int", + "defaultValue": 5107 + }, + "IdSrvHttpRule": { + "type": "int", + "defaultValue": 5105 + }, + "BasketApiHttpRule": { + "type": "int", + "defaultValue": 5103 + }, + "CatalogApiHttpRule": { + "type": "int", + "defaultValue": 5101 + }, + "OrderingApiHttpRule": { + "type": "int", + "defaultValue": 5102 + }, + "MarketingApiHttpRule": { + "type": "int", + "defaultValue": 5110 + }, + "LocationsApiHttpRule": { + "type": "int", + "defaultValue": 5109 + }, + "subnet0Name": { + "type": "string", + "defaultValue": "Subnet-0" + }, + "subnet0Prefix": { + "type": "string", + "defaultValue": "10.0.0.0/24" + }, + "computeLocation": { + "type": "string" + }, + "publicIPAddressName": { + "type": "string", + "defaultValue": "PublicIP-VM" + }, + "publicIPAddressType": { + "type": "string", + "allowedValues": [ + "Dynamic" + ], + "defaultValue": "Dynamic" + }, + "vmStorageAccountContainerName": { + "type": "string", + "defaultValue": "vhds" + }, + "adminUserName": { + "type": "string", + "defaultValue": "testadm", + "metadata": { + "description": "Remote desktop user Id" + } + }, + "adminPassword": { + "type": "securestring", + "metadata": { + "description": "Remote desktop user password. Must be a strong password" + } + }, + "virtualNetworkName": { + "type": "string", + "defaultValue": "VNet" + }, + "addressPrefix": { + "type": "string", + "defaultValue": "10.0.0.0/16" + }, + "dnsName": { + "type": "string" + }, + "nicName": { + "type": "string", + "defaultValue": "NIC" + }, + "lbName": { + "type": "string", + "defaultValue": "LoadBalancer" + }, + "lbIPName": { + "type": "string", + "defaultValue": "PublicIP-LB-FE" + }, + "overProvision": { + "type": "string", + "defaultValue": "false" + }, + "vmImagePublisher": { + "type": "string", + "defaultValue": "Microsoft.Azure.ServiceFabric" + }, + "vmImageOffer": { + "type": "string", + "defaultValue": "UbuntuServer" + }, + "vmImageSku": { + "type": "string", + "defaultValue": "16.04" + }, + "vmImageVersion": { + "type": "string", + "defaultValue": "6.0.12" + }, + "storageAccountType": { + "type": "string", + "allowedValues": [ + "Standard_LRS", + "Standard_GRS" + ], + "defaultValue": "Standard_LRS", + "metadata": { + "description": "Replication option for the VM image storage account" + } + }, + "supportLogStorageAccountType": { + "type": "string", + "allowedValues": [ + "Standard_LRS", + "Standard_GRS" + ], + "defaultValue": "Standard_LRS", + "metadata": { + "description": "Replication option for the support log storage account" + } + }, + "supportLogStorageAccountName": { + "type": "string", + "defaultValue": "[toLower( concat('sflogs', uniqueString(resourceGroup().id),'2'))]", + "metadata": { + "description": "Name for the storage account that contains support logs from the cluster" + } + }, + "applicationDiagnosticsStorageAccountType": { + "type": "string", + "allowedValues": [ + "Standard_LRS", + "Standard_GRS" + ], + "defaultValue": "Standard_LRS", + "metadata": { + "description": "Replication option for the application diagnostics storage account" + } + }, + "applicationDiagnosticsStorageAccountName": { + "type": "string", + "defaultValue": "[toLower(concat(uniqueString(resourceGroup().id), '3' ))]", + "metadata": { + "description": "Name for the storage account that contains application diagnostics data from the cluster" + } + }, + "nt0InstanceCount": { + "type": "int", + "defaultValue": 1, + "metadata": { + "description": "Instance count for node type" + } + }, + "vmNodeType0Name": { + "type": "string", + "defaultValue": "primary", + "maxLength": 9 + }, + "vmNodeType0Size": { + "type": "string", + "defaultValue": "Standard_D1_v2" + } + }, + "variables": { + "vmssApiVersion": "2017-03-30", + "lbApiVersion": "2015-06-15", + "vNetApiVersion": "2015-06-15", + "storageApiVersion": "2016-01-01", + "publicIPApiVersion": "2015-06-15", + "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]", + "subnet0Ref": "[concat(variables('vnetID'),'/subnets/',parameters('subnet0Name'))]", + "wadlogs": "", + "wadperfcounters1": "", + "wadperfcounters2": "", + "wadcfgxstart": "[concat(variables('wadlogs'),variables('wadperfcounters1'),variables('wadperfcounters2'),'')]", + "lbID0": "[resourceId('Microsoft.Network/loadBalancers', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", + "lbIPConfig0": "[concat(variables('lbID0'),'/frontendIPConfigurations/LoadBalancerIPConfig')]", + "lbPoolID0": "[concat(variables('lbID0'),'/backendAddressPools/LoadBalancerBEAddressPool')]", + "lbProbeID0": "[concat(variables('lbID0'),'/probes/FabricGatewayProbe')]", + "lbHttpProbeID0": "[concat(variables('lbID0'),'/probes/FabricHttpGatewayProbe')]", + "lbNatPoolID0": "[concat(variables('lbID0'),'/inboundNatPools/LoadBalancerBEAddressNatPool')]", + "vmStorageAccountName0": "[toLower(concat(uniqueString(resourceGroup().id), '1', '0' ))]", + "wadmetricsresourceid0": "[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/',resourceGroup().name ,'/providers/','Microsoft.Compute/virtualMachineScaleSets/', parameters('vmNodeType0Name'))]" + }, + "resources": [ + { + "apiVersion": "[variables('storageApiVersion')]", + "type": "Microsoft.Storage/storageAccounts", + "name": "[parameters('supportLogStorageAccountName')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": {}, + "kind": "Storage", + "sku": { + "name": "[parameters('supportLogStorageAccountType')]" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('storageApiVersion')]", + "type": "Microsoft.Storage/storageAccounts", + "name": "[parameters('applicationDiagnosticsStorageAccountName')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": {}, + "kind": "Storage", + "sku": { + "name": "[parameters('applicationDiagnosticsStorageAccountType')]" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('vNetApiVersion')]", + "type": "Microsoft.Network/virtualNetworks", + "name": "[parameters('virtualNetworkName')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": { + "addressSpace": { + "addressPrefixes": [ + "[parameters('addressPrefix')]" + ] + }, + "subnets": [ + { + "name": "[parameters('subnet0Name')]", + "properties": { + "addressPrefix": "[parameters('subnet0Prefix')]" + } + } + ] + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('publicIPApiVersion')]", + "type": "Microsoft.Network/publicIPAddresses", + "name": "[concat(parameters('lbIPName'),'-','0')]", + "location": "[parameters('computeLocation')]", + "properties": { + "dnsSettings": { + "domainNameLabel": "[parameters('dnsName')]" + }, + "publicIPAllocationMethod": "Dynamic" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('lbApiVersion')]", + "type": "Microsoft.Network/loadBalancers", + "name": "[concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name'))]", + "location": "[parameters('computeLocation')]", + "dependsOn": [ + "[concat('Microsoft.Network/publicIPAddresses/',concat(parameters('lbIPName'),'-','0'))]" + ], + "properties": { + "frontendIPConfigurations": [ + { + "name": "LoadBalancerIPConfig", + "properties": { + "publicIPAddress": { + "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPName'),'-','0'))]" + } + } + } + ], + "backendAddressPools": [ + { + "name": "LoadBalancerBEAddressPool", + "properties": {} + } + ], + "loadBalancingRules": [ + { + "name": "LBRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('nt0fabricTcpGatewayPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('nt0fabricTcpGatewayPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "LBHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('nt0fabricHttpGatewayPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('nt0fabricHttpGatewayPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "WebMVCHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('webMvcHttpPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('webMvcHttpPort')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "WebSPAHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('webSpaHttpPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('webSpaHttpPort')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "WebStatusHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('webStatusHttpPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('webStatusHttpPort')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "IdSrvHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('IdSrvHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('IdSrvHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "BasketApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('BasketApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('BasketApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "CatalogApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('CatalogApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('CatalogApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "OrderingApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('OrderingApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('OrderingApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "MarketingApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('MarketingApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('MarketingApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "LocationsApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('LocationsApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('LocationsApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + } + ], + "probes": [ + { + "name": "FabricGatewayProbe", + "properties": { + "intervalInSeconds": 5, + "numberOfProbes": 2, + "port": "[parameters('nt0fabricTcpGatewayPort')]", + "protocol": "tcp" + } + }, + { + "name": "FabricHttpGatewayProbe", + "properties": { + "intervalInSeconds": 5, + "numberOfProbes": 2, + "port": "[parameters('nt0fabricHttpGatewayPort')]", + "protocol": "tcp" + } + } + ], + "inboundNatPools": [ + { + "name": "LoadBalancerBEAddressNatPool", + "properties": { + "backendPort": "22", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPortRangeEnd": "4500", + "frontendPortRangeStart": "3389", + "protocol": "tcp" + } + } + ] + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('vmssApiVersion')]", + "type": "Microsoft.Compute/virtualMachineScaleSets", + "name": "[parameters('vmNodeType0Name')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [ + "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]", + "[concat('Microsoft.Network/loadBalancers/', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", + "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]", + "[concat('Microsoft.Storage/storageAccounts/', parameters('applicationDiagnosticsStorageAccountName'))]" + ], + "properties": { + "overprovision": "[parameters('overProvision')]", + "upgradePolicy": { + "mode": "Automatic" + }, + "virtualMachineProfile": { + "extensionProfile": { + "extensions": [ + { + "name": "[concat(parameters('vmNodeType0Name'),'_ServiceFabricLinuxNode')]", + "properties": { + "type": "ServiceFabricLinuxNode", + "autoUpgradeMinorVersion": true, + "protectedSettings": { + "StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key1]", + "StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key2]" + }, + "publisher": "Microsoft.Azure.ServiceFabric", + "settings": { + "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]", + "nodeTypeRef": "[parameters('vmNodeType0Name')]", + "durabilityLevel": "Bronze", + "enableParallelJobs": true, + "nicPrefixOverride": "[parameters('subnet0Prefix')]" + }, + "typeHandlerVersion": "1.0" + } + }, + { + "name": "[concat('VMDiagnosticsVmExt','_vmNodeType0Name')]", + "properties": { + "type": "LinuxDiagnostic", + "autoUpgradeMinorVersion": true, + "protectedSettings": { + "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]", + "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]", + "storageAccountEndPoint": "https://core.windows.net/" + }, + "publisher": "Microsoft.OSTCExtensions", + "settings": { + "xmlCfg": "[base64(concat(variables('wadcfgxstart'),variables('wadmetricsresourceid0'),variables('wadcfgxend')))]", + "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]" + }, + "typeHandlerVersion": "2.3" + } + } + ] + }, + "networkProfile": { + "networkInterfaceConfigurations": [ + { + "name": "[concat(parameters('nicName'), '-0')]", + "properties": { + "ipConfigurations": [ + { + "name": "[concat(parameters('nicName'),'-',0)]", + "properties": { + "loadBalancerBackendAddressPools": [ + { + "id": "[variables('lbPoolID0')]" + } + ], + "loadBalancerInboundNatPools": [ + { + "id": "[variables('lbNatPoolID0')]" + } + ], + "subnet": { + "id": "[variables('subnet0Ref')]" + } + } + } + ], + "primary": true + } + } + ] + }, + "osProfile": { + "adminPassword": "[parameters('adminPassword')]", + "adminUsername": "[parameters('adminUsername')]", + "computernamePrefix": "[parameters('vmNodeType0Name')]" + }, + "storageProfile": { + "imageReference": { + "publisher": "[parameters('vmImagePublisher')]", + "offer": "[parameters('vmImageOffer')]", + "sku": "[parameters('vmImageSku')]", + "version": "[parameters('vmImageVersion')]" + }, + "osDisk": { + "caching": "ReadOnly", + "createOption": "FromImage", + "managedDisk": { + "storageAccountType": "[parameters('storageAccountType')]" + } + } + } + } + }, + "sku": { + "name": "[parameters('vmNodeType0Size')]", + "capacity": "[parameters('nt0InstanceCount')]", + "tier": "Standard" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "2017-07-01-preview", + "type": "Microsoft.ServiceFabric/clusters", + "name": "[parameters('clusterName')]", + "location": "[parameters('clusterLocation')]", + "dependsOn": [ + "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]" + ], + "properties": { + "addonFeatures": [ + "DnsService" + ], + "clientCertificateCommonNames": [], + "clientCertificateThumbprints": [], + "clusterCodeVersion": "6.0.120.1", + "clusterState": "Default", + "diagnosticsStorageAccountConfig": { + "blobEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.blob]", + "protectedAccountKeyName": "StorageAccountKey1", + "queueEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.queue]", + "storageAccountName": "[parameters('supportLogStorageAccountName')]", + "tableEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.table]" + }, + "fabricSettings": [], + "managementEndpoint": "[concat('http://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]", + "nodeTypes": [ + { + "name": "[parameters('vmNodeType0Name')]", + "applicationPorts": { + "endPort": "[parameters('nt0applicationEndPort')]", + "startPort": "[parameters('nt0applicationStartPort')]" + }, + "clientConnectionEndpointPort": "[parameters('nt0fabricTcpGatewayPort')]", + "durabilityLevel": "Bronze", + "ephemeralPorts": { + "endPort": "[parameters('nt0ephemeralEndPort')]", + "startPort": "[parameters('nt0ephemeralStartPort')]" + }, + "httpGatewayEndpointPort": "[parameters('nt0fabricHttpGatewayPort')]", + "isPrimary": true, + "vmInstanceCount": "[parameters('nt0InstanceCount')]" + } + ], + "provisioningState": "Default", + "reliabilityLevel": "None", + "upgradeMode": "Manual", + "vmImage": "Linux" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + } + ], + "outputs": { + "clusterProperties": { + "value": "[reference(parameters('clusterName'))]", + "type": "object" + } + } +} \ No newline at end of file diff --git a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json new file mode 100644 index 000000000..d905f2d00 --- /dev/null +++ b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json @@ -0,0 +1,93 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "value": "your_sf_name" + }, + "clusterLocation": { + "value": "westeurope" + }, + "computeLocation": { + "value": "westeurope" + }, + "adminUserName": { + "value": "eshop" + }, + "adminPassword": { + "value": "your_admin_password" + }, + "nicName": { + "value": "NIC-eshoponsflin" + }, + "publicIPAddressName": { + "value": "eshoponsflin-PubIP" + }, + "dnsName": { + "value": "your_sf_dns" + }, + "virtualNetworkName": { + "value": "VNet-eshoponsflin" + }, + "lbName": { + "value": "LB-eshoponsflin" + }, + "lbIPName": { + "value": "LBIP-eshoponsflin" + }, + "vmImageSku": { + "value": "16.04-LTS" + }, + "vmImageVersion": { + "value": "latest" + }, + "vmImagePublisher": { + "value": "Canonical" + }, + "nt0ephemeralStartPort": { + "value": 49152 + }, + "nt0ephemeralEndPort": { + "value": 65534 + }, + "nt0applicationStartPort": { + "value": 20000 + }, + "nt0applicationEndPort": { + "value": 30000 + }, + "nt0fabricTcpGatewayPort": { + "value": 19000 + }, + "nt0fabricHttpGatewayPort": { + "value": 19080 + }, + "webMvcHttpPort": { + "value": 5100 + }, + "webSpaHttpPort": { + "value": 5104 + }, + "webStatusHttpPort": { + "value": 5107 + }, + "IdSrvHttpRule": { + "value": 5105 + }, + "BasketApiHttpRule": { + "value": 5103 + }, + "CatalogApiHttpRule": { + "value": 5101 + }, + "OrderingApiHttpRule": { + "value": 5102 + }, + "MarketingApiHttpRule": { + "value": 5110 + }, + "LocationsApiHttpRule": { + "value": 5109 + } + } +} \ No newline at end of file diff --git a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.json b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.json new file mode 100644 index 000000000..0d6620f32 --- /dev/null +++ b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.json @@ -0,0 +1,821 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterLocation": { + "type": "string", + "metadata": { + "description": "Location of the Cluster" + } + }, + "clusterName": { + "type": "string", + "defaultValue": "Cluster", + "metadata": { + "description": "Name of your cluster - Between 3 and 23 characters. Letters and numbers only" + } + }, + "nt0applicationStartPort": { + "type": "int", + "defaultValue": 20000 + }, + "nt0applicationEndPort": { + "type": "int", + "defaultValue": 30000 + }, + "nt0ephemeralStartPort": { + "type": "int", + "defaultValue": 49152 + }, + "nt0ephemeralEndPort": { + "type": "int", + "defaultValue": 65534 + }, + "nt0fabricTcpGatewayPort": { + "type": "int", + "defaultValue": 19000 + }, + "nt0fabricHttpGatewayPort": { + "type": "int", + "defaultValue": 19080 + }, + "webMvcHttpPort": { + "type": "int", + "defaultValue": 5100 + }, + "webSpaHttpPort": { + "type": "int", + "defaultValue": 5104 + }, + "webStatusHttpPort": { + "type": "int", + "defaultValue": 5107 + }, + "IdSrvHttpRule": { + "type": "int", + "defaultValue": 5105 + }, + "BasketApiHttpRule": { + "type": "int", + "defaultValue": 5103 + }, + "CatalogApiHttpRule": { + "type": "int", + "defaultValue": 5101 + }, + "OrderingApiHttpRule": { + "type": "int", + "defaultValue": 5102 + }, + "MarketingApiHttpRule": { + "type": "int", + "defaultValue": 5110 + }, + "LocationsApiHttpRule": { + "type": "int", + "defaultValue": 5109 + }, + "subnet0Name": { + "type": "string", + "defaultValue": "Subnet-0" + }, + "subnet0Prefix": { + "type": "string", + "defaultValue": "10.0.0.0/24" + }, + "computeLocation": { + "type": "string" + }, + "publicIPAddressName": { + "type": "string", + "defaultValue": "PublicIP-VM" + }, + "publicIPAddressType": { + "type": "string", + "allowedValues": [ + "Dynamic" + ], + "defaultValue": "Dynamic" + }, + "vmStorageAccountContainerName": { + "type": "string", + "defaultValue": "vhds" + }, + "adminUserName": { + "type": "string", + "defaultValue": "testadm", + "metadata": { + "description": "Remote desktop user Id" + } + }, + "adminPassword": { + "type": "securestring", + "metadata": { + "description": "Remote desktop user password. Must be a strong password" + } + }, + "virtualNetworkName": { + "type": "string", + "defaultValue": "VNet" + }, + "addressPrefix": { + "type": "string", + "defaultValue": "10.0.0.0/16" + }, + "dnsName": { + "type": "string" + }, + "nicName": { + "type": "string", + "defaultValue": "NIC" + }, + "lbName": { + "type": "string", + "defaultValue": "LoadBalancer" + }, + "lbIPName": { + "type": "string", + "defaultValue": "PublicIP-LB-FE" + }, + "overProvision": { + "type": "string", + "defaultValue": "false" + }, + "vmImagePublisher": { + "type": "string", + "defaultValue": "Microsoft.Azure.ServiceFabric" + }, + "vmImageOffer": { + "type": "string", + "defaultValue": "UbuntuServer" + }, + "vmImageSku": { + "type": "string", + "defaultValue": "16.04" + }, + "vmImageVersion": { + "type": "string", + "defaultValue": "6.0.12" + }, + "clusterProtectionLevel": { + "type": "string", + "allowedValues": [ + "None", + "Sign", + "EncryptAndSign" + ], + "defaultValue": "EncryptAndSign", + "metadata": { + "description": "Protection level.Three values are allowed - EncryptAndSign, Sign, None. It is best to keep the default of EncryptAndSign, unless you have a need not to" + } + }, + "certificateStoreValue": { + "type": "string", + "allowedValues": [ + "My" + ], + "defaultValue": "My", + "metadata": { + "description": "The store name where the cert will be deployed in the virtual machine" + } + }, + "certificateThumbprint": { + "type": "string", + "metadata": { + "description": "Certificate Thumbprint" + } + }, + "sourceVaultValue": { + "type": "string", + "metadata": { + "description": "Resource Id of the key vault, is should be in the format of /subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/" + } + }, + "certificateUrlValue": { + "type": "string", + "metadata": { + "description": "Refers to the location URL in your key vault where the certificate was uploaded, it is should be in the format of https://.vault.azure.net:443/secrets/" + } + }, + "storageAccountType": { + "type": "string", + "allowedValues": [ + "Standard_LRS", + "Standard_GRS" + ], + "defaultValue": "Standard_LRS", + "metadata": { + "description": "Replication option for the VM image storage account" + } + }, + "supportLogStorageAccountType": { + "type": "string", + "allowedValues": [ + "Standard_LRS", + "Standard_GRS" + ], + "defaultValue": "Standard_LRS", + "metadata": { + "description": "Replication option for the support log storage account" + } + }, + "supportLogStorageAccountName": { + "type": "string", + "defaultValue": "[toLower( concat('sflogs', uniqueString(resourceGroup().id),'2'))]", + "metadata": { + "description": "Name for the storage account that contains support logs from the cluster" + } + }, + "applicationDiagnosticsStorageAccountType": { + "type": "string", + "allowedValues": [ + "Standard_LRS", + "Standard_GRS" + ], + "defaultValue": "Standard_LRS", + "metadata": { + "description": "Replication option for the application diagnostics storage account" + } + }, + "applicationDiagnosticsStorageAccountName": { + "type": "string", + "defaultValue": "[toLower(concat(uniqueString(resourceGroup().id), '3' ))]", + "metadata": { + "description": "Name for the storage account that contains application diagnostics data from the cluster" + } + }, + "nt0InstanceCount": { + "type": "int", + "defaultValue": 5, + "metadata": { + "description": "Instance count for node type" + } + }, + "vmNodeType0Name": { + "type": "string", + "defaultValue": "primary", + "maxLength": 9 + }, + "vmNodeType0Size": { + "type": "string", + "defaultValue": "Standard_D1_v2" + } + }, + "variables": { + "vmssApiVersion": "2017-03-30", + "lbApiVersion": "2015-06-15", + "vNetApiVersion": "2015-06-15", + "storageApiVersion": "2016-01-01", + "publicIPApiVersion": "2015-06-15", + "vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]", + "subnet0Ref": "[concat(variables('vnetID'),'/subnets/',parameters('subnet0Name'))]", + "wadlogs": "", + "wadperfcounters1": "", + "wadperfcounters2": "", + "wadcfgxstart": "[concat(variables('wadlogs'),variables('wadperfcounters1'),variables('wadperfcounters2'),'')]", + "lbID0": "[resourceId('Microsoft.Network/loadBalancers', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", + "lbIPConfig0": "[concat(variables('lbID0'),'/frontendIPConfigurations/LoadBalancerIPConfig')]", + "lbPoolID0": "[concat(variables('lbID0'),'/backendAddressPools/LoadBalancerBEAddressPool')]", + "lbProbeID0": "[concat(variables('lbID0'),'/probes/FabricGatewayProbe')]", + "lbHttpProbeID0": "[concat(variables('lbID0'),'/probes/FabricHttpGatewayProbe')]", + "lbNatPoolID0": "[concat(variables('lbID0'),'/inboundNatPools/LoadBalancerBEAddressNatPool')]", + "vmStorageAccountName0": "[toLower(concat(uniqueString(resourceGroup().id), '1', '0' ))]", + "wadmetricsresourceid0": "[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/',resourceGroup().name ,'/providers/','Microsoft.Compute/virtualMachineScaleSets/', parameters('vmNodeType0Name'))]" + }, + "resources": [ + { + "apiVersion": "[variables('storageApiVersion')]", + "type": "Microsoft.Storage/storageAccounts", + "name": "[parameters('supportLogStorageAccountName')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": {}, + "kind": "Storage", + "sku": { + "name": "[parameters('supportLogStorageAccountType')]" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('storageApiVersion')]", + "type": "Microsoft.Storage/storageAccounts", + "name": "[parameters('applicationDiagnosticsStorageAccountName')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": {}, + "kind": "Storage", + "sku": { + "name": "[parameters('applicationDiagnosticsStorageAccountType')]" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('vNetApiVersion')]", + "type": "Microsoft.Network/virtualNetworks", + "name": "[parameters('virtualNetworkName')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [], + "properties": { + "addressSpace": { + "addressPrefixes": [ + "[parameters('addressPrefix')]" + ] + }, + "subnets": [ + { + "name": "[parameters('subnet0Name')]", + "properties": { + "addressPrefix": "[parameters('subnet0Prefix')]" + } + } + ] + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('publicIPApiVersion')]", + "type": "Microsoft.Network/publicIPAddresses", + "name": "[concat(parameters('lbIPName'),'-','0')]", + "location": "[parameters('computeLocation')]", + "properties": { + "dnsSettings": { + "domainNameLabel": "[parameters('dnsName')]" + }, + "publicIPAllocationMethod": "Dynamic" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('lbApiVersion')]", + "type": "Microsoft.Network/loadBalancers", + "name": "[concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name'))]", + "location": "[parameters('computeLocation')]", + "dependsOn": [ + "[concat('Microsoft.Network/publicIPAddresses/',concat(parameters('lbIPName'),'-','0'))]" + ], + "properties": { + "frontendIPConfigurations": [ + { + "name": "LoadBalancerIPConfig", + "properties": { + "publicIPAddress": { + "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(parameters('lbIPName'),'-','0'))]" + } + } + } + ], + "backendAddressPools": [ + { + "name": "LoadBalancerBEAddressPool", + "properties": {} + } + ], + "loadBalancingRules": [ + { + "name": "LBRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('nt0fabricTcpGatewayPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('nt0fabricTcpGatewayPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "LBHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('nt0fabricHttpGatewayPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('nt0fabricHttpGatewayPort')]", + "idleTimeoutInMinutes": "5", + "probe": { + "id": "[variables('lbHttpProbeID0')]" + }, + "protocol": "tcp" + } + }, + { + "name": "WebMVCHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('webMvcHttpPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('webMvcHttpPort')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "WebSPAHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('webSpaHttpPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('webSpaHttpPort')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "WebStatusHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('webStatusHttpPort')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('webStatusHttpPort')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "IdSrvHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('IdSrvHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('IdSrvHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "BasketApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('BasketApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('BasketApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "CatalogApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('CatalogApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('CatalogApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "OrderingApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('OrderingApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('OrderingApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "MarketingApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('MarketingApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('MarketingApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "LocationsApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('LocationsApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('LocationsApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + } + ], + "probes": [ + { + "name": "FabricGatewayProbe", + "properties": { + "intervalInSeconds": 5, + "numberOfProbes": 2, + "port": "[parameters('nt0fabricTcpGatewayPort')]", + "protocol": "tcp" + } + }, + { + "name": "FabricHttpGatewayProbe", + "properties": { + "intervalInSeconds": 5, + "numberOfProbes": 2, + "port": "[parameters('nt0fabricHttpGatewayPort')]", + "protocol": "tcp" + } + } + ], + "inboundNatPools": [ + { + "name": "LoadBalancerBEAddressNatPool", + "properties": { + "backendPort": "22", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPortRangeEnd": "4500", + "frontendPortRangeStart": "3389", + "protocol": "tcp" + } + } + ] + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "[variables('vmssApiVersion')]", + "type": "Microsoft.Compute/virtualMachineScaleSets", + "name": "[parameters('vmNodeType0Name')]", + "location": "[parameters('computeLocation')]", + "dependsOn": [ + "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]", + "[concat('Microsoft.Network/loadBalancers/', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]", + "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]", + "[concat('Microsoft.Storage/storageAccounts/', parameters('applicationDiagnosticsStorageAccountName'))]" + ], + "properties": { + "overprovision": "[parameters('overProvision')]", + "upgradePolicy": { + "mode": "Automatic" + }, + "virtualMachineProfile": { + "extensionProfile": { + "extensions": [ + { + "name": "[concat(parameters('vmNodeType0Name'),'_ServiceFabricLinuxNode')]", + "properties": { + "type": "ServiceFabricLinuxNode", + "autoUpgradeMinorVersion": true, + "protectedSettings": { + "StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key1]", + "StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key2]" + }, + "publisher": "Microsoft.Azure.ServiceFabric", + "settings": { + "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]", + "nodeTypeRef": "[parameters('vmNodeType0Name')]", + "durabilityLevel": "Bronze", + "enableParallelJobs": true, + "nicPrefixOverride": "[parameters('subnet0Prefix')]", + "certificate": { + "thumbprint": "[parameters('certificateThumbprint')]", + "x509StoreName": "[parameters('certificateStoreValue')]" + } + }, + "typeHandlerVersion": "1.0" + } + }, + { + "name": "[concat('VMDiagnosticsVmExt','_vmNodeType0Name')]", + "properties": { + "type": "LinuxDiagnostic", + "autoUpgradeMinorVersion": true, + "protectedSettings": { + "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]", + "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]", + "storageAccountEndPoint": "https://core.windows.net/" + }, + "publisher": "Microsoft.OSTCExtensions", + "settings": { + "xmlCfg": "[base64(concat(variables('wadcfgxstart'),variables('wadmetricsresourceid0'),variables('wadcfgxend')))]", + "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]" + }, + "typeHandlerVersion": "2.3" + } + } + ] + }, + "networkProfile": { + "networkInterfaceConfigurations": [ + { + "name": "[concat(parameters('nicName'), '-0')]", + "properties": { + "ipConfigurations": [ + { + "name": "[concat(parameters('nicName'),'-',0)]", + "properties": { + "loadBalancerBackendAddressPools": [ + { + "id": "[variables('lbPoolID0')]" + } + ], + "loadBalancerInboundNatPools": [ + { + "id": "[variables('lbNatPoolID0')]" + } + ], + "subnet": { + "id": "[variables('subnet0Ref')]" + } + } + } + ], + "primary": true + } + } + ] + }, + "osProfile": { + "adminPassword": "[parameters('adminPassword')]", + "adminUsername": "[parameters('adminUsername')]", + "computernamePrefix": "[parameters('vmNodeType0Name')]", + "secrets": [ + { + "sourceVault": { + "id": "[parameters('sourceVaultValue')]" + }, + "vaultCertificates": [ + { + "certificateUrl": "[parameters('certificateUrlValue')]" + } + ] + } + ] + }, + "storageProfile": { + "imageReference": { + "publisher": "[parameters('vmImagePublisher')]", + "offer": "[parameters('vmImageOffer')]", + "sku": "[parameters('vmImageSku')]", + "version": "[parameters('vmImageVersion')]" + }, + "osDisk": { + "caching": "ReadOnly", + "createOption": "FromImage", + "managedDisk": { + "storageAccountType": "[parameters('storageAccountType')]" + } + } + } + } + }, + "sku": { + "name": "[parameters('vmNodeType0Size')]", + "capacity": "[parameters('nt0InstanceCount')]", + "tier": "Standard" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + }, + { + "apiVersion": "2017-07-01-preview", + "type": "Microsoft.ServiceFabric/clusters", + "name": "[parameters('clusterName')]", + "location": "[parameters('clusterLocation')]", + "dependsOn": [ + "[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]" + ], + "properties": { + "addonFeatures": [ + "DnsService" + ], + "certificate": { + "thumbprint": "[parameters('certificateThumbprint')]", + "x509StoreName": "[parameters('certificateStoreValue')]" + }, + "clientCertificateCommonNames": [], + "clientCertificateThumbprints": [], + "clusterCodeVersion": "6.0.120.1", + "clusterState": "Default", + "diagnosticsStorageAccountConfig": { + "blobEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.blob]", + "protectedAccountKeyName": "StorageAccountKey1", + "queueEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.queue]", + "storageAccountName": "[parameters('supportLogStorageAccountName')]", + "tableEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.table]" + }, + "fabricSettings": [ + { + "parameters": [ + { + "name": "ClusterProtectionLevel", + "value": "[parameters('clusterProtectionLevel')]" + } + ], + "name": "Security" + } + ], + "managementEndpoint": "[concat('https://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]", + "nodeTypes": [ + { + "name": "[parameters('vmNodeType0Name')]", + "applicationPorts": { + "endPort": "[parameters('nt0applicationEndPort')]", + "startPort": "[parameters('nt0applicationStartPort')]" + }, + "clientConnectionEndpointPort": "[parameters('nt0fabricTcpGatewayPort')]", + "durabilityLevel": "Bronze", + "ephemeralPorts": { + "endPort": "[parameters('nt0ephemeralEndPort')]", + "startPort": "[parameters('nt0ephemeralStartPort')]" + }, + "httpGatewayEndpointPort": "[parameters('nt0fabricHttpGatewayPort')]", + "isPrimary": true, + "vmInstanceCount": "[parameters('nt0InstanceCount')]" + } + ], + "provisioningState": "Default", + "reliabilityLevel": "Silver", + "upgradeMode": "Manual", + "vmImage": "Linux" + }, + "tags": { + "resourceType": "Service Fabric", + "clusterName": "[parameters('clusterName')]" + } + } + ], + "outputs": { + "clusterProperties": { + "value": "[reference(parameters('clusterName'))]", + "type": "object" + } + } +} \ No newline at end of file diff --git a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.parameters.json b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.parameters.json new file mode 100644 index 000000000..4a783768e --- /dev/null +++ b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.parameters.json @@ -0,0 +1,102 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "clusterName": { + "value": "your_sf_name" + }, + "clusterLocation": { + "value": "westeurope" + }, + "computeLocation": { + "value": "westeurope" + }, + "adminUserName": { + "value": "eshop" + }, + "adminPassword": { + "value": "your_admin_password" + }, + "nicName": { + "value": "NIC-eshopsflinsec" + }, + "publicIPAddressName": { + "value": "eshopsflinsec-PubIP" + }, + "dnsName": { + "value": "your_sf_dns" + }, + "virtualNetworkName": { + "value": "VNet-eshopsflinsec" + }, + "lbName": { + "value": "LB-eshopsflinsec" + }, + "lbIPName": { + "value": "LBIP-eshopsflinsec" + }, + "sourceVaultValue": { + "value": "" + }, + "certificateUrlValue": { + "value": "" + }, + "certificateThumbprint": { + "value": "" + }, + "vmImageSku": { + "value": "16.04-LTS" + }, + "vmImageVersion": { + "value": "latest" + }, + "vmImagePublisher": { + "value": "Canonical" + }, + "nt0ephemeralStartPort": { + "value": 49152 + }, + "nt0ephemeralEndPort": { + "value": 65534 + }, + "nt0applicationStartPort": { + "value": 20000 + }, + "nt0applicationEndPort": { + "value": 30000 + }, + "nt0fabricTcpGatewayPort": { + "value": 19000 + }, + "nt0fabricHttpGatewayPort": { + "value": 19080 + }, + "webMvcHttpPort": { + "value": 5100 + }, + "webSpaHttpPort": { + "value": 5104 + }, + "webStatusHttpPort": { + "value": 5107 + }, + "IdSrvHttpRule": { + "value": 5105 + }, + "BasketApiHttpRule": { + "value": 5103 + }, + "CatalogApiHttpRule": { + "value": 5101 + }, + "OrderingApiHttpRule": { + "value": 5102 + }, + "MarketingApiHttpRule": { + "value": 5110 + }, + "LocationsApiHttpRule": { + "value": 5109 + } + } +} \ No newline at end of file diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 9d8e7c486..bf680acbc 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -44,7 +44,7 @@ Go to PortalAzure and create a Keyvault service. Make sure Enable access for dep Execute the gen-keyvaultcert.ps1 script to generate and download a certificate from Keyvault. ``` -.\gen-cert.ps1 -vaultName -certName -certPwd -subjectName CN=.westeurope.cloudapp.azure.com -saveDir C:\Users\\Downloads +.\gen-keyvaultcert.ps1 -vaultName -certName -certPwd -subjectName CN=.westeurope.cloudapp.azure.com -saveDir C:\Users\\Downloads ``` ## Install the certificate diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json index b3fe4b59d..073dc9653 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.json @@ -59,6 +59,26 @@ "type": "int", "defaultValue": 5105 }, + "BasketApiHttpRule": { + "type": "int", + "defaultValue": 5103 + }, + "CatalogApiHttpRule": { + "type": "int", + "defaultValue": 5101 + }, + "OrderingApiHttpRule": { + "type": "int", + "defaultValue": 5102 + }, + "MarketingApiHttpRule": { + "type": "int", + "defaultValue": 5110 + }, + "LocationsApiHttpRule": { + "type": "int", + "defaultValue": 5109 + }, "subnet0Name": { "type": "string", "defaultValue": "Subnet-0" @@ -461,6 +481,86 @@ }, "protocol": "tcp" } + }, + { + "name": "BasketApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('BasketApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('BasketApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "CatalogApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('CatalogApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('CatalogApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "OrderingApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('OrderingApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('OrderingApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "MarketingApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('MarketingApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('MarketingApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "LocationsApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('LocationsApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('LocationsApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } } ], "probes": [ diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json index 8d7cf57ac..bf1b89642 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json @@ -76,6 +76,21 @@ }, "IdSrvHttpRule": { "value": 5105 + }, + "BasketApiHttpRule": { + "value": 5103 + }, + "CatalogApiHttpRule": { + "value": 5101 + }, + "OrderingApiHttpRule": { + "value": 5102 + }, + "MarketingApiHttpRule": { + "value": 5110 + }, + "LocationsApiHttpRule": { + "value": 5109 } } } diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecured.json similarity index 89% rename from deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.json rename to deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecured.json index b5bbfa55c..843f5c0d1 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecured.json @@ -59,6 +59,26 @@ "type": "int", "defaultValue": 5105 }, + "BasketApiHttpRule": { + "type": "int", + "defaultValue": 5103 + }, + "CatalogApiHttpRule": { + "type": "int", + "defaultValue": 5101 + }, + "OrderingApiHttpRule": { + "type": "int", + "defaultValue": 5102 + }, + "MarketingApiHttpRule": { + "type": "int", + "defaultValue": 5110 + }, + "LocationsApiHttpRule": { + "type": "int", + "defaultValue": 5109 + }, "subnet0Name": { "type": "string", "defaultValue": "Subnet-0" @@ -501,6 +521,86 @@ }, "protocol": "tcp" } + }, + { + "name": "BasketApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('BasketApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('BasketApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "CatalogApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('CatalogApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('CatalogApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "OrderingApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('OrderingApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('OrderingApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "MarketingApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('MarketingApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('MarketingApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } + }, + { + "name": "LocationsApiHttpRule", + "properties": { + "backendAddressPool": { + "id": "[variables('lbPoolID0')]" + }, + "backendPort": "[parameters('LocationsApiHttpRule')]", + "enableFloatingIP": "false", + "frontendIPConfiguration": { + "id": "[variables('lbIPConfig0')]" + }, + "frontendPort": "[parameters('LocationsApiHttpRule')]", + "idleTimeoutInMinutes": "5", + "protocol": "tcp" + } } ], "probes": [ diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.parameters.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecured.parameters.json similarity index 84% rename from deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.parameters.json rename to deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecured.parameters.json index 22dd82265..2092ebd9a 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecure.parameters.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecured.parameters.json @@ -42,10 +42,10 @@ "value": "sflogseshopsfwin3480" }, "sourceVaultValue": { - "value": "/subscriptions/6c22bb55-0221-4ce4-9bf1-3c4a10a7294c/resourceGroups/eshop-sf-win/providers/Microsoft.KeyVault/vaults/eshoponsfkeyvault" + "value": "" }, "certificateUrlValue": { - "value": "https://eshoponsfkeyvault.vault.azure.net:443/secrets/eshopsfwincert/b4ae55e3a549448c96088cd8dd96c369" + "value": "" }, "certificateThumbprint": { "value": "" @@ -85,6 +85,21 @@ }, "IdSrvHttpRule": { "value": 5105 + }, + "BasketApiHttpRule": { + "value": 5103 + }, + "CatalogApiHttpRule": { + "value": 5101 + }, + "OrderingApiHttpRule": { + "value": 5102 + }, + "MarketingApiHttpRule": { + "value": 5110 + }, + "LocationsApiHttpRule": { + "value": 5109 } } } diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln index 86ba102dd..c83c564cf 100644 --- a/eShopOnContainers-ServicesAndWebApps.sln +++ b/eShopOnContainers-ServicesAndWebApps.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 -VisualStudioVersion = 15.0.26730.8 +VisualStudioVersion = 15.0.26730.15 MinimumVisualStudioVersion = 10.0.40219.1 Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}" EndProject From 4bc1772d8429f22e08d7d14124f77641ef3d56c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Tue, 10 Oct 2017 12:58:04 +0200 Subject: [PATCH 052/136] Created SF infrastucture services --- .../ApplicationManifest.xml | 34 +++ .../RabbitMQPkg}/Config/Settings.xml | 0 .../RabbitMQPkg/ServiceManifest.xml | 7 +- .../Bus/ApplicationParameters/Cloud.xml | 6 + .../Bus/ApplicationParameters/Local.1Node.xml | 5 + .../Bus/ApplicationParameters/Local.5Node.xml | 5 + .../eShopOnServiceFabricBus/Bus/Bus.sfproj | 46 ++++ .../Bus/PublishProfiles/Cloud.xml | 25 ++ .../Bus/PublishProfiles/Local.1Node.xml | 11 + .../Bus/PublishProfiles/Local.5Node.xml | 11 + .../Bus/Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../Bus/packages.config | 4 + .../ApplicationManifest.xml | 34 +++ .../MongoDBPkg/Config/Settings.xml | 0 .../MongoDBPkg/ServiceManifest.xml | 2 +- .../NoSQL/ApplicationParameters/Cloud.xml | 6 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../NoSQL/NoSQL.sfproj | 46 ++++ .../NoSQL/PublishProfiles/Cloud.xml | 25 ++ .../NoSQL/PublishProfiles/Local.1Node.xml | 11 + .../NoSQL/PublishProfiles/Local.5Node.xml | 11 + .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../NoSQL/packages.config | 4 + .../ApplicationManifest.xml | 34 +++ .../BasketDataPkg}/Config/Settings.xml | 0 .../BasketDataPkg/ServiceManifest.xml | 0 .../Redis/ApplicationParameters/Cloud.xml | 6 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../Redis/PublishProfiles/Cloud.xml | 25 ++ .../Redis/PublishProfiles/Local.1Node.xml | 11 + .../Redis/PublishProfiles/Local.5Node.xml | 11 + .../Redis/Redis.sfproj | 46 ++++ .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../Redis/packages.config | 4 + .../ApplicationManifest.xml | 34 +++ .../SqlServerPkg/Config/Settings.xml | 0 .../SqlServerPkg/ServiceManifest.xml | 0 .../Sql/ApplicationParameters/Cloud.xml | 6 + .../Sql/ApplicationParameters/Local.1Node.xml | 5 + .../Sql/ApplicationParameters/Local.5Node.xml | 5 + .../Sql/PublishProfiles/Cloud.xml | 25 ++ .../Sql/PublishProfiles/Local.1Node.xml | 11 + .../Sql/PublishProfiles/Local.5Node.xml | 11 + .../Sql/Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../eShopOnServiceFabricSql/Sql/Sql.sfproj | 46 ++++ .../Sql/packages.config | 4 + .../ApplicationManifest.xml | 69 +---- .../BasketApiPkg/ServiceManifest.xml | 7 +- .../CatalogApiPkg/ServiceManifest.xml | 7 +- .../LocationsApiPkg/ServiceManifest.xml | 7 +- .../MarketingApiPkg/ServiceManifest.xml | 9 +- .../OrderingApiPkg/ServiceManifest.xml | 7 +- .../PaymentApiPkg/ServiceManifest.xml | 5 +- .../ApplicationParameters/Cloud.xml | 5 - .../eShopOnServiceFabric.sfproj | 8 - .../IdentityApiPkg/ServiceManifest.xml | 2 +- .../eShopOnServiceFabricIdSrv.sfproj | 8 +- .../eShopOnServiceFabricWebMVC.sfproj | 8 +- .../WebSPAPkg/ServiceManifest.xml | 8 +- .../ApplicationParameters/Cloud.xml | 8 +- .../eShopOnServiceFabricWebSPA.sfproj | 8 +- .../eShopOnServiceFabricWebStatus.sfproj | 8 +- .../ApplicationManifest.xml | 34 +++ .../RabbitMQPkg}/Config/Settings.xml | 0 .../RabbitMQPkg/ServiceManifest.xml | 7 +- .../Bus/ApplicationParameters/Cloud.xml | 6 + .../Bus/ApplicationParameters/Local.1Node.xml | 5 + .../Bus/ApplicationParameters/Local.5Node.xml | 5 + .../eShopOnServiceFabricBus/Bus/Bus.sfproj | 46 ++++ .../Bus/PublishProfiles/Cloud.xml | 25 ++ .../Bus/PublishProfiles/Local.1Node.xml | 11 + .../Bus/PublishProfiles/Local.5Node.xml | 11 + .../Bus/Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../Bus/packages.config | 4 + .../ApplicationManifest.xml | 34 +++ .../MongoDBPkg/Config/Settings.xml | 0 .../MongoDBPkg/ServiceManifest.xml | 2 +- .../NoSQL/ApplicationParameters/Cloud.xml | 6 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../NoSQL/NoSQL.sfproj | 46 ++++ .../NoSQL/PublishProfiles/Cloud.xml | 25 ++ .../NoSQL/PublishProfiles/Local.1Node.xml | 11 + .../NoSQL/PublishProfiles/Local.5Node.xml | 11 + .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../NoSQL/packages.config | 4 + .../ApplicationManifest.xml | 34 +++ .../BasketDataPkg}/Config/Settings.xml | 0 .../BasketDataPkg/ServiceManifest.xml | 0 .../Redis/ApplicationParameters/Cloud.xml | 6 + .../ApplicationParameters/Local.1Node.xml | 5 + .../ApplicationParameters/Local.5Node.xml | 5 + .../Redis/PublishProfiles/Cloud.xml | 25 ++ .../Redis/PublishProfiles/Local.1Node.xml | 11 + .../Redis/PublishProfiles/Local.5Node.xml | 11 + .../Redis/Redis.sfproj | 46 ++++ .../Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../Redis/packages.config | 4 + .../ApplicationManifest.xml | 34 +++ .../SqlServerPkg/Config/Settings.xml | 0 .../SqlServerPkg/ServiceManifest.xml | 0 .../Sql/ApplicationParameters/Cloud.xml | 6 + .../Sql/ApplicationParameters/Local.1Node.xml | 5 + .../Sql/ApplicationParameters/Local.5Node.xml | 5 + .../Sql/PublishProfiles/Cloud.xml | 25 ++ .../Sql/PublishProfiles/Local.1Node.xml | 11 + .../Sql/PublishProfiles/Local.5Node.xml | 11 + .../Sql/Scripts/Deploy-FabricApplication.ps1 | 258 ++++++++++++++++++ .../eShopOnServiceFabricSql/Sql/Sql.sfproj | 46 ++++ .../Sql/packages.config | 4 + .../ApplicationManifest.xml | 69 +---- .../BasketApiPkg/ServiceManifest.xml | 5 +- .../CatalogApiPkg/ServiceManifest.xml | 5 +- .../LocationsApiPkg/ServiceManifest.xml | 5 +- .../MarketingApiPkg/ServiceManifest.xml | 7 +- .../OrderingApiPkg/ServiceManifest.xml | 5 +- .../PaymentApiPkg/ServiceManifest.xml | 3 +- .../ApplicationParameters/Cloud.xml | 5 - .../eShopOnServiceFabric.sfproj | 16 +- .../IdentityApiPkg/ServiceManifest.xml | 2 +- .../eShopOnServiceFabricIdSrv.sfproj | 8 +- .../eShopOnServiceFabricWebMVC.sfproj | 8 +- .../WebSPAPkg/ServiceManifest.xml | 8 +- .../ApplicationParameters/Cloud.xml | 8 +- .../eShopOnServiceFabricWebSPA.sfproj | 8 +- .../eShopOnServiceFabricWebStatus.sfproj | 8 +- 128 files changed, 3336 insertions(+), 266 deletions(-) create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/ApplicationManifest.xml rename ServiceFabric/Linux/{eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg => Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg}/Config/Settings.xml (100%) rename ServiceFabric/Linux/{eShopOnServiceFabric => Infrastructure/eShopOnServiceFabricBus/Bus}/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml (94%) create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/Bus.sfproj create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/packages.config create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/ApplicationManifest.xml rename ServiceFabric/Linux/{eShopOnServiceFabric => Infrastructure/eShopOnServiceFabricNoSql/NoSQL}/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml (100%) rename ServiceFabric/Linux/{eShopOnServiceFabric => Infrastructure/eShopOnServiceFabricNoSql/NoSQL}/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml (98%) create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/packages.config create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/ApplicationManifest.xml rename ServiceFabric/Linux/{eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg => Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg}/Config/Settings.xml (100%) rename ServiceFabric/Linux/{eShopOnServiceFabric => Infrastructure/eShopOnServiceFabricRedis/Redis}/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/packages.config create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/ApplicationManifest.xml rename ServiceFabric/Linux/{eShopOnServiceFabric => Infrastructure/eShopOnServiceFabricSql/Sql}/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml (100%) rename ServiceFabric/Linux/{eShopOnServiceFabric => Infrastructure/eShopOnServiceFabricSql/Sql}/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/Sql.sfproj create mode 100644 ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/packages.config create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/ApplicationManifest.xml rename ServiceFabric/Windows/{eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg => Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg}/Config/Settings.xml (100%) rename ServiceFabric/Windows/{eShopOnServiceFabric => Infrastructure/eShopOnServiceFabricBus/Bus}/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml (94%) create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/Bus.sfproj create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/packages.config create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/ApplicationManifest.xml rename ServiceFabric/Windows/{eShopOnServiceFabric => Infrastructure/eShopOnServiceFabricNoSql/NoSQL}/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml (100%) rename ServiceFabric/Windows/{eShopOnServiceFabric => Infrastructure/eShopOnServiceFabricNoSql/NoSQL}/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml (98%) create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/packages.config create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/ApplicationManifest.xml rename ServiceFabric/Windows/{eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg => Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg}/Config/Settings.xml (100%) rename ServiceFabric/Windows/{eShopOnServiceFabric => Infrastructure/eShopOnServiceFabricRedis/Redis}/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/packages.config create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/ApplicationManifest.xml rename ServiceFabric/Windows/{eShopOnServiceFabric => Infrastructure/eShopOnServiceFabricSql/Sql}/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml (100%) rename ServiceFabric/Windows/{eShopOnServiceFabric => Infrastructure/eShopOnServiceFabricSql/Sql}/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml (100%) create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.1Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.5Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Cloud.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.1Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.5Node.xml create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/Scripts/Deploy-FabricApplication.ps1 create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/Sql.sfproj create mode 100644 ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/packages.config diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..bb1cf2743 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml rename to ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml similarity index 94% rename from ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml rename to ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml index 78f3ca0d5..8c2f16691 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml @@ -19,10 +19,11 @@ - + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.1Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.5Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/packages.config b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..fe031fe95 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml rename to ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml similarity index 98% rename from ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml rename to ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml index 9fb9a085b..59be2bdd4 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml @@ -35,7 +35,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..246e938b5 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..22363f273 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..22363f273 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj new file mode 100644 index 000000000..94da67b78 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj @@ -0,0 +1,46 @@ + + + + + eb070036-ec60-49a6-88e1-562a2043c3d7 + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Cloud.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..2ab9df11c --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.1Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.5Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/packages.config b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..11bf47a6a --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml rename to ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml rename to ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..96eba3857 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..e2f3876c7 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..e2f3876c7 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Cloud.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..2ab9df11c --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.1Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.5Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj new file mode 100644 index 000000000..2d8b7a2ab --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj @@ -0,0 +1,46 @@ + + + + + 17acd9ea-8f16-4091-aa29-c67002971eee + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/packages.config b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..27fa4bfe2 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml rename to ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml rename to ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..c59b1bdc4 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..9fc10b0bc --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..9fc10b0bc --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Cloud.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..2ab9df11c --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.1Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.5Node.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/Sql.sfproj b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/Sql.sfproj new file mode 100644 index 000000000..48447811e --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/Sql.sfproj @@ -0,0 +1,46 @@ + + + + + 65a83188-79c1-47ad-931d-8e8a87247408 + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/packages.config b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml index 0d3e54d46..4d5b1fd92 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -5,16 +5,9 @@ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - - - - - - - - + @@ -24,15 +17,7 @@ - - - - - - - - - + @@ -45,15 +30,6 @@ - - - - - - - - - @@ -74,24 +50,6 @@ - - - - - - - - - - - - - - - - - - @@ -131,21 +89,12 @@ ServiceFabric PowerShell module. The attribute ServiceTypeName below must match the name defined in the imported ServiceManifest.xml file. --> - - - - - + - - - - - @@ -155,17 +104,7 @@ - - - - - - - - - - - + diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml index 35eacbf72..5e4d100f5 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml @@ -22,14 +22,11 @@ - + - + - - - diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml index 71ccc94a5..9fe30adbc 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml @@ -22,17 +22,14 @@ - + - + - - - diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml index a51a53b62..e8696695c 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml @@ -22,15 +22,12 @@ - + - + - - - diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml index 1dee2e1bf..6182f03a9 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -22,19 +22,16 @@ - + - + - - - - + diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml index eb82e42b1..c060141b4 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml @@ -22,17 +22,14 @@ - + - + - - - diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml index 096ca681e..4dd2afe1a 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml @@ -22,11 +22,8 @@ - + - - - diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml index 9f1f007c1..ae314bc6b 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml @@ -1,14 +1,9 @@  - - - - - diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/eShopOnServiceFabric.sfproj b/ServiceFabric/Linux/eShopOnServiceFabric/eShopOnServiceFabric.sfproj index d149a5f5a..405e7bb4c 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/eShopOnServiceFabric.sfproj +++ b/ServiceFabric/Linux/eShopOnServiceFabric/eShopOnServiceFabric.sfproj @@ -30,24 +30,16 @@ - - - - - - - - diff --git a/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml index 38a18c986..fe48ec40f 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml @@ -25,7 +25,7 @@ - + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj index a109faa28..1d0d025a9 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj +++ b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj @@ -1,6 +1,6 @@  - + 39b54901-d57d-416e-b51e-33c4017ca464 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj index 3225c22f2..ff4ce2247 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj @@ -1,6 +1,6 @@  - + 0cf895ff-3616-4d1f-8d2e-5d856cdf3612 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml index 1eddb4266..5073df34b 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml @@ -22,10 +22,10 @@ - - - - + + + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml index 1505355be..6da0c5f4c 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml @@ -2,10 +2,10 @@ - - - - + + + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj index 3c5ee05fd..05ed606be 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj @@ -1,6 +1,6 @@  - + 1670de10-5626-429d-a74a-2dd8281cc0c9 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj index 76a0c36b2..1d4def7f2 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj @@ -1,6 +1,6 @@  - + 25f73fd9-b32f-401a-80e8-17c72606a7e1 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..bb1cf2743 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml rename to ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml similarity index 94% rename from ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml rename to ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml index 801e88f69..9415f54f2 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml @@ -19,10 +19,11 @@ - + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.1Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.5Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/packages.config b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..fe031fe95 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml rename to ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/Config/Settings.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml similarity index 98% rename from ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml rename to ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml index aba3ba1ec..be47332ca 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml @@ -35,7 +35,7 @@ - + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..246e938b5 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..22363f273 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..22363f273 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj new file mode 100644 index 000000000..94da67b78 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj @@ -0,0 +1,46 @@ + + + + + eb070036-ec60-49a6-88e1-562a2043c3d7 + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Cloud.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..2ab9df11c --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.1Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.5Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/packages.config b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..11bf47a6a --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/RabbitMQPkg/Config/Settings.xml rename to ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg/Config/Settings.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml rename to ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..96eba3857 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..e2f3876c7 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..e2f3876c7 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Cloud.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..2ab9df11c --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.1Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.5Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj new file mode 100644 index 000000000..2d8b7a2ab --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj @@ -0,0 +1,46 @@ + + + + + 17acd9ea-8f16-4091-aa29-c67002971eee + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/packages.config b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/ApplicationManifest.xml new file mode 100644 index 000000000..27fa4bfe2 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/ApplicationManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml similarity index 100% rename from ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml rename to ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/SqlServerPkg/Config/Settings.xml diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml similarity index 100% rename from ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml rename to ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml new file mode 100644 index 000000000..c59b1bdc4 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.1Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.1Node.xml new file mode 100644 index 000000000..9fc10b0bc --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.1Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.5Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.5Node.xml new file mode 100644 index 000000000..9fc10b0bc --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Local.5Node.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Cloud.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Cloud.xml new file mode 100644 index 000000000..2ab9df11c --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Cloud.xml @@ -0,0 +1,25 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.1Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.1Node.xml new file mode 100644 index 000000000..6e1403e96 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.1Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.5Node.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.5Node.xml new file mode 100644 index 000000000..f42d759c3 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/PublishProfiles/Local.5Node.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/Scripts/Deploy-FabricApplication.ps1 b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/Scripts/Deploy-FabricApplication.ps1 new file mode 100644 index 000000000..2897b10e8 --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/Scripts/Deploy-FabricApplication.ps1 @@ -0,0 +1,258 @@ +<# +.SYNOPSIS +Deploys a Service Fabric application type to a cluster. + +.DESCRIPTION +This script deploys a Service Fabric application type to a cluster. It is invoked by Visual Studio when deploying a Service Fabric Application project. + +.NOTES +WARNING: This script file is invoked by Visual Studio. Its parameters must not be altered but its logic can be customized as necessary. + +.PARAMETER PublishProfileFile +Path to the file containing the publish profile. + +.PARAMETER ApplicationPackagePath +Path to the folder of the packaged Service Fabric application. + +.PARAMETER DeployOnly +Indicates that the Service Fabric application should not be created or upgraded after registering the application type. + +.PARAMETER ApplicationParameter +Hashtable of the Service Fabric application parameters to be used for the application. + +.PARAMETER UnregisterUnusedApplicationVersionsAfterUpgrade +Indicates whether to unregister any unused application versions that exist after an upgrade is finished. + +.PARAMETER OverrideUpgradeBehavior +Indicates the behavior used to override the upgrade settings specified by the publish profile. +'None' indicates that the upgrade settings will not be overridden. +'ForceUpgrade' indicates that an upgrade will occur with default settings, regardless of what is specified in the publish profile. +'VetoUpgrade' indicates that an upgrade will not occur, regardless of what is specified in the publish profile. + +.PARAMETER UseExistingClusterConnection +Indicates that the script should make use of an existing cluster connection that has already been established in the PowerShell session. The cluster connection parameters configured in the publish profile are ignored. + +.PARAMETER OverwriteBehavior +Overwrite Behavior if an application exists in the cluster with the same name. Available Options are Never, Always, SameAppTypeAndVersion. This setting is not applicable when upgrading an application. +'Never' will not remove the existing application. This is the default behavior. +'Always' will remove the existing application even if its Application type and Version is different from the application being created. +'SameAppTypeAndVersion' will remove the existing application only if its Application type and Version is same as the application being created. + +.PARAMETER SkipPackageValidation +Switch signaling whether the package should be validated or not before deployment. + +.PARAMETER SecurityToken +A security token for authentication to cluster management endpoints. Used for silent authentication to clusters that are protected by Azure Active Directory. + +.PARAMETER CopyPackageTimeoutSec +Timeout in seconds for copying application package to image store. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' + +Deploy the application using the default package location for a Debug build. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -DoNotCreateApplication + +Deploy the application but do not create the application instance. + +.EXAMPLE +. Scripts\Deploy-FabricApplication.ps1 -ApplicationPackagePath 'pkg\Debug' -ApplicationParameter @{CustomParameter1='MyValue'; CustomParameter2='MyValue'} + +Deploy the application by providing values for parameters that are defined in the application manifest. +#> + +Param +( + [String] + $PublishProfileFile, + + [String] + $ApplicationPackagePath, + + [Switch] + $DeployOnly, + + [Hashtable] + $ApplicationParameter, + + [Boolean] + $UnregisterUnusedApplicationVersionsAfterUpgrade, + + [String] + [ValidateSet('None', 'ForceUpgrade', 'VetoUpgrade')] + $OverrideUpgradeBehavior = 'None', + + [Switch] + $UseExistingClusterConnection, + + [String] + [ValidateSet('Never','Always','SameAppTypeAndVersion')] + $OverwriteBehavior = 'Never', + + [Switch] + $SkipPackageValidation, + + [String] + $SecurityToken, + + [int] + $CopyPackageTimeoutSec +) + +function Read-XmlElementAsHashtable +{ + Param ( + [System.Xml.XmlElement] + $Element + ) + + $hashtable = @{} + if ($Element.Attributes) + { + $Element.Attributes | + ForEach-Object { + $boolVal = $null + if ([bool]::TryParse($_.Value, [ref]$boolVal)) { + $hashtable[$_.Name] = $boolVal + } + else { + $hashtable[$_.Name] = $_.Value + } + } + } + + return $hashtable +} + +function Read-PublishProfile +{ + Param ( + [ValidateScript({Test-Path $_ -PathType Leaf})] + [String] + $PublishProfileFile + ) + + $publishProfileXml = [Xml] (Get-Content $PublishProfileFile) + $publishProfile = @{} + + $publishProfile.ClusterConnectionParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("ClusterConnectionParameters") + $publishProfile.UpgradeDeployment = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment") + $publishProfile.CopyPackageParameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("CopyPackageParameters") + + if ($publishProfileXml.PublishProfile.Item("UpgradeDeployment")) + { + $publishProfile.UpgradeDeployment.Parameters = Read-XmlElementAsHashtable $publishProfileXml.PublishProfile.Item("UpgradeDeployment").Item("Parameters") + if ($publishProfile.UpgradeDeployment["Mode"]) + { + $publishProfile.UpgradeDeployment.Parameters[$publishProfile.UpgradeDeployment["Mode"]] = $true + } + } + + $publishProfileFolder = (Split-Path $PublishProfileFile) + $publishProfile.ApplicationParameterFile = [System.IO.Path]::Combine($PublishProfileFolder, $publishProfileXml.PublishProfile.ApplicationParameterFile.Path) + + return $publishProfile +} + +$LocalFolder = (Split-Path $MyInvocation.MyCommand.Path) + +if (!$PublishProfileFile) +{ + $PublishProfileFile = "$LocalFolder\..\PublishProfiles\Local.xml" +} + +if (!$ApplicationPackagePath) +{ + $ApplicationPackagePath = "$LocalFolder\..\pkg\Release" +} + +$ApplicationPackagePath = Resolve-Path $ApplicationPackagePath + +$publishProfile = Read-PublishProfile $PublishProfileFile + +if (-not $UseExistingClusterConnection) +{ + $ClusterConnectionParameters = $publishProfile.ClusterConnectionParameters + if ($SecurityToken) + { + $ClusterConnectionParameters["SecurityToken"] = $SecurityToken + } + + try + { + [void](Connect-ServiceFabricCluster @ClusterConnectionParameters) + } + catch [System.Fabric.FabricObjectClosedException] + { + Write-Warning "Service Fabric cluster may not be connected." + throw + } +} + +$RegKey = "HKLM:\SOFTWARE\Microsoft\Service Fabric SDK" +$ModuleFolderPath = (Get-ItemProperty -Path $RegKey -Name FabricSDKPSModulePath).FabricSDKPSModulePath +Import-Module "$ModuleFolderPath\ServiceFabricSDK.psm1" + +$IsUpgrade = ($publishProfile.UpgradeDeployment -and $publishProfile.UpgradeDeployment.Enabled -and $OverrideUpgradeBehavior -ne 'VetoUpgrade') -or $OverrideUpgradeBehavior -eq 'ForceUpgrade' + +$PublishParameters = @{ + 'ApplicationPackagePath' = $ApplicationPackagePath + 'ApplicationParameterFilePath' = $publishProfile.ApplicationParameterFile + 'ApplicationParameter' = $ApplicationParameter + 'ErrorAction' = 'Stop' +} + +if ($publishProfile.CopyPackageParameters.CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $publishProfile.CopyPackageParameters.CopyPackageTimeoutSec +} + +if ($publishProfile.CopyPackageParameters.CompressPackage) +{ + $PublishParameters['CompressPackage'] = $publishProfile.CopyPackageParameters.CompressPackage +} + +# CopyPackageTimeoutSec parameter overrides the value from the publish profile +if ($CopyPackageTimeoutSec) +{ + $PublishParameters['CopyPackageTimeoutSec'] = $CopyPackageTimeoutSec +} + +if ($IsUpgrade) +{ + $Action = "RegisterAndUpgrade" + if ($DeployOnly) + { + $Action = "Register" + } + + $UpgradeParameters = $publishProfile.UpgradeDeployment.Parameters + + if ($OverrideUpgradeBehavior -eq 'ForceUpgrade') + { + # Warning: Do not alter these upgrade parameters. It will create an inconsistency with Visual Studio's behavior. + $UpgradeParameters = @{ UnmonitoredAuto = $true; Force = $true } + } + + $PublishParameters['Action'] = $Action + $PublishParameters['UpgradeParameters'] = $UpgradeParameters + $PublishParameters['UnregisterUnusedVersions'] = $UnregisterUnusedApplicationVersionsAfterUpgrade + + Publish-UpgradedServiceFabricApplication @PublishParameters +} +else +{ + $Action = "RegisterAndCreate" + if ($DeployOnly) + { + $Action = "Register" + } + + $PublishParameters['Action'] = $Action + $PublishParameters['OverwriteBehavior'] = $OverwriteBehavior + $PublishParameters['SkipPackageValidation'] = $SkipPackageValidation + + Publish-NewServiceFabricApplication @PublishParameters +} \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/Sql.sfproj b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/Sql.sfproj new file mode 100644 index 000000000..c403b42ce --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/Sql.sfproj @@ -0,0 +1,46 @@ + + + + + 65a83188-79c1-47ad-931d-8e8a87247408 + 1.7 + 1.5 + 1.6 + v4.6.1 + + + + Debug + x64 + + + Release + x64 + + + + + + + + + + + + + + + + + + + + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets + + + + + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/packages.config b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/packages.config new file mode 100644 index 000000000..3dc0a332b --- /dev/null +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml index 0d3e54d46..4d5b1fd92 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -5,16 +5,9 @@ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - - - - - - - - + @@ -24,15 +17,7 @@ - - - - - - - - - + @@ -45,15 +30,6 @@ - - - - - - - - - @@ -74,24 +50,6 @@ - - - - - - - - - - - - - - - - - - @@ -131,21 +89,12 @@ ServiceFabric PowerShell module. The attribute ServiceTypeName below must match the name defined in the imported ServiceManifest.xml file. --> - - - - - + - - - - - @@ -155,17 +104,7 @@ - - - - - - - - - - - + diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml index 3ef82903a..1eef781cb 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml @@ -22,14 +22,13 @@ - + - + - diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml index e978f2ecc..a0717fc23 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml @@ -22,17 +22,16 @@ - + - + - diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml index 749d7a051..90fd0e918 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml @@ -22,15 +22,14 @@ - + - + - diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml index d69a94d50..c6a464914 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -22,9 +22,9 @@ - + - + @@ -33,8 +33,7 @@ - - + diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml index e858bb8c8..9c3c1831f 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml @@ -22,17 +22,16 @@ - + - + - diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml index d42b8bdeb..f67eacff4 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml @@ -22,11 +22,10 @@ - + - diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml index 9f1f007c1..ae314bc6b 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml @@ -1,14 +1,9 @@  - - - - - diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/eShopOnServiceFabric.sfproj b/ServiceFabric/Windows/eShopOnServiceFabric/eShopOnServiceFabric.sfproj index 9dd120b9e..405e7bb4c 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/eShopOnServiceFabric.sfproj +++ b/ServiceFabric/Windows/eShopOnServiceFabric/eShopOnServiceFabric.sfproj @@ -1,6 +1,6 @@  - + 983eab84-65c5-4793-a300-08f97c791a15 1.6 @@ -30,24 +30,16 @@ - - - - - - - - @@ -55,9 +47,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml index 02ec66197..3e500306f 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml @@ -25,7 +25,7 @@ - + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj index a109faa28..1d0d025a9 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv.sfproj @@ -1,6 +1,6 @@  - + 39b54901-d57d-416e-b51e-33c4017ca464 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj index 3225c22f2..ff4ce2247 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC.sfproj @@ -1,6 +1,6 @@  - + 0cf895ff-3616-4d1f-8d2e-5d856cdf3612 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml index f907caddc..a6c42ddab 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml @@ -22,10 +22,10 @@ - - - - + + + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml index 1505355be..6da0c5f4c 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml @@ -2,10 +2,10 @@ - - - - + + + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj index 3c5ee05fd..05ed606be 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA.sfproj @@ -1,6 +1,6 @@  - + 1670de10-5626-429d-a74a-2dd8281cc0c9 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj index 76a0c36b2..1d4def7f2 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus.sfproj @@ -1,6 +1,6 @@  - + 25f73fd9-b32f-401a-80e8-17c72606a7e1 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file From f7c09dad81dd0e27c97c1c7b1465f4fa10d97d44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Tue, 10 Oct 2017 15:12:33 +0200 Subject: [PATCH 053/136] Update SF linux manifests --- .../RabbitMQPkg/ServiceManifest.xml | 2 +- .../eShopOnServiceFabricBus/Bus/Bus.sfproj | 8 +-- .../MongoDBPkg/ServiceManifest.xml | 2 +- .../NoSQL/NoSQL.sfproj | 8 +-- .../BasketDataPkg/ServiceManifest.xml | 2 +- .../Redis/Redis.sfproj | 8 +-- .../BasketApiPkg/ServiceManifest.xml | 2 +- .../CatalogApiPkg/ServiceManifest.xml | 2 +- .../LocationsApiPkg/ServiceManifest.xml | 2 +- .../MarketingApiPkg/ServiceManifest.xml | 2 +- .../OrderingApiPkg/ServiceManifest.xml | 2 +- .../PaymentApiPkg/ServiceManifest.xml | 2 +- .../ApplicationParameters/Cloud.xml | 2 +- .../IdentityApiPkg/ServiceManifest.xml | 2 +- .../ApplicationParameters/Cloud.xml | 8 +-- .../WebMVCPkg/ServiceManifest.xml | 2 +- .../WebSPAPkg/ServiceManifest.xml | 2 +- .../WebStatusPkg/ServiceManifest.xml | 2 +- eShopOnContainers-ServicesAndWebApps.sln | 54 +++++++++++++++++++ test/Services/LoadTest/LoadTest.csproj | 5 +- 20 files changed, 85 insertions(+), 34 deletions(-) diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml index 8c2f16691..c4a03ee95 100644 --- a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - rabbitmq:3-management + rabbitmq:3-management:latest diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/Bus.sfproj b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/Bus.sfproj index aa0cc517e..0a56c800e 100644 --- a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/Bus.sfproj +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/Bus.sfproj @@ -1,6 +1,6 @@  - + f29e27c9-0d5e-4a57-adbf-dd651649d2a1 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml index 59be2bdd4..6a55429be 100644 --- a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - mongo + mongo:latest:latest diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj index 94da67b78..f07ff03a9 100644 --- a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj @@ -1,6 +1,6 @@  - + eb070036-ec60-49a6-88e1-562a2043c3d7 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml index d2d853e46..cfcc10eca 100644 --- a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationPackageRoot/BasketDataPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - redis + redis:latest diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj index 2d8b7a2ab..5b28bfdba 100644 --- a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj @@ -1,6 +1,6 @@  - + 17acd9ea-8f16-4091-aa29-c67002971eee 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml index 5e4d100f5..1dc7320b1 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - eshop/basket.api + eshop/basket.api:latest diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml index 9fe30adbc..08fd727ac 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - eshop/catalog.api + eshop/catalog.api:latest diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml index e8696695c..b576b011d 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - eshop/locations.api + eshop/locations.api:latest diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml index 6182f03a9..286341b5b 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - eshop/marketing.api + eshop/marketing.api:latest diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml index c060141b4..209f54483 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - eshop/ordering.api + eshop/ordering.api:latest diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml index 4dd2afe1a..1450012ff 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - eshop/payment.api + eshop/payment.api:latest diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml index ae314bc6b..eb4b31a63 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml @@ -8,6 +8,6 @@ - + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml index fe48ec40f..f32036456 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/IdentityApiPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - eshop/identity.api + eshop/identity.api:latest diff --git a/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml index 26f348fd1..d40a4b35b 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml @@ -5,9 +5,9 @@ - - - - + + + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml index b2b5cb676..bb7b033df 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - eshop/webmvc + eshop/webmvc:latest diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml index 5073df34b..0c3e66ffb 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/WebSPAPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - eshop/webspa + eshop/webspa:latest diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml index a6fb1868c..78dd420e4 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - eshop/webstatus + eshop/webstatus:latest diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln index c83c564cf..937708f4c 100644 --- a/eShopOnContainers-ServicesAndWebApps.sln +++ b/eShopOnContainers-ServicesAndWebApps.sln @@ -103,6 +103,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebHost", "WebHost", "{1815 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebHost.Customization", "src\BuildingBlocks\WebHostCustomization\WebHost.Customization\WebHost.Customization.csproj", "{15F4B3AA-89B6-4A0D-9051-414305974781}" EndProject +Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "Bus", "ServiceFabric\Linux\Infrastructure\eShopOnServiceFabricBus\Bus\Bus.sfproj", "{F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Ad-Hoc|Any CPU = Ad-Hoc|Any CPU @@ -1413,6 +1415,58 @@ Global {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|x64.Build.0 = Release|Any CPU {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|x86.ActiveCfg = Release|Any CPU {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|x86.Build.0 = Release|Any CPU + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|Any CPU.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|ARM.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|ARM.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|ARM.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|iPhone.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|x64.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|x64.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|x64.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|x86.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|x86.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|x86.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|Any CPU.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|Any CPU.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|Any CPU.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|ARM.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|ARM.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|ARM.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|iPhone.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|iPhone.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|iPhone.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|iPhoneSimulator.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|x64.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|x64.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|x64.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|x86.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|x86.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|x86.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|Any CPU.ActiveCfg = Debug|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|ARM.ActiveCfg = Debug|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|iPhone.ActiveCfg = Debug|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|x64.ActiveCfg = Debug|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|x64.Build.0 = Debug|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|x64.Deploy.0 = Debug|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|x86.ActiveCfg = Debug|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|Any CPU.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|ARM.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|iPhone.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|iPhoneSimulator.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|x64.ActiveCfg = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|x64.Build.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|x64.Deploy.0 = Release|x64 + {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|x86.ActiveCfg = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/test/Services/LoadTest/LoadTest.csproj b/test/Services/LoadTest/LoadTest.csproj index 3178554c1..b10e8bbfe 100644 --- a/test/Services/LoadTest/LoadTest.csproj +++ b/test/Services/LoadTest/LoadTest.csproj @@ -138,10 +138,7 @@ PreserveNewest - - - Always - + From f25b6a8293d4accb8266f6f117706373be9aebbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Tue, 10 Oct 2017 17:39:29 +0200 Subject: [PATCH 054/136] Updated sf linux image tags --- .../RabbitMQPkg/ServiceManifest.xml | 2 +- .../MongoDBPkg/ServiceManifest.xml | 2 +- eShopOnContainers-ServicesAndWebApps.sln | 54 ------------------- 3 files changed, 2 insertions(+), 56 deletions(-) diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml index c4a03ee95..8c2f16691 100644 --- a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationPackageRoot/RabbitMQPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - rabbitmq:3-management:latest + rabbitmq:3-management diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml index 6a55429be..e7ecf592f 100644 --- a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationPackageRoot/MongoDBPkg/ServiceManifest.xml @@ -15,7 +15,7 @@ - mongo:latest:latest + mongo:latest diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln index 937708f4c..c83c564cf 100644 --- a/eShopOnContainers-ServicesAndWebApps.sln +++ b/eShopOnContainers-ServicesAndWebApps.sln @@ -103,8 +103,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WebHost", "WebHost", "{1815 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebHost.Customization", "src\BuildingBlocks\WebHostCustomization\WebHost.Customization\WebHost.Customization.csproj", "{15F4B3AA-89B6-4A0D-9051-414305974781}" EndProject -Project("{A07B5EB6-E848-4116-A8D0-A826331D98C6}") = "Bus", "ServiceFabric\Linux\Infrastructure\eShopOnServiceFabricBus\Bus\Bus.sfproj", "{F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Ad-Hoc|Any CPU = Ad-Hoc|Any CPU @@ -1415,58 +1413,6 @@ Global {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|x64.Build.0 = Release|Any CPU {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|x86.ActiveCfg = Release|Any CPU {15F4B3AA-89B6-4A0D-9051-414305974781}.Release|x86.Build.0 = Release|Any CPU - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|Any CPU.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|ARM.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|ARM.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|ARM.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|iPhone.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|iPhone.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|iPhone.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|x64.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|x64.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|x64.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|x86.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|x86.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Ad-Hoc|x86.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|Any CPU.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|Any CPU.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|Any CPU.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|ARM.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|ARM.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|ARM.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|iPhone.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|iPhone.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|iPhone.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|iPhoneSimulator.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|x64.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|x64.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|x64.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|x86.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|x86.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.AppStore|x86.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|Any CPU.ActiveCfg = Debug|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|ARM.ActiveCfg = Debug|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|iPhone.ActiveCfg = Debug|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|iPhoneSimulator.ActiveCfg = Debug|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|x64.ActiveCfg = Debug|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|x64.Build.0 = Debug|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|x64.Deploy.0 = Debug|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Debug|x86.ActiveCfg = Debug|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|Any CPU.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|ARM.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|iPhone.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|iPhoneSimulator.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|x64.ActiveCfg = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|x64.Build.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|x64.Deploy.0 = Release|x64 - {F29E27C9-0D5E-4A57-ADBF-DD651649D2A1}.Release|x86.ActiveCfg = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 3539191176942544cc428d3c79f3e9f8b83c1dc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Tue, 10 Oct 2017 17:42:32 +0200 Subject: [PATCH 055/136] Update catalog.api sf env var --- .../eShopOnServiceFabric/ApplicationParameters/Cloud.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml index ae314bc6b..eb4b31a63 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml @@ -8,6 +8,6 @@ - + From 172a129ebcdef61a31c96f190a061ff9fcd7ad0e Mon Sep 17 00:00:00 2001 From: EthanR Date: Tue, 10 Oct 2017 11:49:55 -0400 Subject: [PATCH 056/136] Update README.md Fixed small typo noticed while scanning ReadMe. will thoroughly read later. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b97fe0d89..ccf4617e7 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ The screenshot below shows the VS Solution structure for those microservices/con Finally, those microservices are consumed by multiple client web and mobile apps, as described below.
-*MVC Application (ASP.NET Core)*: Its an MVC application where you can find interesting scenarios on how to consume HTTP-based microservices from C# running in the server side, as it is a typical ASP.NET Core MVC application. Since it is a server-side application, access to other containers/microservices is done within the internal Docker Host network with its internal name resolution. +*MVC Application (ASP.NET Core)*: It's an MVC application where you can find interesting scenarios on how to consume HTTP-based microservices from C# running in the server side, as it is a typical ASP.NET Core MVC application. Since it is a server-side application, access to other containers/microservices is done within the internal Docker Host network with its internal name resolution.
*SPA (Single Page Application)*: Providing similar "eShop business functionality" but developed with Angular 2, Typescript and slightly using ASP.NET Core MVC. This is another approach for client web applications to be used when you want to have a more modern client behavior which is not behaving with the typical browser round-trip on every action but behaving like a Single-Page-Application which is more similar to a desktop app usage experience. The consumption of the HTTP-based microservices is done from TypeScript/JavaScript in the client browser, so the client calls to the microservices come from out of the Docker Host internal network (Like from your network or even from the Internet). From 69cbeb0a6b16e87594a849dcff878ba06fb8be38 Mon Sep 17 00:00:00 2001 From: RamonTC Date: Tue, 10 Oct 2017 18:50:51 +0200 Subject: [PATCH 057/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index bf680acbc..318e4b8c8 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -38,7 +38,7 @@ The ARM template `servicefabricdeploysecured.json` and its parameter file (`serv ## Create Azure Keyvault service Go to PortalAzure and create a Keyvault service. Make sure Enable access for deployment checkboxes are selected. - + ## Generate a certificate in Azure Keyvault Execute the gen-keyvaultcert.ps1 script to generate and download a certificate from Keyvault. From 7eb7fdf2187ca381ff0984b098f2a5d0631f98d6 Mon Sep 17 00:00:00 2001 From: RamonTC Date: Tue, 10 Oct 2017 18:52:02 +0200 Subject: [PATCH 058/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 318e4b8c8..4b6920e42 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -50,7 +50,7 @@ Execute the gen-keyvaultcert.ps1 script to generate and download a certificate f ## Install the certificate Install the certificate under 'Current User' store location and check it as exportable. - + ## Editing servicefabricdeploysecured.parameters.json file @@ -82,7 +82,7 @@ create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploysecured Modify the cloud.xml file of each Service Fabric application in PublishProfile directory and set your certificate settings to be able to deploy eshopOnContainers in the secured cluster: - + From de2aa0409c5dae5e354ea915738b3d7634032d96 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Tue, 10 Oct 2017 17:05:08 -0700 Subject: [PATCH 059/136] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ccf4617e7..7987aa1c6 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,9 @@ To access the .NET Core 1.1 version you can use the `netcore1.1` tag ([https://g > ### DISCLAIMER > **IMPORTANT:** The current state of this sample application is **BETA** for the .NET Core 2.0 version, and v1.0 for the .NET Core 1.1.2 version tagged ([https://github.com/dotnet-architecture/eShopOnContainers/tree/netcore1.1](https://github.com/dotnet-architecture/eShopOnContainers/tree/netcore1.1)) -P> +

> This reference application proposes a simplified microservice oriented architecture implementation to introduce technologies like .NET Core with Docker containers through a comprehensive application. The chosen domain is an eShop/eCommerce but simply because it is a well-know domain by most people/developers. -However, this sample application should not be considered as an "eCommerce reference model", at all. The implemented business domain might not be ideal from an eCommerce business point of view. It is neither trying to solve all the problems in a large, scalable and mission-critical distributed system. It is just a bootstrap for developers to easily get started in the world of Docker containers and microservices with .NET Core. +However, this sample application should not be considered as an "eCommerce reference model", at all. The implemented business domain might not be perfect from an eCommerce business point of view. It is neither trying to solve all the problems in a large, scalable and mission-critical distributed system, like hyper-scale or production-ready security. It is just a bootstrap for developers to easily get started in the world of Docker containers and microservices with .NET Core. >

The next step after understanding Docker containers and microservices development with .NET Core, is to select a microservice cluster/orchestrator like Azure Service Fabric or Kubernetes, DC/OS or Docker Swarm (in Azure Container Service). Kubernetes and Service Fabric are being tested with eShopOnContainer. > Additional steps already tested in eShopOnContainers are about moving your databases to HA cloud services (like Azure SQL DB), to implement your EventBus with Azure Service Bus or any other production ready Service Bus in the market. From 13f86b8911a9e2cb7a49c6dc06c9b243253a919d Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Tue, 10 Oct 2017 17:06:20 -0700 Subject: [PATCH 060/136] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7987aa1c6..05cc8998f 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ To access the .NET Core 1.1 version you can use the `netcore1.1` tag ([https://g > ### DISCLAIMER > **IMPORTANT:** The current state of this sample application is **BETA** for the .NET Core 2.0 version, and v1.0 for the .NET Core 1.1.2 version tagged ([https://github.com/dotnet-architecture/eShopOnContainers/tree/netcore1.1](https://github.com/dotnet-architecture/eShopOnContainers/tree/netcore1.1)) -

+ > This reference application proposes a simplified microservice oriented architecture implementation to introduce technologies like .NET Core with Docker containers through a comprehensive application. The chosen domain is an eShop/eCommerce but simply because it is a well-know domain by most people/developers. However, this sample application should not be considered as an "eCommerce reference model", at all. The implemented business domain might not be perfect from an eCommerce business point of view. It is neither trying to solve all the problems in a large, scalable and mission-critical distributed system, like hyper-scale or production-ready security. It is just a bootstrap for developers to easily get started in the world of Docker containers and microservices with .NET Core. >

The next step after understanding Docker containers and microservices development with .NET Core, is to select a microservice cluster/orchestrator like Azure Service Fabric or Kubernetes, DC/OS or Docker Swarm (in Azure Container Service). Kubernetes and Service Fabric are being tested with eShopOnContainer. From bbec0e33947abb49a6311149f65a25e483bec27a Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Tue, 10 Oct 2017 17:07:15 -0700 Subject: [PATCH 061/136] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 05cc8998f..4e372b0c1 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ To access the .NET Core 1.1 version you can use the `netcore1.1` tag ([https://g > **IMPORTANT:** The current state of this sample application is **BETA** for the .NET Core 2.0 version, and v1.0 for the .NET Core 1.1.2 version tagged ([https://github.com/dotnet-architecture/eShopOnContainers/tree/netcore1.1](https://github.com/dotnet-architecture/eShopOnContainers/tree/netcore1.1)) > This reference application proposes a simplified microservice oriented architecture implementation to introduce technologies like .NET Core with Docker containers through a comprehensive application. The chosen domain is an eShop/eCommerce but simply because it is a well-know domain by most people/developers. -However, this sample application should not be considered as an "eCommerce reference model", at all. The implemented business domain might not be perfect from an eCommerce business point of view. It is neither trying to solve all the problems in a large, scalable and mission-critical distributed system, like hyper-scale or production-ready security. It is just a bootstrap for developers to easily get started in the world of Docker containers and microservices with .NET Core. +However, this sample application should not be considered as an "eCommerce reference model", at all. The implemented business domain might not be perfect from an eCommerce business point of view. It is neither trying to solve all the problems in a large, high scalable and mission-critical distributed system, like hyper-scale or production-ready security. It is just a bootstrap for developers to easily get started in the world of Docker containers and microservices architectures with .NET Core. >

The next step after understanding Docker containers and microservices development with .NET Core, is to select a microservice cluster/orchestrator like Azure Service Fabric or Kubernetes, DC/OS or Docker Swarm (in Azure Container Service). Kubernetes and Service Fabric are being tested with eShopOnContainer. > Additional steps already tested in eShopOnContainers are about moving your databases to HA cloud services (like Azure SQL DB), to implement your EventBus with Azure Service Bus or any other production ready Service Bus in the market. From 72d1d2e77293fe5c928e3266456fab20bc63450d Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Tue, 10 Oct 2017 18:07:21 -0700 Subject: [PATCH 062/136] Updated the main README and eShopOnContainers architecture diagrams --- README.md | 71 ++++++------------ ...Architecture-With-Azure-API-Management.png | Bin 0 -> 355477 bytes ...eShopOnContainers_Architecture_Diagram.png | Bin 453912 -> 366599 bytes mssql/.system/instance_id | 1 + ...b813a_67aaedee-1e4a-4132-b8ba-5397448c74de | Bin 0 -> 89 bytes .../Roaming/Microsoft/Protect/CREDHIST | Bin 0 -> 24 bytes .../48e880fa-19d4-4fd8-b209-07cff1308993 | Bin 0 -> 468 bytes .../Preferred | Bin 0 -> 24 bytes .../My/AppContainerUserCertRead | 0 .../Temp/1a541f5da82a46408b4fbfc4cbc88b2 | Bin 0 -> 196608 bytes .../Temp/1b42c59ee5d0b243aaf792ba47169816 | Bin 0 -> 65536 bytes .../Temp/1c81b699afe567302ac6ebbccfe58faf | Bin 0 -> 4096 bytes .../Temp/1e42979f514909df4e55f88bc5f33d2f | Bin 0 -> 4096 bytes .../Temp/23d74814f69031dbc0ccc2df7136e49d | Bin 0 -> 4096 bytes .../Temp/2aa13217ef04d399db1f5bf837df6133 | Bin 0 -> 98304 bytes .../Temp/2ceaf558dea6ea34749579158b71cd81 | Bin 0 -> 4096 bytes .../Temp/30ebb5aa7a83a397d7be7db38866066 | Bin 0 -> 4096 bytes .../Temp/32f4099bd7615b9e5661802aa7f5263c | Bin 0 -> 786432 bytes .../Temp/3381e0697f2e1f4d0a8ec84906e38be | Bin 0 -> 262144 bytes .../Temp/3d358c0071446cfcdf51d001911f0a76 | Bin 0 -> 1048576 bytes .../Temp/42b29843fc2cb7da8c24ad9c1610bf0b | Bin 0 -> 4096 bytes .../Temp/4322133a39682df51341c921988ba43e | Bin 0 -> 65536 bytes .../Temp/43359794eab4b6542013fa43abadfaa3 | Bin 0 -> 4096 bytes .../Temp/4f00a20180e71c01826e3251bef80fd8 | Bin 0 -> 4096 bytes .../Temp/6015d19ff83133aab7fbc00e055c31a | Bin 0 -> 69632 bytes .../Temp/732d238512e92e4ef9089fb4c61a4808 | Bin 0 -> 4096 bytes .../Temp/7907394830ef17d4ba0175bd9826da51 | Bin 0 -> 4096 bytes .../Temp/7bcc896c1f2df666851a1f73c84e9cff | Bin 0 -> 4096 bytes .../Temp/7d1bf98b298a3c8850d74e5b660332fb | Bin 0 -> 4096 bytes .../Temp/8129f518dd51573cf4133f18ec1b91f5 | Bin 0 -> 65536 bytes .../Temp/84c18e096493bccd90c998b08df6a21d | Bin 0 -> 2129920 bytes .../Temp/8e7242dcdb663928bc35e846ec723a6 | Bin 0 -> 1576960 bytes .../Temp/9d3bc5ac6d976a983b53e8e6fbb3a24e | Bin 0 -> 12288 bytes .../Temp/a248390ce868079187416f934759fba9 | Bin 0 -> 4096 bytes .../Temp/a2b2d2c1e3374a928a751febe0395fd | Bin 0 -> 4096 bytes .../Temp/ae5574d6c15bd1a63341127b45e498da | Bin 0 -> 65536 bytes .../Temp/af09a9c0f1aac9656097f623fc81d159 | Bin 0 -> 65536 bytes .../Temp/b0be8059be14de098ad41f86831e1da1 | Bin 0 -> 4096 bytes .../Temp/b457fe0369797a89bff03c6e1fc69fa2 | Bin 0 -> 1048576 bytes .../Temp/b71273b08a354ee7e274d621bf431e90 | Bin 0 -> 4096 bytes .../Temp/be6eef1d8f9b5ffbc7282050e4c34197 | Bin 0 -> 4096 bytes .../Temp/c33e2c07b053ed06080e18f9cc59f77 | Bin 0 -> 65536 bytes .../Temp/c3eca02fc0502f7786376d0cd281d604 | Bin 0 -> 4096 bytes .../Temp/c428f4c0244fbb9b4a888ddfe25fcb03 | Bin 0 -> 65536 bytes .../Temp/c460f565e5f9bf596e84618bae567754 | Bin 0 -> 16384 bytes .../Temp/c7fff830bc209b3cb2d2a9541c61aa6 | Bin 0 -> 4096 bytes .../Temp/d1136286d24fd64a5a957a3d86bc0576 | Bin 0 -> 4096 bytes .../Temp/d38e57dc354641377a0a21444180bc92 | Bin 0 -> 4096 bytes .../Temp/d68589df980066c61cbc6b6e0781bb | Bin 0 -> 4096 bytes .../Temp/d71268d41db313db8113907726e7bad | Bin 0 -> 4096 bytes .../Temp/d9afcc42ac8e8fa3d7f426545902b6d5 | Bin 0 -> 4096 bytes .../Temp/e18b66c54da5d9742837799f70ac6d31 | Bin 0 -> 4096 bytes .../Temp/e464d86334b854c8f93090881f82e70d | Bin 0 -> 4096 bytes .../Temp/e7c8cf705009960cb96991c9207c386 | Bin 0 -> 65536 bytes .../Temp/ec4c7e8181ae15da5710fd3d87d1e7 | Bin 0 -> 262144 bytes .../Temp/f68cc8518fc6f0388dd468caa5024e62 | Bin 0 -> 4096 bytes .../Temp/f6960589693f36be384813057950420c | Bin 0 -> 4096 bytes .../Temp/f94a5478dc3f78f6c45943eda1a0285e | Bin 0 -> 4096 bytes ...e=neutral, PublicKeyToken=b03f5f7f11d50a3a | 0 ...e=neutral, PublicKeyToken=b03f5f7f11d50a3a | 0 mssql/.system/system/licensing.hiv | Bin 0 -> 8192 bytes mssql/.system/system/lsa.hiv | Bin 0 -> 16384 bytes mssql/.system/system/security.hiv | Bin 0 -> 49152 bytes .../Microsoft/Protect/S-1-5-18/User/Preferred | Bin 0 -> 24 bytes .../User/d01f9596-8a07-4854-9c5a-348703ee814c | Bin 0 -> 468 bytes mssql/secrets/machine-key | Bin 0 -> 44 bytes 66 files changed, 26 insertions(+), 46 deletions(-) create mode 100644 img/eShopOnContainers-Architecture-With-Azure-API-Management.png create mode 100644 mssql/.system/instance_id create mode 100644 mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Crypto/RSA/S-1-5-21-4137405425-2340124300-2890394999-500/42e7704ae40b0d75de00736cc66b813a_67aaedee-1e4a-4132-b8ba-5397448c74de create mode 100644 mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/CREDHIST create mode 100644 mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/S-1-5-21-4137405425-2340124300-2890394999-500/48e880fa-19d4-4fd8-b209-07cff1308993 create mode 100644 mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/S-1-5-21-4137405425-2340124300-2890394999-500/Preferred create mode 100644 mssql/.system/profiles/Client/AppData/Roaming/Microsoft/SystemCertificates/My/AppContainerUserCertRead create mode 100644 mssql/.system/profiles/Temp/1a541f5da82a46408b4fbfc4cbc88b2 create mode 100644 mssql/.system/profiles/Temp/1b42c59ee5d0b243aaf792ba47169816 create mode 100644 mssql/.system/profiles/Temp/1c81b699afe567302ac6ebbccfe58faf create mode 100644 mssql/.system/profiles/Temp/1e42979f514909df4e55f88bc5f33d2f create mode 100644 mssql/.system/profiles/Temp/23d74814f69031dbc0ccc2df7136e49d create mode 100644 mssql/.system/profiles/Temp/2aa13217ef04d399db1f5bf837df6133 create mode 100644 mssql/.system/profiles/Temp/2ceaf558dea6ea34749579158b71cd81 create mode 100644 mssql/.system/profiles/Temp/30ebb5aa7a83a397d7be7db38866066 create mode 100644 mssql/.system/profiles/Temp/32f4099bd7615b9e5661802aa7f5263c create mode 100644 mssql/.system/profiles/Temp/3381e0697f2e1f4d0a8ec84906e38be create mode 100644 mssql/.system/profiles/Temp/3d358c0071446cfcdf51d001911f0a76 create mode 100644 mssql/.system/profiles/Temp/42b29843fc2cb7da8c24ad9c1610bf0b create mode 100644 mssql/.system/profiles/Temp/4322133a39682df51341c921988ba43e create mode 100644 mssql/.system/profiles/Temp/43359794eab4b6542013fa43abadfaa3 create mode 100644 mssql/.system/profiles/Temp/4f00a20180e71c01826e3251bef80fd8 create mode 100644 mssql/.system/profiles/Temp/6015d19ff83133aab7fbc00e055c31a create mode 100644 mssql/.system/profiles/Temp/732d238512e92e4ef9089fb4c61a4808 create mode 100644 mssql/.system/profiles/Temp/7907394830ef17d4ba0175bd9826da51 create mode 100644 mssql/.system/profiles/Temp/7bcc896c1f2df666851a1f73c84e9cff create mode 100644 mssql/.system/profiles/Temp/7d1bf98b298a3c8850d74e5b660332fb create mode 100644 mssql/.system/profiles/Temp/8129f518dd51573cf4133f18ec1b91f5 create mode 100644 mssql/.system/profiles/Temp/84c18e096493bccd90c998b08df6a21d create mode 100644 mssql/.system/profiles/Temp/8e7242dcdb663928bc35e846ec723a6 create mode 100644 mssql/.system/profiles/Temp/9d3bc5ac6d976a983b53e8e6fbb3a24e create mode 100644 mssql/.system/profiles/Temp/a248390ce868079187416f934759fba9 create mode 100644 mssql/.system/profiles/Temp/a2b2d2c1e3374a928a751febe0395fd create mode 100644 mssql/.system/profiles/Temp/ae5574d6c15bd1a63341127b45e498da create mode 100644 mssql/.system/profiles/Temp/af09a9c0f1aac9656097f623fc81d159 create mode 100644 mssql/.system/profiles/Temp/b0be8059be14de098ad41f86831e1da1 create mode 100644 mssql/.system/profiles/Temp/b457fe0369797a89bff03c6e1fc69fa2 create mode 100644 mssql/.system/profiles/Temp/b71273b08a354ee7e274d621bf431e90 create mode 100644 mssql/.system/profiles/Temp/be6eef1d8f9b5ffbc7282050e4c34197 create mode 100644 mssql/.system/profiles/Temp/c33e2c07b053ed06080e18f9cc59f77 create mode 100644 mssql/.system/profiles/Temp/c3eca02fc0502f7786376d0cd281d604 create mode 100644 mssql/.system/profiles/Temp/c428f4c0244fbb9b4a888ddfe25fcb03 create mode 100644 mssql/.system/profiles/Temp/c460f565e5f9bf596e84618bae567754 create mode 100644 mssql/.system/profiles/Temp/c7fff830bc209b3cb2d2a9541c61aa6 create mode 100644 mssql/.system/profiles/Temp/d1136286d24fd64a5a957a3d86bc0576 create mode 100644 mssql/.system/profiles/Temp/d38e57dc354641377a0a21444180bc92 create mode 100644 mssql/.system/profiles/Temp/d68589df980066c61cbc6b6e0781bb create mode 100644 mssql/.system/profiles/Temp/d71268d41db313db8113907726e7bad create mode 100644 mssql/.system/profiles/Temp/d9afcc42ac8e8fa3d7f426545902b6d5 create mode 100644 mssql/.system/profiles/Temp/e18b66c54da5d9742837799f70ac6d31 create mode 100644 mssql/.system/profiles/Temp/e464d86334b854c8f93090881f82e70d create mode 100644 mssql/.system/profiles/Temp/e7c8cf705009960cb96991c9207c386 create mode 100644 mssql/.system/profiles/Temp/ec4c7e8181ae15da5710fd3d87d1e7 create mode 100644 mssql/.system/profiles/Temp/f68cc8518fc6f0388dd468caa5024e62 create mode 100644 mssql/.system/profiles/Temp/f6960589693f36be384813057950420c create mode 100644 mssql/.system/profiles/Temp/f94a5478dc3f78f6c45943eda1a0285e create mode 100644 mssql/.system/programdata/Microsoft/NetFramework/BreadcrumbStore/Microsoft.Diagnostics.Tracing.EventSource, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a create mode 100644 mssql/.system/programdata/Microsoft/NetFramework/BreadcrumbStore/Microsoft.Diagnostics.Tracing.EventSource, Version=1.1.26.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a create mode 100644 mssql/.system/system/licensing.hiv create mode 100644 mssql/.system/system/lsa.hiv create mode 100644 mssql/.system/system/security.hiv create mode 100644 mssql/.system/system/system32/Microsoft/Protect/S-1-5-18/User/Preferred create mode 100644 mssql/.system/system/system32/Microsoft/Protect/S-1-5-18/User/d01f9596-8a07-4854-9c5a-348703ee814c create mode 100644 mssql/secrets/machine-key diff --git a/README.md b/README.md index ccf4617e7..b3b9db873 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,44 @@ - # eShopOnContainers - Microservices Architecture and Containers based Reference Application (Visual Studio 2017 and CLI environments compatible) +# eShopOnContainers - Microservices Architecture and Containers based Reference Application (**BETA state** - Visual Studio 2017 and CLI environments compatible) Sample .NET Core reference application, powered by Microsoft, based on a simplified microservices architecture and Docker containers.

**Note for Pull Requests**: We accept pull request from the community. When doing it, please do it onto the DEV branch which is the consolidated work-in-progress branch. Do not request it onto Master, if possible. -## Moved to .NET Core 2.0 "wave" -We have moved to .NET Core 2.0 already! - -* Branch `dev` is in .NET Core 2.0. -* Branch `master` is *still* in .NET Core 1.1 (but it will be updated soon) - -To access the .NET Core 1.1 version you can use the `netcore1.1` tag ([https://github.com/dotnet-architecture/eShopOnContainers/tree/netcore1.1](https://github.com/dotnet-architecture/eShopOnContainers/tree/netcore1.1)) +## Moving to .NET Core 2.0 "wave" +NOTE: During August/September 2017 we'll be moving the solution to .NET Core "wave". Not just compilation but also new recommended code in EF Core 2.0, ASP.NET Core 2.0, and other new related versions. >**PLEASE** Read our [branch guide](./branch-guide.md) to know about our branching policy > ### DISCLAIMER -> **IMPORTANT:** The current state of this sample application is **BETA** for the .NET Core 2.0 version, and v1.0 for the .NET Core 1.1.2 version tagged ([https://github.com/dotnet-architecture/eShopOnContainers/tree/netcore1.1](https://github.com/dotnet-architecture/eShopOnContainers/tree/netcore1.1)) -P> +> **IMPORTANT:** The current state of this sample application is **BETA**, consider it version a 0.1 foundational version, therefore, many areas could be improved and change significantly while refactoring current code and implementing new features. Feedback with improvements and pull requests from the community will be highly appreciated and accepted. +> > This reference application proposes a simplified microservice oriented architecture implementation to introduce technologies like .NET Core with Docker containers through a comprehensive application. The chosen domain is an eShop/eCommerce but simply because it is a well-know domain by most people/developers. However, this sample application should not be considered as an "eCommerce reference model", at all. The implemented business domain might not be ideal from an eCommerce business point of view. It is neither trying to solve all the problems in a large, scalable and mission-critical distributed system. It is just a bootstrap for developers to easily get started in the world of Docker containers and microservices with .NET Core. ->

The next step after understanding Docker containers and microservices development with .NET Core, is to select a microservice cluster/orchestrator like Azure Service Fabric or Kubernetes, DC/OS or Docker Swarm (in Azure Container Service). Kubernetes and Service Fabric are being tested with eShopOnContainer. - -> Additional steps already tested in eShopOnContainers are about moving your databases to HA cloud services (like Azure SQL DB), to implement your EventBus with Azure Service Bus or any other production ready Service Bus in the market. - +>

For example, the next step (still not covered in eShopOnContainers) after understanding Docker containers and microservices development with .NET Core, is to select a microservice cluster/orchestrator like Docker Swarm, Kubernetes or DC/OS (in Azure Container Service) or Azure Service Fabric which in most of the cases will require additional partial changes to your application's configuration (although the present architecture should work on most orchestrators with small changes). +> Additional steps would be to move your databases to HA cloud services, or to implement your EventBus with Azure Service Bus or any other production ready Service Bus in the market. +>

In the future we might fork this project and make multiple versions targeting specific microservice cluster/orchestrators plus using additional cloud infrastructure.

+> > Read the planned Roadmap and Milestones for future releases of eShopOnContainers within the Wiki for further info about possible new implementations and provide feedback at the ISSUES section if you'd like to see any specific scenario implemented or improved. Also, feel free to discuss on any current issue. **Architecture overview**: This reference application is cross-platform either at the server and client side, thanks to .NET Core services capable of running on Linux or Windows containers depending on your Docker host, and to Xamarin for mobile apps running on Android, iOS or Windows/UWP plus any browser for the client web apps. The architecture proposes a simplified microservice oriented architecture implementation with multiple autonomous microservices (each one owning its own data/db) and implementing different approaches within each microservice (simple CRUD vs. DDD/CQRS patterns) using Http as the communication protocol between the client apps and the microservices and supports asynchronous communication for data updates propagation across multiple services based on Integration Events and an Event Bus (a light message broker, to choose between RabbitMQ or Azure Service Bus, underneath) plus other features defined at the roadmap. -

+

- The microservices are different in type, meaning different internal architecture patterns approaches depending on it purpose, as shown in the image below. + +> ### Important Note on AP Gateways and published microservice APIs +> Note that the previous architecture is a how you deploy it in a local Docker development machine. For a production-ready architecture we recommend to keep evolving your architecture with additional features like API Gateways based on AzureAPI Management or any other approach for API Gateways explained in the related documentation/eBook. +

+ +

+ +> The sample code in this repo is NOT making use of Azure API Management in order to be able to provide an "F5 experience" in Visual Studio (or CLI) of the sample with no up-front dependencies in Azure. But you should evaluate API Gateways alternatives when building for production. + +The microservices are different in type, meaning different internal architecture patterns approaches depending on it purpose, as shown in the image below.

-Additional microservice styles with other frameworks and No-SQL databases will be added, eventually. This is a great opportunity for pull requests from the community, like a new microservice using Nancy, or even other languages like Node, Go, Python or data containers with MongoDB with Azure DocDB compatibility, PostgreSQL, RavenDB, Event Store, MySql, etc. You name it! :) +Additional miroservice styles with other frameworks and No-SQL databases will be added, eventually. This is a great opportunity for pull requests from the community, like a new microservice using Nancy, or even other languages like Node, Go, Python or data containers with MongoDB with Azure DocDB compatibility, PostgreSQL, RavenDB, Event Store, MySql, etc. You name it! :) > ### Important Note on Database Servers/Containers > In this solution's current configuration for a development environment, the SQL databases are automatically deployed with sample data into a single SQL Server for Linux container (a single shared Docker container for SQL databases) so the whole solution can be up and running without any dependency to any cloud or specific server. Each database could also be deployed as a single Docker container, but then you'd need more then 8GB or memory RAM assigned to Docker in your development machine in order to be able to run 3 SQL Server Docker containers in your Docker Linux host in "Docker for Windows" or "Docker for Mac" development environments. @@ -51,10 +55,7 @@ You can download them and start reviewing these Guides/eBooks here: | Architecting & Developing | Containers Lifecycle & CI/CD | App patterns with Xamarin.Forms | | ------------ | ------------| ------------| | | | | -| **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | **Download .PDF** (First Edition) | -| **Online pages** (First Edition) | ------------ | **Online pages** (First Edition) | -| **Download .MOBI/Kindle** (First Edition) | ------------ | ------------ | -| **Download .EPUB** (First Edition) | ------------ | ------------ | +| **Download** (First Edition) | **Download** (First Edition) | **Download** (First Edition) | Send feedback to [dotnet-architecture-ebooks-feedback@service.microsoft.com](dotnet-architecture-ebooks-feedback@service.microsoft.com)

@@ -74,7 +75,7 @@ The screenshot below shows the VS Solution structure for those microservices/con Finally, those microservices are consumed by multiple client web and mobile apps, as described below.
-*MVC Application (ASP.NET Core)*: It's an MVC application where you can find interesting scenarios on how to consume HTTP-based microservices from C# running in the server side, as it is a typical ASP.NET Core MVC application. Since it is a server-side application, access to other containers/microservices is done within the internal Docker Host network with its internal name resolution. +*MVC Application (ASP.NET Core)*: Its an MVC application where you can find interesting scenarios on how to consume HTTP-based microservices from C# running in the server side, as it is a typical ASP.NET Core MVC application. Since it is a server-side application, access to other containers/microservices is done within the internal Docker Host network with its internal name resolution.
*SPA (Single Page Application)*: Providing similar "eShop business functionality" but developed with Angular 2, Typescript and slightly using ASP.NET Core MVC. This is another approach for client web applications to be used when you want to have a more modern client behavior which is not behaving with the typical browser round-trip on every action but behaving like a Single-Page-Application which is more similar to a desktop app usage experience. The consumption of the HTTP-based microservices is done from TypeScript/JavaScript in the client browser, so the client calls to the microservices come from out of the Docker Host internal network (Like from your network or even from the Internet). @@ -98,30 +99,8 @@ For those who prefer the CLI on a Mac, using dotnet CLI, docker CLI and VS Code (Instructions still TBD, but similar to Windows CLI): https://github.com/dotnet/eShopOnContainers/wiki/04.-Setting-eShopOnContainer-solution-up-in-a-Mac,-VS-Code-and-CLI-environment--(dotnet-CLI,-Docker-CLI-and-VS-Code) -> ### Note on tested Docker Containers/Images -> Most of the development and testing of this project was (as of early March 2017) done on Docker Linux containers running in development machines with "Docker for Windows" and the default Hyper-V Linux VM (MobiLinuxVM) installed by "Docker for Windows". -The Windows Containers scenario is currently being implemented/tested yet. The application should be able to run on Windows Nano Containers based on different Docker base images, as well, as the .NET Core services have also been tested running on plain Windows (with no Docker). -The app was also partially tested on "Docker for Mac" using a development MacOS machine with .NET Core and VS Code installed, which is still a scenario using Linux containers running on the VM setup in the Mac by the "Docker for Windows" setup. But further testing and feedback on Mac environments and Windows Containers, from the community, will be appreciated. - -## Kubernetes -The k8s directory contains Kubernetes configuration for the eShopOnContainers app and a PowerShell script to deploy it to a cluster. Each eShopOnContainers microservice has a deployment configuration in `deployments.yaml`, and is exposed to the cluster by a service in `services.yaml`. The microservices are exposed externally on individual routes (`/basket-api`, `/webmvc`, etc.) by an nginx reverse proxy specified in `frontend.yaml` and `nginx.conf`. - -### Prerequisites -* A Kubernetes cluster. Follow Azure Container Service's [walkthrough](https://docs.microsoft.com/en-us/azure/container-service/container-service-kubernetes-walkthrough) to create one. -* A private Docker registry. Follow Azure Container Registry's [guide](https://docs.microsoft.com/en-us/azure/container-registry/container-registry-get-started-portal) to create one. -* A Docker development environment with `docker` and `docker-compose`. - * Visit [docker.com](https://docker.com) to download the tools and set up the environment. Docker's [installation guide](https://docs.docker.com/engine/getstarted/step_one/#step-3-verify-your-installation) covers verifying your Docker installation. -* The Kubernetes command line client, `kubectl`. - * This can be installed with the `az` tool as described in the Azure Container Service [walkthrough](https://docs.microsoft.com/en-us/azure/container-service/container-service-kubernetes-walkthrough). `az` is also helpful for getting the credentials `kubectl` needs to access your cluster. For other installation options, and information about configuring `kubectl` yourself, see the [Kubernetes documentation](https://kubernetes.io/docs/tasks/kubectl/install/). - -### Deploy the application with the deployment script -1. Open a PowerShell command line at the `k8s` directory of your local eShopOnContainers repository. -1. Ensure `docker`, `docker-compose`, and `kubectl` are on the path, and configured for your Docker machine and Kubernetes cluster. -1. Run `deploy.ps1` with your registry information. The Docker username and password are provided by Azure Container Registry, and can be retrieved from the Azure portal. For example: ->``` ->./deploy.ps1 -registry myregistry.azurecr.io -dockerUser User -dockerPassword SecretPassword ->``` -The script will build the code and corresponding Docker images, push the latter to your registry, and deploy the application to your cluster. You can watch the deployment unfold from the Kubernetes web interface: run `kubectl proxy` and open a browser to [http://localhost:8001/ui](http://localhost:8001/ui) +## Orchestrators: Kubernetes and Service Fabric +See at the Wiki the posts on setup/instructions about how to deploy to Kubernetes or Service Fabric in Azure (although you could also deploy to any other cloud or on-premises). ## Sending feedback and pull requests As mentioned, we'd appreciate to your feedback, improvements and ideas. diff --git a/img/eShopOnContainers-Architecture-With-Azure-API-Management.png b/img/eShopOnContainers-Architecture-With-Azure-API-Management.png new file mode 100644 index 0000000000000000000000000000000000000000..434740d6041a14240ca1bf780d4009a232f1b9ba GIT binary patch literal 355477 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⪙oL^V$4cA^vUSVD8~X$)9e^K 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ÖEfg?VMPCrP7YFXXP*YeUKuW;13N) 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

    ar7wY?>k=ur zo!WR{7g9bITikKQNHG?d174HjvNAn0yD(7Z9jrf|mTG&u<}J(g4Zt+wl`e5S(oP~# zPO62gflN9`l?iNoz~?55UQn0k^CUZ*=~$8$$k;0^6VEdaXgQt53E~q_S~7%h53ONw z+aDnrj>&C+EjKVrDNJlnQsz3EPmPQ;Ap$}+r`Py*Ekm=;M3P8p%&ccA50mS@Mev2! z!Kea-abPDIx|h){^1r}L$D$?I2Q?1>KBEQBQ)_CdAe0G^aO=?@HQ=2nDsP6y~ETR#h(hX9x-?gxca`j$x0YrT%z%$l9-9vgN zsP_B6ZeV#q;2nHaz*c!#@|dES&#S@7T_%h2-1q0td@L&om}=_ zr+r5^g)A@XcD04O7Cr4tfAp}Jf#I8y3Djy&1Ln!2{Hc%-l}D;`0K_V63Z0yoFe*gD zWG#ljkj=J;iHZ(fD;%a7SJ@7c_rJK@w8{KZR=UF^&OJ7WbAEfuI{RNJ$q zvp5qP@fXe{P6Ht>OO6loNmdgqE@1U7c?k6ahnOmgsl3SdUv_tHD@vvPsrAhH)o+F}fIs>~>FEZTS7z{k=onKpV-m17R zc`EL^ZwYp_vRG*f+^L2Rpvme&4Hf0qr8)xM`edXF1o(SZjKC>)+gc0{C=}jQ;>$UO#$6i-h%6K|SSTpSx-skgSI{DSe&QF)M82m?@J^^IR?wvS zK#Bxl3Z$+qFAN0DP1`46hLOsnUwQ{Q1x3) zl)1d$1G*@(GBPvYm^8TO&Awoq{wiK~;Np1i)uYS|m$e5FOO+>c6yJx7ET#K1GAENU z#HueYED10VE;DlExEzfWY&|O&ovT8&xG8$h;&kqSE{^mjX?e?0jHdzk(#M;piI~3g zIC(|ITR`niXUn;5|0|=gPN={or)8|(TS>ehQcCHo?~NZu8$0JcpIc{&LL3=zO^dqq zpue3x4Az{mIc6_nzW{X^eT6P&?`f+k zkpZ4UJ1f&k)3PcmRK&RMPUwN-08V#SA+N|!Ry2y*aPgzz^|P3(&S z%rgIOvE0n)sO6k3U1t96S1&s~t8?$p6!q)xAirfi4g_k528InyO_G4(IXh+LpO{LB zATz>M#plQ01DQ{66H9(0_k^zUZVf=3- zTYI2bsRU4~k>`aqE_(Jl+BT%HXKD;2QU|%@-#8a9s%+Zg z_So+v8f4fC5=Gpr2Z_Qz6mP3anAW<0{1f2E$HzdretP{AmsZkH%+qO<*g}BkJOK)u z1@o9*RhagO!ck|sC|Cwf6zi12c1{p(bl!&!^m-boZP8cvKMn|T zZatm?Mk{i9P6ek(de?9TvNKzrKes;JUjqIxxo>vMc?9=!5vrggGVU_Mj95{tl^6*f zQO@*_YCyhwxFDE2>h$IzCJ12dLqAluUp8&=Foh--doU70rw*X3tiEl^%s1;H7b**b zG>67IaSJ*R`lVGR+X2@@BEfn~QL*HmYmf)@eg=@T78mhbh$2F0ehZh&&O965)?x=( zR}sx^jk#tYLp_9N+xz>eYZ@b|nj&8OnO>5>aZFBlKW%l8n18<%Mps(mIrAf46R)?P zYf$!ug#7x2_37WOLP~v#8!D6#ye;?&lbP%t`Eny z>ZzgrOlj@Qa3dOs`6VU0N1Nl&1|~O>CiZDljuq`3co8GTrxbvEdHIr!K@a2 zE5#Nwj!*9gZw1oH?>CWI?6yZ=EY>7z<}Itpkxz&ul^_zn@R|qlpW| zvp7A1;bX(eO1eItj_?|{scbtd-Qt#=uD~}DlnT&SsI_10x*0%b&bBKnn?j#prB|&t z|JIcO;L_!<@T7sUYM`vCrt{&Wes;C8ho~_Ixf0g<2d69XWfkYGxV`359)|jv^~O)F ze#g3I2efFZ7bPNqG>3Gf$LvaE{l`BFnWOx|$={B{#;h}az z#JVoY8+2h`{o+r3XGk9Xq-`SIVb8jn-$U5TShTvbu$7HoWHsE}zog=8Ma!Y;B<-E; zu=TLzAgkWgA%Mv%ZF7%cdiU}Nd!;J*@Y5MW?}IQ#toB=XDjbu>{+Yqnfq8}V$1okF z1!}$(U=38srN3Fl%baMNb(UghEQr_h7O7zVFFf6J+AdCBPa5QCg0Qw_+f<>?8tMr; zJ$VX#V|RGzL}A>T&nykp3)@)vIYcqfPkEypB`02qtX^dM%$GE&BCl#V*ci{tzqjNM z<_6dO=)X-b2&&%3+M>;lmtzC~t}q>s*q?3V;R{JPZqJ%uW>U z^*&GOWra?zYv=*zL4lxtj@Sy#gXrMH5n{3RJm({5a* zBQoEeU^`A)DPdNWGb%Ju_53jMybgPa3InXIJt$pTnAx8`+>tMgppfuDW6ZV!#7CTW76-?C%V#_n#ix|A_D38dxdCEHt;EM8J zq&WC{jk2Q_XpM(VB-M9`K-o;(lb8A7mjD>Nn_)3cG)*UpxgiSgW zR=t+|>Fq}%eKh&9qfgs_En7w#-I;?1-xweIwpuNl6!hK>2+&VP!Q zi5#wf9Pi9l$Ga+c(&}(2Of@C-5+E$C5X&j6HO`e|_#)cKi52tH%2a^Ll4lvtlF-x0 z9`u$;=!#RwTsws$U;uk`6_Ko*+-ZGMpMWV16}%?E@E z=hPI6aU3>j_?WVaLLHr{JBkf;O4;?gheNCj5ugeyed^&9`|S{}nVQD>hgJxW;rfsj zc~(yyWDpfR{(xc}C&G)fIXZ_Emt4@T`g)^20rQ{{-kX zN6~Iq(_(YtCDS3~rYQ90;p{Dlk~p0P`c!Y?#IYW+E6ZPf@e)8D5e{9`6-o0HmuLc9 z&&k<`i{z7o&Hp#VtZ-bXq$P08cOiu(xT8M{NH(NHQ<>P_KTdaDys-GxvK)ZrW+Mo! z{_}q#Dxt-RI{MR-o%VpkXIrHAPqH1_ia#A!UvzD0=-~P*jiB*jR)|oNd=2L*!5yXp z)py36#G=EH7hQftB|leWoL{#@xAMAmiI`Z7U!X!fE;lc3qn8=t<-Z056H|FJS%Ztf zEnJQk>FWm^uko=_efHv`)8l%I5b2>ZG(Fh0$@Rs7mYb>v7ACM0YzpyE_r>rv2@ahE z@cy&}#cp1lbL})7)kr^?&C_Wy{Z)$Kk-j`Da19dwrLme4k)SI3e*!(AHvL>S6&oorC zF=184ZcN)@T_+h|ceUg&#eIz9M>@B`yX}|LY^Lp9mXNgd7*#8%p-~Ms&ME_TMcs@_ zm+;< zRa4HGyYY^odIms3J`A{l;5!dw)yJP?JIj_G-oCMA+qBMcY^)QD?p+VK4gk3;w*hnz zZui;)nbO!|y6Om>@uZ;{5Lklyk!$*icrs%WsV;8u;kTZaOySu;H$W({`pYh*+fB#e zdyB|bv>>3s-vF&3014CQ+y9XbfT5SiDVk2w^DC-bjV}SxDh`M#8Msp2i%qTIMCkqW zr86u*hshlq5C*i(`fZn&3NYpL-#d!sl4dRU$Ly6>N-owiKxQV3Gf)vLT@oK~Io8bW zDQTE`SW7LK#e-%wez>he;UH~xD;+ZZ6U1RMB8NHXI79X@1lRqikkx(p>e;^)yBQ?NM3J45V z9so;L{IFkP5nTs2FDuRc7XASa6j{{F>9x6_{v{7`(-fDUlH`+co%Vnv_Zn98S;0%< zYNa14G8P*ypt6@bUyu(f0P@i-hECw#6`-@=&+_ac+oK@`)ebI2@HrIM%wI-S-FORq94BRvQ&U&mX)TaQcxf+^;_tNLVQqhn4|NjediX1 z1!j#?ltln=w7shWYoP3Q z0{tCDO^skBo^J(erBT7x{T4%r4!IMc-b=n}`J(heW6{@M=Mm7G6Hh(-M|t{VUEnjP zui_#tR5=mZX6K({IB;N2!nvwe8m`+`htuZ#7^r9`KH}c;#CV0{GrBs>U8dLG)nl$;qRFK!slaXp|Xbov-jLce(WfMQW{Z+``k8M9fu_&wnelUCcoA z1Imv;msfGqawj&`?EwS)`cUT4aT^nG*s2W3P{TINS0jkP<`tN;QZZN>D}G-^TFcB%mDS*8=u>Pv?daNze_r+b1hj?%a~`y(p-Wu1ff0- z9jV;s%R(cmDrT11wjtN!M1By(g~(_4C|xHexxv85$a82oh3x?SJ_xaK0m4`mjj#>t zMn^?Ckc+DkfT_iZ@6xnHQa@M7Sx&Rm{&VL>yZEI$(>f`R9(ipfOjmq4@-ayh;o@1G z6K4f9<0aZHTA_nNQNjQGC+RAv4li^3_jJsb65sY3)V6Z)t)6{o>AC=CUBu#|ewy6l zN=4BZCjM^xfX>CUo&tum{%YC39L!+u6trUWuYa)q+{ZIMb?hR(qu;jJA91GxJ)%(# z<3&+GvaELxv}E^}RBQ%c+~d8r-~~5RGBY!q7opWbEVg3isnJMSDk|azC;)q)b|}L` ze)tyO9o&e_5n88c<2>F)814YobnCu^hf`tn?7o$Om^s7a^d(Ym60)E1ptF~=U}W~Y ze=-+Gx^>_32zh%%WruX)N8|v-4jjrFY`R{#8KCrm1j$1} z$OU4m6^}6Y+kBD^2Z;8B;UGUSjFskS7qIIR+S8se&wrDK7Q+GT5py>;j+GxuSLTf! z9n;one&sbz^t^N+mS3JN`v&7+5}N*+>m<7IfoPA2kc|Gp$*d%jj<;A< z7!8^NhwRB$I1S;t%m89@`5X;1474L|@V&|2K%}s%_OF!?^vgYvLGu0Ec?@yNC3As( z3sQbsChT&y!@g$sQtmk;h6g5%Rv(cF50nA8$(iKf>Jgs6f5HG^1>OO}l~HcaD>}-| z1~vZdSIE(^7vGAWq7MoqylRir2OZv4FN#_a#5b%D&}F{+|1`+||LSf3ZNhYnAXzxtD_*g5*n>T4ZXp* z*3q_4XxfH=hXd1N&5a0;&XS@c_9WZkFdduUtNpx95A#(gID5%-;6ksu^SOn=`k!%F z8C$ZCydl2K584Smm`5@*bVkgC@JmUd1~}WuNbb>9o$elSWL?l7VUHIUK505;*=X4Z zB`VsURjh}?}Ka&iv>R2~0rqKMN@FYr~j8OsHg@as4qp|Q~5#dOc z0_7OL`z2ZYMe&UMXUE-Wh|wp74`}zN_?ICtlZel+t-$ zH0r1ba!GSLRJvIR?!*fH-W|XDEsO2NAo1FJL04Z{(TEqx3H=3UQA_r5)Tpu`Rb2}Y z!U~JwVQUjzxYDD-pGemNde1^KwdewVkZS$=rx!!pMvS9u#(D z{Qp^KJEq1?y0OiPbyv4q2Cn@_sUH3MP(vI( z$IoEPb;mlXVER21FwdB9bd;-?ipK;oMz0-3{7b@6&{bMCDazWa9B)JU@4EgY%{1N$ zDQbe`(+k>IyQ<~!*K9aelDLa zW5k1C-i7Xl^B1eNwM?jYPWfMBc3m4m3gO~|BR;_#KUs&t^gki_m@noznua6qB4AC= zq4W0rhqs~CBOI$*t4*{k=fkq`twV?*Pci3|Oe~L3J zpvRg_dyAAhIj}(83kHx0%t_PLU*DQEJAVI(x|X7S@kbzk0kgQnQnkzi{Pw8gQcmI?o-l7Wk&db9;o7T9En8%o}&4 zIHKQO-phcpT)weCq~LOI-1~W7+DAb*5m^EMwtm*Jw(TJb>2EYyHDEzL_xy;ylmKrI z+bjf$@P1#r956HYHlDG1=L>>{CeDI1PNs*yD7W3KH?x8o-9k2WKI^VbX$z#p8L4qq z9@}fry+tzP-D9!-)h#S;fAZmiHxFaqEa`+0{NvlixEW8U@<=h0lqfTj1~O)FfJsh< z33TgG_EaKny4z{A`gi|Qk<3i^4~G6!8M#{9U_5a$ht_=m|>+`z2lRVQD~X+ zMZk}Fc%}OmEYtr^+WlVy*Xy!0ZvSPS3FM4l`8l$ncql&D>^wK@DaQTp9SpXd)ePd^ zr+)7;wM~;E78I6!bA(>YolAH>ZlwzwD_CwZdijhf+A}`v!%knHv3K0;#n%Op#^v-Ol%IGw1&q2!;Mw^Md$(Gkb$hW*>r~R-mqej^O1AcV%r!@m z_L|+)>pdbfV){DGlj~*gF$E?TF=##?sqRg$xWD!C`l@ZVz0l#<1hiChj^hV8Zw9X) z#?CRXve05!8-ZHqoMs7UG)1(>-g-@+7IVW-qu@$s^B!5EXQ-$PD}O5b)!OzNl*>P3 zdUi-)MsGFGljO>~Zp}wn=A7>@9J60o+5<-bD+fjCyegB&r5N+ty+}8 z9^X}TEnR*#*K2f}zF?6nARSAaw%NsQV`aR&y-~wWJWM0qyTCDjqv=7qS1}YfO*bNE z$EYyHC#7-fXS*4CENP$3d#Fr$Tl&qn7S=i2X2>#;?T^EUth6Zt{g4GeneIa|q0iD< z)-66?MizWgRz5pxyi(3xWI4@2C6MNzSCFMMrs!YhV8~7It>DnrU+p_53U;_h_Za*k zMeldm)A75Brb!#Z_+`E~_utqo2r8DtW0R{p36aG^J^atBxhG;dT1J)WTzmM8NFiEu zRWo!JV+2PtYX~I7C)=5nv>WsATRUs_VJDlA z#c%aZLNRUui$t0BS`=M<+`LQFzc%b%^B)%fnKuYl#`)u=#_b<+rASvb5BOjZ>)N_O z7A*P{=~NYfNv);Y3wS8B`9_&fY#yY6n$~z`@vwb&V8vYUh2^vPlfqQE1aI6GEL1ft z_f&WRY~an0rHjo&uMY3PHK&<$Y4g}_r;DEDSfes=btdz8_~!Bjp~M5|Q=e~Xmm7*> zoXwAHr&iqU`$1gg1+*9QUIjgke6NOjpL*cJ zaFDd-l-pGBn|QDXGw1qYtBb#SZa>Icxski}H`930Jsa8HS*<{2rYExoIW|67MR_;S zPsY$v_4G&;LD+(Dyi86rUvf_)qRZA}F8y?DYwMSd!-=5@)YSxQ;(gdKUldsRs?_G{D(JH-S5r#tWep7~tsMfqe#{qZ z8cX}l#ZQ6{M0ZS=z9MD0AFX)g>%@AfoyKl|`73EMiZb(=ApYVuR>1!}o@{yb{?C4z zQDqu;=wCv!eU7cLz(HOFe}3O(eqcB`h(d=39~+*+=KO=Y5uWSQ2}A(_%PasmKvMwn9F{zuY#d=UOF33gonHsXcE1!oA} zbEjM_B=XVby6x+GY@);>1DjdA>{@Z@>$$`Ol%rX%ii*b4;bBv&gA>wE?|mq2j$1nN zr??wd_nUD{JwGwnv)w^J_IA%q{2PSryWD}{RNE1hu)zS9@iWr(NgD5L!?(aHZau_Y z>AD9fQIg1{H1;B8syfrW?N!CHDF@zF7ONNA<6)YPvEy47GmZ=(sOEeNS9GMGGerjc zhGuXin-h(hqAV=eTS?Tt3bK6!GxbrLN&Q%IFF>G^mmeHRy=opP~a?M_0FhryI2w zBYBD%;=WKhQGHQuVjVONTUWD2`eXo?EeAC2Z|+ADmkoad|UU6uy3g-?R z?HpJOHnW>q(qX$z>t|1G?kxz^IH1q(zcQkX_$-k{$PBNQVr_M ztkwXCps4XHHJ&%u`d$D^D^V62z_oF%spkP(*y`~VOTM&vIqjKMKqfVt&e$7e%cD_$ z5|}!5lB&?Q&Pwe3vXI1=60K;FMC6QY;lb-<%8jc8<4r~7Yu(31baex^1@uC;4X4YRlm5rK6s_~y|3E8@P(08w}SlwxCc2Ry#yFo0{wQ7h$;RWRN^Fo@W*P14-Kj0~xjbHo0a99XnA`K;(;4*sH+_nCTr;0>lJqg?!8SIfK}P%MgHW&eLy89U5Wlm{e6B8n47 zjQqVCbomuQiEoL^xYP5Tq;3nko+kJbbQq_1y(MWgR_Y37v{EQh-ULrcmd3?J*@$< zSYas(gf&dN+?WPn-Z$WVi-jW-|OgaG0Wo zm07muqIo0A{mz8Z#VG;ugF#mDE$b_P^a(9;SzVfWt=IcAl~v{>kfZu*ltI{BWlhP| z75>6+U#P=h;f8?gOONuOjj01ZbInaRPzY47G`F!%D8i}Ty|FH-&hx#}sRGR*Q=wGq zRKY64<%fO9J_&!5ifp0#Dpr!0*C@yS-T%+Vx}UwTcgETJSoM5W9{7EB2HbeT7u}R- z4h!r+wV)-(Wt`*56b3^uC?~uXXnL|jeJmmA6^~U@Qf$_7jRKj$Dg6xa3?}Dvb zU?voHcl_s`M`E9$AqcV7x<}$=hHm?1pLrxAH13H@fL%EHweYM1@f8^zT)&ddhzfpTWuTSS46`jM}8Se*M4r&CMr`a!7NBQS|fUEjLRb`ulhAB6Z} ze~DN&h(*I+C5A8v0C@39@ZQ!j|7z`!B8q7I9km1z!|VfNQ3~~ba<=pnbL`b#CiXl? zhTuN}>Up+uIx%fZ#Om^gU}j_%z<_f${@w(+LIW9aS}YG^ax_5H`RSGRX> z@~OlhrPE9h^qg(hLu*NO9=sykX9HP zhEhZsLb|)V89I~{P-&1?fT8bm_rMqn6V=pJI`IpcNx@ArP+`@{3?eZD;BBaUaz z`OP`Mz4zK{t*vWw$#N^jtrS{x@+SB?GA6xw&g2XH1x#LBSd3p_mJw@FF8NiOPQ5M$i_N>L` zzQtHYxS}GBC4fQ-8NH=Cv3TW)FHQCC6&>wg6BLJqV`;DKy91$lpena>e?9a9pw>{N;QteWUtrO(lVPNn`}!?QyuZMgqM}WbQvNMn)~#o` zgMBQ2KYi<8^bx?waEl?TV9k%;9scoo;e*^~k7VQ42ljbOhH~sxSw~>uYJg}gvT4BC z{fRUBao{|F8UkCe&Z^bptsnXYHMm;6xrh^#6Pn_T<>(KbA7wi#If)U;sh*-{Z&K{{gmF0ZPaJe*7PU(*Mh^=HILN zzZdeqUlC(S4K7pC;-yxLAj0$U(O8eg%ofPQO8k6c@w$7!d#Ye76Hp#hmfFrn)| z@8c3M+psf#>Y-jV*Jg6*W3jw$+|w2$N)xr$l0t7V)7ySsl|Fm^#_z1g6)K?4f&J_^ z_qoO$c<9`)vl>Hv_M8dn|M+98M4j?YGztCB>ku8AuhWXf&i|j|OXUBylhl;igyd9|(Q}xcVbh|+mMFq&kuk+QdS8M~ zbdKu&>s%VB|6e;n|8-OU&HCxzYx$qAk}+iAgep_pH_zTSQQcUv#}oA#6K!h~0=qB@ z5}lQu54dV89s$84M!I(dLbzlwK8+jG2Awfs6eh4S>F=S{csKp?IIEl3^(TQICE~PLwKQHDo+;s?$MOV} z0lvrw{@zI5x~0!0V&)@l4sVUkJkSN!E1xe-f9P{CwjJrL%tsIu$~-9Od@QJ+=`4wE zOH*8(S}JODJAb?Jt0-dHC5favAGeO&@N}b~S1VzXI-S?b@ZR_TbQOzLoPMOdI!er7 zj-%Sm;^xoVAh@ehxlP6bn46e7oy)%sKq-L67m-JFb$T2>FPy3XXOb7a6{ov&8HL~W zp-(K)Q!D5xM6Bg*u-r$~wBrg1!ZZB8R{OUv;#mBBOqlYEo;MhO&H3|fUZep(ioV5K zO&|H&_51pQwl3W7diBl9WSR{52^l0UCi=%9@NPck;1(cyl>-ir^mNWHizH8pLdB)V z2ADX$>p1#T57AKg&#uiqXIvqy$U(sI$eqhdfu!GJy1LJQB@sNU?=)Fkv#s>bqdhoF zM@y*utZkC(+2TQq*wMjMH*UoU&0bKQUa3KiYCIsZkuTL7d+4bCL`)fe1LXHh>aoLd z!51RDku+Y@FTl_F&!G(lzD1+(QOvq_#4<_^ywwin$nUj08{V0izG7_YT3{WJ{sNl|d_PEYW)2*rYgue#>9zVPs|I)j&S@Hc$z7#X)x-`IlvR>0lbB} z0oxhA=Cc`FW_L6SQSzuJ$A9b5UqVmYdGOULvu7hI|5OjWslkXY4Y}fBY*fzU&}iJ` zMPc0RL&MmDJg zSBU)15X%uAA60$ZaoC;D{)qP@(7LLmjhl`OA7b4w@x~9S3i`hBYV=JYKG&imqR@Ayyy)+M*nJ*c5t)E-SFN6njXJUZ% zc^2$O-pY6#e5V~zO91-9B+MMgLXT6r2xm2)#>eY(PYtD5AqT#Ig(l0%K5E8Fl zkolI!_|F30q+G5reI!cp{D|L_^Lw3nh8}6;^?JU&hoAV-E?Mj1a|wZR%vtj!1pQ#C za%fTNX{X0kU+jI`+b;kS?}Gvhf56kF2T&ietBU=>JBTyAl7Gu2sUvmJO@(EOPys50 zzK5>Fff&i2Y8Uik$cjy%l9 z=vN?exy-+~&5!(fb&+!Pa?%nrDI-g;NTIc7Fj3&b^$*4>Ka>Ngo3}8P6UPXBgBMmd z=R@UwBIFvE;+Q!;YLw-@!|QUDE8U$cJ(+Z^m&ky7n-g+a@Oc z`G?fuxz4D}dC&cz?sUWwu`zmt@a!?akX=Ztc!;@~=J(|hg^Ik@5rK^c7Ka@b#1~Wc ziF7=?v|!A1NwEO&&6mP#yHPjhvnzz7*#~utSUW^~%auNz&X_Q^C#~3XG?g00I^*jZ?ZWWY<$~Toy8xrdfrvum$-mEcmDzyDM9Lf4S8Z|w!g-TS z;b9^j5_qfR$u(7eGh3s153xIv`&o&nmZ|%+6Q@}#vtLm8ozz*qI{&hUYd9HO8nbPN zCPQ2F9o`3I0vY?MTZ7dkFDNyT)t9N#PwR)7v`i-pX!s(O3sI5FSrBzf8P9U1hFvyU z>u{E7X0&UhH#sjUFT+hOuoIG*bYA(SaiuhBk>jW3YK1^cE>*J1?eNjX*$BA-=Hxp` zBk1pk8pvN{H(l3~cBrR z$!!-D<|=9(PbbN79<9m_bp5=WJy(*iuSX|+-~JPS_IUbvC9iN%+|KyGaSq1c7SInz z-C+GdGOk)1CiN|B_2*nE&uQW#t{ADYISIeP9KKUNids_XDaU*1#|mzbH=xPpvcr^{zufeYSpff5smhY8wbx@o8XuXHAQNC(8G|U ztfhVfDnA06OxGZ+YXz2zR)sYH17s;cU<018%w?hA(LA{oz+0v4Y8wns)?917VW9q9 z(3SYMqN2THO;2J%vx+yNM5Bx3#8WGuwEWX&x$%>9muGV-Cp}T2WAks8N@R2sPb8w* ze1@H4$Bq{RT$`(=-N&5Fjt>WfdJs$H>OuT?r7qxd)$-M_Iahv>y`~&L??qh;XU#hA zRoB#VO7LP){T7wQ)!b3f1BEa_hbR+Nl5r1v7r}tdJ`8ilQ{^>551M=fFBol58#%G= z^kD%7UK_{l%=>qpSSQu`X9hatw2hyCx!Z`GTrjBC35ZL4`Hi+v|1`JooPt>E65*%MjK>4N0h?)zJL zLuiW_zaEr|P>1*B2WGNYxj|WRCz5q>-ti!3M^=?HBD>hr+(_m{zbWIrIC0Y;M4--E zu+NC$aqH2&YW?+^gC^T0`-8?~9$U00DI?br^=6@QJ&@GY`|jfE#6{HkX7%>?v(^@s zJzhrusmid*Cj{$*7hNsTqi(EWOz>$|_XN&-i)Pa{m!#w;4rd2OKy7<1sMC;j%#RNj$jAVr2SU%q&H@>M@W~wzHwz^hDcZ_UfFrynwuP@a&lWaV1=&)ohvoj2DIR*(RT{;%7;8st3G1=rdhUDkND< z_w^H&%jg`GRMSslwmdJdX)l74ar@&+NEu2mfL04(rt9V05}L#DS>8QSpp0{9Rkx(% zdz2@x3q){$I9;4mBt99Ib@Hx*yWPatGfPc@stnDNmTRw1RGGh?liN;f{n+gKpj1gp zh-&loCG5v*n8Q&ROMxiY=9|oj}}AlyZ#g@;EGf#bwUAG{rAqwVck?gs+hlW@r0(bh$yeGh-q4)%Jo3y53U zPNX>wcc$K)`jbO@LpUUlvQ2;S$>_T8_fu4TG&#ZC=PX5%mqh%tf^db=CbovAzDWik zT~tf8%0hx#_b{#3Rd<2JsCq_s&en^PB8Af7DHdb`K&jifNy(Xsw5dve=BHj767;GI zxdC;U;X}j*LCQPn4UIdP?$KlMjNIT(wlW5Va`s zl)x&c@I-(47MH!WgmtcDqnrL9tTDhBWa@h(jECx4-29?NmPAT(Ux2g}5l6xY&Q%#n z8CMy}zq+=ph;3rv`1U-QI8_mow-y?_iN|qZG>Q>*Qn#umQOP_s|84`6NiVZ!Yc-Aa z7q6xV$s6$S;wkc^dQm^GhZM%FG@JgZ7*ZU56+B&;bM<7ll~+ur2C5Yb7>+z%dw~PP zD~a8pG7Te<12A7^W!W>^I|~DMKaQ(MP~Mz*?<+O3`o55+qXr)`#a@msldfHcJzxbT?#Qag2NL)o~`yY~%T zT`ueebLLjOn25W~;u6PFlOZi8J~P&bIpNV<_IFfX0X47?-El$?3U}gZPx$g&P(^Lv z_w8lAfY^(my0nqWzzv}CNW5?@@6{5KVmO}sgj_p)jn4%JD)R;_oc46`T3SpX5So9~ zVtoF9u4(z4^}EW+VFnrQfBL{M<{JyB7r0rZL%2D721HVlhfatZ>XEZMo*1O3b?C?F zLh60S0j2v;MS`PP092#K@;F{O^BT75c-LC_=d9I9 ze{!6_lMc`Xzx+)$xBOE_5%npXXN*SdR-S#1vLv@2zDV>W6TkL$iubALh{9)f#mE9gtgGUOFT_^-${N zZ)&3Epv*?I$E0{#XUM5)*yUT4XlbuX{N>V*p3J?W~c}f6TjKxyWnRbvC z1iPS7Bl(tz(mFoK0OAJ)p8;S$2DK1;9bY?sW8_>C*zm0ODdb*cZ!u@`lU^aM+*fOA z-qsp^2wg4!%f3O7nxKy7!a80_eLCn2X)U_=U8|9%TFgV-(f-geGx*znzy!Rrn)ueJ z@%7KSC+Vg60Y8uU9Cw!eWch};i0pCz94O;DOn0sQ(P$$A*u42!%P-GLzvqeG{vcWB zSaMNaw{3DID@4IgTsuoHHGV6skr;i_bT@d8`e6K$FCuDxl_{W}sDX9b_CjN*OrSNF zYFlBHs8$d%DD$0eUKqdAjSmZSbtjY27P9gmug==e%_A@jB3zv0#n%h^x*=wc0wcAr zvaZmay(}DgI-KE6b;wtbPC-&+lxGb6zOE3R?Ktq&(p%b*!|ln&2r>5&Cpo%POZEFF zM(v-rer)}Ebe8eO5ML@wsBoQ!Lc^%=m!M_uof*6=ewELMVYc3X?)hPLI8Hv4Ll6Qv zSva8Freko~STtOwxrTjz82-+W08XQ8#CkvE${lDiF@j(x^1+OL%VAH%@BvLXC00+h z4cqFvh9oDvXH)tyo3z)CY4bzD(0PrvclApOq9Ht#|gJwiTQK%re zZmaEdVjV%I}E!zyV%+KrDDZAoEjRG7>3Q#nT1iO7zCA(2-B$LI3a6=Sed zZvD)(FWB(6g(OAZGtUY|Epc)p?&Bz)0H?@OE9a_{yJOqug8jEKl{ zyf82MaE#1H1Gyczal#|eH@M1O3*QqG*ZgNfTglse+6el~R1wGQx zq;5gt$f1O;w-taKp`Z?=@)1fb9=Y#i<7!q703U}m&<5iX62(M*mt~3$kMX+WJzwFY zSo#zbLbUg*jRW&6LPbRmtoMTx&hcw1RdT=$ses=bm$y2 zdOs?*n8MnB(uQ)*>_-;Xs>X~2$T?Z}Bhn0A8lMteVa+B*DAW|+JN>|5VIuEYGGB5q z^E_wex>b=`Yj_S#Oy`U7`-<}Q7}Q&Pg|SaC4y7aSjZnU~s6^*3A+R@)Whjrc)Lqiz zm(+D=%~|K1b}`{*jdz{0J}*jobnd@aK3B;9z=03gm6grZDal_e>~rzs!LUe%mMLxK z>D6kYkBG=-Cf@jk;*J{F2v?(I3|X4bm;3S-k&cBw-sygE#D|Hk9}2#pN#Xc#n0~9A zvcMW^=C7ysALP$5J9P(KM0_wS)_$p&{2DN>(IsHlsJU5th=u!ZzhRzmYTATVr-E}q z%8JU$U&r4Xfbecspf}C#rN^@Em~q^O0WrO3D{eC1_#pVESMO*x)S?M0G9Bm)-od6pdJ7RjoWtXmx2p|F4uz3 zpDQYUd1LU4h?Mn@c(n=EWomt<`dlM6hxFD+6)@SrQD~(4Y0b#uLEQj`*XY=?QLoKc zq6M7mo^|Kjle{Au6kt@!UC0XE?{Gm{j({;Of$R^ssk1!3Xtkmb=5F7?W~`eP%84EzHyqt;4QwU+BDy-KUb(nl+A;Fdu?Gad?-xv=|4Y>I9{W*mGJu&8&k_2SuZ`8v zS>@oyoNU)<=sqsgO&s+mnKdo^Rx%qqN@c@4B8#$&RYy7&`#OA%Ef%wM^ljuM zg$FfO`l@ZLqm9t|leLTUM7{^bjCDh957Ng6Q7RoEhdpNzhXW~P2D?b_&Qi7R5L(_3 zxfF{w>Q(b53lcH7b#qda)viJIb?#6i6>rmui0P*$LN&EpPFY+e4i+?nC!zwxa>)EF z@9VH5R3*kIYXITmudSe2ZbCFKBZ?5>WY$?@)a{P~PBwV`C)g%EV%YB)BFdEC{xP^) z{Fz(n!jZuzzrGnxG<``S+>uJ1^TDCQQ5lf$(E-0_>$G$I!uaUQVErTAw;{j`4C|!N zJUXTCx&R%TB-W~8Abch;(LqtnpdPf+J-^4Nm*!aB z_>7hmbCioou6=ea^q@-REqL>DQui|kxC~wFbu~Vdt&HJ=Osl(`>FI!FQxXCXGE{%wPcrr480R^n#n)vIT zF2Vk#$Vh_5;l-BUeM5@@dwitgYvkg*PR!=_{CXr-r-^@vI?VxQaco~P$75=qi&V(w z9$Ld_zz%4&=IM2%jM$<()4ohQHFUPdRt>Pr0v`aEZA9XH3%L)tTdc1MnMn(}s+%B^ z$Y7SlZ!ML z9;1L-QpW`Me$cT7C^@?SC+v|f(7We)=jU z%h1pD_4`8{9Y3A)r3Uxaw>LR8Z{UnPo(L0X0RH!yhMp|`&F@(8@{|4W8^6D#nK-nP zMc`=nyJ{{^jx@i`3wj;cB>|n9IbJM;M|!`#%`G=tbz21Sj@Ik`Y$(!0UcFfTb z;duE``%?dVw)hUs(lbEG_!S6O0AE>Q{@OX~3}##Vpq)ZJ1TZt3AQxiHYQLDMC=LH1 z=f>9s&4c3B-$jfpu_)tnxVE9z`*$Y86F}97C5&7yw8vvyLup`@c_a&)_+#UC>iOG$ z#cc)LXNQ9VgHym{hOeLH1_D_|>1fpD|@nVcCPHa+C>z0zoQW6`>aHhm>i~h&~d6)5)qcI4+zd6HISd&}?K~Z@p%Z6PISVLjh zrfGBRYf1Szxz*8BH;y@n5XRkuaHgEb zpk6rvBT?Q}yuq7`i5C9Lg~0}8?z;|oa#Q8Ta7T98j&;DCdEwFIv|Rn8eVg#m zM6g{b+}L|UyBbDL3HUe+*4ZnRM)@wN$T6g29T_Q~aD`&m>jKd5O9;uRnz!*^Dar4T zk&QGQ@#~6m+8fwv-Wbq2-ywTTje`uMH||#&uf9Fow0iCO5g*aGmBzqV913D@&yJH;QDkP|M%RxkRb{fAo$C3n^|K6LdSVjN1MPV6>cm79_QG z)%SQ=n!oBknm*!g;(C^Q4jZt-s56G}I6079m*3G%6!pYIr&pk0XFk)mmgO5X<(ALw z4#jUL1V~F$hW`v+Jb+nSEUg5}3U&HRY)fvtj>-HUL)t&i4SrV4JgKA>^*WeQNKfXX z6&Z0RU(?{vNSPXMzn^0wHr$%4?^kYLbPV(p+Abo-6%|o`Reb%O*<%Pr4&Zq$cr_X} z01;i#YSY0H1|!Kt^4?+I3Jv!|BWat|q))Ua=yp+vT%g`0x`O5oM!AG6-vB&UYt<|7 zFM2DC_EPIr6~T463pL=TwqvK4j)gOL&z#J`xn94OGp@to4~VS74a_7)9!sykyd6#q zGb7FHQhYbSaNZff<`)`tA74%gPvH0}UDs7%)ID)Msw%izULL{vN6lO=N04cyiRWHj;>qdab^R_LiZqx4UXypeC^T2z zGh!$eS2#Y^fM}0*#0g2%`b?~We9JCBj2zuUSsQOrPI~( z?s0&)h*6qQR82x3i~*S$k7-Qw?Z0}@_ivg_?4z-qOT{mFxJgYS3haUts&aoyNG<$W z)BjY!H=^LE2o)k23YWF=uS;cVVdqtzbp{Rrk8Zh^F?@h}{9y7>(d2@7?C2IAzFZD8 zLe^}SGZX>yHZQ-vbY`--^HuS9&b%ZG47Y$vH`hF|i zq42%6KX^!(-wu4~2+s`94K_#RWn_Au5cag*lo$#znik|Eyy>oaKQkRi9>_m(w|+dq z-=_lxYBg;`N94vN3T#T5!;{Y4mB!mf25X z=iVNmzk{)!7`=bY>z0CnVj2DJVcD`L^}OYBjbD~?orXem^x=OIm^ARmK+@cg1nrB9 zXlVnFrzQ`CKzvbWvJkEidAX(~&fLI)rk^SxwtN6wE9T*G(Enm{8|Fv6V~d@$Qmt~d z#xv|rPhEL5$TV44ZGb>uUzU{H!LH=dnLr@hJ=m;xV<$nn zuW(BfVu{y!+@=)zWPpVhXA$Penn1=VdDk=n#C0wAOn4zK?*V0|`srjr-$g)0lo;6C zvpapV`C4Nr)UvTD#%z31$ys^N{k1jnz%Maxz2LfxH9dU0C-i6+eYux5I zQ33bpmzQ)C+8N;vLmJiOfk$9haybU3@B4HspZ29>CSQsHa#C?Mot8MjcP~3(#r*|#0(5y7*lIid`ftpE7 zj?Ui9^d)E^44+N!tEe>!i7E8PifC|*B?9Rl?`%_uZ!WG5iFVgr4JusBWy*9?k3Gbtx|AoJXo^^+Du$81hsJ zD7z%$8Jb1Bu3{AC)B3?>_Z#&)=III|^{hFc_)U&3U6;B8m9%uWuUe!K~NMP0czF?|wx7P5zF4h3= z=ZJ&Y{g`N{zly%Ua56ic4j01&bwN>)E_M2+P3f#;E6pz{H}JR7p*V-kkl>5lkkpZ* zEAFsIc^`btz8~knIG%wtM}JcX%Exo#soxLWm(!2nFMO7DhKh%I%jFGt1*gAyRk@2^ zck-6~&HPXlKfo!YZc2+yDB3<44;KPmRkQ0Aau)kq(YQ{J3PyXMOyQ{DoHF19SoXes zeBV`|?Yv-%TY4?tp2>ZeRWN#|zh0-P=$^YE=!gXC-WvyaA@QG54FB<{aDMR@{s#J) zz)?5>-EBlX0kNn6ZFHAcny=_pAY-g{7Tk=%fMbdQ-r$wW(3<&uJlRBBMk8!8j;r;aHa#qir1OLWSTENJhHQr*dvqJV40xFeUukB>soj7k!IWK z6$l;=rkS;J`Zycm*A5K8Q#!H!aJK7&Q4?QDpqIk`9EFNDNkko(d089*Sh1dtBnAB((PeEe_V6uktWYWN4$7f)7zKBiLD^!0&C#Ij^?sOTVe+y zrwhcy@sq<_M7xz;q{V~Q7dIm?cTb+|1Zb8Win#?6IP;w6rZ^OvXMR=#Uu$_cc1}VR z$Tg;TpE>IaEW9oWY4xU>QkEAy15o6~2Gn{MTzs1>^U~4$qGB-1rKxC(TjnaX-|#3i zn#=UB^c~wW($HXSu((~Azkd66g7=X2T;4-7f53}5mZ$t3H<5@c31B^xZV>@hv?%jQjS8qo$c4=~_wAMp z#wh?RbJUMCxB4vw29Jj$1t)v5Li)cJwp;*nEw$5{1(Js6#D*o1ynw#sb`MqqO`*Y4 zQ(mOcYuxxOu$}vv2h6n1zs$`Bpdh}$%c-@-#jk=bXEEP)yskA9#tT+|cfDOR^25OH z4MFd8Swq!(5ggcsW zW_!IdGh;y9N{xVLI=FD~ajSjsBjwE$t8Glhdo0aN{%)$DZB5#w^(HzH8c~R*_oP3i zS{!2-7r9>U1m>a9)sfwN!PFp%U-};KQT&ytW%`6%?}U)jTlSvZ^3yolqI^Dc%yJ(A zdb$0K@mGh;+oStz)BH}kz5xeqXsNn4%#40VWCIM}pDm&sfBNH&y^*p_i7wO&uJvv2 z$BtA3mO>QZ!@iFx9=z%q?8c~~6C12LvnDrJVuX751b))K)G2-S5-=3>cnpk1%-|-u zok{UrnC95=Zj@QLv(Rg(;nb0&7|Dq}m^LO8dGb(RLPJ&|$Ec^qGuHWA%*Y8)-gfz3DMDn*< zby!C2i$V6dwN4aw1ZdYt4vC=I-~PJP*Lro{;w&sbcMH5e{tDI(lE2#0ZI7)@OnU8n zyv}smd=_=H2hEC4p&_GMKF9y$p8zucBe2<`HvM40;;|)~GNtXrD{Bmy%TM7tY|52d zq5m}%Fm~1w!|UA-l%~!JAP)Z(Zw~D8F$;LCsWGT$35<_$`O&hsZ|75_%L(NN*M z@-x+B={J1I$?tRoV7Y{i#^{}=CXx6`Dj+vOwR{LzhZ4_awEIDVIHpZ5*h263&HL9m zuvM*g&R+A(yff*GjZfC2zro;TKY8-iWKGrgkZOV*H9Wa;AlN{!%=|I#8w+SG7eR(W zfP_eDB}ip|QMu#vK|kO_D|YI=7!aXNe@HR(bp`0UuD7~``37${2ad2wk^RbIM%%`$ zq!Z1a-G!a$s`Je?RLV@R=ShuCjbmrF_-9o?o{OQK^6c#yM;6ceE-g$WL6Y(GpU^>X zqyXl|Q5VCV?hByQZQT4a!qZ}FRCvq2sn;yyZo(@5lt%?nR%&=R0sy6~q87*JbDOl&yCXkAv9HE#PT6=KUVC(zCJ<({cN2S0h1;DfHNB=v^nj_}N{p(IQ zUZG8fB=0O7PHd)iRgYn1z250EK}}mfxYrs}6qE1Z<+s#6)zC~bNCaRjcB57UIq5ou|ucU?mI+5QH=@}^?C@FYx z1ax`^aanAcCpBA5?hw_ z@#Cz0fict7&0&D*|DagWuE4uHn&JsjQT`=xQ3#=*e}o(rzUmqT4kg6=&uh=bnKhI_ggT@MU|weRCDwyqCF!d zJ@45>dUBA5gf!Md=|BfctdFjszCM8^2_HWDxtP8&+Gy`#CS_78DJ%5j=!#&sMcgTgTlm@VujsRulbe@p>`S54af`N9;Q$-jCj?k9LCa;okUZx8gc z_TW9+_nA^dl|IOERmR`#X?N>1U6I1`$_f`wKl8A0?C$}O|EqE4t?YfchyOwN&jNs? z%V1Q6EA&4_Dmu=!Wlz`Y>K*_c%s5P7({uh$;?LsyGV7ds>J}tp-Zwk((efLz17r-j zQe#JOyWQ9`r)rY`_i>lGXe_ZXEX8~x)4Kpx_w1W%*U}oGc>+!RJKegN`tQ=~0}s#{ zj&jpQMtzSE=2}&_%wTgqUL04&*Rt&olY}=lc(yJ}?DBiq%78B-uD#_v-_GI5PsYlY z*;A(O(EB?*+EIJ_GH9D3u~p0>x#MKfEys@;QXp>64S20Rn}3-uPr03yC0^7%r?n%YiR5V)ux5d|Bo_@QZWFUCoFAi=**=LJXr*VZg3a z@yuXHxe4rh&V4L7HdP$XN=;s7T+=JWWTJgmyd5aMDt*+|RO=``hR1H(Vv-{il69Lm ztqGALzS7ue8rx?(Og9C-EZ6(yltQlnyd7H7+_$vT z*@(Tp!t?&fwXC)tZTvy&4hccbIzHrZ*aboZycee|I=4rx$$f@0K`WbNZPZh$P$gcy zY8439`9mw?s-vS)*5dcoUXLuh22#*-UFE;!E${R1D$#9pE1SR$@|D|4qU%J7h0Y%-1>Nx-U(6DImy6@u1zNPc5a;9r}YGeM`}XCYgL~ri})w zz+@ant@4&y3P@PLb&XAono?qFN1v$g%+nTN8sFhbD_a6N$=4ii-0!(d?osD9op@Di zZ|K&Jc@RTMx8zj5m)ws$NO$?AsTL!!+o&|02seW+!bA24O@EwSqvJ)_p0phM`%h&9 zkIVDFlG5nH&t5l^Ff^maY~h2R2C7+1>mescswL3N6F-b_%FUsMawi9*7u@E49n5~g z;2>~yYGqfKzNZPs;fqJ1fzKe}Rj6V`){*K8gvb+(M=Th9$0v;8{^;50!m9I$F0#Sd zw-rux8Kr;3&Pr>n_8%8Mv;5!{|5ISE-L!4bFoJOKL^hAIYm(2n80NLxJl-TEh7DyV z|12ZTy;z%h|98*NZT-E!{yaqx5P5!`Sh&db{TO`W*_Zy+yVvB`p|V&+O0Wof*MAnR5_ zWJR~b3BEe=_^-MAjwTNNl6Uj48~(p>gIZni6S1vT zJ*KvoX{Y5!n7;v^t-->MO4hygfD=L*xZ6XO2-JS@<-+dzNB96KXG%N%%hWhm9nm-# z2w9CR|1i&?6hGGLG-2Sr=SX5Pth@BX9Ejf+#~~Z6RfrJG+ye~{6;xaxr=%k-e{wCG z>E4oQpvU!z#m)zI2Nh`N1z!WoMn8$_=D2olaB=S%fdQ5^d{SK094v2jYwTMM;Bme+ zHa?!LjHQEJOc`$Ukx-e$L>nZ{&Kf}Zx_OojreP3wE|CcZHmDnWT5uIgZehzg(zMea0?YkfpL- zpEAY@+~hj|2jB6vBXfD!g@3doTlxD2ot4ZON6zy6yO9TFJ%2@6(JR03^ZX_T;ONYG zQI*!ZWxherb6v+wzAg>mb%mM5!v1!5N9F0_u{+ zF5mOX0?nm1i#cRDm2;DqhQe=+xvEdo7qL8Rml~+9qlZ}~Ym&5emb?14MKajr%Eq_# zH+e>}h+qsoxNztQuuC4qIRZIO?$hZjDn0_X4LM~a#}iN*XgH>GfIyFeS5q0S_hT+T zFXK#`rXs$a(IzttA}c z?68>=uy(n8T_`mWP_C1QRcKLAWM~_kQNH<8*b%W#ppg|79UV(7_rfT`ozDdVX{GG> z{WjB|=)9;}9+AL1w)1d&C27IgBMSMhok7b>LhDeKEy*1Ed??6h9ucqEV^mBqk zYFjuErj3|kV#9{ITYQ#gPZ!p9hUNXHnRJkEO`AO8{dT)X7Bqm!K?_WAev|QE2M0oD|{#b3T9n2uGIThR*Q+()AUTbJ6#er{dI(6 zB|;!Iy2!IVc_=m00VlK6dpD(Su`*7qAw&RJXYPXvU$Fab)&o~up-J(*c8#=zl|IQ+ zTBNVj*T~dd8pp{Pp4?!=meKtbyVSEcjdNU%;p>XJ??Y5WAY~hKHE|8dw9D>U0Y$Aw zz_C}{eGDQBXx^|`jypg`C}}$s0ZMh$-%Vi30g$H%Sk=8`5Vm{Q0E{o|`4h!l9=W#n z^lGKIswT;H;dBW+X6iJz6jVQb+)cGG`$35@KN8jt1^;PTqC1;slabnd2&!z@Zy97C zMh6-0m>wt1=mO)x*00t@Ef#)%ad-}wqv{MoAJSE!9(^rjRn#gf2260GKiFyx>m7tC zQ}gEAJj`^q)+7fkE^bY2o$kyH-e9kofJcQX7ju+Mio}$BZDGqnFB5BwtwH&dJp1CZ z7FEn%^{~mAq<#b=>s>i}?>E;^14@bo3Pr7nyXm~HK#Me0F|?WyC#kSj%omcr&VxG!Lx3dUR%4?VAc#v02 zF&#K%}%xX8_mB6R)$bZ(Y+OIp6iM3WMf7=7f#h}(_hXaEpm<)U57CSlj(|7Wg_a5 z9!I;z-6nG`4^zvHcudaS!sclWk&_eA_mRHj3Uv$9`g`;T$Ct$24hR$8gj$F^W3{Eg zuU1b&&_if{Qo9Vm#M|CM^?PZ2s{b{>>E-XJQgDaf*lv@?TTQagm4}~M=K1!VFO~RW zcfisBvjMrb2m!~Sp`O_*o`o)Gj2u6N4O|6cdKp$~3|-#Wa%Jh1Ybgwp zIXpl08XhpQ{m3dZ?I-|nEQ)XbU6o?oB*3fO_BkbmHmuHhE><;LqDY1tM8L7C9|M!m z1*GGq`>l2ct=v>I4lX()PTe=Y8peOWfeK%LtH$tK39I{D$$YdI`;~!C{HQ|Fi$^H# z$@a~lHNAK^lkKHFZS0WL%aU8Y}ajes2Y{f4ovb6~i4s+h* zlCI;*MyRoc?!F~n8r!QSqyGP*0c@{3-bL;Sf9+@Y#}rZ*ALW9IVd^QQvz-qbP^z=Cv6 z%u{$EaJu0oXVue0ehVH>Z=g;iFh00af508G_}!{jroFPZpHo(U>${b*!%GMDa?rr{ z&)H|ds6~;m*?eDDPHn8xk>CyZWual*-cdStN(q0@koxt zTgRc!Hx@uJh+zVB3)m1%f&GcPU>~bi?&n2x)&mT0K`v!Qt&YiZW1dt#Lyn3~#S|jz zG)J8Z_umdxHY6t5-#F%4=_|O)OiG%w1L%VKCHrJx2dZf`Qlel zlEGy;ebAwnw4~$1wWh{Bxb*5|nK5EsO?*`f$!Xd;m{j5N;ml;~W6#o0G3oX|aJ^)+ zapRyYcO*n)gSV+-Nxxj+l*Xg%*)vCPQVFa2X6ew)Nl+QpUU1!WsjFV4l^=lSY7cV| zdA_si8Vv?Zznqs`ZC{DeC+;3&4ra~qUxH>|H{Qhz;~doMB4Xn>+xS$2j!E2yF+=2{ z?dM^EXoN41Uj@ML=QRyHc#|&bn&YHV^vVhP>#2)6rQCr90sGCcexP@^mw1wQczm*& z7$-_VN)40%eS)n<0uEI!h2_3wQ6By`kpeVzoJ=z{Y|SfxeH34HakeRaK?`_to?Co*8u z{)y$Wus@y&JOuQdWK2+HQTfOFt*7z20vqo>JsBK)`+R}}D0G<|C&hi6^yIGF^yp5| z9`EkMnkmwqC`U%F4c-Qww6DBLq>aU23KW?95xOn$YyO+gxUlFzmaT9ukLbdts|lhd zQOKppQ#$J!ezsEOOAD;J&`TqU1HPI0omkMY-vjP|LVJW-2r$STo><7uy3>w9KgsCT zcBn3juL62hvF%rIft7a5b%of`Pa$h0PRfmrPY{4_RgX9vT$r-B9LwEzlxw^nh&DyZ z@APAfM?dd4zU~l#2HDb&qH6K(tPO87V-1b{i>5bYIJ@tYkUY^7x7*U1(b}H`NXh=! zyS^5ymI?32yyyKLGiD_b3AZAV_JYz5U<+({sX$IWxP(knTe~zD%VCRIH*DQE`UwRX zXHyJA_@4kr6m6Mr>Y+f$FO0pV^5AX^j#HoEyDBI^}OcpB2G%!787bKY) z7?k`e3DG-z)wNdk9&#w8Leh{)g9Pz?)#*n+|*+5E0kEA;qu zDvTaEWFwQDK1=|V?==GNIk8(qm%+_WU(ydYeOG!BHgU~gL%1dn3GXT@#uSf-e%ARt z`+?pOqC<^$x^5a&>*t*1Y(>?u(JRCWQU6qpl)3Cjq!m1~T*`8xyk_=)PC#?!HGJ=L zD;Q%Wl8;ooTmH4sm9#M@$@BKfx%Vf7mbxmB<>e0T6 zgF{h$jjJ_~&li20e>P{`TK^YQZyi+S_q~6MQYxL&2uOE#BZ8zL-6<*EAs{UvA>An5 z9S4p`35SyI?(U9fpZDkYoq1*$X8eco+-Ki=@3q!-y)KO0M+<$Ko{RmAw#38Fb4ovk z*KFp5e@t%@g1`_vkbm;fxfl`M5OU|DftbB^jPYW!`n`qk#S;;XYjy`=rn$go7eg3t;4k=yA@E@ zmSg552DSXK%}j5l3*7Z*Vv9Q`)!)@pagvm(rg%J^`|X1OD2H_16I$(~NY<_YLL>-mJ{ zxJ0@1-k6mbr{va0Z9yFgkMqd9b7I2iKQ{6;Sl!fq_$Vd*fhqETYeX243hH%bOoZj* zKE+N%ncnvAt;t5)Z6B>V_HR9h(}5GuAB(Lw#kMar==@KMw=Sc5&R%A$;+^JcYcONh z@l^THKo;jf%Vj89L5T9^e9{oMG^FhvNdFzD^ z-1gMm1%dZmQ~Q{=zYtC!9Y$VG?grYyQ#;1+K;NNEN*je%^<9*7*D0_!_ZqDMAtz&y zlJn-^N7HK2+dVFUgIHN|RjEQAum5sXCjyaPsuQaEO_XYPq{f5D>#N?5?a%+3gI=f+ z>H4a4tnp`1e)7ON^Z+n|#>bDR3Z{Bu!=qoLE>&TSuI~w3Z2zgD&6zz@)r~~f5Gk!6 z7m6BX@xJfCxAc6llQEoBvg-mEj&O9rT4xj-Y*pKFyzgJDi&=`QCd|eqz8ufOaSe0M zF}5dl$7iEmx3c664>gwy)!`pAu=ISY01SWlkSu0qJF&lww$cBruM? zK=R26o!E8wD?a;lg@R14;w_-xxB~Kz@q{LJiol45dAGE!xuzQa<*&F-8~c+LS$FLs zPlMoreyL0%sDUQ>UY7?fa4qSyfA5>5uxFUUD)p4o>I_PP+cd{%i+68@?~Xc5dO^Q} z9$Qt|oFrLqckWfqhJs^`)nG|RnuZ#C+~3bYG4MfOyRnLn5zp^?;Lwv?r;rfR;Z&)) zpS|*KA;%KWhXgxIlKfNu(kza5a4SkXP3k!c+E@>a2LCd#TFloVt(&dSt@-vob@ENr z*Gucg@(g~*7*UfX7T(S@a7vLQqZ6z1Ajp-K{`dZ+6nma-go7q@1o*)6=sAt>NjlLN z$VRG7=j%{XD&Cn-)F~J9?uJC_b0Di@JV9G9xyg2#^EzUiz14jI9+O=Cb}doYo?(%C zV2Q?BegWwFIVrS!a= zrlqEusf@79<(L4GI|>mRtqrwoG@jVqGNw7-ix(K8S4RIyto?E&mvz1lJ4C#LuTx$9`XH|}Nn1i1unqUB|oR|NdVwl!Q8^vV8$H*D9iKr(KE`LS&B zSLCZE=g*FvgSsVPzetDy8I2zm#c}$o>wk9Z#20yi7|TwOblu6?vPacTO|LkCWt0wx z253~>j$knTcM?oNxKB{VHZ$Ba?_PHT{KT&in#28u#l&_JHLM?nas42<%(iBL_oV0P z7jYVLln{z1luL`P-tI)U6hdyLcgD!rs^6<$D&#Vhf=)`qC!ENUf-J(VU?W_=^FTwl z*EvKPqe?=G7>6L`I5k3t>8=>F2PswZdY#R`CV-WfgKVeWOnL!rtNNT~qI>aXUX)bZid^<(&co9?j^ZvC$O*ZZVC z3Zv{MGekge&TYZY;*ypoH`g=?)Zt_fV->w??y3L*Pn=V=`}MQMuO;Cb<<%ObAu;44 zI_Phxam__NLV7XNY-Nrt>zc9ZlA_Plo5_8RxD<{WQ6x=)6clg)%L z9ya6^E?S~gNfcZp1L*KO#@+umV*>Q23G`~)i%@7II3iwUqg4Ux_ut8aEI*yL8IScJ znw^6}homKLR8Ny#U0pe|Q$pZEn}f?n6;nJ#ixt^rRBP&-lP^Wn+6tkFK+Ipm4+53e z&IG3-%yYzwdvzd5V&ajT-UcAbCB=LN|6VJfB6Bx02B%AzPMy4{?zb10 z@U1%3W7RYEYMgLsQX7>QZc14}5xWW?&411A3C~*>CCu*$YQ+9lYpjE8t${%ys;7|3 zEe8Ptl@!-$fT%IYf5fK#6T`xc%OgO@tVIdm>v_g9pcSX)+h3kx{C%G8Mdp8ZTnr1g zljS1+n*@w!)Thjf+?d>ee$m7#0egXaCORZ?neId3^CW27w~`fZWZL4U^&sDZCwgtl zENszwaEP5C4f&(>&4PR7p-Eo?L-A0sP9+%cI!2n(+KM5u$ntFxy9gtWmv)}9wVuU6 ztp3gBU2@se+QmqTrN3$2xwN^}SGe0Bwo656Z zjipW6=gJ4(p8s#Q`1Oz&EK(2z{MjRfY)Ro%%K3hzCRCQKBxSKmFM{*SkdC;VFAgkEDuB;{$%QmH=$5}t^xyEQtev?>EsCnew$ z5dA!M@haD7;TC<*Fu^mpJ?5oK`7984g8Et~=znY}>r~iJFDm;9jZ&?gn?kJoFR_c@ z1)HauTEnbFcq#?1(i#XtYEO{)uosNJQv^ybq&-IuXb?JtaN$&b zPm_v*$_#+f!|uYh?G`yeV-8K0NZ7+6Qj%`;##He0(gfxv3}BDaaMcy81CDex#Pt+LARo`R3bzE4$wug=VW{ zD{eIEo9}jE(Z3%Db0!F0p%>`X*62~n=nV5Ci8#f02mr-+&k7)G;O??#2nC>F@e1AZ z@Yth^CUK2i$J7;CO&aV~%UL?^FSkT`0$$uGdDd%LE6>znOTxyLth0cfY9;v74zUyd)LTvIT~=YjUfr zo!cKP`$&Rn1mp#fr^oTf@5rw{M1cgLYg!yI(^&3~w*Uq`j+@&UTvu zuKr=9MM}Btya}q4R@Z)&Y&#!;pDexK(OzTOGSGNX{r;L~b!WY_#9;!T!uP*U;m@(N zOgkgaoolmCoLB*|>|nt8M;d%t#K92EOb#nk&|$>~iS120rbZt|5d;%7vl9vYgvk&` zbJ1RkRmZ5A;LwQ#NJaao$+L!X zGyRnTpFoLqI-~P+!E4s}CS!1hcg6kImW_9JrgvLzFb=<@E7Z`BY2n_s%3~jD7#;)F z2Q%oZKl*&3bJEi}4@SN&1v|3+RT_iK(H%6L!#jJ8GrV@|!}hzbI3)Ep1kb!a)4T1@ zOQ9_k7i@J~=!P>AJc}>Wt$G@ducrHfNwQ3C_P3c$%jMxjS(+APs!0rl)Aaue`tT_q zAAwD6UkI_@9&+4Gpcp$Nd9;t|e7fM`=q{m?-LWPG9^STaE>mdr$!nG zKH0_0rSgY#D5&J&4c&1ed2kGp;Bg~~w<-iEAwE$p-z2kmd7692$ebPS+PPUH#!ghX ze=`LN98w!ag5TcI0H=Wg-dP1^?P_U^(==hv>Z{`ze?V_3hfOn%F)o%t7Qi+Bbg_R%~ zpFTz4k1q5X2mlbIY`LtlO$6uX?0|E#wJLGa+TlUtem4NX*hajn6mF4#!y|tDp3TP#Uh@ zH7l}F^kAkobP>KP6}u4W_Ouzw4FRI5B8i@w27+U-6;n_CqtJ@#LkVjk#mTh;MUq;9 zSrC!*wYAeh<^(TKlVka-nRm#2I}r?BtIJad(GWkuL^bq9K=-&a@%>-%3c_}E$7 zWF%yWVL<#zHV4k`Y>pqQVdN7HzO#QQ9HSw(KE0gB4}^;m+F2|FQ7@smr)}Dd8r%)o zOc}R*sT;I>f452*Cnofj?__-C_}E;QYVGVus{DG~a;K-W7Atg^F43*Ox>-+75G@$k zPBpb|&HIW}ormamCeF8nEdVF1VvC#G22+b{9j>YZnnJyO*9(P%>&3^2Xpj1dN@Gdk z^8{j@?sSL)22GXIg7EPS?`&Z}FF>`};~qa;MH7F-MH$d|%k#Q%Ttl~rwMKGLHY-b_ z(g!hUQ1sT8D18jwW2U$I&M$)3LbzAFdC)vQHGuWaa)!>aoi#28_ zyE^1^$ihoFY_zB157()a9&1*YHmWWvlH+x6*I^Iti2A~(Wm)VPyuk)(f8}2$hiL17 zi}f*RV9ckO;fbjZ3ZiM?Q_K7%T^077ey*W@s~4kU84N~S6&cST)+vo#K)0);?bE~M zG0M?zb*5oMDNMc(4>RQp=R8Qq3bR4kxlj%BF((C2+ZTmiF@&Q|E6B9>J%Rp^Z4Ws4 zBrd+exDx%7;2*rXj_M&$#Q=(vGhOrBe5-qG$eEZs{^mDm3f|#$?3mNv@g`?Wa9bo9 zmra0vw3!T#A@F0B*SjoOz zyJe!O;B4>x8n(gNlN8H?*}u#7v=ON@ye4S}8J&;h%_XJRjmX%Rwz_svXn&}XXUpxt zkW#S>jS*KBxIe00nKXIhnFMK%JiS`0e$iJIYpn7<~I9(i=vhww?&mb!iOdmYEe?Cu)T&MmU!AWv>Gc!hd zhO%Wli9Z`|`F5q}p82f@n*4U>DjGn_OHuH%&!kY zm9UDgO(fod+4ql>?P49q24(iI3~&ZrT8s~BSgJNEpo3ZK+on`6^)~nf=8>FjqTSJ&?-|=!2al1Br9pcw8 z1#cFqt!Fz<28N(Y3-?&~Dq{)(E&Q->L2`vvMG4tQHxx2VUaY%YV3gKnr2U{$qXy>KRX_!6cAfT$&yn|RpBV&; zzj-!xamqUz@nj}lz}d|G)!o!QNit$uHc9^R#8++}^p{>fc>YEw!%~=0`b^jXz0YxJ z*YNesjH*2pE=lMq-hRPxFbtllF8um+Q#tp~lX6ec7HWVT0Fs&!ZZh+>GE`MJPNLV0 z5i+yw@zczmy?NbN++wfXZy5}1b7 zH6I`dOsKQuKpS)-D!$m6&{JQBb80>_iTd>>M*GpNCzw*`sh<{sA3_-AYwN(7%$EiW z0LMmCmp*}-MRYfpO;f7ZqETuv%KS`MQE{M}NO>-a8)iQa9VDs<$w|y1&o@j<&2Ze3 z<+GkCx;7I_6&SBbX6337QotC}&J=1Dib+*sdC!UqOI-cfVCgw++$`kodB6#QsmVpd z^fTu|(yek6H!+e+Db%thj-39$v=NkqF|j&zVMAE@@s6Z z&c9!FW&EE)2h>4YkLn2+S4Y65V92+fGK57r<}Y?POX;lN=i?{X?yGcjdSBRTzoQ^X z`1z@@OH)&mF38Kk<11|TGqmhx&p7h~w?Oz3x*va(cnM*kZ=n@I;t6`?>&CT#Jj+ba zw;O3irGL)a9@H5W^WX*xTcA!Zj)`+R>7|2d))Ew?9my#6!V|VHDqP#VS9`9nUL#<~ zYK;8;+2Hw>5q*sEWsqTJPB(#l=D+^1EC3tnGArf@CT^tB5e~)VYa0K9H;fi&Xq}@y zD;bogZg8Y$k}FxJGfR_IwG~qAQr2P{*I_pH{v2lLZW+3a-(e=!oMC)LS0D=|rY#t+ zuugWLzTx3A_|@;TH96mG7^At$Ia+M&BsgBCWZIiODIr8yK>y%mt+v>Zjcv5dU|sZ#bx6DWK=&LAPR2&31eT7TJF$B??h1V- zMC-_G4HJPsUPUv^6o!6HKEKvT0p4^)?D0AV?cD{-q-plk*U9xp?N0$=j~$U|HGwR< zn{s2?`>=KV`-%ihFSv^tZ%fZxCjTreM;t{6o`#!(M2jgMwW#UXkUW zkFl;}sk8`N;);~wyRi@5rezQnHJo)PuPacmF)`6ls(@K-^=}$K{2?8-AI}i_4DWX| zi`ke;izaJxid3Odd<$Bxb@m|TTSK2!c(k%kLapZEx4;Pk&zFA*j5r@@CsKdXQ2wr~ zXISI6E|0BZNqK^;@crI?N(n=K^*ERA_zycD!G=;=c;vMK_NVxa!`#@kY zgI9fzqy`Z|CX7~EZWv3tpRr$szYp4 znfPW2EIqUr1}2RdwW)V-Y(~!u-AZ|KYuS~iI0=<_9CH^`^<39BVERe?0jw-80lh#6 zRmdtIxE+LFM|w=!QMu-eK`u(8&@Ni`iee#uLpvxn@*G535@#3>q#^TI?ob$%O9=a) zmP*v=S7F{GtPb$L{G2~n%RH*+5a($+GwIR&bDRI1cC>~_5kNFV#@BC_G5zU3e{twH zC8~!V|EXb6yn_yZ>nniwn0~BqtqpEFQ{jHZ7)vfKvtydb30EQe{h>F?RN&D%-5&or zC>Y6B|4mpXwV4Ui=RIUZwjJDM#>U2%)t*c>v+GsopiF^QisN>RfUNrNI~m*pRQ2VQ za8=lEZd8X%;Ptcqbn<5cLBgi?AvoWv4v->b6ZehuzE?iUL`S5J_1D5k?c@;vOpmqG zg2^C(P~y0lr_^o_aM&}3(KJpwtYD?*8<#kYf^dl?czRP4Bh8li`ig!dW?wn z-+&jgYX#X343z-k9`qN-%_pX&rl^i0zNGsLNDPfJ^Y}ZneaaleQ#lj;qI0^il&X-% ztLSRpdbJV>7-aCI@)8HY_N)Wu=`!y&crSB&otWL|%Z}6fsgJsUCGHX0`$x9c+)T^V zF(;iG&@y~6=E0QzpF><-02Bz}7#V`pI&ZA8RGgPS(+YH8E%aeHxBUA-bVwRlEueYE z=bbP61g+wPB436t&eGHR)q};&`NR z0qV21?UAZhU;<$KSENretqg`4_0>RAG83nsFABVoL}t?aJw<8-ea0R#zYm=7rTIiG zvBgSzJh(%>;AT4~*8b3$fOlH}9Fn%quMkARo+me6yEN^E`h_ZN(-7tE$t^%u{q^*B z$#R>qS^=(<_}%hnL8w#4M8K)gMyiQA#@rP%6Wfyyh;Y?E;byFIu@ll=bPpM^6Va?q zPvrI!kfbisbO=FEZXNLW8Q)-0L>OW!oIiR>1+C1~^0$@!CH%5R=k;)ulNfhF85Ul>WIduOc5qp;CakGFDOL@CR~)HMpz;BuMi zrD*19otnLF?4ABtXEzg0#;c>eS1+UN4v%Y&O)xK$n@If0Sr29yVQ{{f_^Z?iY4-hY zlFtd|&)^*@v^^vV2b@*x?~+H)PP5z>JUQpVVOO0HNpwp-55W{)_M0uedKjV zdusY(og7_0E7N*lA9RC^P%KNLY$0b_RTw;c0@1)T_Tkd$tR*%5VB% zM{S`YBut1F+=vA(@zr09(4U6Y&mzE^&aVWVe(pHG&L$=d%*{8P4L*j(_K=H9zjE3q*ZoYCVp+aMlo)9IY5YH-=zm&L^#g<3 zL(P>DIj$~urU}%spU%|UgEkxGs1nS8Gr5XspJw)?U#QF-hbJm2Q*$U=cGt?c;#G#w z`+REmnf?>u`DBfYVykbkQ+C!NUq^wCb$TAf$n{>at@t(mMb7)kNmzJ`F!y*wrJ0+j z^-T74Ls^^X6nj*@JZCw4K7-IR+RYoUzn*iS=yQLz*kTRKrXE3r_Gh>hu*)(Ad1k=}mRp1H_GG2UOSS@fU3Vv{Ck0pR#J-QKtBuHn{W-cnp!;wB)@p;BT(5V%^I z*R)e5I7z)xvsdn`L>`Q&LX1UL#u5>2g-&{*P)8qA?fRamNhP6un$0dwZf2na&i|gZ zj{23t>poe~bd|ZSugmRiqI2xwM3A7{Cz7On^1sqKdOAK;u-pPlF} zY)d`{Gb>-hSZCMkt_n7i7=)N-?QWHaR^?4RGiJskOxZpKtU89wZkdoU-DWq1x~@iTpJ@M3A_SK@>`*%%Ge@WL7VR)$Hqg<-rzvqUua zY>K-|9GigQVKDX*2QqH^J(e7l zAG@S=?;d0uFZj(zX=W&l0;^I9bT%zrEM<*sBdhythoYjzHG;Sz-ip}2!9AHzz+Z<( zWKJjwI{O$=J19ruX3G>kYexbi3xMp8vNzjoojwwNp9j7p^A&)6Bk%_(@AQ~o_0k8(86YX5%%857ueWueiaq=h_qi$@J~T)1eR2qrW+qDf}|ZZ`PT1 zxC;G5`mf`+Cpy-}9@&4~bwKVV<^}Gpr&&UF*GMYjPkZJ*Hwix;6+ZN{n^k}Iu+ZyY zyQ|X4Y?z%rbO{5B>`E-Odhv$>->*nCugr7#SZnRt&S&!-bM|%?2ern4i5ibH-BvEaJ9Z3BCF`xfgYS4 z*tmJr!^kQ^*B@X?vG==5hiw+2yBzjV^2Gas9*|lf4Mi7<>_D~;*8-M1Rc(4J_z_G4 zG9Fz(yg>wzo`GnjVs+?Di=i3g4i~Meu2WY8esK)FzE3v|e&A4YDJhwd8{R%ZYx`~& zZCEPQPi$I>-fhUP)E7B-rsliao55szD%UdN=(2whl^bxSBcS@2hj?$C_Ai(K^FK6{ zwx=m0dQTdZ10j4uQcfte)sX%(RaggdVPO{O#@TAmC;LysM7iCT1@0&)@0F8h zZgyQ1m@{&ubI>HAz_52k`IZVFe17?K|I~=HR7^aYjw8^^HBm@b=2au~%#nZ?Qr%lfJ|P8$N~>o*`sDc)cC$)ohtQNOpoIB;|DUg}-hLe``Ro2+o35?bO1LDDk73be z{QQ6J2MX)=ZSI}e)<%vT>{h_6K*h)>HSXG?HB^_$@0iQKSJ}~5{Hqk~zu(qj($DFw z)yjdvOidps=X!yII-#P>yOgcDV$xu2Vq*cLNk-flNup^L(#7;Do+wT2Ag*O>?#}fF@*Lg4e!OiUM5jssrp6em^uMrGMW;Q%jM40 zT2TwSAC%sVbP&gnYnp-vy!PF(;pedJ(>CmZlZVcxHzV#cCoi$Q(lrIZD|@Z<)p%2j^jgMhL}IjhN4APyOS^eD#D_7;Rvq%uDyGu-oy2FY-BI3u zm%_mIe>lzRdP`zQ0}8~v5Zd=B6chmSa}0gFg$l5U=RU^0XI1r;PGAeU0>?)#{_!P` zy1BKDO((0aExonP(Vpbjh9e#7XGRCA>ja5^9i5Vi*+R_?%|EQ_Pg^;9SYWD(%vC}* zY@rHXWRMQ7jw6&aezcK!#$aYPt}ODzoDgpu+VArSunq?SiktN{YwtC~%W=g6m#x@S z6c)_Utp{RZRZb7^jv0FvGEA5IdLN64O-b&-;O6a*UlhQwgYJAliugIqy|UiSeCnck zS6XqlzPRGV4#?SyBg5#)@4ibsQu+dU%nBIP;>@?W6M_QCj?oGTc?c>XClNkvZvx{` z)lYixq=9KfqbHWtSk0^(SNM}amPtG?6tpBolhmrw>a_hm!P{538H!A zepp8cfnAo`#S=vtdubfnL>?+2z?|2W_Vh6(Rq{3+x_9ONB%*kE zrg(}#V54_1o7wW#Dd))YmE`#b4rZXBD!j|qn1j4$#a3j}EPlN$esl`gE5ElKRF^88 z^LW|jP43q?wS4GL_@Cd6QOypRY!>Yr!UvQEWYBx(m8f#*KQZhAd?!K6UUlR*HaM^qs#&cyhrwkCR=x9ty)5{r=Q9>yT=oU}9X__O5g)$*;|W^}6B zy~t!5Fzlp5c?U&)j4uA{k)e4!f%LZcRWFX(rIO3BVb&3w`wzNkdugW}W5Zy;MQ%Px z&1CI)^?VK(PzcYZ>IwCQHbq~41&<X{nJ)w`!9d zX zKf%&CO-T&Z6hYhlV!Uwf{Mgu$o0y~>J)1U7J7?hK|DEakzV%L^2MBIG4ojH?wO+){8;~_D=(wupXbh$mG*`EI zpMT`Ioia7&%i@@hdt5+i^It_jo@QwXt04E|KcA@!7Dtyu{NSD8_%_lRR;v#L;_}De zdZjQ$)ZJD+V|qxPza{h9r508IF+D(>Lo%~(XKX6)No*?v(#x?>#J+)V^14g3u~mC{B|*s40kVu$#P#I$Ehy{D}U$f@rMSlCFdR|gsZeCl~z_L zFmc4@iyA(G5uQbp7sv(ZHEyPuUpU^<>=k1DJO)tzi{nD=N*HwYsf*+2_S? zP`(!zo;~`J{5bHT%0jXeI@>6x(4YZL)%H)!@4J-n@j5fOVzl&I> z$8!b^?;B=zv_LF|d}yopo-=T9J!r9Fo?d$-0YmmKvi<~a&p~}1{~d~M-!^zZa&29= zf8~Ojw?vc?X-(|n8IlyG@+13uo7u87TVmIq9&%hM0yY96fZv|FsfL-cbSe4X78i|- z1LxMYpRT@7)m3`}L+-(DMb{U)tc2b1a!X~NAI@3%6B!6{RPs2fuB`w9(*-}CD>yzO ztUlgDAL$ZVfxAC!lj89z)b@=j2pR-yO((WcU^?d+1*T*|B0R0s?9l!x&A1Nk@K5|(63X%zXgk4@<*6eXMS5?Jx#DNM;#wvQN{&D3r}fibrVob#geH1l_s*cG*`kiT%ex#9SkmrfX{jzz2!qNj|x zj%V+0BF_bDf5c;9PlJmR_hB`xvnR>0{Kl!u^WWN*h4Vd_!HP%iO(R}Uuxe8!4y3+; zkH&zzpK-$H`j=LXLyi_;6Qo$U{=;Lwxu5ymTx1)8Kb+1H`0dq%eY~O>J5EP48Zk{! zp0Vu&xHc#YaIf#2188LABCxEkz$ML->5IT}w4&^PqgKjEb+6D15bJs_+aod)32;xn zbGb3dAf@*NzY6h(4PR8Z^W910u>NsU%++?4rPU_hlgqa{kso}qPE%^A?(`r%xav>Q z!7VKv9RM)&&v&)AxRRT$Lo&^D#FPUGW_RwMr;4TtuX2dR z^<%p8n-zQ<{p;Vhobt0pF@?Mj2 z6?A|kbm3U;dKEhjnCDCtV(`m88tKeL`q)4N75#LZulKdE+#P+?Bzx`|z-*1Z*uos! zLt!$QS65SugbH*-WR2k5i!MNxqfk_L$8+pRj>TH+-!#{DVG4}x$2OG8>XYl}(JCZG zJq|5+K6&>s6!6Esx{53V~PI8Di_vBm(>S_Q6cwIL!UoQ0eaEL#vN^+~C^D*eGSeSEl_e>r z8>`Gj+x8?$l)Y)l>|d;irr$yh+E=VUKI5y)r6+3#4s2F?{ZLE_*3F+lpM(npUSyIv z-}OyRwPJEE%r`;P0VLkLYjQJ9^rlH13(5JzR+|Nvn`f)GqcbPVwVRCbKhQaZ zua|KY$atP??g^pE?v3DDexnE@%0pS6R!+*v6*Xxa);>>rw;SU-eQ%DuJA%E6%q3QS zG6jha!X4U+A)z}UMH&5}wz0?6ux&R|KX4NtMdsdzwx?{8PqE?YV?fIP6NOd47B9m2 z{(~%dhN^hxvR&9nHP3_Y4#qybqtk7|<(wY#h{&a%C5ea!0iYCcI=*zCD*S|MyxA#H zH8lJ@`3YmbVT98OAa$Y+biut?zA9B6&-^yqMuAbD@Yg@XW>1u~tQU%6s8@OI(WeL5 z;DvvBx-rnP(iK@{v9ANN-I6i4U#%QVuVQ{P8?hRqAe)H!rjT5Bd>9+WiI!rQHfbDj zs+huo``iYDq;AS1J8Jqn6eM!%+Y4$t~e!veIOGUb`# zA+=@SHDtdEgukmM8kl*-y8}yanX^aRj}7f`-;N~rl&~$tT#Z6vs;c~RH!S}~yI0Vi z&&D!-+EAy7Mn$6n*;Lc3gnCVqN<{`Jvm`{wED_l!P= z1&Nki%eIAqV*0*`Jn*2vBL<5tbFjYKOweYs{D&)L(*eygk65$C{dk4no5_1p1CM2- zssz0%li;7X=eu;0>+sv^w(S;ie8k8_Vb{-G7nD@}CD&duvCH{K%0b{4zB>P0-aa}c z967Yrk78$5SJrYTCkya3Y1Ve$fKFKV&AOD_jsEkAO;}O6{}NJ z`645?Ha?X~Z$;vH={_@;7j^_WL)-Oh5?3CY7FTxbT=R3^$j9wDv&Zz`)z*G9;~l&! zjb+gpH>?+Qs^;4tsArhm5!lV^df4N2^OsX2VBdVqbK4J!#GF@@k%R9F|NBAgh-7Vk zCoQ)y+-DQX9nyF{p?iG0_-HVZu8_Jo28LOr|D_Mo%Pq$Z|JVhM^KV09n>^w&s-Uju zHaP)^yg$Ho<8XgI33{94ZuV{y6^3jZlP!mB-bqazbt0Z1$6$Rh296gyxS1zU2NOKE zQu7dW5?YJ%zKK}-*WE9h?v|pYsXXqZ9#_~d=VNwKiPts>!*(b7&}~#dYKPz4Aa|Om zRwb^XaF!9MG1S!E$`$m^IIMoy;Quunq4j&pF?8Z=z*k9@*&A)J>M!%qS64mz7qxiI zt*FRB^vsNJW2!mv@RO*Fqg9y+dOABWx;({1P`bKgMp&H}$4#o8vkBs7Lv$2)3tkiV zpg&&YRj}!Vstel>61qtcr)&oHpKVkk@)ORHH-t+KO5qWSyvt?g3!8C3E|Dc*0N*ddbpCHq zlfUp-13At~cHX1Jk#ainBTr9KEHh)zj6=ynh`22Nx)bH!O7e8~USX`Q1Hl z)4o8T_^6)UTuglK>Wa$4oqVbOuCxDB;_q|%vfm!3Mn4)9mu>~)u#+2_zL!zZiRpS; z7?F_&HP7f^+i6zl1S6e7|LnOha`fzd^tm12TtmFO8Y-z+DcH=2@ig>d=n#53v9K@-X;5cGJ#%y^)8?NzHs7bGh3{}YkQQW*=HV*cg+g^%IO4%WXyqsVDnJdF(A{@r>*Qu^cJ(?af#_HW~1WQvFJG2P8puTPgb?xiKs zuWm{_lg}4sj~W?nCYC0lH|U~|KABc|^nKC4D^Dcv_I~TDrV_Fjyf}7e+2n>!QU|_9 zdfza+Fym<7O3wDe$yp^mDX8ri(yNIQM4?OO--QN9Q=i43N6*ypDUpw2T7Dz>5{bEh z1QqfkwHI@v(ED6(sW?S+i^d?UIvkUCN&596SYQO|%39a$9(X;;JpY0HvARHanqs~% zzhD5Wm``%rFI7+UTG!xx`yJP!y2z`MyeC|kSQXtB=K@I&FhpK4R7m~iM-7aK7P zIfK0D(eGzb1Tpcnia1O#kZXkv@7j1AD^$U1(vX%}b z{JSaQp)F8Ip>pRD1}YJ^!S2d$`O|REZAKo}ix&Ay$x=DAv-pRznxU0-|JK0jY7=JN z>L;#s;~zHkrpy&53Pv@;-%p)&6#XFQ^-A8`2=F9&otI==sd1C%8L5HHr9th+-Ks1~ zyqh1~FZ(Bx>v=G7<=yO?u(!L|FG3wVq8f|_W?nF?wt;ohno_C8mR@y?_se(d!ylSM6aI~4(@KwH6UgJkt(!e=zo|B_|7gSr z*|K0Ph3^?hrr*wIdM1{x8`s^XV=q;0ZH9F!1xDQv-+qt1t%CqoC$$a!(feINXP?97 z-Ggo?u)m0ng7v0$K^`$DE-qbDcdiPlGQz(h*fhS&cG}zj+OF|RtPsunjH&&Ac5kEv zwWIIFFq8&U(TC5`n+$-VEU?Nd4_=8 z81nCf6NuZOl8*+V@gpf7tp;cNvxFemP*O=LI%AeJBEB~L=YhCK4dEnF!C*GM{O$0s zuX3EOJL(**emg}4d+D^vJ)F(YKPDVt1Xlsk+0wS^d+>c^CO$zS7puG!yoyF>j@qHitW`LG^NJty@`=VGgi-? z+NuK+xCVY^Y<}&3xO#UuL`2;x#`N8GyWb9W|3*y?@u|d~US`aDOrn4+a{i~m0*da{ z|GVPB-)13NyjQ!syN+G>noI2{6bZttxNj#*S;FIVC82)z4&a)-x|J7`cxF@48UiNu zgdq3gYtL$|u#D;q#?TjPrRMJFhQBeFv(wQ)bN*=z{C3%t&lKHZBEvxe<|r^OeWY-V@*xrTj-uH?FEC| z+sw|XllN%GWf{wn=iF48G6(S=Rc0;2&x0==OUq)GMt|(8rmyx?R!g>6%&H|)d>u-+ zY17gTb>K#>vQ7Z`tMObP`veWO3s{)!?K1dbrM2exRwRMt1<*2<@@1D7LZ6Sz^$b-#iCKUL(O~CH%W^H>~aDS7&>%YiL&L!M!J?UfO#4PXVmq*%QvWvjXSO?_286*BblS+>ri?iW$)!YP*&s)fT(KM(XZP3skB5(P3uoJ- zzeKwJKdRn3DysH-A2ujKKwtosk_HLs4h4p8l1@>yBPNQl{#fOUHa;N z0^Pfk5=T}(-kzsT7G0|~OOAHJ=acR1PvEF}Jr}76t4~Xs7xS_-3f{jDme&0ybwc_S z12I8qjv1fU`|C7JlPH|_zzs?k7mo6^)5-UG&-)nhu`5iZ`yiD<&JKG-s?(duSkLZ0 zQE6En%Thu9A#hw}3IA>|`I387;1f?@V5Qqk>aBv8dxLGs_27qvta$TqQzs^pPbC)) zH~fr(_H1r*(RG2oANVVloMy)poJ_X3JoNHMVpH}_d*+}1bxrQJib97H*Pu=6 z0YoqRjp`Q=bgOzXPrI854Fkgafq>Hn+)BtTlSsZtL`1C4Tqha$Gj`DQ7Q7-Tdvp9W z8x!=UJgzcEaS2IDD_~j;1?C6W+4-BDAy#BX-LPy1Xptftblxq$!XC#h`i|KCN8kG( zgt-Hiv~-r@Eu`Y;=tzRgjhT8p=gxQEh&ZI%{oqJSl6a$GQcS!O9yck@3OL9XEN#gx zFx?P63lJS@`6C)7EOFM?gAJokCsQI_>Nu`^w+fQFLaYi?TB}53NYq#Z(-#)rmEGO{ z1r#e0z{Xv6ee;J&mhH&O(2C-~5Hb@&!u*rsrPGoxJjC4Ja2}kt#%CkAHlMI#nGEhn zIqY-KXit{t!~#O26UvP~z$kJnziLmW**eUfO_&i2(RqI4c*QCasUsrE%>JX%u!UVw z%lkWxa9M%CEI}*XroLmWuzN3PCnbWvGkyQ|yX8#Ps4_mgW3@J?!*u7sd+xDdIr=?v z;`Oo;F|G%}gBObfZl{{fwfN#bkZhW|J%dQ{IxKMUck}MpROHeHO3YoRukcU7P-*Qs zN?3w4#R?1djz13!C%G%?uLOJ&6-;){oKY*D5(^mI(9MrAP2s9~Vj@zt%cHt{Vj-f? zEF#+PeDixLGl<<~nL#VQO1Mi8s*(VkPG^%*sbqQ(f2}9wNnP-_a+TFl1*sbPTe5O; zPC(2!+prf2-Z+|G%m_;v$+(}559^xbN-$8eeE$s!s2W`?*V5ZBY+o4c#FJVsIf0d8 zg=cWFOaRX~%q`INd?FQhdV5u@%00w3b^;H1Mz z_l$Y!v+d>Re;`LsL|b-WSWvYiQcDoGw!q5h*2ZZ#ouHeSeB&&%@S@sut-|ubC5|Z4 zUP}bRQT1wI1a{W@uJ;JZ$Mqge-$;hVL1_5R>4aE)6*&x;knoIM?bHLr%mxDqq`}7e z>(cR+nVn2wxGu3hx^4oEo<7ZxRws7Z6XJsncz4c)p(1U5D6OJ)z7A<&C)kuS-uiNG zwe+NI{mpeYHrAs}N)BAXPXS4rqaqyuXT2Re?o0WHod?H3lE%tTt*arOl-C|(+PW7V zw+AC$OphWC)2C}!(VLUKe%n9(*@n^jw(YRlQpTTXOGk>=mS$k<>lfMM{;iwxCv|`n zz`ge;T>x=O50kfITPvp8P^d#M;1`jfDWJC(GAA8QWg`uFb)19zShn26`ks`93Tbp6 z=S=?qDej4hiOK?~k(8Lx2?#vv9ZcbzeH1eT>!R=V{;)4w2Pri|z?*B`ZW+JY%d+Kt7zpvNgJAaP z-mfb7fCH6``Ditff-MEH-P$)NFB*FA_WIH65B9v5{TuNf->Ol1b3#mcEd6E|igjx+ zKT4yBWZ|+V=@d(c^c3~%-6^C0qJDDUzp^oc7 z4rgj5ANOKdOq?P3>-O`6vzK9w^B-f`G1%|`D}nyU>F ztf|jZfUd{H)FcE6qI`x*h2=2FCWTrIv%VFD8y#K(e2h4_#Y`QG_4uOhYu(;r!Z-tHMLfoecyZm)hM;nDVh@#!5_R9(#O3f=f(M1fa}lc z1S#b+_ShBv{7@wR6Il1v*u&6{l8gDme-#yf`me_zunD$z_IAMNaE7Y0{oQ>*E=QcX z^C3Mobx5~1hqX)2fIeRC1mzS#IsiIwgbrRh<;}#MYV&9&`5}Aj<)lk6*X|w(_~W8A zT1z|A@!Z8_6drTz4RS@z?9-=^Y2cIZSt?3witOy$YTXqiv|B5F!NdfL)JtY^2?Wm@ z3O2rSAKOKHHgGF{&o4qCXJnamB^5DtEF{mFmJU6aPCXw*Lc6`=s^eL$vb*K+!}GD0 z9Pi_kh={i>KCgeoyT$NAih3<~B1&%3RJX;On}|g_*lYl1_a@s$d%<;7Yf*%oi>rOZ zt$6XA|@LAbkIq$Af>kWIBvZA5E2hJNiY=?d7v`gWlf8U{oS+o3Q zZA?<=-rW{rxZMum1cZSDDo6bO#>>vndo`_vxvn0K#cX}?_$)KPTWx0ZPrUKMdbYAe z#jjMG(vRFIjLNF3xys$#=ou8Qvn0dFpsNlfxC?68M@aul425*!DgOLZBe_x8vZBsY z!PyA;F&CfCLq=IR`~=942)|tcIas;eY|LdSnx~NNIbK-LGD!oGr40k0Gqb*POi!+6 zn>Q^H%kRenFqTSYQ+et0MJX(COfMY*kj=Yx`ZHyYdXy~3EvlOiBm6adaJ*La4aDrd z#cn%!y<5)$pGR9pxr>%a;Cd63E3@5Wf^zQkOf3EO#CGm{VJf+<5;JGBHml6a?swiV z>|O`D=$_9Dx*i-a9V(3*7&aLB4M>tLMA@G zcUMubr(2XL{p+QGyBE68%2&p`3Z0+$o^!i$02#N!JzMZ`KsYyGEhr;50suQ;%^=>i zaz1lP4+{&6-TP!yk)S8)Nf2oJ5LIdrGo8)24jR<&C#M)z1(JvM3(a0>)yh5q{f08+ zPI~~3!U~wUw}S#PT1`p#%{`^!H0QM$eMi4;Ko)w{#gADSa4}$Ds*l8^26upvm2jtX zUtWsz{4BVv0*kf&Wu_7sV~Spv|E6;osG;w~Hga0pc5jksw{gIW?H~=JRc?HwMDr*- z_@n$`hm=~1S`wdI9ha*lsZreVN;i4WO86OJ5FvC+dldiRcT4E9$9T_D@h|M|u*{HU zXF;oB!k-ht2jAZh9260+FQ1qBhu&U!K7o~#ac&Sb9jaH}j%L<-ACdF9pZhZ~4T|@t z=k0Qq^E>fxs9nu5-#+2p&<-ackSn9xFcKVC;Mq~aj}b0-ux%Tpx7#GX((jJaYWF-WZlKZ34!Huu=-x^U}F1u zu(6X4${fcf;l@%kXlA+NJ$n6ve4cF{r#g6&Up3o4h^|~K#48%?ca=>SaM#lAPtol6 zb#ralg3qAW4Mb;#@bj5^zR>mmEj@R3)8cdp4xHa%tqdEx52%>suz zrP{v*3xnM|6P7LCscDt$g@g4p2P#oeoA>v{)8~Et+RqBMp3bIo$0~qKDRp|aIWj;@ za3rl6Pf}@h{;Idz&DD9G3r}b+{j7t7<(7<*y_)im?crVU(kjC^N~Cn|$3FRmvHx6I z;*$^Ua8rpRN^@a}?Nii_v-T%NPEn8$*}AA9j?gpGHqQ2WIl3Vn7v83e*5?tGb|;L3 z-4!NiE4aOWxNXAL4{^vR32q_+zaRVHac>MKy0H)HtA~rWHr*lqvv)uJ&-bR^L!y7) z({Hf$pvy5G4260Zmtg16k&5%dUIuPt5@o0TXhDN5!G8UU-YJavrhfwfkCmF?H#9e{ ziHPX<^@h2H{vKO?(+H|hQ}3Ibbs?xik6*_{cD_IFm{2=wH&C3zog(KZikCX;Y=;Z| zZqaj3yaVcY))6EyFk83ajWuTZdime`oW0i)3d%Vfe2-R}U1{a03;<>#9T)E*!G%a* zeLP(N3P%>b?QOj7Ze;I|^bxT>l-4LldVy)awvQf=XEmICvgGd(Y}hEA<0uuWp&e_F zQ#vJ$7tdUosp zy?;8ra~zCf=3Y{6nDO&EkQT?{ENB}4X&Ri&kE;%Q_`GR)dG$k348MgdDSGa&29Vv8tu@1460&q8OyaT>-q+q zJku34D=zN*T}18PX=Q@G{5HpIQ*BYo$UY|Bpgz=&fxI^t(21*j@9XQ8qbd0{-U~>r zd0f|4^@z8n1*5LHW;7UDk3g|^VE5v^^`Nx(b-BCm?SZ#m_N5@a?!>}R+0jm#AlW^o z>@6M5kjAUnk=Vdy(u7r%a+?t@0kB=AA}+6KQsGraL@wbk?4Lf6z~~;@-qoFC~IQzCdEJ*T(73X~wlL;xBsr=d-Y5A0@TpT=J`FALS|mT_n@0#8%%ncmOzP?5Z_;rq(5UsLv2MGOfh5z||EJJY6ZiT*BO0ggLQ;{TyiGKeb7S7Xm$2fD`Hiig7sofX@r5S=L z3QjZ+iaK0!zO_5oYo-M92IuMJWm`TD*W2HPo!0*}8TNnvGi{^%1nu;@c&t!k(wj(W zuxd*O0SM1B3#Ok$2L2ZXUH`_hwZQ=5hC;FSDh{{Mgn3yg<`;srSi}U zyg&}!tNA0ixgTEb1Zp1$(Ge_U=&yC|8)RCQ>lmfHFVW?H9Zvs2mZnP~E3Nc$?yX>o zL5Dzo)`cDA^X8CQ&i`fd;7Dp+V)mh=p--)O&eNLPE6tyP5i{Nu?u(F0h zY^o#1DJ22!MBZeuw|%D@-NM^OG=jlex;euMb~oDmUWF&(!dFg#j2530xdu}2?M#}l z%J_YHkrMP~M0R$iU?atF!a|QzBfJVXp2v)%^ozr3)&lQrs+W_!Vw-!wP+(t@AFO&l z^El2`bA7h{wr~WcTVJP|Mg~vt$?E7oNQFW6Q&6VIW?#rcVEvEazfaZ=V{=}W)-pIs zYP&AT$TQ^tv11jPC*Cdfpqh3>dPoxjFfC1rg^sWw@+eY{wY%;oYwzN#o3TgM?ORRWIu@5X}qa7%w&6>q_&}?kFA}TKEx0m}6$J zsYwtaVzDBteM;69_>rt&jWc$ScK?Kl5vz|gK)tQ7>ssc8y1R)UB6g6UB$>j4_EFu0 zSnXkh6@|61s&Ox42DSM%&Cs{Qf;h)n_4MjLt}b}LB;GA6YKeH7s>P16#Q2qGuVwF z$6tT>A!Ps_Tr{}7BtAMm-cyAl4lSd*^O5i}G=<~zF@%UH+o4TAEVRS(I=okfIA*Z} z;jq*SHMqB*{QyFxHG3VIR@c~za_Q;zqZ{R>CDk);k85CvZs{&4-xAVTxP{|sLtqY? zMH!|k!5Gnn_$zS^wGfPWcb~qx%I>UU7I|$KYP#VHz87^Fee4RV>&$FFyH*OxHzb(} z$E_`n29EAe*Oa56>c42k3ORrdp>+{B6_FQ3U`<0pArO=E4prZBBkalG?WOa}MQ$ke zA)k=>&avksUhyt98BZ`%x>>S%tg9UC*kRy@(C*MA=9c$zV!g zDQLoq|5uUqpDlrS=5MQg@fF^u)=`hy?>V$y(1DuFF6nuHOh}{in*{rZ^R;yGGWAbc zo~cRa$9-1nxf^hYwGE5444u4;SicOnG`lz7@4&O!kv*A1qn*X74kg~4?E*t=dH?NJ z=SJw1-HgwiI!PNMRS4#zW=`7YlHxD_)129g{wA4kmiJ5n3)+_WtFGse>Q3D(RxHz< z*pbz%-P+w*vrCg1vl&iD(qX~xA|(Qob3?ugj_C7z_U&xfb{$Kemv1|re(7JCm>PZI zAMko~a8)6v!r1TPtN@Q3N81agz#$D>LB~lvy4!HU_x1ecuC8X_7r*z0VzDB8pPO-U z*eKWB!(aAwGN*oZtNwRpBCmV!vtXbKNOy&PF9x~GBA!adl1C$|EFu~B1OE5|H&02> z9GFUl$UwJpr=4kZza+GvxmL%V8Y+bWCe99V?o&R3S7hPYDzvNc7UY zyYRx&G?usa8dr?a!T_hIIS0wZrCKB__!yZ^T4(fbE{MXAv${y08eDA zkx#MO;d8I4ooqIJs`$b9c;wn^#he_z5M|MCnx$|uzJ01m{DAW3M(6GGDI@4-a%k%v ze-2lTC{|V&kNx6SmDWLqkPY*_*o$hnQZruO#O1qfzK~ zsugwysB`{%cIcLBGoWH(gowGz{#`6&A1%2eq$vDe&$YUMD(Ke?ZT}>j=Ye4}0REPT z6JhZyy|Gg!Ul~}kI{<5tlc7b0%_Ud_k9J5rzb&CJkK_#r-gf(Hir&+z_SpK8?K?2ITA#4g3@owdh?J`6FiuEgaH6v2%lAd#8$G`7?)&?eqe1}~G-KufCOl01hIn!YNx%aexQdM1@&PJXbP>w3sS3ya9 z2*eaKpoQV9-z&*wm=C3U7fTcwlfAL1SpQKzpSfa8NP@w&K;oLZIO8a_dH}VqHzb(p zUA~=SA0N}`1DiR5B=`LUlFVSKS_n2GQ;d8~-X2kuUoe=EDmwh?vI43^<)ro=R}Q0E zLb-N>luY%^_ad8{UR;Qv?$x zZ|`jcoQUje2^r}2v3@P14cbcSNrgKrMaUWN7n|95!l-1UobM zsucq>b9?qXzcJ;XK#k#f@6FPq;fzxQp<3f7LiVv{7n=& zkbwicug`-@yTJ|;LCSC3ag_D-Sts$4jcr%Phxm9CP_-h@o+@!HtVHeWm(Y;va{MfQ7drda3-fR$Sr7AD9fMjEmOSL{Qz?|s2)(|(_mFfN zcPZ3c=%OqB^FwYf%y?Fh_*YyZb*^K>eR;ooAjfku9#u8Z#_@7uCzGm+S39{@Q#ze& zQdyljVm}dTa|o1bBNhnG@8~n_3+0Enny<;hWSk#5A)fE>SBm!4_9*o~EUrC+1?Cde zHPx(JdPqkqYI_z&R&8m?U1OA`L zOIfEshE*QF(fJBcoRHWGl8i9Ks#%M|atC?)d`ivczB8pZqg`!)wKpYpRWs_(^1t6s zr}}SkzuTeM2jMo()N#El6>}Snpf6>Yb@yHpL3qJyJHoeROMphrkNu zdKxsVz$B%0Gul7+c9}e9nvN<5a>h1vYxN=t}G(fY>&x^{FHvJ4Saf&xS7>0vxvGA#LZufcj_h}GpMwg<;8 z;kg!YyGst8Pr|c(mW7I!4C#@!d%BZOhUs3z)GfBupFb2T=>1(KfMmtd{EQ#877anS z4gpsrpi(DK2X-sTTvqtt)?wM7w`Bif@)o-x_P9VKvoM}fLXmUu0Sb41e5?>-vNW{@KT4ahAc z5&ON>jQD50Ti<~sY z!-_pkJnT^l>!wP1ykTU(;7SnN(COnX#YACRd7n?Bm|^nL;Qo0~qyRVDt_PC-0a;k; zQ3CCC1$J-lBN@{HoE5s{k`pUvL2D4fxg(DZW|X^wH$o zjU&C8u1LDSm+dqKh3+x@b@e5u=IL*P|Gw=1DhapUnkjuxKtEwK?!s^?P#Ty3c+6}; zM5PIGBe<$89|jXz!Dmq{GNh$2^7%GAd>l2){F4_v*l<{W#m>vgExONcXZ)x^5pwVH z%wu3MHjjVVmprxC6PzjR1aHsTT*8$VhE>oNe9LDFi8H)&q2GoP`{TX`3ximj;b_8) zOYU3i9*-WvFR|l17wG{j+OWa8oK0yarCNGcZQ;U+Bt!DasEifEnopLDRC(|G1UibU z%{~yN$Mtfx) zeB8p8_v?{7!>^!~t29@c7oMaV6=)U)^=3qRBXHF?F)FA6W*CGyoR&>H?6>rQRH>8< z=mY2}_cry_`*)?(m~;}{Xcf%b;}4!OE*FN>z%1a^ye#r{&h=>#|EJ`Hs_;Ajx|ir3 zKqsoOpBIqN6nX-#DeUH}PItL0q^g{RMd)2|e!92$hSA$9k^=9Z0O%p7AQ> z*GD*FNS$nl=Uw4QH2jPW8n|3s%xoE>f83t4<~J%zkGmq*FE2pcn=Byi?85f-8O4pW z^M{SITsrdZG{Pc0IoiV(@-<^@ud~sNF{Z`dKW1xTH1U>U-RzawkKU*F$8OG3_$2c` z@*UU=|6G08;Cs^Li!sXyn9pHG6ZrT^VPk=R|xc`&Y&&}z^q6}+#?RVJZja-8o{m57h5*2Msi)bM-rQ~zrE|;Z@ku@I1Pw6d*H3Ak|r|ivB+ul{Sw3e9M;3uR{QkL zA)i<{-;t0$^Vg!@xEb%_2k+Z!7;H>be$TPu{hX8#vt&E9md~D8+je}6Wo=WQ-Kt;A zp&{A9aDeLQd;5(63q{3brYD|p+=7KD?V#j|i&_2Mf(OnA4unQH;ew?Toye}xs z!Xz*-y1dD)B{G;$H>7*&KW*L@!#VJ(JHl&L=B0?rpKgbhEeKi%wqfN2H zitp08jWhFg%;>9UvY)7GSveX^K1zK!AYF+^JU`;zS5*in5@NIYW*+o^Hn=TL*;FJF z_2h~Ih!L2k-O{3YFjg+7pik__TgU3hDu?i)m`a1lR{v{)07=xH(k z^x9+sQ|NS0_1fmt*;h};3O-Q5gWnM_Rl?!c_DVsBYBJKbV0$-`mR8$mqgbx*l&*l! zY>$&-xiGPx@|d93M<+i2H2=qk)>LLTXggO}NWKdxc5$a@DKDdW+_ee+dstW{^%3BG zreXhUvj6)Pu5GCaeHSOThRr+omUEa-JXjXGHSEf0IrDc5(%qhD0baIslw}w zXmnf>1FYsLMMhbRF1+uS{K@4k56CKp@FypONe+f*-e?k*_HOL(8lKHyGMAKnOO+OG zwfg)`TTR5~R2w{1P+N&69hIpc6tLW+^VIrXH?$Y}VL2f7JB;Eq(uMK*3%{Jl%w!f=L+xahYzT zJup03UVfv}$fPHm?7JLJZ|Vb=q3^3L(X2G>lY}KASq_#%pdFX@Y#|q1&y}@6rH{@x zbK5)$yHY`T&pD=fG}pj#2P(8v-ioptam#>@`ttaf)|du_ITN`#INn(iIYD9i|<_?#z$2z1+SDgp^U z$T75N?$yyeOj_n!98?jQYZdTq3DMZaWME{;G|deY?+kKb^(92vS)_RRH0$?i{8t+M z_p}J@7=djDWXrud-^8o$wMIzl{GC!0WLhKlS|ls2yg%re_!i&ZuSK+M^KYaF0ZMcU z`(TEk2B4mT=&zw!hS+<6yg)QrtWUk1sfok0j6e2qH2RB~jkFW1*@Hm)-smr=wEe-6 z?r)hrzU>@I2T&~*oXV-h`LTu3S%^w3CZJzAYq?D?yq2YS&z(9lo|+ZKRPv5*V~N|O zKxnz=&AM$;xSYDALNA1zj1)^2vv7{MuZkjtEq0}%<;_0I@y}hKel8`rT~W@L7xpDW zTZ!mngCT)7G?1Rkf`R;h9nt^$wq`m=naT9HqSuJK%r#Zn5m zy6jEEI%{aHdW2lo2hD9>0WK2R)&Qa+HUCcE2{5aqvVv|!$qN}rgq_@6ol1Vr!BG-9 zMETlblzugw=4pFjTrU&@E%??v#7Ghdd!KvQz&Mt2FX@^+HkS;wVVx+nR)}HG^Q)m; z5l(l*YYrnVynd}+M=$ZwkM}v$^TIUOZ>SjayG< z6<%_E$n?Bt(`kjx><9v;=fpK`r_e8)((!N%W#03x@R{)8yTul%yT;g7q@6iL1n-jIyuU{L2&K&3yVC{luUg);~ z&a;}b4>Y6C^vuneasFS^^#AXlblaF;JbxaitgRh!bmY9-d|Y7NIDhBP?TL)UtJlLw zaAWEGYHvo?B6MU80A2@RE;Vp`0WA9sJAxm8QJ1T|whQ(I2iEpIWYJM+XQLA5V4s;i zuGfIHq@GH8Eg*a!?L>+OzvhJJeS(+T)Q=QidDJ&5e26z}NQU@jyU zcXHSWC4(R5siy#3CLf%RbLf#y5t*)=jao6fRjt*&JW2KHzuvnjZ;cx9<8-kgfqgRl zW3%+Jn$f~<9A-5n5iGde-BS=x(f1=8Nli)rE9{vFFhdSNGrxS^cH2^H(UtZNIr?*=`sR!iK znI=7#o%%GODZc=GNuBG~0sF;nqZ(U?-9@+$I8+S|-vw>2KR>?#i0^QZ$#oSOzCKh^ z)@mRJivVndyGkN|_`W_B<2$DqS*my;8Z;2!`o~DM7^P)>ez=BmrLxEPsStJ;ZBDqL z*r(Ty)`*ljTi1Tae)-mMefh^~Lf^i7!kE-Pkt9Lj61n+hK0BSb%yRwa6+ z*4rYIbPCrLX&hIFvy3mv+0_y{II}JfdzM>1;1idrzX_i{mK`%bT4rLeu14?Kher0v zcm|xIhjp?1{I!wkf~LbrhHOfaH)3VM?j})ub&M})d%Knc+iJ*wQ%)G@XNm8lJ$!_P zMZdbSG0Xk;eQyo^n3xFPxKGb)(5frZ4+dK^+|ROhkRE}WYhMV>HfYIXS3reKq!g!L zMvQEOohG#`5TM%Q-%=-v-x5uj!H@i>mi6ch52cd zPdz`f`RS}hpZ;F-R2Pe2w56l5f6$a-Z~k99P{7nKco1-sN3jF~;XnSI0a=P&;3kX& z1L=pzSYKKZpki{m-~lY4f5OWGtZyTB{{F`<=~)}sx&a`9am_p*>qYY;zy)XuO9}v5 zF^Tm2H?$6#ssa=cY6|a7%4-n8We;I&K*`8;b!&`bL+CSWS7RUvD{4f*qY2g|PFPSi z{<)xmL3t+Jbr%zYL1x+_)x;6mkV*wrq|Y}Qh@&%J-_am-y%IUjc7O;bg2f9fNRZH9CMo5K*>V3B6n$fSQHlq6JI-+L-SO;6@HWU!BG zz5-o|3e_R5g8BHrDj))ML`pI*vfjrrePB5MAv1^ZE91{RuM&BuyJ z-vA`k*p+((jBvX~fb80x^Py^O267f&Ow0Hh8O}$gtor$N!tnQ$E1aLUjs+ZvVeY0n zx()D_?PjlIMv5*o~c)H;oVay}t)uWVjny>Lr%w=CIbjt+T78phgx;gupXFr$99FLf; zUHUR$ts4W9aHD6jjC8^_%Sjs}yqDujCI@EBe2&<2qyG5|D$X3@8OOoAcuF%yUDi|W zVj}J*Vob&JR9=+ov-cdF_DbGkO~8ImQ$Cf0@YhJDU6XT0L{_Ft;e`5@@{h!w+8ldp zuzC{6K9Wr&GQALRChMcPUPQ07|JeJ-FB{pf_s5`@&{`?TV973gmXMPxI6k^Q9$EPT zV#+rn<>bdO)rEB!^ghyYepOU-a;ms~tKH_`l2NrbD$Il`NuTb2xwSc4=THUgf=GF6 zHLHZspj)nd+L?%miM+&W$A+}SpB`eqz802FujFb59F^os4xk5CG9K#C=f9~}h!11GY5hQ|1iQgR7SC`2|;QjQ$Ls(4LIJ^of&%Beai#OG69C%)yeg7~dhEeQmB*ZZ zm#)_UVZz^;0uql01oVns+Y?1#Hn=5#6d(ie2DXPx7n!YnTWZ6hH!=EE72I)+PZN4A z!>1(*KTihNbGtQskf&844qt5gYVE7naMz$jFKF$}8(0lZVrz6T|5<9_d#b$R^JH66 zsCt~Mgn-hx6|_tF$-tMsGjfzU{nziQzaRfz@m0k&97M%A7v0cBNqVg&q2Me!-~4lo|83^zkSxTHKeb=syP;pwC&j0|0GJB$<7 z);fodxSUEKjB9W(?yyG)Y~*t1*2I`{Sgjkz(hkv@8)g#FV6R@?Z0aaSjkWZT74e~a z-EI5fL2Xp)PGL?u&=23u5T-j%ny0BuuiahHN?Xr^396%yf2Mp2Eo;`5pEpA}BjdV5 zvQ6@V&5e(|*9qkZO1FFvXDp;du|b@!kAFr@Hcw0Je;=K&Q9a>rPb+(F0&30N_$YGW zry%mM7pTYI0$%7SK!}Hx0BNTWBmqW)UVmjRiMNeN-6k7@-?06Tpjn0Un(RYzp=o3b z_Fk2=n_WuQCWe;CoOp!cgckon@UqGeptPVQh3e7B>y@DnK92FxjBt|~&kUrAr%Pj1 zeo#V8)>{cnwpjn}g;|&KHxU+ z-K5IPbya7#Zw^A)wk|bEBfmaZ(K2|??dJ9wr`PlrVG_^%DP*w03x>VpA}`2jTJrfn zK#mLt+K1G4{++=5(h$f5({5YH%+b0{_cFLZI>EG@wijI9iTeXUKNTIXC?J#h3#g4K zK;7~YkRtkPIY8+G%E@WQf~r>@rPt(60BwpC)X-LR9#V#GVS+{#nHJOi`*7tD7%D7Q zjfhma)Zu8$g?1WMbh&14xv)Kctx+mVOsN2wm8Pir!Ra)cswK@n!dey!t!Qq1npLV5 ztu$HO#XFHGO_#>#pk;*J9~*rr0mpyvMCs}$1HSiMwDC_5Ztmo(c}#F!#KtC-bshCT z-wI;Y;y1tyRW#Vjm#5e*tBCUB9Bzv);uYg9FXj!n5oo>`;`I!;aQ*?MrV4eY=sLA| zDsL8%cyA}|q5-bk_rEEhMTiab(0CbMAcq$%xi=RRa-1XW3i1HM-+o{n<=Q{ ziU3k9V%BOMM%kSu)ERIgpzKVQC2`fs7imriHvm}U@N%b&8iFa4iiUxV!vJg>1P?M0 z=^79&y54B$74Y)883S&C*-)RFB0nlXpMXi-Q*!^`Moq6(1YUq1mZljiqE!6?x&oG6 zjf+mGu?bJ>|U{8SG+ zvkarHD5MOgeUqrEtrgCFN-1ZVf5+mo-1?B~n_)ryX*pA!)b`jm+tSf9tL@QkmAO)9 z=J8;^aMXfuO&wyf3Y5u-_bOw`u@l&CpJT_o$DX@n^K7rOOF!7Kr;;I%2$QE7;v;9= z@Q#BotTr|LDcE{@yet$)SI+!YiOTwj-=8`0gV2{w_gyBS+pU;Q340QC|0tj`#c=@t zzoTZ$7TM4K29q7rAqLC@etv#;nckPL;_h`oiS=lx#&!`^(3jtXy|Vl-88iLPw3>l~ zihC(AtO3>?Gcnv!A$|KYwIq)jRKLN$*>2Q(VT8pw3MYDd{CXI%!6YBCI z-!KR@y*{gJtC1rta9NfO?;AVIsjZ!iu@m&II_xE4Aq8As2T*UL3wxh@;8?(`vz~aa zb&^=Bbc-RM-z+UH+tp%4V;ZF~Znb~oz<#7sT$Dau#8I}(bG3x~ zcd6oe&g;j!Q>I9_-{)OkU&6aP9`riybk~hgFJWnOpZh@@M&e5d`)_$s*7z)rQ}I5G z%oI_I#EF`9@elo(8WK>o`4dt?l@Zjkutf5@?{BFL8|P%6k&Dj}vb9JQypY2%Yl8?X z=tms0UG&u>*zDI~Y{yPs3b87jF;fDM%zwrmd^72fFN~I}6{&ByHK#DW&Y!)GRSA&j z-));EBvhH$W4{`)HkUZdlD<$7HD7?}s+o(J?@H6W)3TTkdj}O}cfaP77k1__ZxcoT zsEI!wlMCbjt-8kcO9_;?qp2iDV?-s(0Uf0` z2LlUBH)v-cwEc8QV#pwDtZN18T4;7YeFO+g(hHV@ZrQqO8O4o~F$GBb0$Y*Fv;6x? zFj`vL$K2KlzK5@;ie)`klec=Q3|k+8ktjNL4qGOXQ6Bj1w&o^H#snfuNQvMEnOJj-r3;U-;(|2dNOLl`}Cg^C0e)-*(I zzdU#>Ey^06cF4ddTY{p>TE=KqsUQ3Vz5IC9NRo3U(oqIWMO&;fqZJXmn>bPRa0F2y z(yd_=CDGr-AF%aaVOn&BuG@`S;YqIr*;yY4m4)Q-3y9*PhEKp-a{l}5?qyDV)&MNH zT)gixn76Ebd8>D9^QFv{`8lwh0ybjc^9WMSze&!oSpr)5AWHGjML?ns>ea7mpc^f?LOx>ctA5X$qZ;iZ36%Q4t_0y|MR_ zDV=bLsBL_Vm;?i@-S4E1i#d zj5ASG1c@g7PrRpl_0{aJ0PL2pwV%NMW-SY4;iq8(%)gW3imU;= zBKmtIU78rx6{TX96|tJU;3Opcb?U5}8r`cR*>@%%PX1{1{9$y~=2tl8@=HD2?=e}6 z!VMP3)8)7{Nm#?_Np><}H-pm*rd)~s_z}Y9JcU<(Q=7J%Dl3)ySNn>bOIK3E$wFlG zlQ*7mk;j=1gqHE~9$>vVn^fGNMXHIG_ZT7i{ugV}D}0}U$P|1K zlH;``gTD@=7&_Iduiq8fAR&VO^B7?LZv?Ot=W#_XtrP%tk;S^4>Vv6t&+kJYO8gu- zRasY9^CXH3!;eFj;rgnzp32~Af-{(yu37^vinC2%e#x`AjE7yWGh2BTF`PIy9Q&N? zrFZ*CV-baQ6+Pw542V#BRC)e9G|UiniorTgMA?%8g(cNurj*V<3Jrtr+*;^jVQGa? zw@)ijRli8po1w;h6G^e)woI)u^FV}IG3}_+5v+GMqZcZuQ(|3XMpki zQdWr@ea@c7Aj2E^DZ@QA!N471MujG@gzUQv{u~iEG_~bTbt7wQ2r3BbpgEiOFsNu9 zKh0{wflzNPG=uaWD%B&p&p{Ma$vm&N*``V8 zXQn4@X-8NerB|9(RZ22JrRF&O%1Pv&)}V->t#e0YEz?b`MnZElXmhEJQr2WAQe&;C z?G&P@vge6iiUoG#of<=HP!vQYJ}0Ob4qjVOr-VPG=11#e$F&h!R~yYQ(l$O-NEbmY zMCdeho!CH4{q@Vn|9fZ^flMSHq+5N z!JU*y=T!`-wVg(3KoE()oP1uK`4=C$VU}@q_$%Fth@PGRnStl<*95OB@IFy|VrMF^ z9jKNaAedEfw6}l2N@gz2vc89&!Odi+8LIubhR`iAbd3#I55 z(`&FN+3tS>)&K%;%f3{XARGlL;#H3TTR*wDW>Q7hWr+Lt$+*(qYXT53Ji$|PqYgyb z9yjA_OjEe>#G;Je@aKlW1#R%TFI+5s2d5S$Ph2z$qH8AWoeOrjV=jRA0aBTR*7^AV2d942g7e!na&PI8GZNDCCEbUL9X1?v> z0=RJ&&b}$a^aF}cr0g5(b`bW zJba~n<0Rc>xWb0#71K6sK@fOW`&W74X}>wX_O0fh*_RS!YyU8E7jidLd`K?dy2Z_4VIZ+b=l z04l4;w%7Rd_N5=*BZm(hms$=VH11_ov(T7Oljfa5=VqPZP7 zpb#lhWUy6KA==?9)t|>;_3g>%&6hXBVQV;v&n?#J-LujD8i2H?&;+#TlZA{=q z8E3#gyVVT(ct;lt-o*BF|C_&13=mA9Ls28*AY1~f3Hb*f6cScL{@CHsGSVoIdaizy zV)HrMjh1+Ui9(vR2I=ODt<9zGDO3iC(GyO!WTVuJzt~iLj%FoeJ+AKY@#&O-!zA&> za5K_gZ!*W)fln!>n|&OWayb0Tdt71i=^sVm2*s3RGjbM(*=0Vp^ko-GcFyDJN3EZJ z`-+0$t^07{QZt{Z#m~wHPWyq4GjR42C4Eo#shy%d=A*zYMJ!?u`|6pJTP#z+#=h**sLaC&R%E$WfSjjx+_!xLi_G6@}O+U5=gppn`oq>0gQC4bMHy-!{MSc^^ zB?zY>H5zk@pP|VO$E0VM`^b5!%2=-&4>!wW zQBS=j9bwrKsVrqwO0AGjaPvWt%x)LFbK~4&@^at*`|;VUa0iS_l-}I;0VuN9f;j=h zBAbMB^VQLEqOJ|wCuTTWj132&Fg^4j=vwUy)Nf`A^M z6K0BnNxw>s@orN^>ECV{tUc!85J$|nWHNI1qex4QE7}Rp`q)N< zLHe}?Swl!-5OI&iRKf#gcs>rkGaC^)j>@p6sQ<&b(eTAf`C#dfLn-;Wmm1MX$-Caj zT+*zn+C?D5=zpGDFb*4GfpTER>0m((F-y|~hJ)82GK||bp+jWvZ8tu{GK0Wq3sFJm z$(lpE0jn(N6(IxbOh?D1Ib)-k#UVyHVYnSMqGoA(eqUVuoAqC0`X0#)0=Ke5Pg3OM zBfSVxkcZ?uH!`$%pNcV)*L1O0Jgk1rp<~X;wuiDlty7hwY!PlWhPm`PB)1Eql1IT#?^AxOgtG8;vk`RH1--aUG~AdYGp*L*BS*D-10*oO$+(Sjt- z)wMMQ?GPfhq7DU98G=^_iI4&d_LrnF#yAoi-uqFANPk&VqU>rr^f-+`h0J^?)vULc zlsxJGqw6iBqH5o;ZzV)ZYLo`)LAo2H8A?KG=#HVgk&==|S{ei?>5x!TT0n>Hl2TF$ z!RMO$zW?w0taq)~0Lw^Ph^lt$2bmjonbIOhm*>E(#i=Zw_r9^& zkw5lT0ysEKPVHwe|FXFLOwU4yB#NA<_qGb%*b~@dmmD&}@la>jHk`Z1#)X+!A&ZbF zKq``&sa^0rm)kZs?)#$z^ZSydpLm`eSsoJRWqzU`WZ6_L zV$$%^M+_A09Oc%_I8-l~&L?DmTi|2wcoRGD389Ej);&#Yx$ZALTN)Nb zf2Ajl;UsN%;7h^-dH&&33H;(MWFnh6SBctnT&MgUbt8OZO;R+Ep0M$1L_m=b^9k1W zX{)mX$jup4hZbozZ^%r>ow_Fo^a7FQL-NsAVo1#!KQSlj`IELce6|VHh%n33rkvaP zKfScKk0-pC=j0T|!<}-QRp0iCxF%GaYY&FH8c(a%ciQsGtJ9#;4YL)<>6G%lj@s!& zsoyz5PlPoz#v!311aNAR9WRbO@+q_&VC ze-MSrMM&}+UxKHXp_u`%mRuvIfT0y51c#a@d7XB@eMx;@+;J^|6(`gvp6DnOj?MOg zNZam7bdGjHZ^@7oQJLm8((VpZ{h39;Yx%2lf5bq)-xu!9ot>-x(R zYUSQwQ)NgP=>LkVfb5uGrSd)MR|gwp@=RAm%j=*Fzd6O;=UYgpDcuQ(Rt|>Vtw8LX zdh4!|l6aD5D^mZvcB;aUQo%V0)n6%p$8IQc1IT-3gW39Bfo;?ag3U9t5T1I2oErex zduaYGlr&1@tz+2q_0MjXL3ZBh2wjs!+8uhn7Dy4Ct;>l6;sG>;R|9UWw>Aq{?jS8A zK%K$UyL|T>_`UDMA-k(7Of^)6!M~?syC3ZX%8*avE3GDwG*w)NA?8Qx4D$+XJ2;N ztSq{8(Nckpg@72cuP})!b3HPOavFCG~DE;;P__y#zF{eM!|Yl)fBO ztnsQYfG?=-*#}j-y_F{o3eVgU#5r}f+U>KWrm^bg^#kl~8%*G03e^#>&HFF9>(Kvq zdH6kj%z3Hd+?qxx^{jt>7X`x(H4pfbXK8EL5|?f}7xBz}lxJ|Zjv4wGxvMBoFy!c2wz7AJF1evHuMN9^x-XBc}Y zJBhM)e=myL^lD>OnR3((Y$O|3DDyf74I>BoBaVB*!d4zT%6b*M9wUMi)ovT}T2dUH z1iVAcP+HF~(%w}us)Z>)4Fa3@-7Dc0E?`W({x~rYQpmA6%b@#OkG)&RSGSoI9KDrE z75iiqMx_RzoUv6<?ksP2@bZ9=?U zY5I_Q_Q$}1Hd}SE>(*JPDzfWB4@29(|JxOwevDHA+)f80^mh$)O`Jm0g=9)ZNA3GH zspsq9WNKX(SnQgl_F{w?>d3KRdEj`{$herC-bXul!aj`_uYu<Ub@W(6WT%H^(Vcqb zwvAf|3VKmZ4Q-DL7=OG0lHWll=I@p!3k%V?yr0PNWGgX~#`00`4qkhlg8}5a&CcZbXxpVB^4Yu;>RdT7ArKN3(-Wc|lPRylcSrygg3LL-y z2mp1IS7zA&RnW;_CaoGa=?y<@7ok_rLGRg+V9)0yP<^Q8Fl(r;t+<2QnOYi7q~m;8 zxLV8umP~_w7*?0bW&75?&~!f{U}}CNY3yoJDp3|Fjwa<%iK_(ow*ePD4j3nt@ z6Ajn0Ek+mj;{HuA%=Cw8Y0i^8MCI~i&EtD0nfO#>`CRrP9Q100l`uFa@3{Cv(7Ue| z^N*bk490_1IT?ypv$Q7h47QWS6Y(teRJi?M_N>wQyKDSKlP?jE`%3QmtzA+h$fmRgf+BrPfSi z0i{6}!659@nE39@R}$J*WF|7SWWfLtsfKHleaWXi{67clP=wE-ttIGfGBAG9d=DOE z4R_E?TDww0A!c2_>FC7-eEU_vFvy$`x7=LR)wP_!y4!f}=8V4}%4{5E5^{51PqS5q zq1+XWGG&T=^D8*F-0q;p9dktRP02eNPEuqvqSP*8BSZ>9{p4EB*qHi($R?pd0QkIc z_ehj+QHX2<(pbH;@rdG7&BS86483kPf8A#aeq+hsb@<375M@O^H;}WMtgtSdg}2Tr zG0y~!i@$uhB0GDRXR${en)jNy+nab8ne+a~{j}PAyLFOD%NuiOweaXBwfz4?~NxMCOZGRU`>Ww5>2(qn@i8WVYBY^DpSK;$hs<1 zCurcxv-%=ByG<7N`fah!e+!S;DZKWAQ5$S|(o|I4QuDAo+o_L8KOPP*O2cSv9Bpnk zG^~>t95?bv{3nv)XbC6wH-xt&X_PqZip+l1Uy5-YY~xtEwJGk*GwfQS%BY465r`eU zfAo98Z@J-h19jvtWJELLG)~G6c6-qHVo2A|=3kxZP9ZIu%rTCKex2M4bwhYSH|_u| zNJ#1F#<~A7uo129Nc|N7@;#ut2!mHFHR=V%u>{WyJeyS98j)#s1wm{jKgCvyIg=x- zuf{%0OxM|MKSx)zCSP+tZH>MHF1YDg(r3>Nr!%IS`QeYs7NHKaBsY~d1tI62XVsGT z&>gxGgI_a)QU`w*VTw*cD$5fCL27hL)pDuvuOg4a83xVGmfXlFBx%BBr26ipuFNzZ z8cN8{|EkV%zPgmWni>E2qMf$DG@iV-FTg4DrR3Ca{C)I3m0D*H2;ETDNe+)LQN6P z%qH#gX<44T*+bv!+>2ne2~#?X*}tj~^O>R$wSdgv*lsaArpg5FEt1lpxp{^)?+6%9 zN@LAGY8-eCm&!xkt-_0DK@#BuFtf7eX;}Gzr!JsB%=i{7CAZyMLBcIXBYMrnkhzCE z&As46;WU`N%7fVT1*|Yb@Mc80FY3~(^-yq5@SgTvv}dhjcn@3_^L5M@;%~dR=d+uG zog1Xr5}XbF(C?VO%@RhuwDvGm!Ig>4tHySM39@|#yB&Xq!pw9rLzU)p#bce;`w};2)9!C)u~~Az z%&xS$ZIskDU(uB{(jbBqGUj6G=j{3v_1>*sB``BYVh|6NWApTpEDord_dMs7{!_!e zcHF*t9Iz_zY3Fwj>Dl9?eMRmWEYpv;i4&M1Ut$A-oPEW)y~dDzOJz=v2MIzxHWK(B zdf(Mv;kpdXEvO(-?0NmM=N$Iu6v1`dR)P_?r_9sc6CM({HP~Rfz4ltZEwe>3`n?F# zrE30xko7#Hw%Z(5MwFy=Te=lM*6?Bduwy5ZW_%>m?f|7HN8%ns>s4x@^1tHei3KE-h{LbQuX!mU=nfb+Wkm9wZ~cZFupgM9O9N=)Bjm zt%8yp+&Q9R{0i&-MU6!z-!@}d@}RnDS;FbB0ZXgF15)bM`s>41X<6kDj-zEJ?Zeq- zO+!P(U^78ubl~|nJybQotjO3}#*ZAAE`vW;)3L4qJntQY$$`e&WqnOt-*hwrdrbJT z;%%P8P9q1z;8H$2E?)cT;@8DX>z^p@GUg0d=h;-1=_vM&>fhTx$*sUdG25oBcv?I? zq2Qz@@DiUo;-xEkp8tW{*Qnl$l_-xon{$WD)q?2s&GrNvwnwjx5K|b5?2oWpC1?P+ zhSj*NYvQX~&!KltV8)OSontUw-$va)*Zr0%29^gk)1M_rb;ImkVtm*wL?a*S@QmIJ z#6RoyunZE$a<0XSdFiDjN2x0QA`RrJrJ_&jiC?kfTK>HifQ}TJeU?;{Dtk80mR#`O z?oADJfSH&_&XS06-RAFTU`H23+?lq6rh86mJjSDLTQN?nmOP_+j^!^b-)5z>dSP^^ zM0U-eaRVDrGF{xPKXDtMvt3^ee~>1^O06O- z9ZHRm`qk~V5r>}D_-$wFSDDz)9Mr7U*oPw02$?oxxY%vEysHVb)ck5twd@<3FEpwZ zy-3mOOw+H@<5Xrhuu=>0w`-Hzf0rIH>bNhZ^=fvp9p>4q6xzfwn8#!Jk{Z!NJ{W3o zFLI$el%BB`tE5+?(NnFY$x7^HPPmLo**C*0kG(Hbw>Fdw0zu8q-PI!FyFrcHZKEX| z`GzKM-TG9z9!*!HNr9te{IXBrSQ&02WZ6z26Wc}MZRBJ0YUt&>cYS;gclj4Ru0E;7^pjd7*@WN5wQF z;xn`a_+(_Uesrwwp&WS}p^ zK8}datFs%$m_}|kypkz9v+rrym+`&jBUm=njNP-U6Its^b}Z-iQd?QRv!3iS%4AxT8g!cK=DQT{+@uIi1y&LsFYY=BBYQgpgI#{Q-S@b_3bYZrFsQME%bp zE3`>FNL?$ojkDv()naYQkflLHQQ7Vc6-H{pW16^Z$?G6kq_bin&NZ0IU}CUeOK?Q2bZZJyuPVt z={?{Hw49|OJlwo(D>%R2w)e#G&~5n5-MF8zH)Pk}5 zRO3~d(vU|5gT{($FMd2i1Ed&x4LF{>rcV8busK^836o(P0{ic3!$7}+Na$SJxg~Rz z4+u1vgNRZ5;k294+|jsjsmJl*$<}=g^a3k|+N!keXa*W(*ZxcfH+MvRtoM|8UJ50MwtY{V(;a7P&a7PSq_|$ z`=<(XYB3>yi~}a+N#`oYWcSOEIC4%B-iU%sU*HpNzRJ|}-BcUQLYRvF0f>)Sukj zDu2jQ5tJ4_OX~*xZiq)U9WSi|c|mmoer@wsg(M-dD;|_BeVF zCvUmj4b|h^LH^UGkK$c6mvDPF@D<(?P0sab{-w&7f8&v>syX$^&)9XPzLU$3eQGD= zHqQ|OuaDjA5Imn>*0K|U2{kXW{4f;Vz0TRKPuIvTQJGE86Dpg_o4_433j%)7A2Og| zpx-@3C=TVnk|gEz12l4QPdMgr)(tQk)4LuL1k;TeVNHeB=-cy-ie*w|6z3RPP8F8= z|EZsxqDb|e`Pd|evZp9$rgA=y0$ojyqIXR-a&HZbIFNN6U{pQ=dF>6ZkjuC?4b~d7 zn>{PQQY!jD;!Hzq1|D?+X6_|ux4=={EWqg3*Q``Hie;D{tFXgc$z<;lJcSY~8(N;o zRv9Fi{EnbIaE-9-kOHw;F+pGD)>IbS2xvzwW@vXn9dRqikyXtVQH zAYs2*zecY6o-hzdnpiBK#z4cE(5HAxL#`Fy=|%ATqrCCv|^^)3_ZHjz!R{J)EG7 zsNwU*j)N^nDt+S0snnE7PLg^8wr;ID`;WCUfmgZq&Ad27+Wy_B(0aLMv7Elu>IJa7 zn=tHbz6Tnl5OPhpQQdP2&&kb)X>bX6%@4n(_iiYR@Yb+qJ;2n)srd^)S=ooFQ^$b|JVTtJpx|01O*;=AKMNH#7<67-TO*2OPmyql4^{+YMADpU?ogoC^x_JASs=o;g(FaRZ z=AA+ZA1}ajZ1eoe&O(;FW~^@tK?e?|EUtP}x+AR?_6SANd`WpSgfUB1OQM*N6>}_t zA5K2Sn_^AB=eEC1k%G*QO%Sl6r^yhG6hoTlPf_+iC9&h!Z4KSRn9ZQ{ymn}lF+M&N zjgY~2-N}f7X1x;lENl|O86f?>oB+*_>F6Hr>aVN**N7)Hp(`bGrs59sS7GI9+iMF? z5?OcJ(|P)ec>2aVW))M-9N?}A6%pj&^3I0(z(EwK*ymZrl$9XYb3dw=UO!v44q}~U z&10Vs%AqgngyGz_qW%ve1~rY8<{VvYB-(b8`~B?v-E8^Kt$R@JiVwaRWkcTDUy4hO zTy)aLzF0@VVhtPrF{|YS8I<8pq0A;m2afR{6$?{~DCPT+GCV1Cl({V3t<(MczrqGz ze3|hGc#2SNw=9)sT56x_jDtV(rk8^@V93bus8^xMR~2*GwK+8v6ew1H%KXZZ@DZAx z1d9#UrB&6&+e~+&Lcmxv{`OHAUhzsJv-vj!7>$m09x23vu&{UREAKP1Q8C|wG;5zY|#dSsj)&P zV}d**2P1Xsi(60?0ZorG#Hs%K9WDKEVd`CCP&LSOs5eOgEy26$W>s6t zjqt(zxW%Gnt*A$D+&mm&k+q7_!GzYKg!oTISWj7)lgl`k2FjA6ndAyQ+q8~yj_oyv z)K%3Qyn6At24&ef`mH%Qq}yo9Dr5_Jhw95k1T{q-jHa$0lyH^Vl=3(<>M1x#4Dv6H@_C6Jp7J}q4!6{Lfj1Lv z2OCOylmMYM<|OF2rE=TZ!`)R$xkET(X_o<)nH#OL@spr{gGgplCZ@(kxG&kfz4m)yMn{*HZ-rq zu9dC+9=87HcK|0d;OI6770$%<99uF_WmN6i*47rt*P-rNu_tF!pMPTh1*s_w1A`dA z2GBVRoh(*d5Xe3qW~(&=-9~_wRlhO+Gd)8v;LS~^3jF7`r}kGQa=y+fyokPA^;CsF zau|RGzH-`+7bi+SaY<7J6&5^>v)rIuFgP_m9eC;}fWXqBhAjL7GfzOk-uGuu<~B#; zpj|6!dP{0DM?i2sK5(qoLjO4Si-VzjJszjC!D}=|d1Ykbg5e1K>(1{H-93sw%xZSY zfoEsr&?oGDvnc!K38X{lU&~tVKbAFW=y_T~X~B#A)F*}`|E6cls=IJeS54VAwA=bW z=klMR{*@eKOcMA@_IQ#@GUYwkR zZ}z>Y@$u<{kHTpkrv)y4U>LV_0TDmg;q>bkHX zBCYMZauD;eq%!Btc{)o0CuSD8mHK=6424Sr?-5>tSP$@qtS=RYA$ov0H_u~Sq`rBp zSwEyc5kOST;!RUdS&QTG)dU8{GvjZZh}bEV7=AX zS}L9U;;`rE(Vra{`zaoeEMw9ug(Pj!FVD?Gc!=(dNwtbY&?SyA+|`8Kh}dOyDp!^J zlV?1HU$&EOWUf`N{mv0#g3`MOjbcO*<0`5=76{7bvCwR<7VzLnd>-a(GqySEJNnyy zDVpW`_BW0&hU>L7ZC1EKJr@Dmr-Ih@t-3;n>Ugh7Li`Q^zL@x}FIs1O++I4aV(t4YuNljDLHF+>aj zWsw~GU}Ml>ormj~z>K3->TGhBkW1eEG=SyDqyd3PF}=A-yLj%oQlmCe4M>TUC7gMx zbpKaG(I%=`%B2RNLbUr7^P-`{nqM}Si1}TXmo>;XDMJv2AC;25fS0k+1CABap)r~( z=2P>g*pvTQU#9PaT&`|Xx|v-Yv~>0}MTNre63C-|%y%OOJ}JnTx>@?r0jMZEJzYe^ z@5qA#mj7(ArJlB~ik}Ckz!Mu`VAsxVmvML2$BNGAI4KKj#s`m%rh@OVLy4&|Mg$p;MT8^zUH>FRPy20!m1WD4H%Ut^`1zdTkVGeUk_R4fIFshe4?Id==qnhSd zWhN%J4LN{P#K*qJ;zM%E#!h}2&i-%dS6}|KD41-bU zz0j~c-h1?vU*6gh2GcHe_^%OMr~+RGUZ!}+olvucK%S#ZwJaExM<%Ttcamiofuzfw zwogWo*N~j%vM$z%F)qTmp{E}cjZ%MQb={N&eMvhN_Ul-5skKL7Ccr9HX{>2jYF6!S z5dXDe{U>C}gFP4gZ85e6L&06`01Wtzo0`1;^XHJ#Lln3F=l6}FsG?PH-?QzjN}_Cz z_Sdp1Ln$dKYBg_LJFA7UXXXwTTDbB;ZvE=^7Kx$IsdcyYz8LRue}wh`4q@y>qDZcKwkjztkkLl2tug1=z1~cKCJF(U1}J^0$=onT~ddY%$0KKdb)=F z0CvuL?4EGPq*t^e1>t9|aIT~{{V_P>h9;2=jGjhX+$c)_=3WE>`S@*#P=^R+^w%0` zH8rN~Z)ZLA?;g_=O>-IdFsBd;W5GQKNZhi}IiAQC-izoxudfy|tnnfzD&)60*?kAK z|24@%M|d_e?k8b#!TQx-0;o*LL#KlrnVPf1`Dngy^ zMCI^C@5z4>@z|cNI2?hoykXQ$^&A6)me64mk^bds$yLB7N#D1a&k$uFOmqspHM)|R9`jwngK6B}4C5w-PI$XZvE1M?>mbD!3*3c0105$<}ssi{V@&FJ$xc4^3s-6{~qDFU5NR;Z@_XESuj zlF_2%6C&<|II36T|N84_YNs!)W(FJ??uS2sF3}Hs5HZ8U${!RKPQW2&gS7hs6V=eT zzHXtKFBz2jQh6!s>dGIG>2>*EBud?qxpW-gyFE?}`Rsq_v*eW#Vd&EN5IDtkEDLZi z^Z#tJaJ)oScpBXN{r&eg|Lhc0FR!7>h+ciFd&I8)*z$C~daCm~FDR@~#7R=5a+7OF zy))yrxkS7$;*i3r&6;3CBJ<{)rOhl*1qJfPu9hgEL|P_@C{)qbf^vbe*d`!6Ah!Bul4&rZJea|>ya1_s?-93k`>bT$X5Q16I{HR z{8w`9(kU{C(X%amWw>IPseg9Wv;SFv_Te|MzC8aar-BXmozi~rfd8W5%g@daUL1EzcGo`wrWTfPu z*q(^^-K5IeE_m~<2Gxc!F;K|bTlu|Q1J$I!80qO^npX$w+I@puOl4 zHr=Wup~sl*w>Q@#f%WktLbJUDQm??24d1Kl2HpXkDtz+pAMN{_5raar$aQ_`DgTu8 zq=Otwq6BI4G#B4=THn=B;r*(H5_ZaQp3#G-Yn4waH>lEYQX|*U&9@#PA!-f~r>*O; zY+tkMsWbg{x3)#}UlxXA6-a)4@s=h8tx$=KHt2%x$tZSSjX`R&up$(BESsY*Q!+%z z!^@)cy1UQTQ-|FdE$F7zi0kexmu`k} z>EF-bGTRGa=i%=6V$qI9>e11>Q&3L~ZKj;L*VlDJD=raLY`1C`QK{EM$^NvUK**x- z$!@B0#mGUNaG}7d8q>P#b@=z!q`je?dX_uuPa3#jL`>LAAKYp0|ITnm*l*cmXTnIJ zn_90*#O4{pLKhWgnz7-bvE?ebDwT;ZUlJw=&<0DOu&=E=nd0`bB0GUE%+w{vMXpt; z0>6Z6J^TL<*NvAu3Z{tv-+17q2$-j>u0gzfSQkv!Kpp{gNHmFna}+bJ^0+$(1O)?x zK?A}ONJ|YjDG&Hjx4(a{vFC*Q$N2)~MU{h@Ag(}bY&@7N@IcXL4?*w|`p{c5h2$DG z86q%6L@GIV-(De}>*&mtQp%!}(dbdUoLqfZUaqt*E~v_vXAj%k6nmej8mAaLwCe}( zmqTw~0&duoU!*DCWs~uCeg_6iP(EdW7yiivWm>M{bE4t;L@Q+Y>bAr&@Doz|oCiop~m5bEttM5{3nr zb5|RE&88QiVywAiqz=wDoBBig&simvdT>CNaBSI3@WW`OMa@?A7p*v#np4s}rpC?8K>V zzBeNDS_%%jbRFw_oA@+|Pu)xz>CY`hVA84SabfndEp?v9%5f@*yK&bkyg?b8ey+aV z4`(|SOApX@dSFxdPW0xIi_i{cZJTZjo5hIelDbUtmC+clRpn2%38{^I9@|k=i4Ut4 z+X$+(O--XVo{3{K^~;kHZ+?R=sZj2}` z>-o5UySqD%7Oz^aQ)Sqqo`pd1Z>aid^joWd<98=;`rmWRfFo{E;lHwO0By94GZ|y9u}0!MVTHimz&}fB**( z>94xGdwULUi^qe-t>t839p9hE@Yd`XRa52x*xCLQQXEb%`j5e@yi>+xo`OnWTRfK= zftg%e{qgC(rbdDBDXOD5<#yZC=t<>av5B55dqyk=$~}z6rCQN{z`nX~!MxpU@P?e* z>}jz)ovbY}ZObE*iLwkOc<9tL1Bc9|QE6&MM%2%sp8@sitmxCAfcuF#@74v|;sezG z!b!21ZH5m03n9*0#UQPsY%zBmvB{}411G#+W(vPux~b|h>%53=604X}dUOWlMnB5! zQ6CAm{h*`+rNzbXK(1v|g9y8lyF*GGXl;?Mm$-7dR+I^fp?vlOHr-T0S+R8FarE%+ z2cL?9kM5l&zj`SjP;!T&#+b#~?B>$?^FGggXM!E|naVO_afhqZ7))kN)f(B|^PQfp zWgK0OjQy|Sy2QANzvniEQsi>OA;70dE8mmU7hc!}Afn+7vJ2KG! zNVv1~QLCWD^=61AKU$|09djO*%De_lERcy5<%KB<^C{kNEda8&2vQJ?i9`CwdJ`7L zKMK{Q>+kUux4}}0ZorUZ%imX=DoP3>d`k zZjUI{u%CC$qo?v8#eznDv!bfdho~TMkC*3zqk9scessB77fp7)EWpPIv{9|8u*Xh< z(31o1qF~S`vs{Gx)H`09_>rsZbLW;Uv z^lGM+Aapsqf1#M=;Gmk5rum|{bTffonV1F(ryfv&a-+X_j){SZhseQi5jD+5Cyi|= z+|{1zLfyc|6mT>xPLBva&Wg`oOxo!MnaauqN{Z5IauOMooGpI)Ie2yD{C@ObHMtx6 z<#7D!2a02^15KXK3?BcCln!idzoYp;Nw1Q9gd>dQtp!6Z$egMq=39NvpmLTQ!rPQEM$yyw8h6UV~%@tC4FpYG$HN^}00+>v!k} zb2Ql8wPpK%X+F_A?RN7Z<#r5W2bE93vtmm5V!;~$xS%-In0!l?-uE6z{c-&RPEP|z zYrR{6USJkm2WE3wD5M_Yh_??uQ!ucQwj}_(Dgea0yKT)sEXY()d8Vkpag_~Ob8g>d z{sRWk0brzHThFzatkmNovSalhOK0{(t<+Ui(EqEb@RCy4p@b#MMmMN%g7<_XbX$FP^yl_~mvp^x}Sex_mJy zcFi;UJr>J!F}+_LGE6(_qZRr~sqR}RX&ajYH%;wMR$a9ks zuB`oe`rux;jnsD>q^JW?11%3<^MoQog`mUYTULr?-*NVt;=5GuS6DhBIsa-bo@8;4 zIC{u!a|_W*>%SR!44%5;i!dNG=3hDvriTui*wa?6T+D@3od_KvUphKEumeyyEh^L& zF@C>)2*qTrTJya*O*eG@1n6)}MPKBAlKIN0!A7n48p&4Mp;g8F0j=>>Nwl)&YlPgC zXo_wqWWk%U@^f`0eW@jE_kNluu4-rs!t=>tBC7agtMFUNC6C$LR&k4~#CtVsK%%dq zh9xKHzVdvlj0@8(z5}b2L9W3vZ(=fShbv`SJ1)q%uXA2h3B)`%!jP#UVjbaTwoLz4 zq^~#p(T0;*oo*^CEXGhb&4zRNMReS;ol>6yk<4LpF6njbAbpvQGKSji$GUcbn{00g z{SpnA7DQ?;!NWSg%02_7i!CgC?pjsyUd8GkwA$+v%c{xx~7}k6~8-trH70y zxjj8HM9|%y7LawLSDt#vomf5f-y`4}>uCemEs_A8#r05$=niH(Up$?;dd>Pfoq6q# zr}ITr{bIBMPXY4wgNjz>b#)VxQ67dMLwfWcPDCwau(_!`5(q`JdKJb{%{wOSS?N%3 zTo!_pXkoC+^}bKl_C*LTy3I%v z!z-k@PYdNv=bWRk`AU8k)3q09s z@x7IzU3-?;9fSCLgf`x_PN#Z(Of9_GM_G5B+&z$l&iQ(EVRz7CXt+9c&>fi*c;zI# zF@;qkacv%QAVf8HQRK93^t=R2T>;X`$3=0R#FavMQNA2WGne1-2oVU@D&ayK9`&9pS<2i)QE!o_5;jOx7_uZ6X%oCM*anO;;vHv@VYiMo^f z3#08M-44^d6qED`+m|fJVUzJi43UC81jhGNGA$SDaW=7DOyR0=A_6?e~pCe z%RVf^|HeE4H{_*BTyJf+vv~aV;j8?`$o$(YBDeg2ztb)or9zVZAuIV@=NZ-dETQzwYe?WS+V4C; z?$FaWpf1(!O}_uJsnsHZlqqvi$@E2lsM8Oi4msghFQSHTRIx>hBp`qQ-@cC-h+Pr2 z)CjEv@}ZnSM91S2zm16UKphv#!oLbug{gubJLCO;J@t*LZwR=mhSIM~8mS?^Z=dCJ zy5TG;U$66;;x#V_h5xU8jQ14Km_d0t9yKpvp$2-M?;q@l9y(A$9|ZOu6raozI3%?o z7>o64bVPBdGogQ;nvol~p0uF#%eG6F_7}|o02?Ds*2CTzws%DLw|l5R3k6-M$;Wy? zFga9UIR5U$g|DsX@e(J#dIj)Ql|SnB=<3zmKRtG;B3K=gCkR3R^|OtNjRI%YgGrMX zX8!a&PN-Zw`9i$XdxAaUV7$*2yex0Y=;=)4l<8(Np2~-lHc$){FdI15w>~N*1+E!J zOY;kNoV8=DequiBUn~^ZmaZ@|mRD7BiQn5{XWcTzt$A%a|K9z-jI^7}Y}9z&8lc%hRY&J_M9saQ z4){^M-tYE5en5Q4{_^S4ec2el-5B2D{N~M`sOxwK+lR`@*Cq>wC)vv=PGbKzP;g@r zF!g@5pRI=L>;KP@eU88J0Yi(a7rjCv74+Ei!Ln@xwRSTmj$zi9`5){1d1<~5yR!8< zg7_i%HnGW#`XwK)f41zz__nqe&2#Pw`)81@9o;Cde-8H^JYyK3ml86|(6?G30B^Ae z)W^mfz%9apVjjmxf%O7qkWgiL`A2}nMLDpQvTM|U9CP;oObEVPul0_Aa0MAj7wC4Q zC&OD8>b}J1Y}+KBWV4gr4P+5N`iOoEzzIYEk(t)mTV>DyR&{@#2KP>VW0@&AfZB{^ z(k)2c>^`g4nSaneREldRvk$l4pZ$x>IMg5cXTV5Hj~MzJBux4c!M6Gv3&^|V&~}3# z@FjPmD3^epBD`wW{#fqhGy!JTub4L`qoxmg89Z+EI}2%|kv*x}c!^w43+i}!?PJ34 zy5DlNBjm)!ZcjM|xx*#-qIQu;! zpN~JR!6GzhW6>^ez9hL8i<7-1Fvs%>37>yX^eAdXlM>eq=5$x44zg%-%X*vc)+Vn} zs-g#X_YV}Y2_%(idI)7Z*(lLOOmel{ZT$91uBg1GN=DjT(*5*A?!^`XeNBvgOeK<_ zM4#UwA%0?cBF*S|uG;~DhLL{6Bxq6_PGbeT#YB2@V%XPid(r!->R;VN{L(& z9yEJMiOtAh0v39L`!8~OF@I9@8KvoIT)&vvL$D9YPTur&$+(|0`NQ>V1xTFC3S9KmSEOo^krnuv;LF)yCH{zN1 z7Wlik^yJldi8Ueq^wHb+a^jCjlZk1%ccmUA3PmSJ?!R}Lq`yF?3DnC7_d)!QSjp+* zL4UNCGjB948TKt%i~SWIh7%Wq0Ag*3Lt!{4@i}j(j0-h$Mqsqp5O0S;+lN3urM{vv z7h3uz#M;EqyQb=OA~8(XGZw&I-KtT$yyP_7W)DjAs!M=Qh zva!hq2X}!-#M#f4?kteddvSU=Q+p}@spgI;ZQvVEfwQKi+b{5w7w8Y(YtPxkk~}rc z-3OVCGd<;at*?`UM|CnCCH9}}yYBwX|B-_5$m2c?XuZrBEDrfeET#x@$V#@v%&f|{ z>!jUwHmoq*o;u4xWl?Gq?UIYnh){`uUvlc|3C2?xBlgCZ;Kgq|wKxMfI;0E=`a)b@ z;0opfUyH?7g(GEP{2!nLKFsKP0B$1*RPeH?je5<|bD~t2MfsjCI~+}q zEOMD}eUk9eb5e`KfMRf$~n$*Z|{2qG>(Jq55&jCmr>u;otL_oph2ikdu%TE@oquSW`Y{HNFl-7 zM6Ewke!6V_s^=(Nm_Uto&KDcoT#zOq)Hm02Zn%koRoz?1PTFq;-*$C&DCf6aG5BpI z4fj()D|joADf&fI09g~hJ|{QC5sG*=RlN`J!;g1?3~$soZr=OS3l8Ltzlk91clJ*q zM03P5$x93rEF^lVBTxNqPWk`7p=64gRDzz5W$^KR&yEK{uH<;~uOvjT#-vtJP6T6AlS;+?Sw9#0U+`tr!(xmVy)anC{#;KfVLX!Sv|{Ht@OQS5J1#=gS$H<1ut~ zzpjP;eP|w3MaWvivwIu^ZPotaevs9GVJhz}-6a&ZbTVUR{f^+?BYrajFT!B1_mbJ+ zi!VqqZ!voC&-LGPzUZ&JJ=#fsjP)&3_ZJaT@#M(n8?-N#rmsgJ8mUvzq1cx7j?^oe zaWPcp!UM-Dc+#~xOV%i2R&F?6HcHo0rdG#haP+Rye2s-_^gz*eW;712hyEs6TdQ+f zme54B_&o^J@6|g8Op>K6$G35 zP@%c;W|>+l2n+C2$iuXAOPH2GM+HyN)tUOv@HucEIY6eM8tQLE9|G7?Qe(Y6RH^F^ zsIpuHJ8I&(r=390WvuSmL{4WT$`AjJwS zHO8J@qJ18jP<%`XDBhAQ8(#ZK8|vmO>r9#Yx0nN$Qu1y~;w2Vz*%H~u+DAJNd#%@( zpK>~=dh2-M%ba_yZ#UC@eX%zW2b_Vz`gg?NzAfq&wwKL+ZCGz=@?!p4Fy3g;9gL2w zsY%&L=MQ@O^lpY!cCKa3zw22~{!XN$ z22ojH`*OnqvJc8LVLuE%ghOGiw0g@Iuik(Yvc1IrA?homs@mFck06rL-LdKJ6r|ad zbcZxZNFy!X-6h?Pbci&FfHcyLba!|s=Y03xG57_0Fkr2@=6dIodg)=fw)Kgd4L;%V zCjF6JU=rKm!JlgDJa<;zi0?xr%c0&Q)SHO#?=ZHunpGuzWgFWwa-L|sU zxM0@<+?mV+a#pCmtV%z(+{|@)K=xB@PrcP78z^gF*`2N`pEwK}%5t5D21ePOjJN}- z;17KqY^6`U2O#;2WepgBdw=DMpMtog@b5RzM$Sr};C1SIP+o-g+|GPzJA%hCD})Fd zD48X#(Dah!r5HuRemk6xVGwD@%W6Bc3gKv0(bS+;(joRi#ag0R6n<-ZzYJx|@TN9a z5!t#L_B4C={PGUFA0w>4CYL8%;>TW$k-hzEDZFZ_@5lKLl#4@jAJ*M(YCgm^+g*C- zoixiYY4zG9;BOoH9dEJr8t@~tf3v6e*e*inJ&){52$fh*ULEr0G<*w&{MiF(pRp%= zK_)!uBZBXu9pA+5oN#GHcW zmqBon=2b1me$ZUN&*V_3v05us={CKvo>2=mD}6wbS8g_|iT>9T2e3DX0_6B-Hv}r9 zjKH&W(|^Jxr(u(x^D2RFsiKj#vkepwA~^^}mpj|Fe#J3r9W0xP2VS~YI|AETZp-w^ z@$LOX4P^98%9+;Ibc)KEnS2g;1y&92K!crIRwg@K8w2OP@D!cv$Uo z$%w%~-^;JzCrAi%w3Krbdr8KdQM}7^1Np73gx>d8IC#yYwfhX#hi-VS9c=EvNV5h~ z#2Zuy$iXszg>*CN;ue$k?kQAqMZUGgd{DDEv4W(Ja8-i4xYw1~#}!wK1d`B67C4D@dbwCR z9To+v*F%kdnJ^bDhaVv$B!66(%{RX>xOj_m*Q!COrWp}lhHt#hE6sq> z6)eHNt%fQo2?_m_1K+)D+>2> zd)G!-rCs>^-PPYH;W<&!cA^WS(RU5{Z=Lj7uOV)xmm#J}a}bCtFonLidjaD|d~0u% zvoMnb-Pys*si{GS3xXRQK}>f>1qPrI9<*C`I6AsP>1^RGe6E@ps~vXfppYTr07y&< z@&By3g#kGW8q%?g^OyNJh568?F$0!T0-?$@(zJEifB9>?dIRMjH+ICeZ1z0lUy(YDc#VAw-Q?0mYc zmb4)P(Wv+zlwu3erTyYr?5z}rF0tunTzDg7h2K4RpMY@V2=v_pPB@U!YY~ADr2y`W z>%M30jGptj!aRl@rEKOX)#I?kO+vzIUtz6CDsEr$?(Uwy*jl z9}t5KA^WJIzK9fH6*f92^g0L|7~zRT+ZmPYOP@YTO<)L;_}0fP8f_<2c}a9*H0t)P zLeOeY$`TiMH}Z(i7YdfOeD;Z(R) z+~-$$Y`j6L!K`BLEZ&tFkGLrnP;Jgh>U+B-hdyS>IT=36+rWXI<8x4Ny7q@)1@G%q z#}#1+RL{imidfs^j9A~KZZgOE|CV1kgHqch=71vwsB|TJ+PB8d)Kbl+Ha2J`J5;)g zyVM#CU+*3_U^Bh@#7nG0=lJzw-hU5Ss20H3`C?P4TnyZ5`S~-c1*`r0&ZzJt&gkE+ zJC27M+OGm7FAo~huI;G+k+9vTcz8U^b26d)k2(5r^k~T9d)Sr;Bv#a_PRUoXQ zqr4Mhc)jZMo>D9LZ7>98H&^!@cp>IOXa2$a%FIJCn) z?YoEGFnbb*$QO7Rk;OOuaOG5=9wx;g`aTIC_g*LFk76>J!YW0ywn74-PQ{ejn@q^__+zB?$6>F-zF_ zJjUU!7OPjsvH#ssoznuDgz{;b{ z5(1+vUNKc5ROkNG!>g6;_xLXp_!O)^bUKXk=3*NR;ckqYRlUGX!nj~#TnHNk^`Ku% zo?U7#EZ6eL*=R7g$gsNT12I(G^qCXk<9@U6`K9;RYPC?fxw-RbCG(YsOy=o_U+t(E z7(|N(yc%lXjc>9T`=V=uQ3|qgLANYLhP}+b^tZv?Z5O#57f2=3S>9Fk+ z=x|XpJ(sVEPo{D4J!2&?mquQ27*w+xU#2?3lJcVNcjCfd>C#e`Hp~Eff)xqgaCqWm z{(>$k9zPGZ9KWV2dYFX$)VMTNXBt~6ZbH`U|LGNet30C}yD~;~R29@D0s+&YM1G+^ zB%8J8O-wtBM&g>xRm9h<7dkSEBF0QC0w$DK1e`xd)v*g1Co#G=0c!2{tU9imJ@qh< z?%of??z3!n24SZ2EeqL|I5b~HqfDpE)brex3iJS)XOng$zsx$BE2x1KU4OC}k1DSk zyGV$^0fM0I1phu52a#B(fd^9v%+)+~UN*0VFrJOa&l#Kt#G(9L$MLH%Gt7tYlpEn{ zQ}yH{pmLx{?UeTC3@(io`|f#Ij!e|3g2VV0?kO{AL{A@lN)*?zPpxD9@Ggv>zkXzu zUZ?!(miy-cxzp%N1rksQVDE!rf3JiuW0aD2nfjF}D3KS>?ql@S`OTyG&(Da$7`XJf zD*rg&KTK#cshKpI!;I_nj$}UEniW;PqmjU?a!@5@+JpVbw(^rdT7ruSrdXs{rh?ST z8!AuoK!ORyd%9G3H^l>aPk0td^Ei2@(tmx&UWaDiUB$SzCXlIO6BfVdhSVqo$6-&Z zmmPmdZ_}#qrq!pivb>Ldw@R;AzW+cQQ13k82JxslKeL;z60I3*yLy?9EYD6is-U6h zx@6}+mgP|JyhUz|w!t_3-G*Eo>l^QAsZDc*^4;Ef8m=cb2_IwI8Js)8@_ow2NcH&h zh0pcJr^KYq1!~-9@Z+q~<1h6<#Ml$reoUhLt2)`D78hJv!xyFt>qfcBr6%8g@9K z>-|?Dq*#>0D6pnNNEA~GT8=@cV!NcB9tkltt3`33PUsUjoYV znhVkEGL~vIdWU`4VJY7AHIGj)qPsD91Z24;(W#n3ME@9(HN;x6p!I>Y}o;k>mYpW0N2XsFO%MOb(Cl#h}`y;Uv+KRr#|y zlv1>a&46R(`D?TLyQ8!$U5&C(!T0TEn!+Rq95md)hSE;1uhJ^MHJ3hy0uzx6H;Q~p zDZ(BSepgePkkgRg(CoxP@O6TC(CqHrcq?02a0xuR^$@vAy+pyB#a=U=tO^`g^UvfX zEo~`iVs~L^A=BnddHs|H##@_>VOH^+612S6NtSab%#;oL1@Bs2aYUzodj7tH%usuf z(^jMVwHx0kAZ(^k6&H{>Dxh1-Ifb9o^qiy%_xUHTSGf27)cYi#H=erKg~h2G9xo&n zSY@+O{{{QS45oRQO|zWFv!~|YFSCf7>Dx((L=eFt9ST~4a3m>51I_{7P#-OHA0EQ? ze#LP0N5+@FI-G4@M?xYlx^{T73Rw%Z zT1oH-xKDxp(Kj%?{zbek=%V#^ZpahrdDZho$MW^>*4K{-r>SEu5Kc*GRfPL=rEiM+ zq(Dj@h<9H?Gr$trh~#`uE(&iF-MLGzbKl$BldvS_G)H-s&kJfQw~7d6fw1`)bC5 zq}8jiFn47~(&`Jmu%_5uuDTgRoM|zQl3xA3>U%ERil>oX2!=EVX?{5UI>r8EWf`@E z2k;`u@edPPyrY<`m$QEZjZQKpQ@-(sL)g6jETRQezmZB?O`&SlqH}?FWk|P1{S8dJ zKHNro!_DS|Hp9YyTzOb|;Y~a%#Fc+JiU8nIG7vijHZGQWW*)|_+lF2Play8`Bb-t1 zuG@uea_d{s*8h`x*CXjLeBm$=2{XJ8!82V@emFYv4aFha>2asmheh(_eK<8k;a^p$ z6)?-RRx}ULNUnchu&`{HE%Mq;-xKLe`?($l0B4=P2C6$9q3`$o{O(nZx-a5%JoYc^ zi_Q4kmuDMLl1+=(NHkv@IfLa>!&cH~=l8<*{*Ens{v)GYxU}+aO#U6I<0$k6hN$Sv zzJK!aLjN#W>;2@n(4R%~n&vjr=_%W9Z7ZSk^)giJ<<5u63q_)22+fg+M@cx>+$k-~ zEh<6foLrh*a`O39S*F`$w^VjibyTXl<6hAa7;Eb9Z@LMZLJ{F)CkiZqogzNR|6}K) zMzKrRviZ%)n!qItg~`XZL!PV~EvaIl zZ1=!Nr+Hdgh9s6x(1g<7v8+A^ROGAyq93~Mxy^fmpaW#%F|?_?1xGz6YE4{ zULMK%=ljTrP8-jZ#=0sT&CUhQdl#1~9ejk@#{cs3kmL9F+ zDR*>HF6d%wY88oPXP74X(FI%eu|JcuARXF*`JFKIyt1X^7KNRK!D*G4`OFf~B~-`a zaWvx8eqq!-El7{2MuZ3nh1JMO1v&{Q2M0t@PKuO2}qVPFh&(JY{dMOAGAvsR3Y)}M}rHr ztwcQ3c}?-_LA=XZN<-I3p&YWn>Nq7#DSfO<-NH{0zdnY$nHIPj8e8RYdvY7uQBVfU z!Og7@BoP`hcpB;xH>@0@^_sV6MGL;RPG)BjY0R@AGMl#gQ zDpxHjr3^Fm%cQL1{8jQ)J&=8+nKMyAD#uHYhKWT2XOTn)XP=nehQ>Q0s3-ZNkq!p5 z(7M>Unbjp_4`9QRI5{~Z#o5R5MMgeme&w2^w#wF7`7&G}o)3AxuoQu@HDR<(1+VoJ z#@B#VZ9KF3xmQaa%bQ%{o4`FX&dV5)V+8y%P3cZU9q=U3{8QT9afE>V_i{-x~jbWK^G5KDWSC|6O_qdOOQ zRGX>REoONeo1UK64GHYIK;azAd$MN}zAFj%r??9m^_Oc0!h$$0r4as3Qaf?##N4Yqh=km0hccXL6^%O8;t+&68_wlSnyTOBH2J zh!KKx)zlyxw3$rq?(Q7UgXjdF4~TUq=d2J$K~0vH8yNn*L8?e*8Iyon+IiwD`#%p| z$acgQBh>lO#TEetn%HoP%#gr+ z|LUDv0m)R^P^R%$?ziYLSTJMsDe2d^>n}X@{`%N{LsG2$?mmja!}a?!8^B`TWswPe zsu6DXIUAzgcl54VDIby$H*^bCB=fn+tZi@~K%`aj6e}WF`9IH%1q<()jC3LcxYQt)mX3Z9W{O_^9B!Xw} zx?hcxCXEB;OKonNIIpZw#N}d;Xl55Wj?1iLi71i5V+#Svu{t04NCcci{~QMbyU3r% z9vNVZMzgm2_&%@|z=4&8--%tOl<&O#OPL2nPTpSlc5+GD0f}E$Yc(^Zjtgq!2%Oe; zTQRZajR73k=mcP6c5MOJk$0*01vCkDecPxza6i+|(N*P!arXp>iW48Gw zbj!6}bB2YR^+#1L6pX_W)XZ-NY;?6LaH#uTy79ea)3?gF_R6A!Ys$;Y9EVm;^6U5B z$g6lEkY!X|PA4HqXBbDeNt{jm*i5w}GPU>2M_n_C3J7@rVP{_ANG3EF!Ae(KnSQGu z|6~KsxU!X+;t%1%s@AWf95zG6tQ+Z}VQU(|+Qnfh;?rg`KV){BW{Mis87ZZL&1C{R zmo1I&JN@SnA0mbmzOX_zMBa5YvgKkURWxGWmhqluf!cvrcVyme!Jndd6ric~esA43 zqImbX`+P$A^yuVgUh#%ojAoX;`W%2NATtbX4$Qz-QNG;P24a*ek{fE9_U9YQmuL5Z zpJ=2J9WjMPpW%6$b=c^KJD^hW$GZx-4+8C8+ygIs9!{l620(1Jj;b__xDkiz+t^-D zTo`IAz5Yl7RjNIe)JRlp8WZsZY?>E)r;rKerbXlFm+&ldLP0?yfqUJ6;isj|a>gV{ zfUGY%pI7dssu|T4C>3?ylwqgf4uQz)E#3`y{>-SGPgLzz+NA{DI7cD~aqc5$k(WL) zi7JR|)jwzn(zN5hSZy0m)l^HpneS#t%&lrKP}8tsNI~-*Odn&n4+ z#)aqU_m`A4papty!@V;R3KEPoq2m!KPh5Zwi2h5D_Olpo?FV6SkO_Un?3Ez7dv8**fWsoKzerWHcS>JLYl#C zZ6`qUj<4&+Bq)05Q$V+APYxRtfuew3%!tF`Gn*BeA%xhHJh|Jny_MS5_%Pijyt_aF z81Xg%(jE)!4EwPQIVCfVqdeDksMk!IHO`%m*+xI&z+{Dep^!_qss|3|FgIfmV~9 zzC_Q|dRN%nRiS6bXh!AzNtWL+s#nMyDzL$i`*oYzoRA1yR>pRl7T8JkC$P16Tz+`Y z{=W400Ij^x{h7*2?uM>OjmhG7vo%OJzuFdzymM@AEw-P#e`{V-Toy{D9*ir9w|qMT zuNf^px@=}Gaw4C51t)qjJ#o^$x;jjHdX|LlZcLm%=}neJBK~W75{l4Ge~CfO5xKPO zS^E-t;W+tx1uLtT@uHu9%5_u&fC8caMaYM1n zd8Kb){4+&X$^hO)L?a2O{G>#U$WyFJHeX@4>T-R|mez{EeSOS|T1p&;3BwUrmD9#1 z9Q)(Fgg1k!v0gy`ky}se+lr>$0gL2)y?x+z&Xy7{iSmsNmot< zOH7^z1t|f%Thb}9X|Ujn*{mj&{5UkaO@-S2T>$c~Mwq-`Pu)JTq0gZ49%XnwmgAIB+`d3t;vOFHr&GOLgX8`8&*`7WuNt3g|IX#& zON@{c-gr8z4{S2Bb{NY?n5|hLn@;veF>JpOQig>$X6O~$H0DBD44&?%?VP7oQ8#Ku zEcce`I7O2s%k=NpdE97eU(}0HDoxWSU^w%>7~#1+N!eCWiTYJDsJ@$0AIWrDXeN_X zOFF_RCs$Cv>NWzKwp5m(jn!92 zZuMyf`StaXR*sRvv^*ngitS|43hqX~SZzHuCfaO|G9*KIG?FrY8iF6(PdRMA+34gk z#SpB*l~U!2+XJB)cSwn~m^2$p%vM-(v!-m|mRbh9ut3b@=|UI?!}=f+6cqG&9&P#S z+UIu5<`;zWIR$Jj@R^K@ZOGUkrjcz_HQm-hn|5~L`u73{=U&A!&p zW)hE&UI0*RwE^Gqf4G4A+{PXe?Ho1&qV#$;D_DySAOpCh{IKwig2#1l3JS8JLUZ`3 z&!w5? z6hpTnDy6a;l}Yu_@|PAwB$}ls@Q5{a1>bKb7{`?=wG8#uS=0x&Qm5t5mBijw z(2d|3>LibUQ|TK9l6ffms}0WnXtqimGint?WeyzFA^rF-)7^9LijWczh>)et%*}%% zt(wG8k2Gv6&WRq2(xYWI_#S*rZ2EH?GE3y3+@k@t{c}n|(tk3jsm=DPdT+(>HJc@B zUq|B^ABO>3c}t6Xk;&N&mTB%OysWuKm7d3GkmHmxHqFKhq=eT2-4JjZM3! zvr^Uc)}jeI&<9}kI6y=CqwRp6W6c06pF>wg9yXKcoVs3MOS39XF# zgm=@f+^tO!fvaZMue-Vq2T|Yxn?bp)(zy~0KArv8gj`9VmV+t@>MzjgCrZ_o+riwp zPAry+KtpQexyb2)Tpvd)O=tfNJqlHfJ#WVE8T|*nq?PBnfzSi^D&YgX1JKp=fxL9T zg_g#klbhUCG^ZW-H?3dFA|LrQP}n`^MBQ9L*!s6t}dZUNP*>jc7cHFF|^*wX0ipcz^%;A$pxb^m^`So7LB zf94en+QTDm{~{oGNO)^7%$v>*-hUyn|rUqX*sAYJUGLbO6Sf0|+Z!xLSG^j4S5Q z0+9m?`%)?B=1rQ!7b)ZQa@gN$?SZ1)N+`grh|=uhB~tYC>`{VW=HjR8mpUfVWaQw!U_ytt$|U5P4Ja zY_2UE`YsfNS%r*QU3^$2F$Kk5^c37H$-fW{G{vQ(m+yZCUUm>VPvQjq!h#Ylr(Chr z2e7r7ZQNZllyzZfQ@y?Of`M{0Y)8P7c_YLYIffwiwud7HvIixgcSE}Cj6FFa3=)Di zL3dfYO+VlxBFO^V+N|j`IPpx&WXxLB67l5J-Qx-h%!n%28s$0r*Lcm#qih)=ZO{Q=ROP7^8N6z=~okHBtINB<1>=G?#x&*mY#P%VT6>+Ls?H?8$? z8)Kdl%eSU!>O`Hy-0j(4Vhm?&lfHzk*i1`(dEaeX_x^9zVG#@O7u)~F`(lNRA~BrI z!>+&%dp$qD&#A96#fW-8%OE5)t_GLbHfrIaAhcReriAcRIb8o?(;QiAzt2mc(ZGjRdqT(u{u_o^lL_z)0FjtiDILqN((qs_d(C8`M|`{uhN&2ky z^HS`)C)drFpF_d`t217c+9ffhb$YrZvUhQT6|&2<%zr)A<4ib4VS$CiCkF<6A)JpV z!mqElIe!x^#!82(2Ra9_;T-g{cjI=SYLdkk4WW_{T9FrtaRu!ozz_tgw)4XHg;=8d zOv%j!)VTi14f)X>gj|_E{}Kz90-sW%3{OTkD7I8_jYVhU1ZJIL^zZGCC-OO82s$aO zUu>m89^|uq_@%u^{9wR7iR92p7dL~-3UYH3a`6eUvzCiNs^aWZdDRkM{(<$*efP7+ z_VMZdSl1e{R1lj65&Av{r)**yeVF`PY0h>kC0Tx&G$u>0EDkBf>RQZ$tTm|}RJWua zuKh>Zk971B!n-Lgc(#~VPm4lvk@ED+b2NRrv$DUBMi^wfr$cM1>~#r=cHge0R$LXz zO1d{Brl`xo$wEt&k<^`;Sm!B%7G`ADqFtnXbtAX*8B8^BcOuv=N8Y4uk8$j|$(~j* zORcDL^hmsqEr=F|4!m+!g;mLTvJI7oP)@R2InK5*`gI0c#X&s`AX4}_gm;?pJ{ zUZ!&PL9s4E{DtkKOO(L?2kz!Xb8kMmmD6#;*TTFy*-`#2rI9uKvG-p1w9Wgcyw0+e zurG%IN+SyNH@?%l5UK{hK{z8cN`mh2?j=n5xd=^kN*pjp`q~pwUQ`eftJmUK*ia8Y1#befH(Rr2TLQlSSrkqOx8`0Nf98Gk+3{V4zsGns~ALfKjl6+sw6jv5ZXaLR@ zLiGm$N=61|kKeVHUL4_3-Y>L{s)FAqT!^j4W2?47`ej-{VbLIoW>nLM4XjAC4GCd+0U9dU%-I#M^C+Zv zpl7Z90EPI~gv6Ho(@lCtBOuE6E)ZIQHphZ%Bur69NldlqJD6b^65H^*-YUV=%q)mF zBBhN}kZ9KhCP0{CwToo;<&MMs)nNm1$T)Eb-k)NC$IYlLAvU}VO*f!qpa??|tDtma zUz{6%b^qCu1Gh9u#!<{DJ{BTQ@;ON(bOtHVl$m?KJa%Q=`9;~BWkpjTe`q?xpQNPJ zbu-BzH8E$kwF&HF`C8QT`7Aa3LtVno^H*+Vv7%B|D;y*pGLqVHa7>LBs+_?gYXf!6>90(!nH8Wsw4>^t+3PPH|-%;Lw_|$nyr$q|Q5J_gm6Y$2qQI zn}qtSwk~wcnvuZ$keacna691QezLHxeGp%=0jCbfxa^&N?x1Q~dVHC`aZ-3(5xK5` z0f=!E`vy}na7)k3*)x}C+rmC=!W%u}tgP|p?#(*uzZ)LK>CjxQNdrVMj9f+l`f?Vs z6dwog4-t#(K9$Tv4&*@a{@ zDiMj3&=FyA0s}57Gxbu@X_nUNK=UW(*tH$kz?vjLB`f&FWcc2uN`&FqbHO`tV_`lY zogpt2f1?nlhlfhNXuJvain2$YrzBd8ORcWr3J>P1#P#(kDxlo_kVNneXYQ}Gryx@q zy^02OV5Y^f->7nPu}Aj@&Ok#_{+$IhV{fIf&?ZTPpf5f}gK}4eh1rpJ&`JCK+LGdL zJ~Ss-vPy_NY&Yn?o?{re8cfM;>6Bqy(b$Ob`V(JNgT$_$mBpPeHK!FCg;Ar$icI~L6Dy0Z54>z2`q`S7VdHwjZ%?DPD{}`RTcX?ni4_i$y(B(K&ij90T zD2cH4b2mMZ2xCoppKyB`RX1Fzxc23S5M=EP{=n9}bDPAg%k&KwKeBdl zbAwl_91`qVAw?VLwhWB&(iDLLIgdp5;w74)Sp>Vg@pg$ z{rN<|ar7C5-(4yF!J)+Pi47vB$WNy#b(l>baVGUBLa*7GImA8@SCYdDp_!hD;$S}0XGrZYd{>QG`OHL%wcGAoVTAM1j6&<>0rir{1;@UCOPni-fNa|pNul?E zqSS7l3rVE^7SEx8%)(X4F(j+idD?1Vbg58v$4)9^REMqF+oiuzzfgQ&R6ug!i?_#c z7ZqxB}@W21d1%)yv$Qv^5rn@xP4=)-DSddayg8WQP=J@Ga ziPq}_D*d+0smCVHyMu}RV&z%gft6Z0HyP#OGx<%no-b6WROFlljz-?U9Vi4s;b>uMkCV#!dYzINs>5+k{d;N6RgZU`5Bf zjP>#pKl){R3dDkO`*ozC4QjRCl8ZMDld$^+)FhwL~)BQHcYa^Mn zJpCeu4eZlVQ8-$~jiO(`1xXj`~E$B$sCh4 z(hgL4>)25#;(Y6b$Cv%O_%VGUU-zqs)5lb9k_>anh6c>PyfKKm=9RB&6b0F~YaN)C zUTDu6TlFALw^ z{zMnU<{cvQeK_rye=hB0kkI$J-4Z<~5p%x3U-`=d&Ztx9#db<=J+FDE1T82LTv4># zX7$}l1D;Lebsr?3n+>&_?Q`Y72>o`_wYlDi5t$*x>(@!CDf_qL$#lNn>KWg3KcdCm zs1Y@sHSo0kJ_`fG;TTTok=*86FYTkWdEhK4(gpa>5=tJ&g!oqW4^wnmt>^LabH=_j z-QH-&bG1F`$Ui}vLf+)FPOmsutIf3%=zH{8IxbXpr^{2+Gl&;G_A3Px5`RsFA(1@4 zWPVN9gpHu~r6;G;luC7Rjc7^DX|$0imOE+hJEzk;apiX?D;0Ye7=0LBxGe1_s~SC2 z`iOU7RLwbCEHj%aPR&~RHBrqr;Wf44kG<}eGwX5Mx;C#U(}GRem;S<9mQLF z|F76~LvOpSnEH(Z*jFzD=OVuy3gxC6-|iM?&&+b6YlZNP+Om(*s}_~yz>LRFk!*TO zQG`i?nkI4Fd(zTbfoe?TfPbKN0QSZN<(BavfooAG{2iuIWbb#2bQlHN{IE1u_B-lK zZ*`3%x%&#(&Cj?yGKxBa`Bf^7Nma4k;R^9_@w5Ty@8U;)hsdbAOdBkCB$u%*1ksJw zQdJj>!t;G0jC9gl@Ra>m`yk`>Io2(=dpWM3`ir9i2iRXER!yb(#sTR%3}~vnEfC)u zgN=hz`raLs)oC+dzse(=C!b<$3_(DAfvLK9FZKp>+q^7cZgw~NxT9{9%Z?8Mzf{Lj zj0qOg=0-_-p5Zjgay&kbih(&+;9p)s?OwP#Tu`U$bri?vu}R%-M8R3+n%}VZpT&Y% z2Po@QVc54d^qy}Z(nc5u3hU>Bo{_a+oT=aHjQHmUlIvGK>NR=XUM`3~F56nab}h zL%JvDO+$8(d3xb&#wiA|FX_V!wfrv?h$`HWvqsG_(tRpi6fvr2e7xvYwDoDMBX9?= z1q~DQafl#eD;ifrg32CS#LTLJ(jKwD><03;rjF6qGaG1`$sfA5{T6HCXxCW^b)nPD@O|T)o9Q+$b9-%lzV(pt z*J`?-)RWj=?u+9tmWHj(d%D@yE~TnkSbvCK8o(HJ2WzUq$xCYv?H>sa;?w7|r)r@2 z>yYVk&3zt}E!jP}1ZR1%#9l0oXJAS_Vew*jQksK03V+_KdetKELC@wPU zc?~r+nKWf2B;*EcLTcY@J9;L%UqxnSW_N5aiY#M1>H$?V>yZc&FkOg@NqUtp!u+qU zTrE{qRG6rP%qEuILL(1vQZpA%ML5cCVJ9YiBh^w02}~-cuKtwQ7f9SQvLPkAWcCY8 z9rN^Ss%e=L2k%*j z_U+nI$aFY9m;ZOEB2eUp!atABfuCUUNbD}iJpSbF83)$-0d5Ee9gl)1czAonyvion znfkJD2;g&66tYL1f1m0;of?<(w1}n#J^SHjFrfnEB?N`8p~{o5|5S8wNPMGS@nW`~ zePZa$tr&)TJZyf_7+%FlIw3`D$kYF!^k_P7}+t5#}6lbQ4>K?|IWk3qu( ze%ZUm$8U1D-cJojzJ1|jn;>8~r5e|lI>ToLGMwy7YeKw) zEZJj*IU9G|8Pxq+KCw|!EBjHxjkZf=-W&KDm3s7`K|P6yw{ZZEAsSJY7)$I^MZbgh zU8&9QI_+%b6QO@0MUaU1~ zt72rks(pP+Q05&!TM<-HRIoRvGP#<_)oo_P+Tl`p3Ge6lrnlJ?fgMD-3PJi@sL-$*0IoLxn0uraIqA|L|eOseIzBhQipIL zk$K6}SyPi*FLBO785-x+aASRIHbU5eV4P_mP=t@%=rqyaBBNYq<<$L|<^NvCTub?X zS134zJ4{w(-FljWVk?2yeWO`|){PXsBMZZ`K}-s=seuT$&+(6<@FWnRv;18DVOlmp z4lBOqEmy#kCCj0t!Y7sNG)4!&7T-bSQmXXL21dQ0P=&Z3;f}vsOhS;{erx|;fAeUlrgED5_Pz)l(N0^2e*B2Ph?Iw(7Rty1Y)-ZGksNKKv2tOmB{eOL zTIA^@04ZuDz2O(FovY1&4+AwL=j5L@HJ(aCR$B_!?H#%5<&J{-W;KEO$C5v6%sE8EWJ9sYMjOOS{;x!=bt3io#f(T1IF+K1!DB@+ z1TWU&dc3Uv1SX;ny&dmu=4wQ#lwJ4D({&L_(f+-BzuVl7(*rB)6-P68-|fJ%TTMWg zP;<$%KdmFSY{tvggUr*a1Uy5p@ef-gnfy+hz`HqlMVBhAPY!;ZxL6~?J1$N6ND_&%Pnmk+@S{j~M^55@h(k|ydK zn?N7GNWQ65*W;q-UhlgrRU_8EKWNzrMm?y>e(=QP_h`g)hx1J-(OCi?bepLc>TRi} z)u$)g-JJ-8jhj&jg|zOj_h~ykuH&|u)8&qZI|}8RSSBXt$nNmHR>^ng8@{qDW^Znq z%B?)!4Sn{z-^WMg7LItlyH25iM@s^WX?Qi@m0Y&>oyU(T{`%mtG;h6;PdW+jvlTlsW`C)pb{S}u3v>yi-|MY?ys zxQB))W;Fh46XC^Fr*({yAUIULp{ zxWj*D@^ikInf3RFaeus=?E{f>pv$^KM{G|q0h5M843$J+N(a+LQEUw@X%5GDb>-=b zcXzHfe-RM!9H0P@f43lki;3x_D63M;BZ=oh?HNeA*yBkZn0%QVZy^Gbb{J~j6Cnhl zC;Zdz=Yr3A*X@xAx&hwKuK50aY>@b=#AO-@`DPzNb_vr>)ysZ4Ibz-L52B2wtLxg^Zk>XetG9}2kaK?n#4;uEr{w9~ZbQ5Rf}CL{&$AGtXj zLp~wSQr#WRRJH}H+K$6qW)*-Hxh{7KbybXZK3r4>=`#6`6cRRyu8p;evK*Y8QMCl# z_;81{)r*Vm>9yjfHnvkHOh9|4c1-1M}Y*N@@+FeJ# zduzyJAN*W3$iVOo6dp0W56+`7frLecf0XhQL_fcB91%eNDY!7#XJ9b~yW>%9{4kd3 zR^L>tBX%^7RLWnAH5U~XX)}u{nO(j6-#h&^b@KoFUy&qI+nscc%=byve2mAZNlk4KBq>o35IaRSz)@W041lq2x3{g6aC(Hk?yU-47wHhkEkH=Tc}i)U$Q@8yA5ZubfWKL>aJJ(n|B z<0V(Oy~RUl*EESY+YQTYqv;N7xG=DXXoodFteIO8a!91G4;J`^cjgW~P2nPcQe*1Rq^T4s;Eg zv7b_wF0Jxc(~>Eblz~`c0&Qz^US6Kg+B;kFi|0&jfT?F|al2RmAIeN-$zYg$`6b-# zRr}k{!5F-7puUw(n0l3;YXUh9z7=17dh;>d#&u~~IpVVC(7@t;n1 z5qe1oS>c!F%d#fE{eR<*$45;NYnHV`%xrdSun?}F0{pz;@A3z#W=qEn-*^AU`oGs5 zUN6B-_`z32MaOPh0zNcb_3tU_Qas|IxUaDOQq@p*WlGljk>_K4L20~Dr;Y#T_9%n^ zr2SgWt~;~gWbMj*MF)pkZi|ULNo4D)qqkZp5_CYN960dbe)2hadul;Gj=AP@@TKJ% z^@Ql=d3QPUuWuDknK{{q3ys6?L>>#WJF*1bWQ~;L8udGkI&2nN)t%n>*VSMUT2vvA zoivV5opu7pnltCkeW=7Bd){IMyg_xM^E|qkq`}Lyv@`{VK*lpme;_2@O`OW=A^l=9 z0!On;k^r(I;tmcDV)?P+Ivq~e`({*nJ}VJeovfi18}d!X=I~&T<5O7?Up+*lJp_Cc z?*1~%v-U9lnFshglBPSWl1blq4pQ`>#(`kRp`!;c?T0Nq4*Or^r}vYaUvJN;x%-Ok ze&j7lPPBN#|893ruvuwTr^yn8vMLUD-m@HtsI|`*zMSK!*r*A=2ZXWAe^3BIm=O9P zK()Rb1WCNAcCwC$hj5K{inKXf(trKZq4Uklscsu32$uaz*Uc!tZz$74XXoHO>yo@O z5Oolyfe9e(jc20}5MMijaFgm9L zm`_i|JPU4~L&oc~V}$Pp(~-#_>3uh1ry$wWYT>@mBoGplpnRiUpgiCv#SBH%jthu`=D zqwf7U-q}jiN^->kG3cbL+}4%E*JACMmb1Sg)Xm{sx7)vj$I!`{GEgnF9jQpZO8k#R z>)!$3#k5$r$yo!|pKu!q`=e9B*ws1Ta)H0WBmy-d5Bs^uW*d0}TwHrr187khY}J4% z&4=G@_R+lwZ9i)oHofudsBG|z4#)#Sr`}{x4*>$LBp51zqPQFu_h>i_i}n?BZv88< zJ#iJ}1baBKp8b?y`z#2$4B7jv!~Y+${yM6vt^WgsMLQLbNxncC= z@l~02jqw)twsDJMY3bQrSN=eKyO3L064yw1Kz*q={|MH9ak%>JpXCl6DL1+10~6lk z*tRKX7$?uU8x0Iz+{IUcBqPGyiV#3z!It3Ji!A=bz}gjENaXCMQbKrkpg)NZ3F1FO!9?#qceB{ z2@dOuzAHbywBH20FF!>~>>&qGb$8c}@C}w=Db)2y5uq7|AFchm@~=!_@!3VY3nY(> z68+icjkZ1Cm__2#9mi(3;5O^~?XHJl5nUP}8U!VR$@oOD30Xx-N=owGBk+4JR84*^ zcf7yaHt%EYjZ|)2hbJf|zi9QCyjj_}K^~I+d=-mw8Ay9dCi{1R=6|^iqVn|5hmzaI zlIz3ex`{+00{YI@yVE1&8slwMHv7%2NqzV8DBsvpYSQv-_0bB+6fPaUI$OKHO2iZM zwm)A~$l1jB{3H`oI(@21c^2Za9_JjAQs28x@*3oa88#s0zx}KAYk1rq0LE}glLz#Bv#;Uj1r28yDmTT9DFB5$I@AW%Zc6)w38 zuH_qu50Fw7`kgTY49!Yh^gOonIX%!Yu;1JNzoLCH@Vt&syFyQ}`(qxU$ZzkJz<&>Zx(Pgx zXJSpdZa;X{h5ZF3MAYM;{)^8{os>`15gJho?pvSYKYpd@=E8Uapj5cgENK(jdKi|N z7mH`nyaQBpg;H$JP2@Om+eL zF^ITH32~N##($pRq4so6T8)RgUw+?K(NLxbvy7DRa2dRbJwYrElM>eQ5)RQ)k@&KT zl6W<&MysI+WqXc4mr92T10^zRG1%8JPiz9|l2u&{B3*wI!?a5ygDo`G^@~MvexwAn zn?(LA;YchM(C`sCL#U$f)Iy&@A9n;Mp96tq}Ba>#b zu%~9mZr1uN0=?`V8)EQxZlD4tLA)@?PCy=|}P5?pJ6tqZre zU0eJb%ocqb50)�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%0D0lrn#^O*<7;8uc*19J z&G`=mrt-O~z}w{}Sh&$YyEv@R*oXX~TG>K|&udR+FdsiI=f(Bf{G+q%9pkfj-QE1n zI>1My740ZJ7i)y(%CW5?wXyfbZ$079UqOR#&iCU%ub)$t6LNMl6UytS5ZL1Kil2~M zc_526*}~SZ+u6n+gd>FnqkM*Nv4^2+ZY&SXU|*;)U~$wixU}CNA23gQMuSo9ry7%g z^w^RI^t?~z7yG_p5tbl6EK1gI!#1Ih9e5C1Vh!6ptyYhEFobbf_`v0m*zCAecm7aB zyy#;g#FYFY4=Mq-76Gkf0RiNK{0+)3?puD8*P%Eof2MTp_o53+|J zqx)nV;G%P`U=I96T|;+`uELHUSK9wGhbS7SRBpdDcltOi#68H-ENUZ%h^S$0ognR< ze@^*LGGhMn`ET5ZpBQt{kaKLC-su*dH~@_s9VgFktZre2zX$mRp2J%7;%N37?fg@;;A;1B}tr`+~jXian;F5f_AUaH8VOc&!88}s{!NPgTr_S&vzKy z;G#UMgd<2I9$);0pcQX*4C5F`9DF(n(ZoJE%w@}q>LmayG1hepT(oGK>~ITVerK@t z{9)d;R%^FgQ_7KmgfNdOGdDY!T-5WwV5@2jdhi>i@^Qms@uHIlGz}?hqr3Hb04v7X zhz36{X8<(%*4^v7=*>$C%J}8$=SGD`Uspk(YP6EhIRZtwL_KgEnVG|dtt2>Ll941h zPlJ5=PL$vc;*e6#7l4%N9Dd^?kGC-63#x*NI27(&#_&$wEhPMZjCK-U? z9c(CO@J6nB4+Wc!xi_5vk`lLsy{}BM9Uy)n|JCsPx$S}oItt-6|7JJ8!qC^CBn!XW zRn8uPqd8REwNJef?#w$3ayg33NLXtf)@FwUsLeQC-Z3jAtM!g{)?4mf*RzARTV8^> zZ~qxo2C?@tMbDQquLpg$0FyC(b8rV4n7N(pWTp6**18Y0bLysDpBwUkyZ%i! z^%QeX3+^MJ z1+&h&DF~DlI^_}SWr7gVg`%Oy4H4fDM4+Uxn$T!Qo=~u_x1Qu;Bp+DrY5Vl!J?Kq< z35(#r8>dfv{_Op;FH}Rr3|34Qg(w{&9?y)B;zI}R{5#T+*&#EJvMJ&|j8m%wu#b#` z$ZyM-W_${@Sm@>Uy}N1MVNqD8a*oD50nC`@`e*#h>mAll{>DaK|}I+r3G8z zXH1GL(R4ge8lBLyw{f_G@yvCvdf`B&9T<1V3uD^O0Y}AbGG1(TOqLl-`wzd*5B~Gt zU3g#-7atyui4b{3u$D9TKbZn{*Hk7tMix9e40D>Y^FgP(D2N?x9rZ-fAJ%CQ({zGoXcU71Xx<)Y0)NLMbPJn+NmNoM)FL<b5d&iPqDe~ zY2negU#vd9JoNo%T@ItHq4cVe;IaFI`~ZfORv3wp23U{p<|LZ7`a*e+ugU2RKz-~? zBt;T|dNI5ut}kNZ5hm(?UMFtIK^#F}pC0ZaR^wfpUxHXGe;|7|2zCvhEsIQ@c={Sfk}ME@-@n|_nT!S!EO;LN@+Kvu}3+S zJ{CDjpDDpu5N-P1jc~M}pS%A3ggcB0@)+P}VZ$G}D^niRsyOdX4X2k51HrPl!$Ca^ zdPY3lcf0ff&H9l?5>4-PjB$T++7F1WwyIB`io4)gwF=RWzRhB9`b++~LtJ%9FXJz4 z;bfUAm8X*GAOxAbNK)qJ!)sy;X|Cs&C6)n76|@ctP^e|RL~5NQW+M7unGe`NTqSyE z#|mrK$}oh`>fQq3NJd>fi8F;{hI={W3E^1L(;(P-PRdtD;6gg3=KvJ0x3+1+gFRW4 z4ER;J!^6YNc;Bu4eG$!twMetT+84xQIhOaCNeev@1ofz|u{qD%=l_OPi-?IkW@QOs zk6u-QcFsB)A`<@?JpqJ`+IlgmbtyjZlzc;1is|35hSAwYuLbiWhL{1?rQXBCgM;J5 z%Fa^v49Q=XPgcm&XSjO;F)*t;2dl$QqF7=({C*yRrma_J4%x@>1yI79Qdt*D9TQp| z07I(s=5KBoRREP(hbSA3l1w@nrVHe~MRKW$3>5TRmI6Pe1Vb&dI=V$Ftqqpiyvv*U z$>G1j7g?M&jbIRrhgm-M`L^ryU@L#x^H(XHxP+6WrL*~6hC%c`05xknxpeKiE!qve z?H<3RfX6!Y{rJ(i3F>`1;O^1mo<;ZQ^{8?fRcy}I%WdL2NK~)6K!ujWd`^p2FLW0BA^GuNCBAH1- z3N`Q}R+~;A=7XGleN{F90N7%c&k?T@0K0 zeMi0*5MUkzHS;0e#cWQkCavM#V{gya!^QmUEL)mB!fhW$2V2L8Zl27mFI52eYCpV> z)JuG@ORBgP0TB`L{|yC;=*DDlK6#l>U06;$G+^p^x?Qudpx2s)o$}PK%9vD7plKz# zlXwr|Pgdc5<^q`(d#3l&vAmlTcUnPD)RFPKOTx4aqK}I0>2;N(=ru78B)(hgaTi>- z*(wSY!stNW0F_aau3fV@Y2^Py)mKMF*=}!34?To{bPOSqO1Cu97D!5{gbdv!Fm#8M zAPOidB?1zXLyM%8bax|N-~HfO=ls5ZT<=;hEM}hA_ukjO0?AwlkwOe?XiSj(z>&K! z`5jz?+0_{=&p~ga53Jc46RF`_0Qb87sF8crBV1fePwa)(4qlr$fWU2U9`88e&(*#< z{4UAFmb`Njsy_k`A!R~>@3lm~#h<5h2I}3_wR%&#k@l&E!!u>9Lt6}t!40dwWh_%R*6B#s3hOe4)> zpzARD`SYjcAK<41vJCS>5RyR0e6mf(6vo`wpx1Tu@v7>Bf6{3nHzFSZ2Lq#Y2xeRz zP^T;cY}r~fs0s0kKmcMa2`qjer#tTrvRWJGHS(eD|0~l?K^&GFD|~v^X9-;|is;CKaPbqU|C}LfOV~ z(Q8Kvx+%kwNwUp{CeU>>bYdobe|HdmMY3dC-a@d+_ zeE1bPA#wf5#B{B_J=1z=u(J)JqsNpSS95A@x2tb=5M7u@kJMfin3lw#kxptl`oO_t zOD^m6Q!!bUc+hJ%CtSbvxcym*F^9DGK@yNhHGW}_4)D#4SQG}Y6EWnv^9SfZj6lYb z=DmzECJ+!;sED5X8mb_h(dzNvYo{7$A!&D|kN3F7r&{@K6$|+bkDPst5IG;bmJ|qs zlK@#yT^_}6Dpp84aNTv>T%FY!Fxm8-8w0LUl8S3vU?4|k&m$~iuJ2E9jzTIC423jw zRn#G`q9G-}E_v0%%(1!B>&vAvhceCHl)r{mR0|1BW{fhY8>2%epN6W61LIWN&zsPD zk1$#fBXa1AZ=MAlS<-w6vWMm@PoQhq#~_(c&Jc4nPb6noTfa(V{dfNnVo*LWpk}oy zap`fwIcL6Z6Zq1=!Wh8-ZK|lGMklq;bk7C#)B%bnP;YGPs_sbS4CS>9)Q`~XyH-r7 znD(>{IDB`-VWKs!>ef8w5>6Yvy5RSsQ$@)#_a7>2nDkM4#;&gcQs6VR^M^Ra%8w+l zs+Eqsbr8Q<$!KiVn|{Zo4u&5JrpRR>opv+wddT?6>@|Pgk$h%?!>?E-Sra6PxW57P zrGtbl@xkb;wJS6YBuvY_lw1DnLBWARuK{}#{^kgNKF&&@s2+v`nPrBAqL#@D^Y;4q z<+JYUI}=jsx6-iC4B-6GMtT30kbx1v`B>y3;~ghZj|^?esl#r=a3U<6B7nIyLk3kJ zJb8|R{*DvI=oWtkbL=7RYDpc->^lnYtNz)+!OraHv{Fq5zr3nb&=l89 zlJ{nn3bJNL8A^|~1VqM!*r-YU&sBS-?tV6EqM|cs5`)8#SZ`jh$d!B%(8=Z zb!!TcOg|C!-X_?9c!hE8j({us6F^nB zp!FNHPsjNQNCiJbi0KNbP(m^QIRrn3x+}KRM?Egqoeq)JRBNCwG(ZYVjFs9AD@XJL zu{F?!^&JCNxh9AXcb)92bex-q_<_mbml3qk-Y%QLN@xO0kL2r07fuA>y~73sM9x>Zgq{LFaohAxqg+w9S$^t z<|qi28zKi^L=jalJR4LE1MxHNyMQFof73~Z6s$o&Vdn#1x!gdA|rS9B>I&Rg6&`LxqN&fMUE*ITurE1APVV=wm|*P`!5n+45eE z>J6}0bOL-z8=+VF4@^Oy!go)MYvv&!p{CUNo_>jRYIue5IC2DpEFb@SyA}Ug_NY2R z&Lk%#z;d?seHB1I|5Ur?7ns&h8dwAhSi=!`#I%Zc!84E$)_PV5t!p7eUqDj&`Ni7j zqedEQBB%EEWOEgTU^Tk1d1c_py*NG85xu)#V%TS^@eiUCla`N={PAb%B+k!Z&;>6an&4{J+1NK=>c> z{0xOQ8u9AZB^WpJ7gc%q`73PL0I4fN3qt1PEx!>YiU7Z_^w8Z%{<=8O@8%yx3KTo& ze*Ey^Ng*q64Xs^RnEN|I|#A@VcOYhj_^gV1hq`sZBmDQDIIV@J6fI*nA;)4pw;YsyQK2YZZWzp0&j=JdOnJXr26>#G>QO&bg<21B|;XLW6`y9Vm~CtaH1^soEOXPd*{wh$J(sW7-EL8K@5 zCR=1qR!Um(!nc#-LvJOqA76Y}v- z6$ku@D?tT zT6oy%tHVZd3Y7Cz)-x!{ z?GRmwYJUzCpx^Y74)<7>Smo2?!`Qr+2RU>;W@3L-$&E64Ymic-&)F* zENvjlHTUuHKt1GAJtE!~4y3u%|4x{k80~;g&^aNjh_yjl|>2qB+6z|jep08)-CYf~3SDD2J&V!8v=P%ECEn%FZ3*Ij7!`cG)yj4VNa>eH&~`sSl6hC~O0Hh9$?5@7aBb{=NL0BXYr+Th;m4;> zsvBde$w^7Tj&Fven)f02oS&HvTq%bip0zg$Qw|S(a&i9v-MEjf z5N^Qwu-@&m{MZbHXLNOR zn8BNo3|cfJ!0xJF{tE!I6u`&U=LM7%H8zdeRxxA*H5JuR^$nyX8<ALW{s9*##BJ%R`iDOD8Ta$ybBFb78Pih0I9QDjvgG33X$O>mM{%fIBod9#I2EHj z9!r2H>9f`vO~)=RZM^qLK340pzClLCs z-e%cnp9xkQpI1(JH2IeU6?fEfz6~=@`rktwjwSy*gifYRkOnOOBsdTMykM#&-LI%W z*W3hri$N0105>>0S)D70S4oJEe?RkttefJ!Q6h#I2WWl1m?4`mmI#-~yr5%Xkk=FN zm#kFBBsVJ+_U^G}Y(g_6xG0kNw>0EmDYnav&xa_1Ia$>l^7uv&Fafw2s#f8c8L#Ro z?Y<|g3OKxVr~@@DP9M{87orD2LC7bs&LD$GU=#j@#ltMr{v4d>!albYJAlikv2kL@ zwdNM!zzEiy`Hv{l0d-rQAra2bVkHrvPZ<9VoS&n7Lr*m}<;fFK6dXI0SQ+sLp%KuB zzziTCc9IGYwgsM*(8t*6o?euGwrS=*%&mAJ!3lB*!B1KA*8BTg4;N*2&jlQ*FnTI( z0ue@SbBE}phXQ0^-gOf{UDTcrDpR>1Kdw66{_0tJEcd8#v*-0KJ)6qMs8$9ctGGu$ zM8&j$@0hKkQ6gM+f*n5dU1|Br*o)u_&r9gzF~^01aR+*5akYD58Kp-JSesom7zdyGAA791 zKPKME_CoXAD4*7n)=mYKngseNTH$+8MB<<|kLT$|#R4!)81O`qNdu2!mq}v9R!HY! z;=BK-wjMj4tdGjE9%$r{_eCw;+`dO792JIc7g|~5(Mtfr%>uv;@&MgJCuIVfjG=RW z)i17zoTO9V`RC2&ih&O3)gqHxgQjotNu_&=xR^^TV0Aw1IX_0k@jROsU9FWaqz1gk zpAL%f3CJk2p7EiNfQ#i39Y;C>WkIejG98W!OQZw=4T$50SS3k3_NE_KHE4igoTtp5 zCZU<5D~0<~V%z5WKI@a`j6S6YnotkI=74A7+$GEn$PG_{!$7PW=tgnk@7-$Wth{2ag%z4qkRN(4%qq>{FY-z+{*Y0cf<--iKb>& zW}ROL1YFh!A2oFGHUQ@(^?<)I%+`$D{-a#DH7H03Ff%!BERhmio#FihuX1)`e6@cc zd(xT2aVEbdkKb*y*S5-9ep7Tst8WIj$@3v}$T-kWuY8lFzeWEFUfeCUr*VA}NRtY6 zIo|qTcme{VKrujLlIzbm>_>5Z!2GtFftr5348^}u@#w#MuT{&%#nrnvcX(=xZVpjD z+?*(^S`PYJ2Dls5A#YmNepq&pPfBV$oqe3j!^`^`aK|dUgu(s<;Wa%PyLFB7>ch&X z6F3MRbgXbGU6*|JXUM%^G^EtLjq_W+OU{AjFlbZbEE}oVO}$pwjYGJO!6tqEH5>UX zJxYC^`f|I86zo#PX@{B(g{&Lrhl$Ij+yP%`(rsdmBtybLpJqYis1_K@w-MA2-ZYCa)<1!Eq&0fHia5 zb@ibyv5rbYWF-X$%RN>t2Ma7m4D%$zGWommMg>iY*Ad5!Eu`VG7~_Tz2QR2uQEI`= zKh18c&Uh|e;S5n8AU$>dCn$~%mZ9M8og}wJRs8-3FB2k6JI?;LP9^@oTbvMVRmE<% z49WmJfk^JDA_4PwPG}`ANDsV5+(oOJR6q#CXb_9|KJb`F7+(OI!8{-WJ;2}>78Yb$ zhemEAVBIVcZ0iJE&eQeC<#~44>t^bcdK{z_;HAjEO_zjDT{%X&W>0 zcXd!5fGN*-)8yKT5kk1+*MTI}rfaZuO_*NBr&3sDme@yhS~BooL9j%mBh~1jn^qc% zvbc8b@~@iW-G^Wl26m8M_S=hZ>>sm`lYJ)vCcmy2BsXq1+YCBXyR2ll<^rRQmD|l~ zC|6^!oF~W$hoOsDLl;3RJr}9e_A5wGSX4Pn0F4@htUlA|sE0IqVV!Wc7hUP>km2Pc zI!0Jaq<1?o)*1GBk8lj5Gb88gXeF77h@_Rl4u9E&)L}U7k-hDmUiQ7{YR1n-5>af+1dA){OH2NQR;C1ZHC6&p{t`5 zaU=Y@VSmU~`3R5bS$e=i{{HdhPOQHwz{mft4Qn@5C^x;l)<`ltFW5$((+M?|<6xQv ztXC~#j(9VW*6CV3g?HBlzzR-aa`{pToQ_jgorKUo6PC%S(TEHISp1(6kPRr!*BT$j zOvGXI5$2r!61{1im&u_*?}+MFP;5?#A5LMwe$rg)x7Q^)c>M;~Uj$$JcNnh9^o4^2QisEWkG8rnIJ+Kq9M_22q(Zdow zeqxBG3);P0mkQKkmcQ$%LT;P{!1af`-Jje;(-0k8}nCrb6}%q{)A)(TezTCr&jV_#e5Sn+|i zG$<;%yd!Ow=Tn!TE&A26rG-fImH@qf5F^6H?MjBH@cMXf$xyl(cUeheA?fUhB=h8P zyW|f-q)=jwGVMI!Eii*8vl61hAaUj6LW4(pp=x}bz?=5`FrAND(?zJCvH&@F^8MwLF8#O{@R_>`;VdJ_Ro_rt8kOW>I> zZ>@lAi2Z%}W!=+ri&&;D3`zXbH#%D?QH?SwM=$BYZU$rG&Au-&W-aO3tb`Jed&Qd@ z-OrZ1ugk*WGQ*3Y2o{w`duMGr2ldQ>3`KKZ0Mk#MdzQp{f=%k%rCU^4(wyzKpqSkE zwaeHd`x||Ddy>h-%m%BLRM79R{LaWe_xKB8-1W(?RICu7nHN0VYoF*c?3J~ggA zQ;ft5HOQO=Q#_MGWQV`MznTVMNzAIhc0Q3|>AEBF^LR>%<DNH-oK4Kv43cKgqr>`3Km{0Cn!?S}Jx$$~39$+@$`aWe9yq7< zU~m^(k{!1o+5gjI8^&~d#^^J2Lhs?JXSOJVGGf0039qS%pywGfJJQJdKhjaiWtU(WWHza^IlQyRUHfM zT`2;bR&rGuj1i^-I@_A=0L`yE5{)IEnOI>1$i8O$Zqv%sFm^GjFvrG8Nf8=Z6VV!b zd5jW1{Ve^h3nQVw!d6^RoDx)fe~XAAmjoNT!uUBj9mpjd`G1U!nOl9@i?#3rG>O6w z4XBfKGX~UrHTkA(kgcMa?4-Q3)hj=A6^ZhfES+gd?5Y2l6;(o+_E1c0KR87+o5;JT z9+z+oRk2SLJiR(P$uI-wfo_~16#Zduo6WCz#2*0q!ClazE)JAuY^?V%QTo9nVKVV| z?(~C5vQnRrM!zOo}xkoZwhn`?$<)Xe`qoy3c>stFB8H<6LciI%| zSa}*myLFL+?>kM?OFC}8={M;yN9>9hf;nbJzl_)6J#jAAOn7)S?WG{gg`7_PHY}cL zV}fEUnl2CeF(88{hAZVc*UTFthj5M@=$<>2h;_v&l0Frim}~r2OTuonEit?A5_rfS zGqp(=a|cwntrUl>S%*5N2@71rCgKZZM=lydO<`jE4)$gpUgR42l<2n}|TSYG2BGila>m>6$VFl>o^8xIRkJ#PM za&hj>+bZ6bC{>jtWWyn1^B|pYY-8{`gX=cowBf37HS5hcA;J}MV2KWuifn%;pj%FSAX+)^Cw-iqYnac(_-;}jHQgCQ|P1e}1!)K4Hnu;}HdE~x1 zZrzmz%1aof!(9nSnOD=3SsPzn>@5gWp;%HayYY=}aVNr*&BHDb)l{@65=q7TZLy~D z1?keyKcU0r?~1Z&!J21Hcnz#H`egtqhze_B_&Wc(EpfwIlxIaE{W;1D#tJSnR-JnG z>-^NKi;N)M;m{HJZ@0MLcr$wj!=E4_zR43APxp;wWHH8VV{}F6ZKJf+`0r+4E1EBH zADKsw5o&W}&SvD@REQ_hLh!%i{`w%434bU99~n2NTt|_|1!Ja{GY-{RbfXs!P$!r% zRw#kA0L~nnQm>HXa~KE2ew;LUV}*-Uv*SPqlB@ji+s1 zApjOUOpDZmc_0D)|FUa?cbAAxgr{K6{^htlUF*_*-OkTGkiLH3wwvzol&o#bFYAZt zWk?NfJm#FsETvp#@f}9)ucj7odZxve>%AJ&f3D zOGhjkbL9cv#eYieIuE8e^w^{%oIb!f$1;zzgPqT5L7O7?~3* zUl_M80n+F_Q2F0ur`%!HF&SG^%oIsB>~CF3FKZjnnfB7(uQ*invpNb21HU#)IPM>_&+?}ec)YV_X9aiVdht-YIvLe8h z^I<+}jusQ{yRAYn?j3--g>r9c5liq0zaQWbS@2$wxFVIDe|nad2=z`8W?bV33&wBb zc4EOLq+8vuuEgPbBex$Nd@4=*(g$hQd1F?{2<^F>D^q+IvGel|{!-4Vt6MeGgeRL_ z%7@cCi^wIJOAlD1C-L3Jo#9})ENLnH0r<2SV7K#IN7;giJ_(T;zDk+FU{(CT(d>WQ z(88Yo3q(~Tg5O*OkzW(H%ry#b7V?xW(q{b{aIr1Ic**l{=~wk-h3fo)C-=1}utoK9 zhJul2G0lh$mz1Mu$dZ|l0SvI_F83}FZ^W*TmmG(*g}LonE+aR! zqGE>!jzf>$m2I6?|DIweuM~|rOBIVvZ5^xi`6g=5Z%X~G`C%%`@HSOZay9&C3DzN_ z6GHx-OGrTZ=e4d&RRE@%ftSsVEB$2FEkQismMbt7F(drh*xud!eK7&A;%ji_Xgo(k z@m=3W@8(Y9<%=_k`qXJv7r*D=0zGJGJJI1=bg+tY#?sw=AIf;2>~_4rks^Ulg#grJ zgN;@PXw10=2M2lZAIk^SV*t+(32=5qFDh&S*Yt9Z?^1OqyqS#Sn?h>V&EqkE7If|H zIXkB3^w_htDJ}+WdY*nBV|;tU*E}Ah+0)Wj~1EYmdiYLeM7( zSObJ51aNgzQwb8m8AN-FSqIAE80u$4C=y@#+` z=d`3lgQ2BBJW;hC&wQU26(mWGP*kos?b|4Du`hkv7-)c5=k3e71D21Q?5grL6Tszq z-*tx|GkqPg>rQkv7KQWeu&R#M{2k-`_QfGbsArkW*HFX+sj^OIG4inb!P_Sk0Y)jG zWomUt4!=_QLbXmp|qQ+WTi-Wluq zxP6ACJF@vF1ixLL4A-+hhG2BzTS{LV{!)JO_@KCpiKZVNeht=&wyTBilh!pEL-DwQ zh)w^|_a-y*c2<@W#^u=$^M?Gg=_lk}~wW>JB(5JM~dyqE@ zq{H;3M-mZx60=69Xigm;H+VY#u%8&K?D?RVwF#P-gKD=*bpcFcz17n{3jUk6SbnL@ zvYSvWd$GE4aEDwLR&kH!SJa>Q)jS!2K8dT#>PTT9n5(Je`eFP>KheaHevukLs{*nv zwC{akJ$q;RMO#a1N3nMJ8`$Wk3EMu7R)v-+U%bf=pD;hXp9|Q1&F_>Vskpgk(@ElQ z!@-I(g;ClIn+Gn+;->s1!?E>7d2?Mza{bu?zjv^Oo$A#?7G~AhV4nuTwosI_ov9x4 z?A;m#m^W&q<$Tggal)3z!T%6E3q!+E2ogaGjvR*Pq|`#99tPQb%;W66uB@ zn#{>ETTdh^g?SWSgCd_lblwC1b8{g%kXMoh8IS+Y-W{f2EI9C5b>7>Vi7Df$R^Y;6 zv*2|0Msw%47@6$rxTST}9u<+Km`N#OEBhBR0DUW{YVVC3X6~3|fI>LUi2fZ4`5+%-LWk<5+Fupei|G^kS{P(F~xReP?d=oF=ju95E zOaXs8)qsQnrX~9{|Fb!!{g^XcwkCk-Kq^Otm%FHHNWVtN^aQ?TVJ&q5~K{C~Az%Dm{j)4bo!%_7HCqiLjoY}y!l6^pv z`xIst$wqSs65m}XaYc_q0Zok86Dxr57<0p~m-ECekkI6lUrmFX7FYmN_O4L#ArEQZ zwwAQT3~vJS3HSkTvyUZQ5`4(y+Gt1Jc8W7saLa?VvS$hMa?0ngaf4`l z<(7em=DERdL+Wtjn=@bZZ&2+!3H{j9kO-C=@Lou9kt8l*l1iHPvQX4geu)p>kyl z9>fZQ$nnbBNz&yeM(XaI(<8dT6bsV1<~kiT&g?8iqGqS4ne46`FJ{1Q1{M;%1`+hc zzQnAWUpa#?eW|eQ=KOj_-!TCt_pHn%m&fJw$t=}4CfRCf=&;my591^ovX6$;{GI(e z*52l!pV(841BDw$8I{F}@Q^0_DZ0;ot5{8t6p95UWJi7%Jl6U}9s1SmK>=TjU|SJ% zqsVx265=yoi^wF14hNK3gQE%9O}r$y6y$8t-lmk?_|~-3qqQ&p+$I(_FnwYA0B_2- z&!f@?PzH#(-)9Rclfz=b+V3^s=d5nM0+cybuvAV;Nm)C8BGvF0LVPcdd;GubmA-q| zFq(j%Rb$tfeSQwK#O1@prw&)=FB%Ko0@5Juc$KIsE78&ew&2kO4!{hBeL>^-O{L0nX&BH7LUFyNFZt8d#>>q^jB4hsZ(O$2-nMDXyzQ`A-oJOQUVbzsr3tps*$;k@to3ak z1z)l)`R}2SP`Ka8z8AkI{%atE!XCDrf1${ysG;UDUBiB_EYu29kUTI)(pQf;?mG$V zM~3of1eG8e2bn?78lJAuD>=M)+-#C&f{IUp5@HO+m9r5BB)4ATz372}3>LwOZ03{3 z??)IQ<$*67zcnb1U5q5E&66JR*M?^Fo5a6bH{b$d*UUgVtf<2u&MX3{XhA! z-tb}msGbSV*2qI2fan*DZtr+q&W`AYy3W+~K=-A=o%lbGahxLSP*I16qdG1YEBgh9 zLQ;A(o#;?l5`g4n;s9l*QaM-A<;};{REKJ^+RY!n72btX2YWBCGm)Mh;dXehX=J|r zw(M8svvTM5LYv;gvFTJwg$QqQY=vLmhX2jc0vuM3hJm6cuQKl!d!oBroW}DmLvxY?Lp+qe@}@c`EI>yOd{IPz+#0Yl zx>9e#?c=bd^tC(`+dtbYrnNS7^NT~&kc4)u!x3G(13fd2{)}O}va_{@{AYSA%AVFO zgZH0>%g5s)I{@PM9zDN5Rr_vMH}~^f0d-?nG40e?go7GDO4lHgkZsIOx-(({z$X$1 zUMRvD%&0C)yzIAzQ78+t%@%i2f3~f&i}Hw`XwA?ls@oqYn8k}W0-T)M6cD0?2TkiH zZFgbe+DC?LGFL`!C%}ktS*WkENy$M*-m-unSQ9$|f|GLdE0?vxidD)$&d*Gt(o${d zgc=(3iH{yVy7JK=H$KV)G8521lSk`UaZoh!-iQ*h8~v0>F52P`Och*Hf$ZfzQ%LC3 z@X!*lAIlfD1G~l#xqhmXHy6+KznUOTE|^x1x{sX}XF~_OXh^dW4Px6DATMFfo4R9g z>OvtiMMMh^upi?-wgH?QD#$_&h?vuEl#&1k_V11m`vCo=+*K`b`ll}@8Gu{&Zk!h z>#<`GxVDTH2$u&x2IV$>4k(ABZ9Z$m9&>K0zPx5#68D9mrGq7uKHK_W`&z;nLlxM- z+QuL-L6jo+qul?!6!BI+I4CA~ZxB_edV=LwCs;BHOVMWlNqyQ&R(ARC2bbG6t|}a? z#YI`gm;G_zWy@+71!d%T01{v7H*V2i?E@3S6n_h+y+n3AmCHTrG`(O2y-oBP*x$Wn zeKuTVyf7QdpG+!qBnJ#g3V7$}UVM5GmOxSOqsovNPDG#dg3m8ES*#-tTv75Te6@e? zAI~veej;my6YLk1cHbXnak_2J05LoBUG+>nKU7~QGuThHi23}4sQ^sF1EUWn0${7a z)m{(?I3QK~)Rxv25D@Rd$?<>5aQIqfMu{Ek$wbOoGQJ1oH&6H1IHBNVz@;{^uXbA> z5oBe3#)G3Z4+1qaiKfMnmly1i&{#FMF-RO%m7bRN`MoY6HkRqpJiNxq+ALFfy)BlB zpTA~1FwcQTGftMAj0BBSm6r)zPMXr$c1W(|#Q*0eUC*<1(iqNPSiM`ydcT)i)vdx( z;AQ+S7z1_Qlka_Uj!1I251fMbp?GB5{B2M07PyRA#s7*o%V535HVrrDTD;6t>?5n~adr28g#Qm0|;;TQ~wY6P=9bLbhK_78F}mZxA%1wiFhh1`>?2bKku z+8}%*y2hKy{=7)73Y_h|_72);r4`DXqIRPQDBGJJH0`cbH!lzUFZC*-KZ;rJ^}cdu z=M8-CNB73?@HhyhqlUj=e)vAF8G{7PuAXe=@sK~oQb0L|{<9||HNVNr!Deb;ZE|k z+IvCp+W)K}$v6CfaROhVL3w{*uS)7H2WC;w2%oU9C(=YEf%C10JTxoVTHAvShz;c8 zSx$NRUq;Q%aH%>`t@y?+@1HrRrcVb`=>ZMLwrB;j?{^2Nd(6;zyoz61kluVv)D)2B zpFt5-mJ`*kj|bs@>KVz4^FxKni?BCj(^pNkC|B%hzEA z#o|I1z=iA-hmI3oYlTA@Rx;{m(WQ=a%E#dS$*rkzqYMLxz359lE9Uj{uJqUX^=7l- z|M7Lf$+q}(^(vD0B)xv!0rHie0R+YgEH65RhmCS(0pcKp15i44V3!aNOxW&0EVeWm z-)bqy)Cw5*tZ4p)EXG!k8p{*l{Q}J2qYWHh6v|r`I|uG1g-wTWVz)q~XdsZv!(>xb z3rm7ba)EzF0Oa4%p6O28w(K#DJ#6yg(+_XM<%cW77*!wh_s_ zf`44}LA*uH-+p!Qg|bu~9ZMeBF2bvUCQUlaiW3k@uxIedx?$Qv77<@H;oN#4v!NUg zg-rpY(RT5rjGW<)k0cC3+03kbe0ye{HeFl|)wz!IEn-=3PT%UsVig zi*xw~S_H#S5fGoJ&7#<(7BnNCfB>{FNy5^TgVQh13q|9Qr-?ac%WzrFxoF^Gn%V5= zeAF8#s0Id$P55nsYG$_s8a45jqH*O_e`9E4uxQZjgrF^VgSO{m312Jrian#dnbcDvVM-*wDML<+doL+^V8Y8!%u|4=@+OA5?im>Cr=w*c`e|9 z5cT>gerh8f$tYh$iE*5WgD&e|(DI^l4S&4^VR&>T!5s)ZmNmFZE~vlN>wCw58Gdic z0)JB8gH;mOo?SkH%EzzioM={*sShGb*Kq%u-~NA$RBa++i6=j&UA?2uF9nrD`PS>WP}vPMsD zpv#)Q2zkeQe|G;I^o|7v_N=^G@-XB~PkbnD#;qk6>3f-BNbWDUo?U!rnoqRr6fWCz z|1tdY3p#pebQz<>#VS(fo4<*u__wZWH~x6lznb%2sn7c%hftn}rC z`uX(@;hTTVVUV%qItr=-A>Nc6L2_od#T#SIE4>APRL40gq#Lct3yRVV*08u=g{Z5$ zcyPx@JfuKZ+8q^0%mCJixr+qY-%CeK-20TMt$h{3lLhe2AXD>fRvU$eWAr(0f`MPM1GWdzz4DQ@viov`+21amP?K<=2pbXr-t2 zb&a5sB9Avxr=34`&x*H(M@hl9be3uUH_pD}WPH1>o*6kLg{Ac*>z1$NR44&e`#QU$ z|3<{EqEBS_bXXMv__f&pao|>-bvMl2yLUhJr5GhgBH)(5Z!#N9$CA&#Ze;4NG>fc8 zqvc&6&W1FBiu%F#^uP-X(`=L39I|2I4*9z|VaWTZL5r5qj0}V~kYwX4s{F;9q43vu zXPN{|EI&QPG$WtoJV;DT%%O(Khk>9JHU z(#PnaN=YLkBl9U%ApA4}P76Mip6iWSM#RTTJ!?YmuzSH%@?p5IGGcoPneSyATLex~ zi&RcgTeI{N|0mbnTvH7*h!95pgEfgz5e|z3`kUVpuy7D7)BC2vDwL@cF3s#F=OQ&9 zr;rPc;tJL3DSX`K+0w}@Pt9*=Gc${Wj_-U>5WfP^tb&SjCE$YJ(cN-+PToHd0K=z7 z$VeW^A9_(?o3qQr-nenYyRhxHOziiZMq6({{gYCQWeTa>!Ae0O7j=>VT-uJsxd6a6 zFqI|XjavqBd4fBON6C)i=gyW#mXSCTg2E-$Af**j1p=jyGe&Dz<0N2ODNQCPoKGXt zOTuoCk0Iw}KAE^Uk96AR6jg6??@qZxEz1MV5L+)VT7To*Af9e$zF<7{{C>8w*5*Qw zwPcddVkkTEZQwyt0e_`+R6T`5;v}Db2-kI@Fnxy=c~y7&Q!vHhouB2{mqk<3bb{&k z6K1V6$*&wBS!Ts)mI{l4EfH+L@rQbcHU{^0pfSlI4a|X>1lrHU?;qO#*!ZqY&5j{N z{6o<&2~iRh(}9iaf9)E=t>ppfwd{8c%GYPvOiaRFUt?v>NPw%Xe~nAcjy@M@_-2eJ zP=1QB-1JsOTJauFu|fHlWK}iTpP=&_*au5(_%bTjOp8p`HhMms-)Lgu^MD7$bTsq| zrb$h690SMGf(IzP)8APamW7~sCAWtBDUShFd5}G<_Ybg%Nz}v(qXtY)&yj9S7$)qx z{SOWnMP?g(#V$}ZtrRKG7~6=Yu93|F)A$qu=df3p?+MK5cG2GA92@YDl{=xKl(p!0 zXbjW_S)&!mq8n{>b24Z6IuUws`@2egSQKglK1-Bk3oAl?CGN(TGo1I5x;)!kNKog) zA7gnn2mEiwY!71h0t6Y|#~rKJu>-Z4+j37m$U9cB$?#`$DWv2=g&0z2F&=s|K9GVj z;$w<)Cj_ff_7NH_c z;U}#4&RY@gBq-aG34eig=o4q)RDySh;Oz(-xOvjdU(NuyHzc4{ z$>I&V&?mMDKzF5y2YU`@#>BslbYS~=({dJ96r~39gX6N8%Oy1tOKH@i>t~h4Wgdia z&(}D@SY}u9vW9w6Gug<`oBHrMgLt*fy>smwy4+wP2Xz9jgr54XBinzJ7+UeB&(OYD zFD{gyN|vnqVaQL+?p=G&IZo$j6}t0hHr)GacN8@V@}z{fW*i#4nX=R?^MV$vTDcv3dm+hZIqu&(=8o@bBWz_u#Sb=HjOkng`&tO!H31p9F1@r)8o z0_lcW6hH5^vW$A}2fZV$53W`&$MN#vck#8*k`HWBTci1CH=sUbldWt{K z*dh@oI5Qd6qz}5UTm!8h;3v`POdo(!Gt3C6v?csPNh$w(AXu%YI2KG{UztR%!B@#X zitE39!s&6@Sh((EAE;U@yCZPzq(ZhQ_X1od21rqfcq0Hc%ZARxcr!2P2tYXpvP?~E zLxD2m$N+2#ly?g;Zt=dyH;5~2GsSo7R;i6&5lKWj2pe^PLSXVSs zo;GR9A>OrKtlMqucbgA`#UZdk3jzmiJ2X7)RsIP`B1XX}_{}Kl_c%3DpYjg2o-?zc zU?|J|RXoufEE*Dk)oVC{6i~dsYZD2NckmvSOCmy44lB(Ez^b_YZEZd=WKFmek+Gjj{;B&y*wJ4bYJfQ+S1l zyT&w+CEt$6a;B!rj1NbvB=Enw$q`3m)PQSFM?H=(e4K)`AA8~UeCbl=h5P)z*Vf?c z0=I>|(%9#qn*Cn#r2+z2lmnq10y}Q|0|GFIA)si2!ayZUNz3 zW$a2>YPR^3_akkd=3;d>b?$r2OBB-)gk0{)Ugi`SpW=~h|l3H)asiC=Ap`J!TC7;7$OPXxBTEEx7(bNj4>XrmYP6$rU-C;fZN zZ*6S|r{_s#Vq+W3>s0E0@@RkIM&Rz;=*fHYsHK` z_T1p{o%5Nnx-&b=+Bu7=dABwDMWe4p8g#?2+qxg=MK3;_$CEt@=qCvY2}u{!4#{Tc zrCt%Ak(@e?G3dv_oYJ!qYQyB!c#ElXG(B!eNqB70NDV9Dk~e4}jz})dRwKfp?hckS z`!-?z?K%Mm@LUl9`h&;pBaqH`^?6+2FR(!^Vw3~P02q&O3-6>+E2$+*rj&nFcD^mw z$p8H!xA!}txP)j@* ziC0$;)@jB_c{`1%*j_p%e{rRu{;acpTHW*{;pB}YH#!AtC&=5jH$!6kgZk-lv?AWpQ<7CKWe)7as@%vYY;83NY6#&@{MuOiUen((kUV_m_XgfUU*6c!};#o zy*i6I>9f8NCfK(7Vx;Mr`JLxxI!{k$Nd3d8>yKJiB~H$kWQ$LNHa{+rpKuxM(p+>4 zXuj;~ise3f8|W)ez0)>axOcuc`D&=UEPZjj@>k-%L6sA`%ucxWFHaM$d$;)`7zz$S z{zAI*oP_w2=sODpR33vJ#EbMN(9#fTWBO5wbNql+uKJYG)LJkg}pF1Z~d zudJt+lI|QWDt*>8!HpEyIN4t-ab0`tS_-U_s>NGKKQ45^m>4}Cv@w;N9=|r#b*w4z zJSfd7M2;`t4_a__cfWObho^Mno<@%NlXutJ*Q}mDU&N-6+LrrALY!~zPZMVd}nl1&M zkNOc|?WL2xEj_R}3bZUiI}S}UhA8Y$eI_Wb)jB5&4ffGx`n@t5gVkyM;ekO+c`&*E z@f7V5-5sVH+}V^@nMEwEB_zL=97ZPywsa?tyWPJm0C}X{f{1p`lY$Ijf)MJ;yIoZ| zQNAqCOHSGXr4O6r_FOlZ(AfPmZHeOFy(zct{^`LxRr$z!pm;RayZUe{nXTyf-@%s^ zncn+5gI;p1Q<2Odr6a+M@G5JcuWga{%Q?cJpSr1&8_ApXMCAZ)spvy~t5y$FMo@BF zbG>aL6ZW?8q|f8`Wo7236$T-tQ^!TIhqOEPRC|lkWE1x;PwOv#MA!!Rc&)d|Ud+ip z_7vo4F60|)+FjmFJFZA+bNhYb#aFi-%>T*nIaABVQo{c9kAWV)gHmp-9Pvjpl4@vM zH@>>V+O5xr2lhU5bc4PG#o9JF_MV-F1AZ4IRzfOt=OL$*uUK(;zgfj}?d!v>gB^W7 z_pUUCwCO0$H__UQaG{&gu<*SlQp&ye?P|kGe_lTR@N7CIGioVeN27C>hHFv4N{I6o zCBFE_cTF8MVi%Gv&M({6N_r=&vsmh=M&}HhjE)mMn5?I! zXob=rT(9GKr$ll&RCC;Ak8FJ_wf#Jk&wm+H&DkYQohFwvv?_Hga<|Il%Qn56*XOc0 z{&H>QBg|(qDH40W;ukK@-uvFpk}L%ZJ0D3x*Hh)4uM80ZnMH&I_%2GVDG6=AGs#U) zc0V)&%Dk^I|99n5ni)b*gRx$x=S3+OsMFMtIlrQmqrz>24_0??HEQ+V`+WVPYvnKc z!b3j5oUb!9*iT34y}8Vc$i-MSoJBv!lUwIu&R3Pbo#Knt;sF)Zp79(f+gaiJg_*6h z?kz68o-@O#6~@3oHh=p?Xa8TZA0*D}=vNg88HZP7!VljFIat-2F4n65zT4b=Oeh9BZ(zH5VN*}L+r z%-=OH+72M~k*iAkpjSmGT(A6&e&`7KeLRM@n*qb<@M^{* zxdw5=a(nl#&oExc<)I^Xe$NiFswWadXB$%&8!Ux8LMp9B=xLu#pCxBe;bF&2lolw6 zH6AiIRuER@w@sO(jc0^w;DXZ*r!f|(|Bt6{jLxfpmTsG*Y1F()V?B*+Ta9how$(Ih zY}>YN+cuuCv2{=G{nqzCYh|tEoU>=o%%17d;tb*t$(wCDy}1gfy+0Z_RaLVbgD$7_ zzE$y2DxaMP{>rM^^$64^rgoC})kcnxaIU}0mhHtcm(#rma8=eX`kl)~KprqA<}V7cDXuOTl3p1g0pIH%8lk+v z8L{~?tPlF`BdNjX+8^l|PSPlzyd#^C8@1_xQJx~AQ|X3e_Sje2;VL&kY+P=8x?1jK zyqtAMB$7$H!e8oS_;nxo?Wo%7Vc~7voU=f^G#f2&oH~o~Oc)a?-!UVI9g##;{OS@s0X(uA#_hJ{XHM$t%L;b18%q4?Y1f4wr3r=`zeA5s zY2F_FBTdW7(X2(x1xnX$>KnV&&yLky9u7a%|4qBPqJvi-$?n~E<>(?YfAslD_MayC zr-q2i0PRuF;H3#q(3UtUAtK%4OoyP1J&6Nu7sV`jC} z!`il>XiY1aGw#h^i`m&-H|xQ;3>edPuDx1hC@B^xxiFw_4}X5^FsGURTWSA6Tp7Zs zT;7fDVm&xXGFZiw+>^>;*^{ib{;;yK{@}FS=;98mkdKUqw;V~_Ok;_m8ggV0)BA`? zEO}>AyF_ZXaErL3hRxc|GHwim6&`r4bk%JLDA>oP9n!QMObD(9PIb*Mu`=F67T`OV z&Z_2yCbns--OXCw*I8aA+B@FcVi{%w89Y<|uAp;gGJy%Oc<|t*&{v(i{tK)F^r^Et zAEZ}DzXgmlYx~D9#p@}4Rh17p#x!KYUbm$>R@U6#%Vk%fj9bPya7vQ`x;Pp;QFh?6 zbB~k@6hN|J=Cp}Eq-a+$kBYu%+-I~sWbTb2K5GZAsiAk(Ly6~Sy9Kk4dEZ_Dz4m^* zd~h2Y&Y@lM#1W5kzEYv}+aL#Z<-?b%AD-C{o4_%j`K#!Gqj^y0?B)3_u;k8$X{~u4 zFlM^Nl#VNZIFUa>LB`8tGnYz)CeI4p0I<4$P&17NZ%)1cU$=0tCSD+-(L?tab)uiM;Xb}s$dSM_m`c5m}= zLM!@WcGQndo%s)=jLK+icyn3Y_ggw?d_LYSnlR}e1Zt6$bz7tkN7MY+eBDC!at<}! ziGATa!@^i7o5JdX^=6)bEo2A4tH1hesjHjS%)*P(#L4}sak6qwyzqMIZ5m0Z#0i<0 z{U4&ya(`m=3oZv1AeH(6A>g^7;(TCvzunrL3}`Z)GnF>piJVa9MxQ#4yiW)^k@|Cu zJz*l|NVP4JTJ8Y4;xV9!BoKkPLpqn*dA9Kmn>#WvUDy>}-@zkq192$Zrq%Jv04NR1 z(MNo-@I@wb8c7ldY@5XxM zb^>Uf1abLZ_oRWeb7>a9sTshPjubWEWP`2eQkD(dTC96HPNKcu?W)|y*c5|IjWoFY zJw|(_n%QKHl4@$loEbGEz9xLYe{X5WqiLe~vVZN_H&_?gRIYhddIXepoh!V?*wXk` z#ZrzrM;FAxjeq2%H!u7KH>|&&WFHLfgqGelTzS&{6P@HfndbSr>#!y!c?NlHie9Im z=zdmlOE!ad425&@W0CkfSD|6Y(*$dT`gKTeHJ+fuwAf9?Xu3r!wn~TVF8U2z{;cXL z5zl}lGS2FHe!T|r;01BdrL)CAOFICx2Cz3D28_difAIVRPJeaS6eI_mv4 zp63G7Lalko&3m3o4sWl$@Z%rkxX=>6Dd3n%^e&9vUtIoMFnO%tdkwFOyOpr_~?Yo*pa^I`=bFa#lLY)pz zHwPONGW8kxn#RUPOouDJ+&JmUDCqAvrWIz=&UJLf?B+>ybo(9;jq9A3uiIWjNoa4* zqxnsSy8od*R;$kP{-&JdL7dd={Jfaq@>$z%dcSG0QoqwEdtnyZ!SvgF1kZ9m7z0cRi8C&Dh&^0Aa$lx zTJ8>n1Fbh|jCY5<=x}K=!4*j>V8>kuo?SP;jiYX-3R=_mf9G$~`yNbNa9=|h9Z!}h zlx2yw7e~sTJ$q0i3oX!E&I~n@L`w5X7coT=>m&uMk8Jhc9E1AMA0=A%2v zviX*V1#-Q#MLUSh&@tG9lsM0F)JT0DXyk$huQaEiR6R7*Saz2XQ5L@!wsZN^*;;`7 zF4^BMf_U40+R>n0X(US|5e2zNGoqK#f^||$J8(pTC`s@}>6y^ewVA5l(oHkr%44V4 zKBCi+1--Qy?u9EXQ54BnnFN0m)>Qs+SRxlyVrP!i0>DO;Mb_LVmcjc z*K~PHi}uDX?k}si{j}cInAe7`YuPI-AgV}^&}DMbEH}$`JL)+!xD}CWF32tj0(=hU z##&u~$)F4=a=1)C_bfEfVf^DK)nDe%=Kr(3lENjTwKs&Dnd=te0XZK+8^pw zI`PPVs8%}@YTt}b_NID2hd1rzz@-*5V~r0BcoHsK6FV|(hqA!hpAqnJuF24stYbwW zZl-H8F>qh+OGNadnyx&qcD}B%L&5jd@H{V1vNUFV1C>1fF`^kQk-iXudp63J9b#8} zL#h1WnV1^CXD(E(7_6)-)oZlKF%|I5(wH}Z7LR<5fcum2`oV2D#E`D*^iT{~VK^(B zV#OYGfIT1$-Z_&^Ga%4=-*M0Fv_5(34VG2TN{I!QFaQ?lamRF{Y%73u^7{ICJMO=~ z%tlx>*$*=;J8#VkQrRgS#@{-4xZ6E$F>v{qLX{x%ZY$9xN$Tt5hndi-g{V|$2aRjB zt0qfJ4C#821i?K+$2UDnNF?sYQ!eTWQTWxic+m6Vmo$P*oLzR2i9=ex5m?bbIugYW z?~H)8gX>QgcXQwxhy0vqXk^jTTww%&$V)q zT^s9!0`paf^5^rNA{5dzICxFWZ$hgw{F07+l-2{r^X&`H-n$Maa5i%^X#qoNnS) zz?z3cP0bmZpEEe(3}iZX3w04aCy_gCs{hdV2kp4cMDO8PrLzPQZ)4C@PQF(4VSMvN zDsI%s33Qdv*e2wbk!7?7cyHpTcoI$EBkV$A&fOPV=U5`a)nk4evWGcLZyI=T)(%Lm zdFLo-Jq{VyI3En3Io{|3$3@4sm5oPgi}b4AD|tmtdYOkN9`*Z!-RIRe#s0abSBG1C zJxr84GJSbELtNGOkJRDuVK<@;wFAFS87}ZCWkT*fT@^}Pkp;~bv)GwvYIYCeqxW&hK zFV52wmG)yL=##!g>CoRFnC=c}F8qNL4M2Bj#26m$;O#eThaLGxVrC+en8 z5V9{A{Ou$>(`Omoa@!3pQg*d|B%lmDDMw4U%XB)Z^FHIIEHb1UpCT@tB4$QqWXOr}OZbqArS( zX2)6O70o_<3CKZ$YPf5utw=whvJC1G_sA$SC`^3|Q1zJ*vi!U}0-Scv#nAp;nKU`= zshdsQu8zk7RjfRh&yMCx(_ZpPt+8Q^lH|6oYW*DSnl z2Tbt?>V9`tJ-go*V;Ys>h{|XO`C8}6)I^^n7cq_@C$ak{l*zsg8u)W5u~yKhuQl6; z)g|0^LC9oWx6IyFOykhJ;Lhgc3Fl68Il0%URfmGTv9Q z$AS|dy3WI)2yY1R&2M+z#ojF1aJV3ZpICkP7`ozVdm?pkZYs7le7^O!k4g?#1|7Fr z=Z~_}aCACD%?OuZ(Mzw+<^uMVDQdN5MFANZ){*^~o7y1r`Vav2dpAjWu}m?}DTAUNyD^jgrEx!FDJ|6Pu~Yi) z(|HT;BnMjQ<9QxU81c{NMw4u=9ni1wQUmhPIRs+|Bx3F?ahNo!p<3UeBxY_c^57Y{ zwF+HICG#D9`U>fZCYqqyQ;p7oNojbKp9BnJjdqm5wIpG-mrh&x9ldsgS_162Ykk-v zr&VKL>C4J47?#?th@%cX{KDby_nb%7fG^ET{pv`UURJwVkk?7FTscz+{Tw+s%rkK5 zT2abl6K;d&L&qEF%Dda#*}T5St5wv45OQJY$t(bq5ymQ0F)vJ(L$GL~v`|XXf#eBO zZ;si4qfn|W8@p?+S*d8~^BG!Lc)osSeZ9PlggM<#tFhVn=AlO>^E9L~eY4|qIA=tE z>sLcK&EJRnkT3srE^ww?NOU=)XP|uIgkk+y0<<{9*bt4>;BoKMH$kh0o*84J4rUW7&V}Zfo zLEp&LRdv2J-q+Wcv?(f&vdB5fq|ke}`V{O;M)w^7fw>XwJ9Uo+6wXJ(+^zjzWvLGb z4r7C!-d)RLyL5T2m8Yrs?F|1U99Iy^_{wt{qW%jkQ=pOe^XjIxHM6eHta=IV+t)_0 z3y_YDcj}O^xbgJ>wH4mNsKOyex-fGO$mI?+hgKv+8GedtEaV4`6| z<4o^uKIU9hDaGjxDmf3v60~$_{q}kS%t7}JifpD*j*K?mv%+)Hi@Ks)w z_d4yMGcJITm3cY~9wj)T#fdZ{pbekEd$UAA6PRO+q&uVxyRHyOn!Jz4e!XFW+? zfFLU`r?-d3k{_NV*%HP**W=)WJ8)bsLgsD+io4|QVD=4B-#wd%UlR}MRrATwZ@Xnu zYqmVf#lqtbsaAV#mW%wQaoz`7HZhHMe;t-OoO-gph9J-{J$Ec;287-^B*jt;9@|f? z&gWlE{){anlnV0d5tcz{kH>-tA>?{~Va)w@hg@|24}-+~mIG%|7(Y!wHlsh~RKDy; z$8UVPrMhEyNz}s2r9(n8MH0C?lK)(ha9R;zYN7LAm`e2c zuWspd5wk|ey8RGWr3m6SBgls<@q~-qkxx|O#m;rDF%v3wE$~+XD@$+ z?7BYG9OF6Fj!YKuB^x@aX1x)OOlnAsO5E5hMmfP+nxph_hX@{@R6F4_A9@qlKG*U~ zZfu;RX3dW;!;`wS5`*;RbBOXjs$#)8rJC%r1F{gtIccXO@5pm@<4vSvC&O&`aWCBr z`wx)sbbW&k(|{Xg#~|4R_&BkaL!>I#K##`JSKQTBgc)pvl>#?V<4+4ltCXxOJ+Etn zKMgRHU}iQ;yw^w#V833QCJeJB47-=w6XBM2F%?jH&7LA^Q`U>;p2sE&FDIOW?da^z zR$w<8$SZRQi*>kfh|6zSC&O<9xxdMllkQ={se*#Rt_SW! z2H7>IOsDIOGQiUYxe|Y}ZAY-`3`9fhDx1>2s)4)ML% z56b8f4$azUipqs`C>HAL^^Q*jRr9xIoN#s$%jA>InxQehQoNw+`sPq$Ufq1HnlqUOOp1YPxP2GklXyh9LS+{ zec4>lPuBUx8r9O^zWD4FwbhO|Xq7iFmUD68&BjG+Z8)6rNRfqo=H$fGj-nZkdtS5I zoGE1&k@wfpO*ffN#8v+}5IZ~{L+jiewp*j-_T3BCRHXt~bbe*64`kx>P0Czz$JX^c z5+22a&uo02e{g-lg~c0;q}hD^=K`8>m{ah**24Sl2_Bp}4!JW$_Q`9BauG-&3>x`u zjAW3E)^WQ{iJFiJPa`8Puo@oTH{PeQX|_G+nRL-Yj1GGU!fc}H5@KkJ<+!yWud z?XP??v@;MANO>*WVjPph1a+E_$<{yTp(q!jT1`F?KEmQHGX@4VfVzB-kj10nIA@_q z(*t51b(d(4VI*#Gow$1?e=J!eTqJyPolCfr; z(EW75sy#17kk?_}USDCJYQ#t<-Js_4)wtJ{C z)4pDoBi~(ZBr(EsqM1=Mfl9xG%2-atfo!>-GN;~u1m6TPMVv4>dD=uPxQ|Z!aSTT4 zlcFr9_nM-9Qp@|IscDMm<<%PD-^LOEqBl%P%${jz%pe@ke;0bcb-+%47Bo=WBS--< zJk(cOe{`eWW4=bq*4)OV(0O*JY~4OQXGTA7wwJe`DWdysibfn+9S*O8b5Q|?=QrR{ zejG3VTFnVm3^%eEVBr*FFD6O<(=@PAdf8-8DBJ>tL4jI~u zcU_byx#|J-Mm-Giy&|EnZ7tdUF@Kc}>R@B*ki*>tcEUNh1S1$nisr717Ons?t?UrD z=ZKOO-#VU)G7fS+3Y>j<9){q;t9SVJufRMdox$C+Y`VQc#_;bqSH zZ%#2N^1s0LlkcO|DpP0UDgL)Gf?Ps}Bp{HV+ljRC3puM99R~^nl7t?*AOvL=rd@q5ho&ZWPq1lLX zim?uPxP#dC=}Au>(9*Q+RFgBjWxOSwbMza_{i`bk3Ds>0MnWi6SMM&u- z&q{R~l7KJHRzqu<_Cp|)J!K6^T^g%K%82E{h;w5a-~B7FpIPw|gBQ`N zbIBDShK9z>PV}pc9;0wX$*5r{2{mI73}FdOfl=FZ+_LF~z3|F2eCQKZ7z#E`RVapx41m>lC)x@L?3 z4cM|X8u3W~ekPHj>a5tUp+`J&U~J3gRXr#k5&fQxsfjIGIu>t^2P{On&3C_m^)8d@ z=|mHF+@*;Rj{ys3-^&KD4pL#4a0u~Skc~Y=bY|X!L~c?h zS2?BsaOpD&aR&qU_f9&9O16Ms?IC4*>2~mr`IbalKlD@u`Fv+7i<)0^ru@iXcQ|00 zMwBWLfP&kk8cB9K2lggz?y6Rg?YmpT=~=kkMo_a73}v_CO7F`NgNrjQT}OR& zo`y1eqNo!@{-rP`d_7jiJgaZ$lf=cJmayVa8Rxy%6yi~3V%*%ceCy)k3ovHlMEz58 zr6{w9bmY<_KMq^w^Y&}PIE{)&naUD@r;RRMGkofnc>O005e`kMN~LuLE-y#D9gt5C zn9q72w^!8u%Bs+eo*P4xB{}UBHzl7cf?7tc0xD=%JMZ>bb~UnHXK4535O~0=MD9mg?qvS+8@u%?%@&Mdy5ma3pB-dOVr)oRWoRH!+gBH0j%GCZ^C? zi^GtwsmT4%OzV~$!XX(Nf)#syi**;%Sk+NU%8X}mF~isx!}eFpNg|vJ6)VaLd!e{5 zWz>KTjE&J^f9x)`x`3R|-Qk~I{`u3c&Q~Kr{va%pmdT}~hgG~HlhDo|mYb7sgREP* zq4<{HNvI|+lB<24cTU(u66GkFr$Dn721h6s`U}pQ1*(-a$Xx}U!0ji!gW9RRjG(D; zia^qwB#dpi!ySqG7E#P_rEaj#>i7R0*7ymXgERH?N39(#yx)|gS4 zrhCIL$xD@6WB-t~s~ZTEteUL$HH(-rb5YgBzxq15A!Of}2@E(>Va>wMM6skeR+p{4 zt26LmTmPnJr)~S*Wcb3rt)4qg^{r*WJV@tB?m|`c?>3hWd=T>IyVK=aO-^q|WVwSB z+VI;>Ah0=ABXZVEJI|S|(uuSKa4E4a;uUJ)aA|VD1f2;iYbF?;U8X}eEI44#4zI-Q zAVQ7a*-ewzpm7B81EEIl>ky)NA7wW zZzMhqjre2aI1p@amJ#lE`9h4>$A$`I{|2fpPhj|KUAHW(#|Z)*rl!BpMvwJK8yO`F z8aA7Y^D}n49Z4$sAqx=tn~gRg^AnIoW?SRJaDFQLl<)t-hKZn3WQ@{-06|3`i!nki zSdN#qqas%}Pp6d3-&2-Nx=&CvI}+6s@>w0jT^rB4-%qC^TfQReVA#EyD7P%aP)2x! zL9Td=0Ja2KN5pO9x14BC5oXb_-8?3{xA9jpw{PTl?mRQ{L2;@6R_gYeSq0alqBvlq zIOU%u*fo=Z77|rBc{u24F0llW`$R_T%C`~{Z7G7W&&UYVK{@DJCM0>8mZT6WPgB{H z3cUjVE$9W}AAA3H59rCQtCSat$tk~)lBMYp!aXA6%TW}d@2at z*3K@~Tc8&NifqYDWbvd15&J+=Z6|RUFMS^A#52pfi z+(fcA=se?8N)28+i}8-KN)R-S=4eI4*d!U{4rj2J@a?D%zx_?4Yl1C-N2^9Fe9B0`!L%1A`wr5 z2H^_7$nG+=*m1{i!khcDu`!pje{xkp^r4< zCxP8-ZRV?`!-*Z6vHB#;=+WN5Ed=P{H&&^@nib~%z=x&o;!Owuk$+FQa0|f$Ey#7uy-ftuN&vv)HZIRPiN+x{{UHC!7t&r z&dTf~;m`3O%Sw0(uTB)*=&hSC2dtMLTT}ZO;R~(3lS($Sya9O35x?D)P3z zs~LecK3(vLrd_KlW>TZ-^0bV>@ybNC*@VeGx|r*+EKcOWK7~rL4?l5~G+GdSCf;q2 zj11~#L{KD4`}vEy4F50kkmIfHZ4BxXQ`2|!vd&K@&n zG<$n4`p61QO!kMz1d4l_ug!}bCPtUJN{p5hJS~E;Vj$XWTU+UqGY7m@eg3Fd|0&WZ z{BfH_xeV8mo1dyi$e_eNaz!20W{$Kr^e44SPk81#8=bk6qMzCv0VvHq(wdgMXJux< zzb^Pse!4DCLEU(qGp2Y~jU{%25wpLTn9i-axMD4}Msr(!Qu5aRPdk2DmB)fK6b9$S zy(2zx-?IX}X0apQ5Nnb)am)*ezicvkhrME=Sg`TFWg0L<3gn8EsEQIsbEBw9j(W-z z*<1?0RLStE2a_`*wdTEDgMU^Z6|*yyp0qP&O4@h z0|cG8Sg7}_rN=bpv*iLuek&QK#{W0Wh5cBZ6~$%*(59w}3)x|@&NZ}3oJOf9CA_ZR zuA_HDuYywk?A=rhus{u4KSHFPCV1`Ie>d{^36_V6jnQ$#N!Eq_8t!4cnh|u7Uan#H zTrpT>WyninVzM>L%nv8eQ)E9TZy087k5FY<%vw3^e?#3_m7g?mX*A4!0H`;M!nMn~ zn2F*;fOrTOK%hkG>qmR6^LnhZ3)~k(y8Fu51)q2ZzXOr$ZWD#qoI^>aK&ZVKjYuR33N=TtRT&ucehDh&VDNnC1$oDaifG@Ks4y>nN4Pfh*mZU> zXADUHI9wPnCp6*t9PLG9SzN0}U$s@)JgyFOd7nA9TQH^Mj*ch#Jcw-{NqhLDZMIi5o7nZ5u)lG8_hN5k z{X2PZ2}_7cYYYXh1EE96GFo=r<*iiaN854fH}`2JmYIV7HMq<`rY5;-ByX$sOjPcuG)I}>y1(3p9D?BGcWkf$0Gz++xuQNI`-_oj$Z`7aienjoi= z5EyQ6xttzjL=m6xBx}e(Or#i<@Ovj0A3Pr8t`gP5BRByJPotwj4pt~O8nOd=8(4Ws z!EE~PsE>L^Z9<{kunx>wT-Qwx1uK)1M6yY{YoX$vv3%%-`Ne@h#kM2bPPNEW zdK6Q?OHPC?aQ++{$#Rv|y08YzPD1#ce_n7eni)RAa|D`@81@YPF*JX#D`pNY-VKkJ zlr|7~e?I7f=Y{fqHwE#q2#wd(x%m$Fa-XYFZQ&{3Y|Bi@E`7D7>U5aFMvR}Ve9~}Q z2vtRH5UkwOU?stvpHnh!SxE)V8@+CH(RA%Y1;_1i8l5eLq9eoM8%4cll&T13pNAkH zwn|fa^fW}X>;*js81}QaGbW*$sb zb(^A+H)ozOJ0zqDbEoSK9!iPOukZbh6vl9^^bIGU;d!6_yW?@@9T0IQBp0NK zb&ig8zq!5J8dFNG-oKHsJ6O4{(myhHbh`g-O$FzKxbF^y&t>=nKSmn1{+E9WW_MQA z;#?k;S>{QTXrTjLjM=ZcFvEjkV!Nb`@6b6 z;jjj`q|0B!EgWscI>;|@;m{>!n;#I-8WZ^b!II*OpBfxh_;MnM9}zCcpL5g`U!h;Z zh;Y(roW31zD62@6sV?|8_vfG$tXYSD$;;=QtbvBUXL8AzdCGnP*aQ>^C44DWbR|}? zOu8*mond7^SD|AZP&XMd(8-ZklP_Sf9_MKBglnj#$?Xe$rxI;1rP*1F?ekVk^mdSe z@^(r}zQ!$%q#U7FP~v$ohHx;?hA2}6c{0Eg5+DKFV2Qmdh#zMsPa3acRDv%sAOI2? z?4hHpmb#Prv`oyG$i*g)V%+jVhg{3KKPLWO+(ukADbm=J?D^^SNKOoUh%ILeME*I| zAWuG$jsom966=29emauPy8CmuSu<9wc|l&ZfN?9Wn0(n8kii0*tVY=K**5<3TqaS! z43uw+E1x#~9!ltzy-AZrr6_9_P=Riy<-+xMwMkYk;OsGd^AWf0fVt9a00&E5c}CoZ zW`~QjS&ti;W1JDwfo!qK;miaV(a1;??psJK95)zFYLFd6=b;CkrIDkTe&l*-#OHO< z$Ej{h>#(`wv}W{!mIumeO)H#?@o$ZA$wFx3cDVx&auwdIUvmE!#~yfsk7akOQ4el` zCM``b*{Uf!bcd#+4^Qal_D^1yn2Y%CN4Fx(FM|O-c~=XLfwb0}ANQ)A0co}IG&SrZ z>|h!nK=Lm27xmr}q#V9Olr-JObD;V)ya4VFPtHDADehjm**N~Vr@jcOU4zS-&$-$ogNRTm7tSAv3JN+N8Tn~C4#^A1R zbS#Wv5C$If^ehzz?vg`-A`4>rTJNxBAeA5?gja7wo&a-MxQ->pWy0u((O%OK%wVoUCZ%V(le^D-Ys*<$+TQ~~! z@&IPtJy^Bw;^zD}_{xa5y}iQy@YpwLd+)1Zw|RKB#QpYPOfhUi#ju`jarj1=uTe99 zo+Yf8li?g!vQ`lXx#WWoc`oFtWcRLrlB14!@0&SdcIGXTE0RN{zUkR73nH@f-T+`yU8WznU7R{uY zaZ5}xnNPJIzQu!B1Zg#0al3AvlTSsS%Pb50Xw{!a+-Rd!(}VY#Sy6a^Ry z530wF*1IqzW*?pxt-9VjNc_+u6Vq3yB^*-*8-U2FV^%d;`o($tHD!5+p6Oh!vl>Nd#Wh)K2zF zO!6Xv%diA!(tmNJ^D`tXR(M;fUx;TtE31pBvw-94<{t9qBL@%M6MdaI181`-da-Y; zoN$5$J>bWoN6mOEMOMQtBrV?SdwAGz^cVs=MLyvBJp18|hcL!q^=QYxo7947Q#9yG zty`Rzh2wzMQEjqHP4DCpjcc|W>8?$Qkmxq(N5CUv0hG+i1V{T^K>K7JsBN^mR6cRC zY;J}owx1du=Yn_j$RB+sp2ii#b-gFeDuFwSkLZe{f%j*h_sU)9W)VN2_hXzBvF@Nx zPxCGq5cqwxt$prabRYUOo^Z|(V@VAg$qAp)cdRS`fg7whLYW=HccmWwTKin(Vhq1qOL!Pbu%ECH zh3!GBNBFnouO^)LmY$F~Ou+zU5o)OFMm)bypu<(N=nBb*63DGrSk8LJ<$Q(Ej5_a- zLSaR%k(%iFiJ13?(|$`mjge9uc`Nm^D(wWVSZPDHr8*41qlt!86Wuy|O}kc73i(f} zc-;p)Nxul~qmB7rE;Q8TrmFfhYSr-8Hi&pD4Y*!MOf3pD6!{D#+P@ts0=g)3lSFq# zmchAkaY3lCmi0AhN+I?&Tbj{z?vjX12{YhBjn)5_C>Udek*8-O7ot#z$#rMKDX%fO zq#{nB*TV?1@(t_lxP;j7OlH%IgpHa}hOO09HrkpOA8!zKS5F;rmH($f z8B5WgJkg!-BasY`j{_e}wvBIs62)LX;zg%*E{|cNq?$^Xhpnx?ynrOXV3MA?WS$Em=2s0pR=G(knW(sipX@+K zn37J#w(UA&wacdW?bMptKQ1XhO`1hbPIt|>;d7S7gM;F?b}qTJ5vy4o9+ZQXY(6J0 zs%54@koq56?H*+^b2&0@`5O$5`fMnqWDB19{yr0)Ys@vrS*h`IQU@Ss6?cKFgfvCr zXf17Q%7{GsR_dg4Rn|t^f6*3*Gko!6n5b11t5pqG!IeqW5lwj^+J=!!07( zB*Ng^`uYaLppe z(lQ3-=EBFvVsH2*Gs<_1EC$@-->DH)S;eq5s7n~A*p(O9-?K|d1De$dGoICCU@g;J zVlKsBVqHTVQ1Ii6z`Qi#SNs7xSWwMFrU!!6;a~E)xLm0KkedEt7NwLQg;c@%O#Y8n zh$@G<0kQ>TbW2cN(^rGQg(S`gDGbXKXu>t-Z|1ohP2>zlK!FpAgHs6aebgPR!FnJ1 zV?+;vK|#ZubW+MGtF1ETEv+G2D0z#@dXm{8*QB_Vf665>=wSLj_Aik8ne1zhTv^pX z75!SstOeqh! z)fiEk-Ak2n`?O-;bsH1Bl~OzL%ZH`-mzcs+hObir+3-o^!bHJtSKMV$%Bp3kdGfJ} zy7m>KBLe@pO$$l_3*Z6A@T>|3S$}MDAMzf8g;+?;zV6q18P874=ecDTFG}Nfz4-gt zY4eybdm=nnNL;&^ld{*+4(WE>+}tAyT|iy!Um*48rI+`m7YXp0gSc=i*@=C;`cYjU zN;Yw{^SK&faDwp*IfVrU)xv%q^c9LnkN3s#jY1%^au18Ucz5Ru8 zt9h+uaj$O%2b(8NOF*byNN? z))zzHMvwMb!o+q(2?@YzknTj|2~4MX!5KUdg5V@u4+&MLf`C)mzl<3+yJP4k)Ab8{ z#<)}W5?^Z)u@Ai>eD`Gi^T8Od1C@>j7i~DmV(P=mBeLoLx!_MM7V4Tds3kdDK`j0>@a~hjOBYt ztCqzCucK}hMwxk~s#+L!i!6N&j;v8*e9g-H#KYKjA*v|f$!p~5cUZ~^$;sq36`RGi z(#uxL{aFQ~E12g0+f2$xNZdCQqj`4ww!SkXAM?kME0GwgO?As)gG!~J^}ZMy0RXWxLAsF`q)Ta#ju}E2x*MdsOIjKRhVGJ%A*54kC~1%` zk#1>t#^3+G*ZsWb1+&(5UEg!|Is3DnpgO$ZGo!NCVWzLgxqbi+T)n0dsRd?0P; zU1>CIXFV_^P-LrO?6{)be+OixXa7jx4tEG7jpL6T;>>f9J*C3pB_q*j;UE>LDdQaZ z2|2UZOPETA7Fxs8xCK2RwaW~Y{IL?P7Q$xq9II~RFksF*!74@iJ$o`Mw-p;5mn`HY ziMw>-+B~``0?r<3|g&MzsP2I|7)Jb_N#VG``vy8lyxpC zTl37pqMT;l=+bccHtV@i|9J}O%sl+6Fz;^KDv*-j@NfRRQE1sJ=cz&HzZ)3Gl6$|r zn*(k>sBX&;q@od6nI+QF5Bg_s@jB336SDF;i#A#o*>n~vZu?UZo#D&-jzBj}f15Im zvj6XfKl;A=jSGR+8B;*|A4FruJK@c2co#gsQE*Yyjgran1J*OkqzPjBH1Wa^opqx? z*_M4Nc!Obbr3;yLK08Rgnk4Rk?kn~U;ctB`lXWvwOQgOq=j{y>cy52PmUyv#FIKhp zo7Ic^z!(c#zB~xm=>WfBL{QI1Y=t|b1HSd|hWDCog=m_K((uN~S^h7pI3e0DkwMT$ zf9+q5*qvHZi)4c>oJze%yorWZJ^C3x_HAM4t}h`jHLXwQ)RoIWqjz@o4RRaAZn@Q}U>y z*3^f2=5FY_pgOrc{T7#%LKMIOt$PC?kben}am$-|_I)fH@By#87^Y%ZUEwtsCRtUf zCcVXhq5qLXoi8QUn;77)GFZVu{=?UhD-_qzdV_se9gisd%`Kpk!f74Y=sBK2TJysm zioGdRw}OTu>!7fyoo1f(YYl(!No8r7b5G}8&U>8++4tJEhyAyU&iV^_-NvwzAH6E@ z^LjzPGoqtpJ+#{6Ic=>hqQom%ubs{^YTBd%melRk|MA&`ymNUvyYWn<(y;zziyLO5k&Lqo z4Yki7zGbh$>$9OkTxPAB_@l)*s6Jo zQL)xpQ5K#9JS-7ZK#u(9nBoV5HX4>0;78BVb;=W?0b+uJ(#UdNoDER+I1Kk72sSFlC{F(FyxiM@bnt@cd`l8mg>_X%62xf+iz@`X4g9r0tp3~`6eYH-Y5;Bg+uA`#y@mc@JQ{y)8b8`SX=0B7KweHls^DkbPOpZLlf=0 z*p5=&kJZkmXb3lxi;Klo!RMNfA37*V*M6nNPo+e>(K>f?8M|d*eo$p7^qKQZ*x(*b zl8E$c5K3-`qBB}2e`b=HJ1Q|=y!kHCUY$eF;2oRdugLMHZ9p)jG!nFJDqn8wOF+7E z&%|>@MqkR@7ULedjBFN zqh34nZ(^MwNztJt3twt~`K2N?b7HP$zq{ba?T>0HQyQJ2us5L69vAa0xZuf1Ypr>V z$F;fBUivq)i+$Q=I1I71yYc7G z@?%$COZMNX2M1oJjoLj;qU7u!cyZ3BLAiF1)D~)ge&CCW785vd7Pr;$vjK=hM2F*A{i zcBdOJ+kDuGH|Q|W!d!z|+#}|A;Jf29W2f_U*VchpEA{tPe_=#Z6gy>yu>&T0AEtva zBH$pbCg+5NJB*Wclmbl(I4FtRP*~C*Sa!L=l za3_!DFEtqJHE53Zf~+=TGf3CCBNNLEzS?1hm13VXytx!>3wJYLpL{;&I{S>0S?xC2 zF)1hdmFw#Bm%0^=Vo@2GJyQiYf#`_6U4RK{k9nw*>^`ufKlJ5$>wE!Xlfl4ADqAY6 zb`Gqz5pk8W?wXY1RbHrEKW>pDl69du+jY;rq4x2v6m!V06fLY|`I%;&YK1wBpHNnU zbCWo_qHMPybIhwyz*0jIvfb@qvfqLj;WU%LBpA$-=qI&s?$pA)z_GVYi!ij<;Z_0m zd>VyVov9P{pniKLvk(y^Z%Jqb<6M%14wOQ(3=KsR^J^tPJ0~t?q%=$SLu<+_|8GD; z2u*xGI*9f?F@H;u0NkCrP?_g|-J(o9Uj?b^O|hTUUmf^VjVh+K$5Kzh4imPe5_S=T z<}c6ZCm4*U!;CKC(+c!Qm!rGW!8m%n5;x!?^<4e+nBr_?iu=d6^@jRZ!dpJ78s=*Q z#0Wd+57Tm?ToFSShCPG6RJ`&&q&-_*7VwrjaTG*u=#otjUN%AtFHoJ^+teOU!>^DM zd>inYr&!r-1EiqQYAI^FBlPgwVq)O8g~E;iv(dRH#9F`sG!U&X?0`=;uF>L#;_^x% zasN2UmbU7Sxd^~)F)O^%u2Va))-PwwL{Kmo3b!qD#H2(h; zU+Sh)H-0KK;KXj;(*V(_eDmE8QkQ{8fbX zdri<|y-&P1cBEo7=iZG(Q3&Q%RxGZ=9q-QZ)ntWO#Sb`*(b+D%^}H|BD0WTndIa9c zGF_#_scMqGG(EZz$@NjW@3H~DeKs0#tBP##NA;Fw{tARi<|BNd(0uZIogYrCeL^DMrA%eF`##e; z0HpNr*zRv>X5B@#X^9jHgW*TWr?L3whA)eCzZjVLI&B?2M?T+8dOBT91bl5fZo@(I zuo1)ysr@@ zhv8QBzV>_yeMLbjS*}zv9Y^8)Z5L?d6K3!fKOu!ipz6<}1qT12OmneIfKwb0@jcaL z-D5IVohi7VZ#ALakZ;dSu8{wwdJe5s=!w}hkPgC(&9u`U0|?>*b{mjoKv=f6@tgab z-<>^nUYoZ&GcXwKSVEC9VL4eZAqL{94+3g#49cL*Z$+zMPt5FgKjt}ZQIt__ee5D? zLQ3EH7kjI+x+U}tIf}o@C7G(;>rk%@@!$gXc~L$>Yu2>23X1IbQKU6_1Kd<52v~;1 z9*mHxK5?$4^{sW-yy&_b6$0nSG`bKSpcx#pXx~gwy?#2&Z>Uu8*RUK_Lb{-3QL`?D zJ(*KvlGU%+4EqeVvZ$m~YUz8HXbp0SEpi^jZB)>CQS0X@ELjr{*V9@vG){42peRre z*bYMw{N6z46))2Gvc6;ss*#kcZcZZ)W=-5nmIJu_-3)x&c%(T`!AKY?!;>k+G9RWW zM337GJ7!4qn3msdRZXo^DO{S%W1QFPbFbjc*Q^-!N)lS&C}H{dWWV(K!OMo&TbS11 zub2P->FeY85t&t;n1}-HkBdkpz>K(lmSJVg{~~iu-E@0>{jK43>wMYKTXd%#s1`LL zy<_{CZ2O*)Bf`dPm3X9Hq>&fX-{tXH)m!G-l9vX+PA=wpoC&qnh>8-fxy{0KL!;=p zynBZ-Fle2YqnR#}bITicE4l0D1ly#0>cG zBR=volq@1_{5or7C&!60#PY1$^E{(JCR^N`Q3X>fCe<>*BME)~Wl2f6DywTwD_-N5 zIa5@a@@py45v~P9VvIkDogl}XIWE4BLB7Ww6xYj-1c$#oaBYf3ETc3mZvQA4LNUWQ zN#eFZ&cuJl8^Jj;+i3r262YIIX5XFmQ3QTLATe;)k8@Xp0v~2_w@PXPF}?>J7&$+G za_Ef^JB_%RvHBQx(DeXFwjB5p6Hzyb^!KSWF5L#jY??mp3Z6!Gc9!(qhIJk2h>ZJq z!8Sn6clOgW+Uby5AdK4XUV^9(H}z~miC6Jsa(7Pd4EJAS6yZ)oFfQ#zLr~%g+9_y? z1oy`4(3g?=!Qtigv)RilF!Iu-9|X0$FUe@jPGeu5&&Wi ztAqE%+avfg98}Wd5IS8YkU}8dSb7npvtQOYFvfS0gfgO0EvlreChMY4WiW}&=k2*6 zcy-xk?($q;T7dCaeFfpCA39L-d< zHriKt++F5uAHZzI{T9xk6np_R3)OKs6ZJS|c^|H13_FOTD&6!zZNcZ9__i~p=nI+#<6(A zx`#ep+I_AgUr3Epr%uFjFcmNdJvbylVP(D@ZlcggK2=oZ*;^19iDiK0R(tO-0bKDL z4Zl&W%614?m6n$yY~*9=4RJ>)Vp&!Wze1}OWm}Myhi;WT+SU4=W0dQr`+6^f0q+S+1S3o0D-h{U1H> zA0qs}8cweF43-k3qo|owM~XnpnKH-#9o|17qFhuomwm5~`^Wg#Dt`s{n8F1zN198J7|90Ap!puU2ZOLGNE%WxH#-PCT6E9@^Ve`*WZ9u;DXbhdA)b$x9&h_t&{D5cPcZSu{&=&t^hfLGn- zBlh5r5aI9eK5-2HVTZ$|CKBAW??hrxd!Nou4ZfS){4M!s#;2 zmf-%3{j``em@Prds%anC_h^CduC`};{SII?hPbMQ?wKO!I*>@fJ^eKDZW)8y3Mi<4 z(i7(_x|cX?TpnJeH(CCm2BmPt(#Wzr?omJh#-fV1z$FY^e^NA&aEnfdd?tN(zE_$k z0lAfx%sH*CZ-?wxFV#ZTky25L&@8@F4*ENng3~BbG4Z3ezQ{?yrUc^LzrFp2EIzCt zDqSn;=e6!p*oCh5BVav5)^VU$yh(K)q>^ev%reQZ$Z$q<+vff~D`_$vQ+DuM#^dy; zG_SH``|#@$ccz2NN@)wZ3cNC8uui!ThBMWxvU`b<@!y@6{w>*?SqW2tU_GL$Q1wMQ zR^wJ{3v$eI9NP3Ux)w}wdovHlFw0|`-?l@M7QZ@=9oY7cR9(e*#8~%w-7T`XJ^>X~ zA*RLnZ9DS1E3h>tl_`LWc2(Z-Gz&kNLmx-b$_-Z^dUJFiaaQFU7}RyUNY(7?q93_? zs1`0O`r%!$(MQ`I+7MY+7I9CjqYa%2A5GVq-|8WpPD>N~yTsls4ZDMRg9(UhFgkYD zfGEips~B(3xL06Pq6g&~70IN)?^SMVpo*h-|3foS%mZSbAx7*bM64SQy)*RVFjcKh z;#y##Yl_emI*OMPzJPxFx6ap((hrRN?Q}bVc1^|e*~BHWu-zcTy*Vzn!6IKfBZwf> z%Y0tb?_|z#OYiyd2Gg2=wfc`k}kUA#*aA0(X?Qd+nad}omD!M9<2q8W%A%TmU zP7VE$_RtR4NuNNOCCDy5#Qc{uOQr-}dMJrkDgBp4sDwivn({zmM20wuF0y7J^52Om z5;rP~wL!(ksLte&V|D!6X(xOGc`bVe9E!+p@eX|{yjj&odh@pFKO;Nq3{-Ap%!H4a zEd4-5rBB8_DRY6ebl<{5lfGCl+KFJ7)od`D4Dt2%gtuu#>ABFeT>(oJ8Hyc6%Cv-b z=vciYM&*8$|BfqC`9Wc$+mW6nHw9LR3IazRCcWjKDJd#$WZHP-jjtK$1IwOoNo5}i zfE~4{MjpsH+?gS=PFY1$xO)OKwaj;|a9z$*@(Y70Uc1!HZpTXUz7x)Sl(`~SaMY|@ zM~3~^qy`Vg$&LfO^;Gk&nZ$_~@YeXK%%Xg9xI`jEj9esTF0~5x)iURiiewHxRl0<$ z*w&T+i*Y5_t9UJ(*HC#mq$c3q-(GhEuZifnO@B_EXjZ-}V;Ch}LVz>dtCnP(wc*X_ zXR{46&!W@oF8TcO)*5E6@=o(kwom)T<+KRk!>pyK^#=S>I-L_F5^th^=#b(qnx8$Y z1&j6DF2VrrJtGfBfe3n3Zhzo{?OY4B$$;g1(umYn3g66A0b1r=yRGt_DYOPJ?3o*t z-E1@YSYe8koeu*LA$~|WQn{AQ3adg=Io#h?-UM8oDE_Ov`4v5V^U*Hux~o_l0srBz zu+8|%v}v??OV@_N||>m8Y*A00|-h{As8|r zhTDGo!b*Em0}9srTiBGAdSnceyavnd1z0n+Hp#KktWsT7l<<6t@685I}hk}DsWeJ z5~h#(x%{r8oLcEX1zHzW8PhVYg<~=XD~7{UynpIKh!ZIZOxP1PnSDmy9De6Yu6yfU z+QQ)PHOs>SgTzf}559`uM7tIVHZXgy0&^A_S8oZftUbYXu>HRk3H#4j zK!~NYGaaI+S0=6ijvHK!dv>bn$WHY>ojgCCKuKE=d7$lx$5Ts^;nh6ZzgHL01>Bq> zj30Vqya*b-eFIm^P+bgiR)$EkdU@W6JOh>aeXA3K{<5)e)kR8@6)5O)kD8pOjYaPT z2@Q_eVW80T4UZkFO*Y;vVWh>7@E@<$iq%9(*N6N}Eso1**nz@0P>r#VH0E6i*0 z!YGbJ^cm26R&uhns3k^I^U$cZ)m}f*zqIx!VJGs8pXGgwB5-k8pHS=4dWsdi%1u3O|+)wn4za>s*VW}odg}7V0&#n}$ zF)x^z=PNToqpXA%=nn{h5m8>Z+Qo)1k+jK+%z`+T`2DHB@?)Z^Y$PfyTB;S30PDVN zTf84BNmJt1?`TF#tyQ1S7(Ug2!QNmm?Bq0HbgMKy0~0@RQi95aUAhsRIISWh9t3Yt z*PRO<$OK~m9f42y^jC#xvK3>lNZ8oB-fIZ}WZQ!b z2{_K$Vms@*W}|_fG_1e=Pzx1EY zEG64AK%uUmK^4>_loSy^SrT8z?3t!MQ&+~oCmwY7-t&zV)5_I~SyVcI1S&U> z!AXs&U&~lVEfBT?uu?_>FoR$8n@S8M$LLtkE0%qwu@A&H>fEA!FgIN>mOc&=iV2RwtP%!CGo~(<|LVY+SD0J-YCr zy$n-wpD}>Sy{5Y4w2)%vCyxp8o5LY#mUJ1dYMNAs7VNdo4IjVrnvWqAPZyb9zr#{{ zD>S(UMZ;3N&V<~qaPu~OYwbu1=?fRS9C62mo<+=E1=*-5e+W)22RjDt`iN|`k0hMy zTS)NHo3w+~H)(eLL{1*qwOjnq$)>w`_(KB9zGo05SZ2EGgu7+hFgbr}X-^Iq5+KB* zFeTU}tOVr*;C(3|*bP;e)XW}8&99VoQ7n~avM~U;B{zYG*u8jp9qD8^sj-G9VcRgE ze4sp4xd~4G_JIOLhYJc6a%oUpz(&XHT_(hff&h4A?QxYxlpDg2zNt&KP)u70x6ls= zROO4An3q^Yt!Jd{D=x?Wgg{A1Yntd83d;$##PNLOg(}-3zij5lSOK6p%mi7CwvmLD!L5H9P4qW;yq!CAV&e| zUV;?X=lznc-XZql2I8r`37?&I4Q{?ieBTsr!RCjmBYl(L@15n z{P(s>OL7MxPNj&ua#5rC=vhO?a;LxWKQJv5_c_^wSGcYfB|`is7`~+wbY$3#pFt=j zhU-@*R!es%t zY~9xAng8L>x9^49D78{~>dd`KK5E^zfA|_?3sFoBFoa5ev<(;Gr!sw1r7WM?v7C-d zykO9cM1}zOUhVaUpn5BEKC8-a>M~i23{P1#J=Cn?g?|Q>L(}uD z+eMWtbiu9vJ%Er?+wjMGwDN`Jtu3+;-iNz^7o0kLkq#qr0GDE8%s4O~JKJ8%Er5#BX*y zpOLOUUuEC?ULh!-5d35NWQ(>q?a_kvxTlP{FYfr_ z(5g}4W4TnyZHe#)n=7jua^u&)(bw;`&>suz>g}^GroYfX7ms42wx;C0TdL8&#kZgt zwozS9fo5FFNud=n4cjt@Xc=CzW$`trm%p8lB^|WH; z*P2T=`Lb6ATy8z$_WL{Tdq$&2(-SB8hV~+{RW(ARF+pgm6&%Z>15PfQGrpeSIqz6XF~p0q)@Vd zyl$BgEq0nW@Z@#1QDGxK%g6PXfApW-Qf$L)(0rx#Ips*uA#{+cjqJ~=D=)m*6X zx0AXn*PNtVoAu=q5IG4jV=3adH}d>7y%+oGcg@F$ZmiQ!Mt34`BHZeY^}**`qXnNe z1U-zIO%H}x9jfWSFg$0e6uwVyzK9c6@w8iZADlRie_s3MygLyPJVs&=UN;PEf6y`v z!}U9za9;H$p%oL3o^QXyx#JMh3Jy(W}2{i@D)s*k>q zD2C(}U;&_{d&5oedyVwlyq)~Ig_S(Ldf@w7e0DJjLNbj6fAwfs+Zk08&yiwB=c2=ETy81|J9b$y4gP}JNp&p!)KkP<6RS#!L34Xt$oMSZd zyZsvuf8~*DA1tt;*NOCz;fHE0*8X%Zn7jHh=!YTGI|o2mN<5 z#!SDQa6}@^{hv^_V4s$|=T|RW?%RwO^o4ma!z5jmTtD3IeF}^UyuC|38wxt&V%A0` zB7_rdk765o-73_XY*}78nWeu5&9a>L-PieF7v7widFK6|RjKxIn&QYxezjK9TmFKK zKg6X4T{u%pmzw-M%-Z5j%6ql6tc7@v=>hQ)ESZ|PSMSwIZ!A=9MvGj(+Pu`nuI~Ot zWXm=4{)_xR!8Yz&msZurR<871+4WTM`}#+;zkOf*Dz#fsy~|t|bET8(Oct##i&|C6 zQn>j(zWh#YqH*#T3?%5ACXgTgypl6f$od_*-;}EHfsGH>+(Z!7XN8c_@7B3NjcKZ} ze9LsZn`@l%um|y*{K|G=#~jkIu8dJ;=Oo$4k{#puP7|*k$kY!3F=OqT{H02IGa2*( zmSA0^jt+&%4mXUF5slH9*g|mHOWyH(JI%Z9L?K`J!cXYavB6Y)4njm+lUia}qtoQn zLE?w@B9bi_2vA##USkLc>Fm{qCVP(GL7UC{c+$W@;o34S3LHN}QFuSm`c^T@%i`z4K~9>82YKTrg;?Ks{Uy8dc5`K%7{>Vu-Cp*4Xxa&%+b+r%dt;*>+DjC z&(?B6b5g!BFeu3!ANYfTheImT8O(`VgRLHo)060w8zVZ)oG(&4(k%RWXZSByob>{= z43e@1awdzI=Ahe-3+P5~g>zSQC{H&Z#TL_Gk$P19+gW$DuL{!`-M;eh3;DcbjYQ>d zc+JF!75(CaiEdkt7X5K5TisN#?${<$r8kqwbt#FL99725EP8yOJryJ}3mA84s!~AB zPjh-_S5>$mezneI8-?9k8nkS-@dF(W`w#0-OQ*q`kK4>spl@}!@6*}958~qRr<|7BeOgR8xz`me6nx#11rMw`&w+_o=il9_gY(o+U~dw zQ>&)+wO;gn-EBnIe2l-1zMvDIL%P?C++Vkpl?H9Zh?y%p1nB+xKfqamv{+XzW&6WU z?0r1Jo@T0M5<})#`A*pn-_;B1#`dSXgITca4coS;SwYJT8~D#D_octL5U6|js(aiL zPlwUc(uzw^G?Ix&^@=_QAs>30U@j@pJ57=OY@PT(4^T-DM;RPudhskXyxIi{>sMAhMsbP$}wmOL#SAL3WZVyCtLR_nJ28V;w^MOWCjBFoaM zK@zK^gDRO#T#_F9Z3k>CcrUWL*BT7J4=dM`F;CgJ1t{)VadQhtpG^^#tA07_{Xk8% z62eq!)}$YHKsvP8aA(_WuHi%YS(UgK{Qxe>-Solss~GCC+iQQ($6BTF`+3s8g!9R$ zj7NFJSs=v&c>p#X>@fu>J4$1*ui9700)?vFje(?{s*qho4dku#H5mK(a|m>GTsUMM z&blCS^UXPj7~7}fdsYD|QvIxjV0PNfA`3=#05q#OuGni<;8O`QR!XMLaZ)R&RDm&z zw_d%>^!mv}<9f&i&uJA%+|8%jeSx{2l?vJ}{5mM>Dt2Mwdhul6hIvlHC8v!urcWxF45#;<_UBlFpgTgw*Ul1tw{q6*4kp|aLt z#tY3WsJ(3IU-;)u2!{@{JWCHur$8uWsggp$@u#i&qO|!$`dzdB(*Tr zqT-3Ww!1gLl?BD7B#ly(pbW$!xyHd61&L8q12B;{;cR+HPDcjr4b*mVFwdp6=iU|{ zcu!iHgs*&1>YEdTBZ%OAi@0Lz!nTEc>QXBS1a6NQ{^j{^ zQw`DPMu|(Ds}llv2XQ<1=Gjbp%OiRhkoOy5_(0g+M?xgr>!VJZut?^^ux`@bR2WHWHIK}FG ztfTic=|I-=Cu-N(6-TPY86>Fxe5>>^Ff6a4iN>%SK zqJv_GhQA6-X9?~NQ##H5A%6@zDbsrZwGfU!LK--yOkV&yuGB-Tyc7wBLO%vrUdm%A z5=JE75Cpm2m$k6q?4b#!r8tGtN<>Q1ex{O}OdPau)hT)}I2=^~L1|66vdxD_AW<9i zfcJRpvBF>xrgbsL$Jj6fYXBdaCX&aLDw6s48Ku{9l5!Aj5Mv20DweL;IF@u+Z z8j9xyUx=>>2>5=Vns*>{_?XfflezfQ+crrN0a3!vX}%LyfP5|_Gi*6B`%nU_>1x}>P|~PMMaSF%Eu=h?%Q|3^qh6e~G#eikQH3x?#f--Sb!I^?_^2K&BP)W4=*#eNFd zjm$jwkMf21+l$LDj+4C6X{|u47G%E~q#B_xE+&?Zt?p5Dht3n<=3A1r!B0)AQ7eV< zrZ$#@^~FF%l0ntV--%7^ZpBHUpGCEjiNlsZbj^ij;^ic`&!h9pB)bL`03b?kyO*G zf$6%PbJofErI6|;>g^PE86~*3=dUpB?|XD^3U{+sxzRXQx$#!|Pks!oZ3x0zc(|t7 z>>`Qr;(lYT@BIdcUU&}?t4SM2ir9sud1{UHMEY)_?dP!MwRq}9&pA#5rCGEqADod1 zL7K>?kC!!TUpk3co$f4B>7YQ?v#-5u`3kylv8&o@{bCoOMnd%ms7!Gl+gt&93Vs38 zemES(t{ALQkn*lg3aIcVYB#9BfQ|=BWF?Be(Mk+iWT4xVLxgH=R0?OyaO`{teHVn3 zo>2on&toccW3wFa(-5UA3!X_t%FHUv_Py>ur)GJHM+)XIG4p^wGPCXg^H2(kzy&3T zyD!g#__f0&r(B_Dguj^XRLzt8mlC$xt@()wF*yl0tyHq$#=TBe9C?QY^QC*7te9}%klpTK%`W4H(ywZ5K z673?N$#7aBQ+kRBvqu|j%(+zm81z*BOC%7kpS%kSHXrTWgC4x4-wiE8;*$sl_{+R( zRo+pjo6#?WmFte)ab+CX@rV5X`c3rh+ug$W55GM`R5g>T<{&hImlUN_QvXvB$;X^G z|7Fi{Z2ZfyPbn27`<#gNAv#e*L31-T_XxWHs1Gdvxyf@#rZ z`_?|aRMy>`3QH}1HTqTCiHtU@nb!g5I-`D(kB><+$7nUSDcOGTVv4OaQ0H2 z<3R|zAMWkso6BnLm-XPDsGzGq2Zqsiie#Dm248(Tqd;SWs|HJ4b%FdaFlP<8zp3ha zqo?Y+yH?5V>e}R@zDC;Hl+c8f4&7#mM&Qfj(Gv6vZ?g-p@|p`b3jo*Q6V0+dF6RBU z@kzE=&*2c)T(&2*ja%LRY;u}8U)4F2_GB32F6sw!;7bme{X&CHk*x-OkhHd3v5I7w zinIjMN*UOs{s?*Bqz{synMBA-0Q$3O_zG(C1+xU+nmq`@7m%{9;Iz--Am-*4%m=F&L*IucRO>Udu(-1lGcVSbpsa0y zQjw$L2$4d*_k-_>4=yK{4`h^Hb%w!!0QoTyIn35l|aoM=;HMAGxPi z%|2Z8%nSm_Q25eoGh;O!9*q3$X|ii!6j-y-c%8Ua6nl6e9w+8|gqrnktNyn}v6fEY zB7ILCTQjVPRa5S~X~(CQf$Le;Us4*b#2%&}S0Tt#b6 zu)ux1W*Oxx#bIuSbjm~D|8o`*Uw9j*f-1(w#(#p|KUU3f;KN`bWollBd$xY5=N=-e z{I^EtDQv{(D~Zt)Pgd97V(l^|WYNI_#hURmiZ$~YYo*Epw@D^&o9FS*kx}H32SR+t zo58yw!r-;QNQ0UgOvufB8_~pSd7@knVoPXJ`EHGoA`a)>u;k&Ycxls*#FHOnt}|C* z0bGj6;bl!Yr1_$SwSM~%M4*vink z*071wv>hlHwYJti99|?l?aBKxV|ydo*rcRdfEdEtH0DjoKAn#l`ejp}bhtBgKS?De z{8Gq||tW0oj$9gapZf6V%;{Nr${-)k2f=euxi@aKm!x$X!hz+4lIO>@jst zRl;jm8_J7*ewOxf66hv5sV-pgXNizk9esIfag8E{y6V)4A{PZFo4!*WD3l!7kcd`3 zHhc84tM8f>nywINN(?%KD8rA3e~|JC4x}NPaEl333qbC1af{6z2aLv+*`P&mtA;-3DC&cPpa#LpS zF@n+KFZRTplI8hwDxK||{+_$@@r^p;Kr#`9MwYMR6Rppjz4%GgEEfQGeD|~SYES-7 zDPdHt9af7QIMRoZv+VUGEI!3ySe-oR642ilHB+O{5%Qi5oKX0Adx)E`m^v=($}++2$>e&;Wx*aNSUfFm=KdH)ZMd4Ih%JQrsid3x5`Aqq3tCG3Mekbbv`@XRjX3EW1k-2UhA#Qa1p8%a-@*ZuxuHm ziYKo_ivW*TFp0CK#IwNxZozi6=^g9j0+xad zw2J*6Zh|2T*ieh0MFXG6`;gDAFKo-B9)d7ty!_Pr>{Nbyt_l@3d^wvOCcQW~zOuw+ zgPd0FI~0L3WB)cQJ5&us_!ExRUGSP zRqh#?FmB=s%Xnkj=RF}k5k4lc?mGlp8SmH@6gcR$VwJJo?+#ErS`3@I#LiMDS*|wZ zP2K*fvrBg=l5AzQ0R?$oHtBISdXn_^erQc)A1t>rL>Er)eL|yAL3&$EvsP1fOHRS0 zpYg2Yi-fHZ)|V&Kq+&s@Zf1k0Pm6PBLh48qc$Ti|4vgAHHZevB_xQm zj_Q8Xm|&wRH4Ev~>P2iQ{k&5tGr%{`RzgVDKU8PlGmG=ZYup1kqr&zDB2yol zGc|*39DuW}sQOzb40*qXNQr0WeT~l!^Jk z;w`{g>h6hn^MLWxO;$AKm1Y)N4IU^{Si@qRpL%pXDHTos(4VhaOX3;glZ2-`ls-B7 z?{|=TK}3SA(G8gpHVQhYPeKu?b}ghjW&G^n_IGMf7=4Qe{tgSJ(61fobVNNXCv`6G zL}PFRQ{ssWmVDDlHf*$sL#F56;=#fbM@>c%lAUnD@;KtE5Cn5xT_oXgP!DwV1CkxS z8s;SSo!v9N|G!%mUPk@nO=_GZyS7jo{^RpW(cIy!A_68V{IO5G z28Gp^m)4#Ak8?Tg7GcFY5ZQXCWa&JecESpc!`$?qSkGrXv8Voc zRTdHzEL$gIgsPYP_O~TW-gC#;wYo#s03*4fsRG4a5o(DbKZ+M~#SW))A5w{ac{uzK z-s+Pu?qO1*FX8Wpe^sUAJ5VMK0RDHC8|OKm8{5BS$VEu1+-G*kg@4neknb((3{0W?TZ?)sV!t z6KU%c4#lI@p!AJbX{+@VO$P;BJTYyZ_w1vGOVN*>D?uICYZ2L=D`DM*C`O@@!)m=m zD4bD&b+e`hn~FlSG5hjNGDBbNSn{h(bl#m|V2Q5aXjKx{JY;a*`mBpUW2LY|A@Q8~ zZ2m@-H!kCTGqK27MIpRWuRwSu&=Od3GTs@jdT@TIq*|nUte5WQ86jLS;X#&B(DAbl zMiNFzv444y+EomVIW%n$gasyPq?$4)M{fLdl<=G>hNAva$2BT|P{$klLVXai8&bMI zEJd18mMb3iQI|fd09M3RexB!r{;+m0wcNl8sr!)}OV5ld1Uu=^#2*46Jlg5REBhdG zeVX6>h^7yKo6@W+Lu^Ok=|sCX>x0~O+>>kuall+LcvZ{Zdc=!&id(xBLj8>dV-Lyu zPF9O98ror-plrGQ3&W`=e7e>;k0j+X$u=GGiRucBapi)M^*ZS|ZtJ8-?c1GKs?1DDd~F2$ca%hTW)L$LAjcvfDn5N?0lQ0DJdiO6!WTi+RfTIM?0a z&`Z6(qbg*bZ={Dmc7cV0VP40sxfQ|x6|0}125lZ22yczxamV#4B0RX>OJG$q>6h+* zazMs6w1$|Xky&$|$bac*0w?Vk383N(Uz&&$5v>}-*!ixftAD=a7*4+pEVvK2P>}e~ z_vPp;G*8j5j*pj1HVsxjr->3cFRO~EVoo+ch1n6mQxS#I%yL7OulZ=j}qtuehgD_J1Dk!iCu zYAOj87HYx?rh}i2mWraK`3y&eq_Uowgdv}SgSWJ^ev#*0TSD@nytL$6ih{RWQq1wU z&YAWl%@i|5H0EV7`}>Iv^{R}|f&z~D4;7Wz){jg(lfNb{$RO9Sk9$UCVmlvxE3gXo z6{-CU7Z_If01*IyP;vMRV_~+Wg-pa#_;aaS^n#jGrRT`Ae46Ffyg=@F*UwX!CwZ(h z;iMI80F6*&hx)0r<=7N<=cxc)M)+U#y7FJ$=4d0IQHcQ0N`%ZlpmdhNNb__;yq&jV zitD+@7-wSl`%Y{r@9uYK#45Kg0eo}pz>6;>FBU}{-JHwEdHH8v;_o6jv4Bk;8sG?@ zive7D26S3JZL|8*VudvUHoY(M9xKGOFw1cs$jhcy9H7t^UJG;Ng$;ig*KWct3!O=w zl{FZMx@>6>qqR52jhMRboEc7a*3Zn=FpDxP)U1LFBsbl^#E0cJHHV@Wxjo;nKfOXP z%4OR-DM~&V@>&=CMqv_%Gj3)L@?Fq47u%;)$N#LVn`-H7s5&mTc=+=F^j=D6orvIT zM0ki-I587%bljFTZ&}rUtnEVYyHiAfupE2f7JopYiBsK+&%EA8jq{r$Mo;Gi`kmCc zDV#>tm0ZFo$F|?pgiv)OY?KZ0r3{!USw1TpTC!ST0C+v=uK1&v3{_;zTjZ^L0C5Eo zIDLveU$-OPRkE^*&ntH;^Hu(3`h#2&>Bdu0`9g{QB`Z`yf(IMtRhc=twJ=5nX~8>1 zQ~!CM%6;7^#U?BdmM~pWaYOi_X}Ss0PWjB>SG)yxbu|>iU{!TiH73mqo8v*7byf+c z`PmBTl;D&6F2@%^l_$C61IFfg-^h)he-M_8yu{QfQ|py2)0X)|aXKQv-TjlzaJsFmU_K zYq}j3E(W%wBaMRM!*A&FCaOnC0x1>xC5&7Kv0RWEm<&XH>O2sYIb`$T|6}Sc!=ik@ zaBT}oL0|xB>FyjrP>}ASySuwV8tE8@?(VLkyF)-4=?ZFoz z6nC|Li?jnr$v-w^i+LR!F#DxasicZbjcgF1g8YuOf($HXqVjzdl&hhILpC2jtZYqk zBRTcIA(An9Mum=zcXnO>afATO-}u@8FE0L+oSCUgdZgoX^^>@Qa&HS5E%|I`#{%Ht zD^17FHpVz6`^o^KZ?ylz(g8Huz}~((Mc9cw{&p#?swXF4ce}qzbv=o}9t*@G?7s6V zAQh1&qu@YKWWRV`aY&v*2<)%ff;Q{@Rri}GSL_y6u@-Kr0kJgP>qnw&w<~cz+%YU3 z|CkQ9x-(YXSaS$Yhvs}^Fgh^K>vv+Y?-;)???#s7%%*h{hv9R%OovwJ6>d<=-&ep70hNnDR4JZ=T2AFZ28P3E5-Y&UnH<6rhFNF|5c)=>bi;vRjdHrt-`j2 zI+>VQemOPMurzY`t34ZI?~jNVx6bj*ymY$LJvC$)2%ubHAS^a0tk)1#GKU`TWQoz= zsol4ToykrY=^R{q{FcU=NH|X$>nh>NRh3`ZQpp5KU^{l0?u$X$ zQ~F9&B?u{?srfMIPaQj~;o$4EZva5BNW8NNzC-mk-` z1$yAYLVvDyc2lNkEtCX^{9K@au|VqCPj3o497?^$xCi(6qn8k5y@A9_)P9E{t{!e= znayE!dUvWZRa1pals{4QmRO|*FY)n58SXt5&02Tv+1zbFqe$-2#%Q7Jrh!m~r`XR0 z3STpPw&6%rvk8(1esopJ!jxOIu}5J6LJ0e-Mn)eP665M;qRxoig43<8&c4@xmHz8=0PNuHJ1z@Y3@&!ZHM3_KQKCbC<~PCscr_q69J~&e zoF1OGC;QV3km$IYfbm`N|4OjD7@K3qjBS=Us?cvHg>luZg$}96Jc)reTJ{OtShF5& z1o73e(Z;PX1=S#KVNjXLo2wV2UWn`P%GwwC!Mf}jui##a+uH8&W(}NCgJP}*lM6^~ z;i12jaZ8+WRhL4NxD5&u)DN9=)LHVZVNe9q9@(B)K3)hZih5=K!SIg4#Rx>~U7>-I zwlWgW*ULxGu*!1OD(b86GT;zl;)+2Ts<-Fe726)gl27Bsm7DYh z;nr$UE`o~j{DjY1JX8?K7%IiW_n`VgWxN-waL3axnkQ#uQL14AP!CDR*;H7}YD<0X zZNAILit`W2fkz8cv)1aoDAVZSlE}M19WHCdht*H)TaiwF2yVH$v3pr9`{JPo>iQ-FE0n$Ol@675Q0x^YDav_IwVphT*I%2NA;KfYMd65xADtqxNj}*6sI|BGjqus~E|s5mbWFp&qtf z6M197M0dtMp^`bRhqx@2A2l4rBC0MGyH$YGy=Z~JF&F6%KOZBTAFyRlDH)$(K(K2tNvL?i9Hd26-ka>bP`=GT@8HqNm zVLDrB{>GSS!=62~3KuE`uW9DSF{tCd?OeRC4d<7E%<^W4TXc>@hFdgQG@a(6RPg_D zHo1>k_p?RH>N0=+s-Qws`+I5{|8M>VhU_mTe5t$Tg&5Qp6^T!Blz^%0+s5Y^#UL$c z@h!~I5h`d|x>I%To5*a4n1>;OZ$SWSIsNEYN?GGNeB%|O_Yi%NUcLyp9N+hpDRDQx z;Bo*>Gm)z~!r(xa;cA?Ho6Lx}{vhZ|@}WD>%PmK0wB8tni{h*Bx$8TTk@KD5&fGq+ z<)NI^7*>98#1w|Uw2y^BvJ=GKBEwt@=^%WT!C;DuEmm^#b3vG5$;H>2a7#*)J$NGO ztYJxHs#>sYO(-1pW+#;+{Js5z5I7`2t^zk#`P_K8O7NYe$d{=^?tHqtY!WGtTGN!b z@zKay?70gP4hkA_b4OBNjZ>vW&vU*}p5&iU97!E1@h#?ue|4)baenK{S0=MzF+Mb+ zxL;1^pahZPTaM$C$igC#HWCew9yS*F%$?5+$_F@i-o;=9x<)pa9$5XfDP07!oRwIR zaNM5qdCY<^iqq@?<=~rO#>5<=(XEzPcxemOjyp>H0qJO)x}NX2R*FqIhaI`k%21~wi^zbH&h(f}5*r6NDqNc| zsw3{BG+bs!Jv&4*@l1e=BkB_cq5{lnH-1Jwp&nBPKf;wh?|kR3-rUE!6^S_fI69IC zBeAqd8%cb+6GUb4lfTjL11z#3C=x+QX_PA*OBAq=ut(&EQY>>{MG4~+q>!5y?sqhVc`CeQ$IZ>8+3Gh*zk?a-oVfK`*LuVS}tL=BYzl4&ry?8KruS5P{T(*k>FP`zbGSBuchvBuOQIVTyvom6h|cK!&n( z904pQdk56Y6H!c8sxUw6ki!>}wnGlnh*G!l?7-P?;rS{l9>l)f2fkn0&-olYs&eGyt!Q5$9-SeHAa{V&*;#YX_mDF4Dje($(e0lQ1 zJzrPe?=dk)Lmk)KF|x;}TylAQ*)5W6KhwT^NEyoanp)$^FAq(jMmn@yp=0=(fLr0% zkzZ^$+?!%GXJq16rK~g&lV4-fR-EA|7@xv<$c~QIVoUp3ZB)hB3!XTtI;9DzB&$*v zON5P<*3ntD7Yn-09&)Qrm0pHo_sti+~Cv` zw)f`#dTvUQ^|qSjzkaRs#VfLP)jO|MI`e4sjC+{BPbbo1gVnqPa?^_AXh6@T?{%H& z_%01D?eC64-Y-n#h2? z(Z2+boxM-crL(Dm+Y(%TAsMDuD^GTL{!RCsv)v>VH*KbsY zIAJ>K_LWHCZ`H>$sGFCN z=JF3@M%{P%6LVu`J0Y~ijfB>2J*uymb-ZeupoHUv=6&yjKsYVBN!QX|@sjGGEJn3+ z*Y}EJ@j;e?pH0X#U$1sTc)50XO>^HUz$Psn{)z+hy`RF(xxl}Yd|ekv!i}&hrq8nq zn+LfS1vpHEf;lzkRLU};c#?k9iHS57{EHIO_p^?SU@7+Sem<~nMOow>jDw@Jo_kw$1vBNgoz^~NptpM1yy)FEdprudBVCX;@fj&Dx)1b5Xg zjCHPmkjHJ(&D3;^_>@bnEKEA}U)IC&6)dPs(so8VXzIzJ7mx%tYlCb%e9u}R3H}l> z$fEp4%2u?-6gv#qxt8`D;Jr<%BmrzXAmZL}9v?lTi#?n0bv2gxal*Vx?nJsuWX55k zLf$Dp%Em({MY#*65E2yh&a$a$PiPr!-K=whtL;>-tB(-1!51>NQP8(-LP_e3d~g#)i@MTjE8SC zAmzP@my<%~utwdxl}@e1LXYyy4-y)!Hf|-O|6!~UA8<~IK%|+dQd(b_&qcI_@V$vv z3ZjrerQZJv5cWucl#;F3%=aoA*`?^{{l+mc62n&J({tU82U4TkmTkZhAC@ zg*%;MsrB}-qs4d$BOf;IAw+M+HBnm41V;lS)-j*tT(5U2fgLBup6UyI_HH!vx@IE8 zA}=%c9DI|*Xkn8QOBGYM3^@G1Or0u*PW?;@5 zR5c^a%`eT`?lvm$Bd{^mF5XQVD;o~ zt2-OegA=V{l}rTo-w_uG?Zl`n(9`>~V;z$_%*7M+oZNiK1byl=tWbTG&Zw^d4ZMOvn-feUXF-h>1f9Hvfek28^%D_(y2c;8f+01-tGVb z7N^_GBB2Tx>D`bxA4;;-T)9Q1h1}c7FuUUzw*NyoO8sNCQRVxjSM9S#k(`p+x7{J> z@xjHwO=G{tpM>VS;$*KgTRgT+u4*X&t)tX_Z5ki1p3nH3*DuEkY%hbD2zl2?YPcG2 z@?lt>TyKbil{Y5OpVgq7?b}ajuPLV`_Su3+eQWK%4hr;AaOZC-ssxhxtk#t4vMSx; zTiKH$aN8Vmmmw-`(78u5Yn-`>ZA3m#;) z&DIh8v8d>#$~9_)e->qCiRz6Egl7^7^bS~aDW6)YRjNm8%nVErw@%s3#f@!Ob0!Fb z?s*litDVRBX6ZgEzKribjiZy19jA?BjXWG_FOPVC;EWZgrdnxmu<3etm{?3LbL{Pm zm}{vqPMVUynMvyJq%oJQv2J8ujVE$6zk#RKM1~mzs7Rfu-{^Ma_fUrl;@vl>_6%p1 z$iO^N9!wTFW>XNw`!GWy9e)Vu;_<~!Y7BdY%#LHlTNfFa_e#qZnG9M?HjV5k94-7O z7D+dsKx(`YuJe)RMmo6Gx$awnEt0$PXg;HQNyv-gF5m13WjYZJK6pHg{G(3mNb|Qy z3WVT(Q@@ggo_e&J=3(By>9kE%5cK&J*fT3}zu4}mjb;e00H&Ju@zXK$I~8 zEO96>go2#i@Z#H_EdNR_*ElRQ@fgKGZ&Ib1{SmcV3f@^!J^nuGjDFaTX~CK_AvzO+ zeK}j%^nf*5Yjonbr!WRc;qVXK81a@%&LqAGSGbo#J z)mRpNhcMiE8`0?=|KX0t@0^C7h;DHCxqWwNBV9iT#tg*dZ-m`)FV2Ym=FAJ2I17;~ z?O!K4K^jHAoClIVt|#;jO?vNgG#?bErE1CV0^(e+iki;P6~4Qi(bA3%!7H|m-30^h zqa90+iyczcQB}Zur?ut!GAP%K;kWlXYO|XwO>UCz8t^pz%U&;(J?=&cZ^%iXZwG%m zl1+vGxyX8Ma}1UuizU5sklct<>c>R!Zp+F?AV-jqv%7BXd}tk9Nj&;TUIxAf5%Bpo zxO46tp{n3n)~T!21u5W-kpA5uH3a0r7A~GMfzrohMJMC`Vb!UBXj|gafog>*{Jl$1 zs&L7q)FmjH+#CI~PrKNr?KwcokZMZaMNUt6>r_U;PA-#L^Y^K8igJWvuWu%;#mSha zPbe_wo9x z$K;r`t?lV`hlk(>D~H)cI(MC$>4aP6-p5q?JVug%iBG``7QkfeWEKq(t4jpM=bWfY zm3D{i?cMOQ#Z>h^>$LPo--Nk{!zEsC{}&HvuQAx5(2T|S2JHE7 z#&gY6`ALBN$c|Fhy`hBynL-v38UxyM=?T!CTemZ-HGXAeGi#IBX`Cb4yI9~SoY&fknA`Yxyd;}{(C968Ufu+3uKEq4Q^Rw z{4Cb9h8iZF5EGQoMh+?wq zYe9tEm0Ww(C<0zTn(z4axv-GG_K+znLn)FIEGF_62QLh-e=4h_bnxJ?UWFy6gXN8R zAra&KUb1R~{SA)!ZAdkTkYnbhKtm;-rn|I@oir;!Aq*0ylh%XWuJk(dE^UTFO*W@Y z^4&ItuyQUB6=+g+Tm1)|0;=NT($Bn>f8}IQMP+`I6$j_%(n{f(Y+iKLq@klpEyq^c zE$*#`k^cP?iUoiDX;qjV2feqC@^F8FVJ;M8=iZK79J6CHm7B0aI)0k z8abVj4fH6U9hOzWY&7M60f?sNt!VzfoxfIL1gnr}pR znbcD$e}|%~MOiVP_mz!Oc7w6fSIL4c`;va+n_%38&WA^ivGLLO-7zGrC0{g{KVjSV zw;0TQ1+d73(wdn+bSUG%@4heo&K*@y^hyTyET=At3ANHh^w4wIzC7r83`J@1U^kIp zrh8@As#@J+@#0fBPWEut^L})qeP`&L7xl|M-R-k@VfIao0#-VvYm#wpBEL z)dZkVjoP7;&c^ZkgHmI{sjAT~?ZmLTp)3U6!wF7pTX^Sf(B#DB?l+V z#a1_eoWx#n4Y@R~O)g1N?_z^tx)RX59z3CDQck!qM!BY&4|IMv>i?RbkO8AC1`@|8 zL+rt9y!yz36(#kF@g@r>#*>(iz8MY1_FC$JqaQzORR4}QAPmF)JzH}6!Ry&K*=P6w zSw6m;e-J-j^$5_%V7>ss!v^N=<Ne>1T(+16R=hpJ>C-n|EB)p z_m_NwL#qr*Mtx-BwItsK=_prOi|O6*IvedmBe6*6yCa}w z@Jd6Xa2kh++V5)4>{|0_#o^lEI(1rk))1lyM~bFeGuX8|<2d>aIrtd=&_<{(V2$0!4Q~UF$9lVVWp4<(O{O2dSZSnWj6Zj&>j$>ra1Ptxy!gFa?Q>dh2Vg2}7 zRex^>g_dfh%%-p+hLz3zhron4$BTi}(~$3Z_Ts1`Y(@h_tiO%CE;b`r49_B$A60wB*>4C59=1gb9$qWg3SRWN__|%3cN$rku1OPx%_JPw za2Uow9>S`#YGN>#;e$RQSU5UVjBSAa@v7N4SybeKm>lyXLEQ+-60@j>J>)8Api#-; zntwKF;-qlXcv>qUWf_MfC-a(schFcs&ZF^r{pFexux-(d!2;IeGMMw4h*CR(WF@tm-OUMLzI(cVo(x*1^k4k zDGfp5e>ko?3L-3UGDkJ2E&CD&-3pNnhGnJmB*37~ip#Om^JiOw(w>7RHb%v)i=MNI zN8PW2--idvy~m8|?xP8veJVMswJ9p&XSUFDB%tXt+PA^Y^Y%r%xu3#gMsxLI4eH+U zZ{kJ^vcy1Zu-Jr%a9aMd9-}&hM!b34KniJT|6qPjdURt19Sqf9$T#vG_9(P1dTZt< zazHD=cT$jIvJyOV@B3{T^ zKEB*e}n^R(bmdpRI0!7Ai-E6&m2G(Xsi&%`r?M<(ZRlbKSH(b zE`2nIKlubp$;hQ0o`P=zu}ZA{v?R@9&6NmG<<8Cy6T0);skt1we118R-Y2rhaOHQD1gRtYmg+n>mbCP>p^FEdYEq)1hXyh%5vH#rir+)m zqg&=cRb5y3mXLn*kEjV)HThf^5;D59HZc^Lh|FV%j91$h826hr&^+Km6;5T}nOjf8 z9#h(~3ugdPrBNu*17DAbS+7fEpV%PBQ+6^ur?|`$E=wq54ao zAY5c8Jt18jYDlG1%5By$*cfyp@(YiS9rA6P1MT&^-(?=@MkL2Xv6?xNpf|6az}Z(1 zlEQ-g@O>RZV0Wov%TvCO8Wd$M(W2fAQ}|pn!-)~@b%pA^=|AJzi*Mv{LO#u@jd+UO zFU3ZCp>TN?!>wXr^iow3!ZzQsd@=x7rt^EhI=udjAl2{h1U-0+56?v!o{LW$Jsxt+ zHT_imfL|uikgDv7L^QPFM2?sQW3t-o%#jPoMbB|}12W-Z_-j!~bj=@*wfsHT_8+4+ zxAFA64F((EjcH}I@RMqaI=$H}KLC{SR( zgipoI#iLttm0W%{cM->BRR1`d`L(uqMk(hrm+cBK2n1SSlae=FZnWWx@(13c_`8d} zQOAKu{90u=-eu|8`6!Fg<^B(HvFXxk!Lr`&K*Wgm?!E7LhMe$LTj`~|vVoh}6APJW z(d>mSu@JHzDHuI;@8T#JhUCJGi9lmq^~KJwW|(|@$719VZ>&$Ah9sN?gD_&|Et+uj zJjIz!AgZoXs7UR6o?kYr4>4MO?AQ&4IIZq?8x`qw*AzZlDa5H&otC-K|Na?7FtG*G zLAGjw6vp;;f;_B%#;TV&_u z!?E6l**jc1Lq}gRL8VH~hLPwK^?ih(Q!~JIbzwW(nN&GhSu<*W>x*6|Y2uF$ z6qsJ}PC3%*EOW{-pA~IL>oR_QI@~WOIxa2|3mFWqwP!MPK3X#EQzS&ySNe%`T#iq> zd|=&pY4&bugL)D*Mfl(P69?3*8n^c5Tl27bSMZdNyi$0Viw z!#wzSEke-n0|2jBxoL%FL*H>sfPPjQo0w=~r;$r?S$4|umib=r-8SO?k`L~rE%qq81^W23r$IAoRX^_lL<(kN=y=;p9ZsUdLdLkG7 z=Nh6SjC3ba^(tk>IL-o6^}h-7f*N}R6aFV=J{oUhijGw@{c;22R*u zVDWO48fxPP#?kzGx2)Bfh6_T*7o{3&-#;Gj9Ze{9-=*3(c~B?qIi@`6dMj%NA#zvt zi=@r1w{Hq7FPvFiSh=#^-L4dWA=&)(4JS!CwE1rEdB%{P2!kv$EafW5dQ^9UD+Q_> z7}AJ#!jWY;AB52+HCR*DR`??uc;RjT-*5STaD2(@cRS5!<_n!PZpvHEKA^iE6YcHM z*Ky;Q;XO*{+KDTJ9!Y}t`xN{Gn?Q9Z;kL@>#L6{N^t>iU=x=lLfsC9;+;>CLJqt?| z&^}-s=zH-F@~sV!60fmMT6_T}V)!j=tS1;%w9RRkMaI^O9W=1OLiERJ8mp2cx^g+b zzsK2z0`!*`QCVsIj6tokzKK!r@s9{*2we!Z$jgMY3BHGz9xX@GY8ytso*-m*fH{4v z9#ME1NO5}}IJEuO^*)3-Fk`EEn_IMBnJwAH>=V)9kyDRP)2eHlci6D698EFSL|)<& zO^{FbQSSjFN}SKbH4f_Vw&P;v_C+bM8U(j#qWgbmw$6s&(>~e#WH}LYu&xJWowz2R z^w$>vWDExbznnuz8vOZQRF`vL^d(Q7O3d7F%i-b^sy%P$a8JOPkI(mEd2Na9 zA^T^t(fCH}F@3@--E&uZQ0j+$cmjDLcDhlrkYr=HbV1HNCj4~)q4HcXuQVcDHBXdm zD>8pQn_2iKC*FNxpsNu7FU6D$$G*g@pdI=0 z?XH1&LFeP?JLP2S4>;6mq5o1d=WtfZqrN;fEnDRznIm_e%3)p?vMiZ;?KW2sy^Jft zCynI%A=iE!wU4+F8ylgduojwD4v>Ml>^_q9yEuAA#Y@MpmBzGC#jXNciJVZ_8)sB0 z2U>7UAxZ+qr%Q#vQ&S6@Jv2&3kE4nvZhG??Yt7f!2Q!1w;P>MCM#QwKHSHzN2nO-h zw&~BYR|T{wDJgU=lDM|`@)0UUl}wn_golWK$DRI;+`nB&Q9FNxmHZ*%_o%Zi2{4q- zMv`O`Xu+Tha2y*fp;;ESn%K6%p~exlkas;^Agk;{{@wkUp$dQ7rWRND>$Q6){CtGr zXeGZ0lEpd(niq~vA`h$jIX^5V=BN~Jp}5?g@3@?5f)x(awU}o#*ttVP?)^y#72X$o zP$xaOUqmhmFtZYsJdd*T7TK+m>A2p{b$z%#ad{GstL=Dc0({{0w@D1|==JmgdMQ^s zu^5u5NulSJUzU82FG66Ep(LKg#532{E6qQ2`QH-|SD%U#yC^3FPWu3ntm4x5RE2jV zqoXE*SiTP=F~6}BH_wv$_#L#Vu^g0Bl57UlQrG*`)YNi{&8wQzOG-pX1^+FY+Ayb3)CAtk4P`} zxOE5Qx1l{~@m|?OVGqkBn0J^3*@N*lV%GFdH_LuH=dl0Tm5<7xk8I7Q zy+l%`i;SABqrJJ*()JYA!sIdO99PSl`A%2I_Wa+~cSUQO?6)UGN9)?5;|GZ7P`E@1+hwut z<`M<_?e@qU@s3u$ToO?O6sI7c3`Ut+j7Hm4OFLqu3#*}APGZoj6f^kIcb}Pfvu|_j zm#?dajcK>}{92E*w$0FVok|XHL=~6fzhl#ov#?Z60EuBoy2AiIyPJc^&5W^Xg(ej& z-aBNwJ#kj-L6`-Q;25>5s#&)LTzct(QAq zn-mljS0d-=&vPeC7KMr3AP1j_k`oL_vpixyb8hH8->?IxNOUZXAJMM;?(Htqu~=XQ za5?b-gDcT!kh3pvIt7`0)W#f<&~RyH+kdItphZyzHK|N~pk6dPaqrsSYaWN;0TyIE z?=w-%@c2$ow{;?QP?ctck}Z6_>r2P1PdSBTl$kj*Xqi_Yfr-R?++jwRM^X?pbbCJ1 zk6`>!^BLb2*_u!E702w&AnsGvTkhh|>42hX3xKKVD4Y9mV`Cvr)@m z^{+JkFVT_RjPZNS3kvk#4JX!l7as4NCg}_K%W!+JmXlSoMh)Pp z8Llp|d<`o{{+XNPu|7000&;s-4`<|Zacx~KT)BQW6tJb|F*yV&WukHwRs@TR7TPs- zA5DG^S+gpF0BT_k&Z#dh`;tz9qK8v|cauBO&xE%^4ll&P#+qs@0wyETw^n!rZHnL*wF zQPXjABbeDkU&jqA9Gj4U$QFxMvb-}K(+qj5I&HtG)x(?>%7(=@*4+-ybZ&V=he`3+d}?X? z9!P}bq;TN0js@^%YkI~sz2}QX@&;>|QdY2!(I2?|N(yyErnXroQIPZLQIM^_l2E1N zeOb#ZK|di{P7noHr9_z*FfRPC7ZbU)oE4B)XY z$lx`8e537nV3N$~%Q(S%!b!yOeZ9HL2b+T_8nnx_mh{w z`D_XAd2yb@c6~3a@sK`|)3F2Z-vtUb`>7Ykd)phwb(4LUdC{Lc{YC7L*~Hh|oF>?J zWcn71vI3OkxJ-yVD4F4Z$kTmy!MvVJImw(30&=_?lw$%1UyV)Qu$ixazU8R3Ka9j4 zN8K>sy}IOJ^LR8Ta(i@k8q?slKBPn=WdEu=?U{xrg962-k?(gHB(i8K^*OtL&1=1+ zczbA~*UzQq^Nz>+!PEOLe$@W{plEBKVrep~1&Ak5(Yq8rq*`9`{wjSZ)D64_Q$dk`4lqH zbt6h%#}IueXh1`hUp^!_afavqPa25*S4G>bh2kavoq(0Z%bzxWfAqtkTd}Jef}C3df<1SkafJL;_s4MW+RSdNC4|z zbA|nYsB;H@DYD)jhC^aocVJq_%HyG=@ISiZijf}dc9j>p11H7{zj@ZYFJ8Ln`xUg_ za0O8`f`M2X%{XoPN@$X${WTD{?bJOZ3&mQ}Mf0Z6({e;tqh*T2BvF+#Q>jrK$4&ae zFdcnZ_4eR9k2=l=^Vm$4it@kz5mGfDgw_Ku)j91TViiwH_w-?q^J<@0CRgR^DXQBaRkVXVmRgSOS z{mk%g+3xgXSN9v5AzLfC+b2SxZp3)|qvcxjCYNJbtW2zjWp5c}qFdZ8iO7EIBX%dH z-B3V4ATQB^Byo^c*g$lS`%S3Oqe15v=DlQm4%4A;c>SXxj4RWLam;JGQ%hUOMCw+>Zsn-daV(z^QHt@O$_LYJGN+*DLl0Op4rB|igU z&``o^Ko&aSpm)BHXwLX=X@N%oq?@PRK6GCf<&$OT!|rf^)7kZ@6xW?LM6E zSp1r1@6Pg_ch_EThY?d()dQhp%s~ChAYfqa6fJoov@1ROmPW6V$N7{nU@)PuEpn8kcmS#}e?`|Lx%Snjt0sReNcr_%eO( zEwo*Js;Ji(1{3Ge5+i=nU9s RccC*NRr3iXbTOjt7Uci z!|J~J&_?QnK0wUhIJy!QbU}WuCxDrBu2U#)zA?}obT{bk`nqiM%+n-8sG2!}WU(F-K7?$}B{x_oZsm~8=~>HY>nVgt5C;&LitKA`8GiJCtua2P1$ z0y`Q+g`-*e1US`z)P57`ZF$dL{>gK;Nx$jMG-SIQqKFw{2ca13O=Q%{(W*nrodMkh3HpFE zs!~;GlJpZhJBLgXCzJkYXfG>*ehMtu1k0o#$h zuwkVW4nIORrJJuSQiHX`HP9CORZN1#q;h$vk9mAGse009){hSy>>Lh%@9<^|elr59 z0v{kj#bi>-K+;Dz{p#wWPT5nJQz97Ot=@<0AFRKo*^}KC5KJE|>2OAmLQXh%(>7~F zo9+-zHc=F-truEJE5ki^I*{Gf1jHT=CTW#17B3~qzOnQTJJHo>PmD`O^f;f|5x->9 z>4=tCnYxpwZi#V^Cc>+@(qLlOsU4la50ccyzG`uDSsM5F5q~t)#@81GIF%VVK5lh& zSut4+s}O%|Y{V_C;b>S%s+MesEudcD!V%_a)| zkbN}wuUlEY)wQD8e#dKMwnXWqT}rL62sy!f&5mIyS3do|-g)J#1;N8uC#V47D>gEw z^EE0mw*F?ziXG_;Uw8D@nT%GG4NJlejomx~zwUI}6?`jxE91SiW+CdZ#Y}K=m~M&v z?ZlR2_mM+{`94SY5g>vhMNz+GLKZz>KdELs!y<>ga=`5E8;O0Dx0r;9M*abbyvrn{ z0WJBYJYBmE?IQtt%A@}n8fk5o zEXyn6InW2XQV5X=F`c)=XCVd#)Qu(0618jn>o5SlX`#1Ovh6KH{-D^Fk%Y0 zC?+vR3leE&IDSj;GLjdii`3PhHzH_;ce;Av_mION>-Ed}ha=qIt1W;5c>3_^tDLZ} z4u`i}F-=B{w1>a9mQvZ{jhX<*LuiPrXlk5y|t^G~5 zO}Y}bPBObmn42zXBLCyoNU^HNa3XGEQn2!13)nAyD*E?&I==ssRIzqH*Yp*dA6gCQ ztqP)&qKbS_PRl?*7^wM}S4<_1T^z0`;n--Bg`M8K?e4{Y_hDBtiJFUcthHd_uC!cgkDt5BX(*)+VZ$a5X3Yg;SJft zgBlPzY_+`aw57dWtz{JMri!4W@K;DQ-a|HU48IYO5 z(Tr7&sDdh-t3~$=61gG8N;sQ0{xf!1=HhG z&EQ#21PgF4>%{ZSK(cY-xDT`?m&pyvDimYuzsiCU3x$Xn)PcG- zA}EvgGnLj77%(@d04XfH$iW>06T8F+ZhyZjw5~~01tN2j^utbnqMp$ zA%|iu8{A_7pMppaMC$|HqlRb6r;n6dV}r>klLmb5zbs@IW4{d=rFk+d5a;}~U z>@AOd3TL(;3_LOY1Wq!h2fbN1C6Pa{wp#q{Xtnqg-#)70c!b#urvT?qi`#U*BrO92 zwzPUU6mT%FzWG=051*b{_xTGDHMjuM#_#X_ltR(@v?ZC?K*7%3xlhM}@UT7`jw5pJ zNx^CnpIuM-(4Tg7U+Xgcv#B%6fDIOAhO8BxErBWkr!FWKjT>jdjl~}t8WGm@Wswd; zo7()*80{Q@0Mt@>#N)4o{uCt(BPJ3PqM?! z8klGd+xc>u$Pu&fJ?rIl6x{iK7<2%lC@QAx|PtH`L4Z2C;0y^Z=C1BPEC+&B(1 zmQ8Epe&i$f>pTGeo-q&>@!ef{TA_Le1vsvw6;rU{X(|#`JU@Hz@upHPuo%?V5is0p_)ud`w}@ z^ZMZ%EHTn^m__KAphnaZ^6?f<1Nm zX%hwn$sQy8d1duq)ds!W!PR9V1{KA{L%%FZ{<%2**#Iyp_YQ9cW}W)IO!$(2PvwXJ ze=vZlMo4=GIYZXMDQl^caPUXhmm5$KW%^T(oe9eTT+)AnCXL4G%OCqpN zZ-qWsiFP#T8P7EL+dub`^S0(=zl5gDA0sK>eFwn&J1k8XUG@L`=p5_f65eb1Hv|(j z!)7mjJs&h?9s#?7I0|SoVaQoAj^Nfdd4H%%Kt`uy6q>&*e^uO2&x+BgneI3DT@~4V z1;(I;c_Smks~urq{Pu^$8)g)HR}Jm3b+hQ4#GEk%x-67rGU4tNlbhijdNr&&obIyOgYx#l27hT@_-ut?KS;=Gg|UA?jeQc4Ogu5Z0>|h1JJLfbBXqG7P&o#^U8>w;~rb6F0${o zHainXos}+$Vghg>g#-1w6e;?S;T^-@vn~m>^!)+l5sZ}qKyE=ruln7}=(F9CvsCTlTxf;EsHy!*tlqE^_>7GFj&`4+U|9wAwlBSa;48`s=IqlaD@?_h z?QDk;7LW5<-NptOx++z*#1}zngT<4TdnfSrv@P3=X)AD+Qkf>?nls`DW-5M+vJUH= zqT?AdzNmv?q%H$R-4mJd$=8=w_-~VLz4Z8kJb?q`q)xfchCe;$i5|-Y3j<1UqYu6`8AAwc-~2C*u%> zlv-HOVs-W>?Sg!VV*EX&Oray+J*mLSH4-FQb;LQ%bn_IA`LlZ=hLfh&=0mj3NG|T) zxq^>2QLy0dF`5?yP3=FPoiG*4vAr(X#03eKJQ)RCu!bPZ^ruOZ%~CANN-qM43flD1 zOk(>k5uf}eMizdLPp5=3-(r(wm0WxoHdqjr&I7);U#>+EGNanu1iz`IvGN)1d1e!l z8fDtqqLkOzk&krTan+RwKVy(~?0)x3w<1#hL6e0yp^_KsX`W#= z+U4@=V|YD4w2J^P*7)zbsWPTce;g>pAFFs|t_y(gx>}}8O=liI6fS`M==v^3V3))p ze5{o)1Jkd4u0qGuZU*PvVzC&*7uN1`=jv7d@RWFU(u+zNHbaB_T-VoTS)ai|a8CHx zrK9VYHFLF9@^t2nOuO((??<&t+N3}dUr?VwGNtde@y*Xb+GE+!_XL*63RyctwzQ5v`9A}6`RJD!NGRc}&e`G}Ifv~@HsR$L^;pM&{m6)T^| z-&y0$H#}eM9E5~SJTga*u}>}pTU{Jgy0IJN9~ zH4YWlXT1q2lmCL2v{B6MWejsA{rGVKb+#i~X|*CDEZ;EpPc&LIzWeRZ#~%)RAAeab z_L?r!iNwC*wqS`7y!|i=_s0>y+?|wsXCB|mOjL{)8P7-^O)X1|661@_aD z4?27qeA{3PENh3LNEHW%SJ65|8A=8;e?K3>dFK|=EVJHexmxymI{1DYj3icAI>=B^ ze&*=tc-Yvq6|~0p8>6oA3OiEg&8M~WCkvA^#U zt|X)z91FRf0|-tml_1fhhG{Yo|AH%mEOL^LbGU1m{0-*yA;`M3GZ(r!RbF}V4;s|! zEqxU{N<00Xs?W?ZXY#{(T0OJuy9?S)4WGS?XO zBBcc)9F7ECerez_sBa8|#O^n6jw*Ni?p@W=5yC3jnDMkUWUho|LdG{&6^canMWYbzNPeI41xJ&bgB2Rj%W&cL3q zM;1xd#47lcN-Wu25w8f0*(&9gc9M@klPB3 zP#NYv@|^Jy@biJ&+svEOd!AwZxEsW;lha|!W>f5-8@kDZc{K+4v*nX54vZpJ|BD@$ zk%Oj|7VQ@VWC0J~to`#nV{0=H$21c@vX(NSisPLPy|PQZDf!^=Z;%KiMewZMR zr2ihZfA;zt1Sk?r=$Lp>Wlo%s900$=sw_$xx6(iioLyQNzbTQUUU?m%qbwtNXL6wf z3*k6;xKc6qMYGb8nX3S`{Y*|WA%8Avnbk*9#F{K&tSBW^KfzOcHXDC;I>u(OieDPvSpX`58?e(H0k6x;0ZnrkDNEZNr zV0^ZdV>Td^bkw)(6D%Jzn^uV&-JM!l8j`!Snwkf3M)plKcR$#W8o98%zTwr+5%rN` zA+zy4mVNuyfBZ-Wk4d0XQgSvHNBHEwe^S5S@vO+N1nH6h{gmeNwkn!}(i$NP9s1pA zFtOp6#|^tUYAp30bJBZq%fAkCZ&^t%kym=_Y(P8iU}*mn<*=jH<}_;ht3H*c0_QGc zwgx1Y@`)aO^zkg1(yN|mZe5*cfu*@eSq7SOl&&ek1u%!lPo<@*E%(+FnEOQnsLvcSoWn~Y@`8~WY%W3FbZO%8LIxNn0 z6@4h<4`d+Sm0Jp?$AJ4nagE&Thbr3jQ5WwCf9)q84=%qUrz|8h3yWeDj6wuUG2hL( zyRNak;IwU1mS&c*ZfN?}{NBVniMSsE#E0zFbKB-kJ79siL|{#eXP=Y zD3Qb)-T(yWDQjPVh9^ZSNCYrFYa z=TI*|{55t7nAaJQuUT^PDNt`0z7p%(`yVQYuq%UTiP`iSAe^yz%$mA5YWmx*PR2f| zsKEl+LSNY#vJq_wn&~#?7lJ;w&ZU0V_EmGmzD5#nGajU;k|EoYI3hH2jCZjIhYH1M zoTec@Qhd40x{76ufWz>AAC%BKV@1Rhw}p4Gsp90QqZ zX8yd4YJ?L8qR+hN^E3Y2p9K!HrC&Eqb6$xpHM|gwP-El!XmSb6MJq50t5WvtRAI7o z)4Jj|-CzA+DXD^=7GnT@+M3?M*e38>oIEcElA(jA8f)VeQ1}*H{^oZtw*t2+9z0-@ zQtEYccZ-Y5-MzgR(g{jkk=RG(%buN=MzRzq7q!;w7uvI*$8*fpDhLz?1XYzWN|uVn z>795Tm#R{*$}&2jSW!b9yI&*$B|E+B3it!3fZuQZ^D6_o;pwxuPS}BzjQ2JIpL(Sj zySOvT^7%4ISmY%AR=~wbV42m0`#`iB^{@LTqj#Hg=^tj)79GAz=HT~zPCZ;CZW9ZZ zTP4)7xO`1frtj+>94TON4f)Q=Q(@+uWYK4fTvm!FH$G}?dpm_o2D<5jE^s(}m^Q`0 z0=+2ogv>)fqG!253T(zh{4^wf-es3Ot?diO1rYqd=l=-Xx~o&SDal--gYw!w^Z#K&Fcy zXc9c75hM^u{RJ;Vo^AhCz0GD?axeY}%YjI2=w{IZcId{H$H{g+zv%Mz^ZcZdpCVY{ zsd8JBpZUHZrwoVM-%up14(wnJ)wY&9Y;5aF<)af+c(8|u6&33Pu;99Mq-^qVk1Kc9 zj}?@NFp6f{kye<2wqNlpp-Wt_Umv>55d_GfXfYCHVjhFu7jTSv&r`_o(!1x z{%7Koo-*0GW}>a4C0c^nKkCIlfc|siS`D?(v#%5l$@(+i{Czr zQ=ZXfGH>=(ea^%9YMuMz&7Qeu^3Xc}K9tzN%&rkkNGJ4ykglCmL@pJamKLt8Bt}Wf z#!QI;4HApGcMQ->(ErLmNGXM(QB+g}kyXt!5r$?UI=$jZu}ti$^$$6h0=eorRw)M% z0S4EnLo@R_ujI=tF)miNVXON=a&5?2LSD%~{AXR0UypjWOUc%=ps?mm;UU1r@VbtA z6v5$W#!b~9bR7)k#WN-#2er$}k zXxD6b0k+cQ)&`gJ-hQ3fq7G~-?u`JMw>&_9C zOArHhJ$Fe9k4G`5_P4Nd)Z{mK{|&Leirb?g<}5TAV3qsK&Yx7KiAn@??Ey1pmbwb~ zz!AKBlI1?F(QRx`s%*B7lfJgvj;jB@;x)aK|}$hc?EV-ymK+J+Y_5 zR(JsZ@?v4KxBM29VjptDWH!P#iBmvvB*V1Nndns#A)w3-3Y^0ORq9Txk9 z3KFxiJ_hRjDuKEfy~R-sP_b!jc)XKeYR;P7*?GOKMK?N2=w6U!xO1NMw{IV^)OBC$ zj0;(7Paeg{0%c&E!G6uH*)UHou^HHpu`IB!K(k= zTcPiSyXik#Y5(VRK}GP5s4W3|?-&WP$}9dI4X+Tu?n65LRXK%o(2PH1-XIU{`m5N3 zoRpmITg1iwjMn>T0MLCEO75DfErkeX8hqRI@T9Sf`?B8>8-nlmc%Eaf-&CO8_%W%o zNsL-L>dP0b;fCfXtu3QL*2CX6!lKqN!~VaG5-pseAts!O(vWzCIuGBn*FU}hVy2_U zI>^1toaR7kC>qSxTcZKBd!>zH+Uo+^H8*F`MpKXX77lRp$s^KK)lIYbFmh($z9ZQm zM5;%0VdA52=ppm^SiA2N(!inED7Psx>q`_@+6GpI$l6v`>o#ycFo z(4|r1_ug&Ys~KG8XCSImwjvz$W)M9umY_=6Ech{V=q3fF&pxQ&OBv6&Yt?Ucq`pwZo1VhI3;cA4!C+<}lj!y1SxR@eK29 z$ak9u7r994Jf&&Iq1NCX5J@FxQ#`(JPjQci=A)hXO zG~0d&+CUJD#Cy==VfIhPy5Zv;GAge(vKG`-78Bo#mivIH7+Y$6K_DH!h^&Q$g^@yB zxwjKPW~`784#t~Pqrz&7J7ZS9f=vJBAw8JladWtWQR{?(Y z^xK%vTfWFIu)gdpw>q6B((tJ_)M{ z*xL`e@GfMPBe=G^{a;)ll{4)=P;X#spWbk|CgvM|9Bik}C$>OiYzf%p^T^ z)+4MZE%8exdW`zMsWfEa1PXZ;dYRZlf6s8q~poQ&f|?>$us+e)}LYqyF+WKBvKbp67z*L)G~ zscKY?F?hN=Ys^scr$4DCNMQCYid45U%gYD<+#iz%7vY3dR}PN~#is2fYLm~;W1);= zy2<&UUfuaa=vdzlLMyE34Vuot4lxSJM`7`UURRq7d)dS3jn+_aGlMLj`0kbWSj)qq z|Lxle#Vo<#TwqnMm0GjYcv|ht1;^>x+!@h``pX-Wa+;*9WV~eev@Zvd9`#Sx5CFre zvy6F5XX9BnPx^6E0Mp>VS?TEIFp|LPRX^pU%5DbDUtrc99Q+A*qN$c_(7%GVgtxkH zXR6H>%Yi70utp>GO3ZeMb7-46oG6VtzRF$?Io49t8S`LVWPwbLl|mo{R{m~QU6IZG2U_NWkx|A6Eg?c#-nz$`Ky612rCYNXl%Nre3Nq?|Wem!(@@cih9cs7PW~&+CunN z=v)pfQV|@y?|3(kK=zaF(pDZaExxyxWs*`&IBG6bp|E=#FrArKjq`VNi-v;e*kkpA zL?fJF(s*&->!$IkSx?z1>KCas<1YRrv9BYqbVc-7B5ICKOZMIR__I;#xAmiyz?5|I z;{sm47WQf!rs?oV7WksvZ0P_sb*cY8S~V)*#f1P(4fqUD4W1fNCC{qKEIwu1)MtL; zi}K#0>;WJPM#uE~1xk?SgKt~wOZg6g`9Hz5-v7fED>;Y!NFwhjLU@Yl`OvqLvWmVYR-y0hZtQ=K zmb3<_BjTwdKHa}{3|OE@iHlahyBzLrvMu~I(4Iy(&WRedyAFt#&ifVpmERaZgw?Q| z1~_;3TiggEr3p$pZJ5tDN{a;M)g@2ip&wdwQDkC=?YQb5Sq$#!P0~iG-}+C-%9dnK z^QHfxYVmod{)Ux2%?+hiR#s|^zmlm)z+s?ZIi}}8$;iM8d-pd5c21aIg_gwF1P|Zm zigB3E*GBs1@A_`Q$j`dN5@NK|Fjne4`BT37Te)-N`p4Te#%{C?vzY&uj)>1xKLbwI zcWX${8io{kcdOO7F0;32%_>PxZbSLx4X*u} zF5py5K3%JkM%lEr>Itw*mue4r@yP@JkXe5k15di@gu9mm-LXQ@UH^)gGn@T4l;Igu zi}tLSL}^^GGhgIez>Y*I8H&?eab;;bK0h@w`V9~7>_MdcB*CSe#XoXzc#|YOEqF~? z=!G5Vutz;(cACAkF?N$OrRhVk#uTfE5JkULzw}0u6Pr}>%`@j*tG@v^=PK`Xte~l; zG}d?Xg2qv&79vVO3teAvK0k%tHdOWH9@n3~t(Ot0BaZ9E%vuNj<+w>JnDT>9A@si1a9fAe~e*Dld?bV-t{3Va~!JJJ|S3ljS zLr3Ubq3%e@?#wew#4-jgLAV)2ljR#<$N1*#eqm`jrNgYVg$;>ziP*__w`H2sY5)XE zAvT@;<))(2NMJZkKf&p3Z`}2Xey=oB&;^67`wtf$c^b}E8au1Z!esJAxyxfAxIQi^ zi<-cYyL%$&BCq<-69@I4!VL&2q5%54!RPI{JZS{Je?vMo#VUP>N^nHC34HOsGRV_& zJ#jrx#@PBtHlg6tSY+ht=NQ@l&HDDod_v81{J`2;X43_>b)r(=Z&Dhx2`W+^N7%X~CSnY1d(#FPAK#Ue`Vp7sV>1FSY^mOZGQ9JMM zl-mD~=J~%LKgf4^czFC=X>Ufs@Wujpxa(`VgvzB=Qiks8S;t9L7i#oUzfDl6c>tdt>q5ntAwZs31m1U zFY?2n&(wn6=yf=@i_|IBMsB9e?FCOB3`Jx)d|Fa}7F)^_-0LpPB#}Ry!w4~KXj-hx z<+(%VczC8u)wa$zd^Ls*fv1RPi-j15ulziymdar<($*9Rv3zG@R)Zn=07YxDRy3UT zPAbL?8p9apim2I7nbSnAtsG~CK!V@2z2CtRn30U|(a*~rX^Yg;c~oE?Npp{F%&}s< zs>#IUdVNIrHhDPhenG}DXkoS8ts2XngCpDI6@2eo=s{tXvf^u)LLt^=DLRb1lZI6o$R_eN{ z|76~Yzmbo3I=-H-PI%o^)S>GN_I0Zb>ozqzUi;)}sp-a{_{p-Df=A)dmvl4Dq!YSb9 zN}LI(TtS@Khn6@Nc|?4@(ByN^8h~C{No6zUyxE0otLjP-PN)T5QfH;^d~sfI;H8lH ze$b0KoEgP^ha;`ylH{G0k&zJDXg!3(WN$l<=7u ze~>(fb!e&GEjM;J6chF3V2VuiV0nAfhTZ#$reAw+E*x}b!|EpZCwycN&Xz1h*y=_N# z2Z;2om^Z11nlyxh`yFN~wc@5b$iYe6w)oW^_HsbJE~N!wY=4*$WAW8$kjSZb!g%az z7o=sQmtu}1>Lleg2|Kis(anwpGbb^6aP>pBl@&NH-O-)V(^G)2=oRm~9ezIvT8k(K zZa)3ox;ijvnhr!-ji^D7Er7OCm~nmT>unt4`|g?*N}rY<@Oxuh@GLl5IBDWE2nQ9S zl)fI81qcQ~yR6qL2%z)SHv$0PBHxej4|A|y)qC60VQBWaKDUTM|?%DPl>ba4pjFDMa%6nH*I>pQ|`xebbIk$#QqS=NN^P2IReFchF z;nF~YNie(5zJ95UWuGUI>GzKq`^OqNlSayM-MbnMWbO7ceUNED28lKQMW4SGbCse; zd;|WUb@8xQo!tOpGTkX`_L*L@ZKLVyD)@D#z^8c*(q&S9`&^bAaOFST<0{D11Z-V2 zLzx1|KzjiB@Rd`bpxFqnH&8p+7e&f_m^x7;8Yzd`v;|}p4suTlQ!hEQ%d2u`U3?G( z%-0S;(iL1d9?X}?V->GWj6mW}%QoWl0783=fFvK+PfOx(iHKm!OotHiX~Ee_y->f0 zgZHQ(ou7qw7+B(-V&6W^eSz%Z0BdBH_4_^A#DC0FEh ztO{Lb^B8z=*veKz3lAqKCcg4PO66SJiXm5elTAZYW_@xbS%9iwgGtJ|9JhQmGV>?4 zy5_*Pi6c?okLV!g2*#VD)KmksYXM@D{}PEYO?+x{@9jIftE zYp=_V0rdzoo3zk|CCNx>-7sAzeuT*n%dzdYEkyFeTjS{AX|=O2lGwf9fJtqmKV&oz z|1R1esK81YR2anPLfv^O-9tQZmc(4^I^|iRTl+!}-emM^z5nRkcmpj1OW*SGK3zuF zY*W~F!j6=nTrT3vhAfFQNP(~YlUOWf#sQr1{l9hF)#9MDrvpoY#ip8LZjM)K)D~^U zzj0_L715X*sTmOu4l7h>0Az=TFZP})(n-xWd$K!H{?`e$LbeL`P~Pjzy1KTm?j!;} zpfzZ3?@yvA=~OE^01VZBE1ECD`lT?S0kLL%C&~vB6Q6c_3YqFW`vlE)V>9G@r4=^5-Q$%&+?De54shHg z&}K#YYzIZkOccysTI4vC@N zwD&?jF~7jy;2?`O9UB3AUlo#Jp@ZaAx%djcjnO zn7Qc2sx-0`^ue5S%rvc}$d@cSj|t58t{N(AvS@jh`+e8(u5jFaykTzJz@&}l6Qb@| zxVVZ2(w9k?zYBI(^wQsTpG|>e3%o?_@u2mnn#UQ33tASpyDPySRomCxI|kBv_=_Ea z^me_L|Ll`+)&!ix#>FmXt!>L)$jQ#IC(;m;CdzX|j4%fr8dy+S!(LA|piat?) zEVJhDK+ufy- z>0G7Bs{aL}x~eBrpdUzOu{ zQs3qLy`dC-yxyu4v03D)Wy%!wY5U~%LRt7U$h{(WPLS-d#(-x#H>LC`E`1HCTXg{B z+>y`^PPv#G@rP#(tX3lr9~E+Y##@yI>}XS%-dySfSl?puZUo=x{tAH7YJ}lq1kkPG zw;n!NY_t$65{0$chAW|es;cN=-}C+aH|s%E9s|=~{yb1m2VEmoT(xfTQzVC+Dgwn) z$2u}jDHoTKs>zNKY02Lvp)K{y%0`wdhA1?uz?}{$2Yq=r4y0y!@*1gIV5q_)5JKXq z&j}VAitfmSUDw_9laGW%9z{rh34^Mpl0>|mn&Pk1%9FF^!U$DW$qHYfO{n4bCdvQ( z-{uC_b!Xbi9YB_5*q2n`N+Lm9j7FHENKinX=Wq7eAjS$TzKfCpZ6fO)BUjeHY5B15xg7j72juVg^WyVUDsp=m`+`o?81 z`g;Y&xYOo9IREnUho8QA0efRH&1ZEiU~;?!{?iN$K9fxhZn9+Dk7aq&1i+?mLyyl~+TfaW+schnvO-NH+;ZMzXb`Ej8N> z?|#cL7jCUwzmLxJasZO;TwzP%#I=Q$dsQ0P6i<&sHV=|!XCV!1#Y#D?LRz%tRMkeZ}1C5nMM3@AoBN z6&vUZ8;e`Sd94^GrXs%lek<@bpE}5aGPqTCJUD_3qg0cWGlfz;6qVCT91Ci$su2V; zq?^op6yXW&iEegejwe`U{b|2C9Ja!upvhW9ebC>db(a82ok-0euhtca807-Z_ zGZsEjd=~%y^81P{2X5k*gp5dW4hFv8T|Re4%h%|s{2p~bfXqawswWHeZz)K((=Myl zcmd=t`}`x5yil*@x?;wgg{S-$;LrYs_5$E^ad9|bHCT6F1EBlXoV$g0<(lC=flAGYgi9x~K^qWN)@}luO8Z`t-??j_BkWQ4M@H{SjG==KaO}wuh<_J9#B3$z z!1;86L}OZw)1mr!nGIr?Rgw}S7%6xjV4$KOr6be?>H8xpCU%yHgrRax#~MDfIr@G3pVR5{0bn^wW+`Eh6_wG4e0q~Wyu zD}~yxJUb~4t45_AXi$4AKG7`uwtRCa3itk0auhpA*sp^7ThScn{3>QZNGR0Q#Tjch zIMm2$Mula526L$_0PPz2x}t$yl$AV6s*tSr-k+iD(&#)pEYaad7>eV)>a=C?@&}TQ z7UFl|!YIhTrS)O9bl+Dh)&|V?wqG-ID=fdjB7cJgKrGFO!k#xmBfjJ~%d*qm z&AD2KyBB8W=5lSn%9v`u>(|?6xpV?=#DoOBl*Gg_mmz|ITgNH|3AZ{3Q^r9c67BTe zHw9n?zAP$;>*CuJS6z&JN>>H?gcO=nfnoKDB`6XQ2C_l8h&O(( zv=8zg0h6tn;MbXQEx30YV7;#hiv=A2+)w#O0wKTkWTHr@wn7@3?txZf#v%4BAa_JR z;Cw=8a`mGSzZ><++&@s#N(7$5PRv)%gRPpFEDnXL>OO-OdZN6-fZaKlKNx$r`LGf1 z5+C>0)tR7(Gz`_BDH#d|Bx|n+e>`1dpUsU(oBG-~iHU+NuJqd{an(=7Le&kVFK+`WZ)C4=vVD;f8`L`n5Q zhM*t&Au77R4fk((UT8rgM9lGoAB~aT;qh?^gNDZi9c$-!LG1;|DioOMEYu}c(MIYn z6d00e^Ezbx$zv>sQL#h6J9mnIqKs_`FqFM~jThNNJQBj58oH_LtSny?q=7n)^O^Q_omf^^5rA7tU{o{||G7gx3A^@uZ9-}lqkxUjY~nV)cxG_Y zCUwnw_l=Xw(p)XgcG_~O`M3u#EBcR($qTIF;kB;$Cr3vWh|3wrn_t631c)tMTp9}- zcLy7Ot#j|yRCFNyy*l%&v0Z6v+aig;z^rX<(bjK$ai6T9)szG&q>hMuSFBT)o%ssL zn7lLwd|dedI3X*_RnG%fVW46s%NG3~;qa8ftL#e4Z!zov*-uYm)3tH|0@r~?lNA0K zTD8olkinB8b{};1?)y5hOiCkr=O6qh&wdoSkY;wA`!c)lDJH4uA?)$W@9&(U!sJLC z^-*JSe=C_Ekj&P!?;S06I~6O1rJ0zV55$zdn8z?J`_8agaFc_=EN{P=;P7U}7W6}7 zYvLWermGJ8wwm}^>{qsH2GO*JQ(2Umq$GEz3;B*F8_X|h=-a#h`P}~ZaQ6)Pg|@Mg z-^3Z_A1A3%@7L^;^30oNZ@vJv#4r5Cdr*MXHh!D91SHx(Mm^9lNXmW-u@j=LTxVN5 zFM1%_o@Mf2h5fZ>uoaVWO2GF0N|=!sLR3mrE~CX_R%X-+HUI1Wkap5$ z5;ms^(R~-@u87`|&42HYrIGRp+4`sPbC^j)Hih2{{A{f8rPWuI-WzWfN3ny-74VqW zg3}}Lfp?I^_znS{T9Cj}CF8+po6v7H#y_>>Q3}Bl%yz2{VcUY;ED=9uBjB34GPAQG z6-JwBG4H8negyqGa~zOKK5z9<$(^BTUU)xBlmL^_7MqQHzr}CG^{sX9)Z0E+d;dq8 zxp#wo-nFo$Ck5O`xVTSWXmD`wknx~{hJ_h6yMPb1iPT3=R{5WxGYZ|qZyZ-c&Tp+= zAud=00hi1X3M%e#`?07__fgXl2OtjD(fXffgo)?Bf5gNpaWbo(#jq<|#q`?WN4I6q zgG#^~nczXk*fr(D{ME7zxcX1C9~>M8gV!!DFYD_AExFfE%;Hpm%vNE7QXin+3j!j) z;g3&LBOqnfQ93iNbD9ts2Ethn${9qSJ(+4~joA~7!NCk{gN;^gQrH$bOMy6-p!G}~ zu^!eO-yq^Ncxq$ zv5?>@6~*WTh?Dt=)fYI4hx!Rno+p z#o!b+1MPY~gMK4VIS14#^j02J6~!JBm~NH?Xx)(%PR_i?qi50ZT`B$WSpngAnmbl5=*o?kO| zt9HMQEM@M}cpY<<2B>zmo8Hm$z4&u%M*$0w%bE{aBy(CF=j7#`x%9x$n=4P;!#nst z@_*k}`2M8-4D55WlM?Cj`QJ<+@3ay6_!Ql08S#`a8FQr1ApgWOOIul$!hrYt8Q`U8 z>P(UBe0x9n_a0}}V~_m)ZtZWf2krhuQr~KcYQdpK&;HjOHjgRC_!pR&d#Awq`%48r zdbHHM1=uYJRULuu+Ef5NE{3I<9Iv1nbpATeM5qHgqkaDPfv?gI?W!c<>+jp$Hc-pO z`n6J6`?SRFNVF<-BPc)V2FjGdYlP`Bed8b59nw`uAB& z)Xk@Y)wa@nyY1I=Frb`iVw@J?dXOenDW_Jc)Gcr@sF#E?TAC($m@ssW@NLkh84FVY z_4zY{GDkL;au5D431wuePqL79TUc~RR<+9q8!PkxplK0n)rbOMqH!xLB}zJQ8_l1i zy#pD`7}Mr=2|LLBy1X8U07M1;?9{{sj_|mh<^d6mue`e<3RI16^qF1E$p>z~-^0F3 zR=%5jzMC!mW#X?{xo9#Of`+co3t*?bl(i;qP!XiC!qE7%=lO6QLpFKcRD8a zu&=DfW&n58Paw)rNMRc+h!thJa9dAhf~rIJ8J_?N5u2h76?exBg&%ta#O0j2JZjE` zjnsCKOv?D*TI6`~RyMU|qZ~eM;+|~+7J)M zagT?QN$0JDVHyq=c8j7&wNFucv$4fkc>OTFd|vZi>5&@->M*GFhNBlArWQ3`Y^n>+ zas$$~erhpxErUVnEW|hlXZw$&^doLU%BziZM=9Z(-B{rm?Lz6Z{2n6iJpL^b9ZP-K@k;HI3j%j4~d+mHfCp7DtE_swIeNJ=@2JD);52+SVcB+ zNVL;y%Ua8uFjOf^mtKjBL+r(FzoXT~Pqf4e`m0*M)|{pB6oo!VfX94I4wqHXZa9mo z%cffyC*`)E&kL1*++f)IQ~3K+tKZIjd~p$^(9;`4U+Mn8@}7OAlhzdEPeJ)KosrH& zF*QH5*FVz_b^^WtA|P5X*r&m9};nGK5h(cBgELI=rG%>_*gYV}aK zEK@vaBcF~Vo6mMaNKQ3|$g}^9pyl=_iS#AczDYw&6g5TB!S@z)5IXY7i#puW#Yp!S z>9JFH{;L87{YLrGU9o0%Bik{$Z1aqJ)3`6J;vpOG5$>Do4Q#X7RxR_~&w>zBb~dmU z3XTcdjIK-J7a11+skSNja&kyZX$nCK#@-AK1WVpaF#{%4Ze7M22~D7cW6cB=K2F?c z2nYzY{0uk;;?1n$SMfmM^$i09C1_!={$3DXfMVuWRZ`8TuP+a+tDMA|6QIg%mgIcD zalxEN_O%%1D`wrL+~>HM%Jo>mA7OeGPJ^Z&6v^^O{(a}*wqFaWsn)jeSrKXp!_-qq<_G>{!A`abu zD%Gceqx8hXD?REalT#2u+VGY2AxqceXUTIg|=3NQ%l zB&yT=lM5kS$FqdAlApNN#ZRv*3p@ar_(zs0W*VPe_8)Ro&em0OQa;f5$#gh=-TB%KeCFeP$*GwH`>$^%v)7x8Rp8Bt6T6#%>ZQ2lqM5gBh8<()Xh5SJ01 z4I38nKc4Y4bz}CIsbA;MthTTO**>)-X~k zK&gutD-*Y1$0OX8yMr{lO~f~xC76#EignVnbD8GpRkRA)VCY& z7PpGQc>#G$6J|hhH2h}R>1p~WwU&g_5rjng3?<+#$~Vjx(;Q;4OU$%*39OzM`+@B5 zy=%S6rF!H1&E-1}&ln{fGkmt!wPn;&K~!-b88#HkB*Q)+W^!xzw2}zn!`)?)H>5FH zLHor-(P&YN1Fy?j`uT?)8y$zb=*rd`AnfxWIVIC)xd{ZUY0vIMDwrh{lrWUB_EFGL z+nlzSo#dx;@A%pV9sv2+YoEQAp~IMEfH}WIkJImdO7&wcqVK)gaPPWl7r)N12RZ;6 zBiC~oWIR381v9>l5ZTUs;cUs zd>QO-&pJ#zNK2WLO&=C~pbdqXS~+q~Qq_trA0z|< z{IPDVJ2iov=Lj#&ZZtSp1%mHsARyDt40k!@VC&v-5VagWb&*ZCVJI2;eKVN84~ z*g{Hvpd!jBW=P1>^W^7lf$jK0W;U3WP)kIVC)Y})%2{Il^-F8rb=kf?EAu6qfLbqi!t9#$gf z-Ld$xuB~V{eM%eGl5#V;-|Vj6xQ{D++Wj{B#{D;`QU9Apw*pEf*s8i8J-y1U#rf(R ze!@Z^2X=mUdS2yDALQRZJ*M*3H>+1&^ygG(I{U!4qQP`2`zef`A1Glr7areGcz=sO zA#^Mpt`PJ8QFWG4RdrvuR}qkwMrouwq)Q1AIJ9)9bax6!OLsR4(%lHsEl77Bx(=Op z;rqXLjQhn8$T+~>Yp*@moX_+8Y^2kU`yS(E<B2wLk*Nw|~~Qkn35YD$PH|1L1mm3e2yR}`{GmCz z@3*(4M^jrZ5LOcFe!lv#GpFG81!xF6pu)ecGbZ28p~|J|r&$fbh#u zE80+(?+iHUD4Lj!eNHm`PU*Uu{{L`a3n;*IBa}w?SpIcB_KUTE zk>1%7`sY){9&iChxuq#8=vQuoiXCiNj?Y<|kDif$?1hFy`8-P&*RqynKNKT@;-Bvh zpX1;Yu7SBiYy%~4By;x0n}tgI;oiwHg$~MW);_Ze(|xycfb`e}pB6Me(?Q9SwqyF7 z%>jv1y|kh_GvUvHs=2#b@zlOZ;MCM=(S_LM_{!k!)(dBfUk6i?1s7tcRouJ2lIG^c zZf}_MZGF`6{Hr22s2&`tPy%I}fsiLwB>zPW4tXp+twl`46~D*e!vz)Fv1O*_^YP&i z!0(dVVe~JI8=RQn7vwM-R}T+PfmF}`lTFJRp7-^5X6Rh`Z~?D@dSf++#se91Krje& z*M?)B!ytS<@P*Spd{@iQ(ncv%Oujj_U#}4JYbY1wrX&;;qFqZ}HZ@b%Fb@*OM?%`Cq`ei#T5uJmdU869#=%tpfRjf{)tLIfUqjy!+Fy18 zhQ+r0wJ_5XRyPob_C5T202Q=uHOBu-pS2#Z>H~T4BHgrhRsum=Yfa%!*jAe!*e%rl}SFouY26-XPm+blNRv!;URyU@iqsO-wgaUbn~8$Ow{#m7&QC%nlDl|J-znN7}Y{rP@i!@lQ%j5 z3nWJ}H3;wc-}Rr=+AQg~+#~J&{VqqkT~#&AHxMEC66#5L!4aA3BrEE*5aXRi*zsv< z;MPO>^BH99j;UNQA}jh})*AB3=HN;;(B}dKQ}#THIQS>8_CK}+0<>8sNYvNbyi4bE zqJQ)`OjlURnVD@r^;t?s>e;xQTOABZMK1aHn3emnWn23IsCRpaUFH>_GbJUq-W>c= zN$XXT5^)pC^7@r$;7^H8L3+m36un;PWX@$GOmI*Jt8?VwQ2u2XDJH3Xm zeRJ^Xj$j=K{qJGI6I4#h`^ltHD+KmZ?T*TtLO(b}AD&1hb{u8el)RIsr90WhAdrjs zDwK9xFPWwF(jYxpiL}s9P3ddjwOEVeDw;S}W0y3I0rhWR`9`P=o+Q6?lI0eWd|WOk z((cT3Ly=sbRRrtI-}^UxQ#xMIbUns)GWLC05;8D$=wQD;l8xch0I+#8I#}=dUNUa zL1V?e^;Q~Pe>-|6$7ORn6jjKEXs=kS0qZeaZ`}~FqrzQ7QZ|Y8eeGOI1P-;X_mwe# z%VUE|qKbGN1|Ed}chzO8pJSBrV#Y^{Bwv)99kE+NIvvKUoitD|3+7+d8+Qn-Uuhm3 z@?({Cld2F$*fx*Ff$Y~AG1OO!I+xw#W!Z9i--zct>EC!9K}RCFEcR{=Lvtmx={_8Aau40(6F9Djs0A*y9gAl_^MX@-L~ zNjf=1anA~ZW8gDdlvm+si7}UHo<8|Wzp~+ODv4F{xURnb@<|0>!`^1Xc9d*f!H?dC z{@2(&l6?9xIn)oEsrCYri4xM+zFtTBHa>F^ppQmWa6eQTUbrud%a%$HsonI%)_Eu- zefL(Z(Lz=M2c>lY#_K=nh{zBhAAgbx=;C)se@t-zx~J>m{_tUS)}pLNsTzZr3R3CS z+yluFcm-~2A@SV5tN&IUEXksfv63vZndasAjeCOxjtV=G&C59&Rt@QaI-ZLe=@6#~ zm;FQ=2a&m7?r#O>?cmE3endYdhrWq3{cr47)+{NP59oEY)*v*feIc{*`;N%N=0~}~L!hdd; z;lO8b(4;-&93wCJz16JOa9wB`I#eiRIC4CriL!B!05dug9^bh_`7Z@o(Wp#RO4+ts z>!Qcub4)A1xFl&2E^guf$%0eEJ3o{W$4bq+@w_~f1RRJwP$=%%WE!2Zks-tP*JE!J z3)G4fK3Pif)dn%UX(A&+QW;)yJ%^b?);&NVk>)3AVdn4o`s_rf5GIzZTaLd__9%h# zX+uP!Oi$wPI==;2WL}wC6_dIWk3ZwUMa~CN#cjZey^sQv@qN3nB>2EQt-9xM?!|s9 zxM3HXlNUrPLR>r=V+%9_Crx4sF{Erq7db8BeGz^tF#u03Y^41?T4@#zG}2{*3`W0v zqdRI8*uo_UyZt4P+Mh(v%!z0MVb^E(EF}vxAr8N9w<*H$qAo$c+{bnWVZW*ipPm$;jpgEe;slqB54IG*r@hS2L-P*Od4 zf$)c9*7?2Tl=~#g1kXEv?5K@>_|Q@~8DZm_>!khG7p}0O*5l23{YupOs;+0F=01(~ zyC_!g8$EY1EZa0^moVPTmGTCyMX!;5ZEYsG6oiPU@-h7iFLuRgz_D*59~;NbiZTp@WN^h> zlr|I`+;Z4@e>f)=-!h`LF9>yH@aFP&%-`XabPA=3z|%` zIae*3?tgpRq^Daka#fe;9?mWd)_u@WD)*F^Ru`}DwzmJph6Je>&eheGb5SWgG{jQM zb-!k+lapm3Y@8piMQ==z{VbPW+zbWiFZhVvv4>CB+c)|<*LCn$lUkSFW&Zm3tyk#P zZw`#EtUV-&LOtEQdn~((EWtJnz`Z)>yyw@shN_ zt+DnNUtoZh`PMH(ho|w7lOWBhxMnadG+VtV`0R7rU|#_#(ZG1=KvtGpwp{}&-Gk@1 z0e%cocJ!{JVr;vQ!+ixT=%S@IPp(tzMeXIdpq}5hW9hc=t7kL!iNEAt>sSomVDc0! zIc-kUZSwJoY=-RNCp}RWDIxpM$~ucYOw&1vos}w*zx)1A5VHy$&ggq!SZlWi0jYiP@*O{LcZ6VYwp zcGNI5p4L$7F}g?+Al-g0f!sR}O`{=k0O2PC?wV1<6tNVz0nPskmh-cV$)>lO2`F z<%4DKo0i>+-bpA3r5hX4qn*L=0%87sjh8&F44zIy2L1X;qiMg}M}VMCT{SfqbhUm= z+?&?K6JVaGCODX6Eu;IQ-4D5in%Zs3A;27&_c?8j_+6>Z5B0JyOSr6N zDyiPnCJ7eugk|p;bu3PHu2sH7i^ZEgyzCs}&CTlN8)vfUtsZwo7O7Cg`KprBTfMY< zPHwsSyI{!Dr`Cte+z|JLyB}?_dU#Cv#Qlr8%paV0-&LaiYqeO3gE*b%;$~<#*hEt~ zg_Bz7IC8Y|lQgn?qkiED^3~RPJe_X7!1O@wVdK7oEzVO$3o|VYz}by5Z~uU~nV@N1 zQFl(0el`Vqrh7GBlwt4DK|24rMo(;MMB$_-WqQ-Fql)txQWx6$c7}B65g_y&*0JEl z*Ky5maVFayeibn52moU=ozzqO%Fo|8T0t;lrksjU3=om6wl`U2T&yrih30kUB)qPu z$K{1z*0L;ILGX0Ok+PWV)@Em6E%qBy9#*8q5|zQbtd6vTEc^bec1qXM3g}!2=tQ(D zdU`7z0ZCj|DTAa#Zul&XTNK4=6(YsOEjnfCMY}P3yxG~dz<;qUA$%QuTYIt=doaqC zfAcuW->%oT-a{%86*uB{RxbOs89H;>d@57Sl4;msSx=fOAia~ta9g;zL@~O(buqtQmq89+}-^t27mrd&*`b$m56>14|!dil2E{ zOeUSPaNQkK*QTE1rWy*dcnxW>ILO?PvQPERT}~6V(NyEXb24;d)pVX>8hI-MgEXJ9 zvGIAzzh<0Zy3s{WwR6r(wakIPAS>tOiNcpTM+P^btnK%V$Fbkah{039i5OGQ&Tot@ z9*L)fx$YExr?g4<^Xa`G1tzo-LbcEwgT6iA$2XZ(NFMJvnNBP&YV91G-6gK{k%ot} z`;iV<<8^c`Nwdm@h`e!@&JuHw7EU5KtHU4V=oRI8uv1m3pLx`{Nd!hIO7N|Yq`~FZ z+oi7xerEOykjWVjO09%p?0Oya= z_L$EI-pj1^>%Dx5f3#F_@;A1ETgK2SU&{QYc+KrQ@IjOSH(L8ekNHc9zh9Gx>#gAn za+RszF6{c&6vugQiti?9F%BySOx;aUrpk`L7NYFZ4|I#5Qq>T?j7Uv{ifPThvk>mC z!Z37xT^lkP8}0gWHih+AmQ-mzu9eMB_9ht-zU?`znBix(9`O>_J~uS~RW@aF-`_;9 zL#(M*OZ-GOjh2*aO{?G;yGfyL^*d}fiH0HXabfD=owEAAvf1^fnPQst>4L9ckwDvl zaTp(Dk%EHV(JRgO$bVzkHQz9s%ob3gW;Aa;I(bR{Sp#G0)?noA=e-3Y_z~O16GTbe z1A6K*b{>)|Z?wHM4A6d5e{)nx9in1j7|^lclfg9~Z{NMI9+$1E8xysQoNOlMozhpj zAy4O@GMf5ch*y9kpgFGFSKal<`74a1$#50%F55!$P4IWLkYbPos*BJuaH#(@OBBif zrOyq2rCca+rCcYGi;igV#-3=hX?r^rkGbkZrisNXDdhq8a(>7MQ?h%*-q3b)g&@W$ z4oTuI9qND(f@oF5+g*u%c23st8b}1ct&h20Yv0COqKFuGj|G{Vq8cGBW(;>kP@^^W zWy>wUtRjlVffm#Bj|t^fh3>vkEU`;PS*Sfpk@@VEgv#W$-B{1i-j@4m*YJKwe(>{0L7Fpl`ns>f zd`qD@r06v^s})~2 zVjdX{ROXKcm^)S9w2&R`H4U|)%CTT3Hc=eA5_z2OwXb%CZP>Ii>F&6{22;BKn3foh z+p+zAr0EuAbTS)I;RoIXMs>eOXn^2#eqy z6)}5^VN|*B^*1wmY@RzA=Iu(v4BJPxp%qTr4ZBGf6uNOGkczY1hZl(GHx}Z#ou&5#mc}|l z8LwtP2Ar)-%dl@>cllCqF@5FDRByauG}D$O=g_{{o_(7>VaI2Bb#SUAeNFyq7;fN7 zFIJyWowPAmrl1uzK3y|63mdxPQ`+s|%6NpFs{Do|v1Ut_TH%Usw|*5Nzui%7>j2HY zFw?i8x3`|RhY$BQEp1cjA+Xe$ze{F8;e^}1_5DvA z+b7_7nT4+#nA5Xu4-*>Ep)M?sna(!lr|lWNWN#d z7q!%2AS>b6C`v*@D;pa%I+MCZl%SJ_-h!C5OAX91*-s`ih`cXXz(D;TLPJFuF9Y284%-*2O)ibJK@ z54y0yU|{ncz@-Za1dfu!NXW;A;32MZbaZsl_wsS)?W**HX8zm0CihC0 zPutgzj1e;qo67)n+uf$?h88AtPv8I@=3wzeIU2q>G+gwgr6+c3Ay+@6rI}6f7lw?ABx<3v*>ZD zH)#p`qQ#hC=eezRyRF!Ky|eqHw2*86=H(*JA~8KZVY&-_H~Ez#--6NM}ImZ zSwG(gtw!iy^((8j?kUm1{CQz{I(u)#d6Q<8b;eCiS;o*^ z$6RplC7!PH_J;akAfi^y3iP8VLYjec6k@Sk(W5CBfL&fHe^ClRInWe;H95~~f+3~Yw}Pqb2F?r|aoId2pBhlPs&JksvTDFMs$ zQye)1KOvAhh^V{4_cQ!tE%)(3CFCQ>mgfu|6xCNZW5WZZ$FFn#GK5@7Z-DvC3!o0g z-r{j!oPh`uRF88U3K|aDj@TtAhh6@3jR*JqX1y;QVy@4Uj=ckFfCXFD!xI=>6Pjos z`tQl1R0T_KHGkhH^fDRQww*nJxt%1|8e_GhesH(SX+Wh|?TlAQgB3%w_E5yw7+y%X1wmR! z+rav@@g|iktCS33-Ql$Ls!&(KkY>62KK``kr(k-R;#<9CvhmN}O&|7A7RW#ztEkwT z@qj7?RyaAsn=j`6 zVYDP$6S-M`_Q-hwr7u9gLOuq9CZ=>!gf$zTZKYr_c49HjZt9LbN3!E&t|#dYX!$T1 z^Oi2TBd0wuEJ#@6bh;ArSeYz47fDY5Mno9%J0-i)@9QVi7ln^$9Oo(UyHZoN0!uh! zX}eLoI8{oLwLC_=h2@Zhq1}L~N|;Og?JM0(V~B+$F0mUi%>(g?K+UA6l*I`5!azaC z{qhpxO|aMSFQ>-6jU|00#(eO?^BzTxYKyFn0p!w$5It7fHbMrK;;k5^f|>+yzQzEE zUYubtBjKAW(aP|-ze*Btv!BIiM8F_n6rujUXx8r#pF;`D?-M0N12rr0R}^obCmgau zNcd?U=&hc8R6MKYqIO#=L4F*3B;M-S>9Sk1=7+#0U? zRhip?D3H~2omT4v7j`nqPZ}i0|4f$+BkgmVbLg$Sj$`{3&tCylIU-@a+@5b;iESsw zu+bDc-3jf7A&U)$Im5_|z}yHy^d2HRo)6)#L%zNHRiuO1QD(#3xFs^kv+*{~^Vacn zdyZ6zn)sOw85}gt34!_kM3vQGOYa*2TgTtK7iq5Z6+HWYm0rFu`A8U%>Wu@Yy;?}R zd{9eBs&joqv~2qoG(9pp_k-czqimjbfg`zOfv(dDRoi*C&2Gb!bY9pe$eQ%s^q+zS zp(d{Vu(=I(7E+p(W|s5-l)xVd?v-~<*c_ZURqd%KH zIdBgd=l(vJ=DQXthy{m$)~^0JJv^C4mfMS+2q;;5rpm5g`+1X6r*I7eA0B`|O4i@c z{K90J}latVCSH z#s7fQrfI*n`fe(td~j3C5Z!S|V@WIS|E}UfxOPSk^>6E(eY}$3l=5#GM_Vuct)+ZC zo$xS^YqeVUqdASk2gF$K}Ai@8Z>GHs(jlqFQu~@UkozwfgDzkle z14ma7MMLxh1?DS68N>iJ_x;=eBYF;#!6>ROKqt0%>>@r-90+(v7CblzF-jW!?qajP zvC+@<*>P}iP^3(!1+o?H3wQm7;OI?KG@aeu%~?RtJV7NyW3!z_%ItXS_!>guR(Sxs z8f^U{kY%5`dv|?~Z6Sr8aWsHmkp0SA#RTC*rnN=$gU07gE0$a?;uMT z3AIM4LImcsOPMNFzXQoxxbd&9-0bJyjg#mgzLALNd@(NPKge}s-W!!&pnLuCrm~7% zM$>)+g=BNC=M?ECzzv<_uE+5DeB0`JvU=ug^qWBG8;7CmFHhl&u`F~n-3ku91drN9 z|8wIot>`he_#BBgMBqJ*^T!Ug1Z6e!sX_NfqVD1{=f{;8vsq;1Z`DE;%%DZI@^mul zYmQRooMdPcj^e zcALQv?kQ${0iWH;Qf-T#J^y1OUFBW7e8ESVb`IsbMR;gGy$9isAG8w26RjaPqMV%U z_-}mlt~PoWR}CCKjbt@8zGm~dm#!UZ2+8xV>A94*DyfP7n6&2Jt?Ff2<-ojltfsBY zbGQ79S0q`5bwBch;bbFFG@=jhcOXF@=jx?>e()$pZXoHl7jVwuLPK%Tcn&cas(EV#$T35#W$Q&T81|J z{)difh^((_Lk{@WX^?peDX8jVcRNqd-me5)^UIqwh0HrR#Oq4d)WohnHg)W=itg~Acm#3F};M!5&eNXbDOERH-*S{w()U0p+bK`lAkV2Z5 zg6@r`2zYe}zg=EZ5WO3&J(@3H0&k4_QEdirK(6z@T}BjsSyytqu(v&`76iteN(tMh zA3cc#-5vdV=%u9XsCX1K`F}Ue$JGYuGL643r@3y;fZg+7-YAW%-i9&%Hpb5kTi~x< zJ(LrIixh^N()K7BB)>}aIPhipj?dh3`E1br!K!$vnwVx-0QYmIdu6(`3#D)5=14pC z$O9?RW;59KOZMouH_xcG0saUi{YxES{=}lE2Re)hpv7+(Uqah--YL^kA6NmgQf?qh$751oH5dNDwabNwQuLj4!h)h)e!19 zX>MEZuRMwHZnxegYA^T>TN5H~@zg!N0;)o$$)iV|(G)om`dUsHbBwXvb^4~>Lw`KO zehJ))mgrEjYWdG!X3V|C>QzSnpt7N3la4{qa4<1hD@e62x_RM#eY#x_(sYblyAHms zO*YYy8b*5@G)QPoPEJ{$j{x@zAdzxUv)#A?my2;ke?h_o_OjOR|LKj+-vgEqvm`AJ zd$tPW#*g&G`1q_WJq(~$@TH$Kk2;=Ej-PI{VyHc&?R2rZ=6Z~nzG>vJm@4ib)`mZ- zFABf0}$2BunHEeYkq2Vly48^qDBq4F+|w7-+`@ zr1r55hLv+y)8`@gz}=b3+vDi+NlnYo&Ea!yR{8S~S5)A=>nRoVIO>{Jo>o>1B)@~P zx!eai%YrT#{-yFo2u%hp^Row#J2q4Cc==QTz+5LP@*_`Op0~iicNq9a<1M>zgL$CO z7k6B9l*JG{eF^NmQ~Tn53GZ^L&*7lonyIBe6){$^ie&N<~@{*OiS5m2-SGU&O>ZmxI%PSxO{Mg{TDN5vA?t&FqKYe{H=;2ssL!Zg^y z(QsUmDzgHirsak>`TLLCWX$QoIDQa`5ZY4xro{_{+a&ufP)l_wwfm6Z;*UBW?VAXz*XWNzG4QO-WdcG7| z`^M2JvkYt*<~{#}5NN`$d4YeF?YBUxOv>B7|7R~L6;)8cd>l9hhs|(WOzJ(NBLYvs z{HW)b@4|dkK3W!os=M%GRKeFP7&N!Md~~tOhNQnlv#uWqqsMJ!_kg%IL_avEnzJY1;`)vLHIt4_+u3u+2q5Wl01VU8F)ob_ExRt<6T**n_J4mUoRd7N z2+Ta(cZmK6AlR2tO))$<^m*XFhx*(jKITVP+C}^V1F#lZ+g-D_E)jiz*DA~gL$mtEoJEhjZ{nqnN*CC zLJZG-4y|PU(683%Dbi9BCMo*<_IHPiEq1_O8_asuBYdxr@ZU7*zkdsl;5fXiA4+Vz zq(RK?d5K!ZGa$ZGjl`wW>;RgxoeupVVrpycSF{3r$MYn@-U0=3nGvuNVbZ1BO>R3N z5F>TW0r4J=x;~NrKJb*slueSG!819F=f7?8zinXk-Osj1HwTywy~YFi{e~|O)qvu9i+*)^dRisMX`TGFC!F+6oqCO50`68LcLD7Ncl%5U5YDl)N zy8r$YblS|D0n#Cf&&fR9V~o(I852myyOmY7spi0AhXHEJM}tznbUO=?4^Y?jUxTcQ zU@GZ^UQh{yj@^6SUqS1ECDo|VQH}>1%W)VBzAX9{-I68J;C|D*xxAUk=jzAvy0#j` zsRs{yW>0s1*_$3b$iuD)(RE^Y(g`#?$^2R3_`%YbHPYFy9Heuh(iw9RsXENR9xklO zNi;r%J`@-IqM5Uh|3oaxsE?lqek!`^y4uQ(T)wzrbJ&FN7pxT)mWoim{!q`=5%Lg~o*p13K(4Fqpz>}QV-tpG zWc};;YVhBb>gX4@Pun^tCMP@gqE4%0R+@clRx})nQ6?rPdItyJy?yOJu%B=%Kq4(I zmt<&U{+?Noq;t*Ap_njR{^Mk_DkGkF8q$ytJ83rWWTDdEjJiRqRo+4tD2?ML6C}xy z0BW2*0By>f{=zqj_GxAq zi8^H?)eIESiM6vN*zj@!yTK-r*r1ROoOM&%LV=)3V*9P!ebx1+1ld=p)Pk`y6RZy$ zsz2yNuY1>7&T4O{2ejnUo-|hJ-<|Kx_=E7hfhD24ErxBgNSIT{;Zph3&i8-#r=PX^ z;1&1_q*l{S#y%1SHo6{5Z!=-q5BK2YE@5X^fqLzE=&@9FaSEAM8J77(TD_dfZX619 zdA4GG>QyFvApG1v)~}x+;ShPH%1^_yF&ANAsB*MZ`NL{(M_AIF#p1=#ZZY*4d9YWfM*VZ!k%)ndG-E~vauSpqlRZKtzPA%r-;^!+((w|+gbhnw^Oi(D`= z!hLa>U>^(^Xy$=JY_((Jxbigp&=XOoY)aP2wjJvD=(ki!keWOBmxZ^}{?iM{;RwfZ zzxJW&dPekz+FyD;b>kU&fw1AJs;U}tq^7JK06f!gI2Z=*;MpVZ>S(_r)!ihco_PBtx9G7x1hSv~Q49K9QUnORKyx zw&`!J&o$LZy=^o5N%f-(GRLG4zKxae(sb6CsxCkP_N?98kS}wDh5JBWnaWRn2GTi& zxck5y+i*2vQA*tRhyI&F<M+C5C`6N2s@h>)f9-!!<;DNom|FZA1kZ3Mzg>nUc4@H`1a$j7rGDKNG2s+R*o zS^+|L?uPSmY`ur63ggYCc&Lcu#w6qOC z$>%^391Gn8oXcQSsKC#&Pmfz<{`ZPPo^La$=12X|4Yf*!Zwv8uVp>8lcC*DY@h{bj zO&iAAtcRT^I+iT2(zN?nLx^lxcClu9{t_Q@J-EI6_?5Le(d{$w>rU}l2iw(N$m!7D z%ms*jnWm+sjiQ3OShDc=tUu*}(PPTPW1bWNpW_cp(&D$ONuHoRyH}H7_t>Qc zK#9sacOiO+GwStr%$NZ!mqK;!JF1b=3R(aHq=-1qj(hgHi$tS(BFWWFo)eXb^~HOi zm&W;222KRwVk^h)LlxwG9IwNI3A(+aO(D;io|?h;_{KybCB##beq{>lDJps$i&3(0 z>6-RV-Hpy5UzMMMAVKlex$Qm;ppLul=cip;KHI>_shCSm72`V5*|7KnKuV zEX#?Fhmn$25xHt&KSeO>rcJ7b+~ucp$TmAA`C#nt6e8x>YUxb6j@9~ppDM>0r!*?| zV*ivwiuSrnIj0_E)8gyF4)rBLsQsO1Y=g+oJ{0r0-LHoV!fVn+G}0OwJdv#&sGKo@ z4h{JIJT|ddeiY(smW+5)*sXscIL%7n7=56&sXGU0PTUP%Wr zEo1p)KB_!=_rQiV;{jf;akXFC$|42NlRRH^K=TJcvP0I($81}7EK(bcmFowFUr0W4 zfxEg4?F_pe(>f;M-^mmWz4v~zqrY2uX-&F}_G^Dc>=*R?VHS$0!varU9ih^7Bb!wg zp#;Xsa#A}95od4s@1gVcR_1T}8{Ny6WFvV{i3Mg|gf>^ME4Ql?n~=v`I2P(4N{g93yJU_jEX*d(*9hM)rqnwoENu;9rtcLs6ApN3OJ z^#~jx_`iP+=^Yrry(q3O&(my;n$cCzp`#!xA>^oHXVuda-kYz$=A76hcfa8RlT4DD z!KpZL%!m%$zFyRnX8n`%5Nj0`4gH7_F5xVAz_$}CyVW7!vt$Kqh-XD6H_63sGn4;(jNQ zmerVj5h(&$EivX;GI~`cj##WBQW{1I59v$!W721;v7=CrqWm|f|5THe|I51%@5aiB zs5ipII|Ys<-mp~(({@nn>)J*26_({Cvb!xB9J!m?nemNAR82Ne;8s6ZE{vtR&2a91 zRez8=HMJo@`;q0=_9;CB1LdM!MgK3O!IT{1U(MyLeg__OI43*|;qmx4)1?So8i{9{ zH5=#kePTG)}Py!7H*f zOzLQ87*@+za;AewD;1n65phmoBQA)IzIAfi8Q~ih2k2k*fn#jy)pF)#5k-IriqHTx z`N3!{I1CIVMnA^MvVyQhewD{pGurJ~dfQLWvSp4xR&@)3Kwdt#2sFrHpxkWaZ=%ns zhxxa-I-9*JTGJuJi?;LQyIkBq4{^y7P$dxcxU!qhdQyP?VmYeS`*g@LS2a*VtJDNh z;D!58Q#B#A+TpIJa%A#e#~&W^9HdWyYqTg`3X0gVl~Z^D6`rb0D*H%=9%cj+rBASk z5~CtL_VK+$%H(u}5sbu+{ntF!Zh9_aD#0VA2uN+8J2e%7t>fD(*wrcMcE=qXcjX9b zH;idBXObrZ$pE%2&(p`m#}?=^SgQO8u=+pulwq%=M&66{y8exxUymL)BzbFgOs(R% zxiaCMfV&d(43h<3BlkF)XGSA>PB|WzmW!J>l%=}J@Ls112fq*rS%uNpLEOFbb!j&d zVZ>flr0cCK<#iw-1h&}{2a#zf!qzAjw+mQR&dO3iEmLG zzVfcs^Le2!J8-eFsLLT{q-)|YtMB`?qD@kLuufds15@6Tw7KbVBdXv|=uL%ESSB}N z??SELw}*;+WuQ1}X#O!v(s7XQQQ@^>ZJAPsMkq6Vzis_#uaF%V@w}L+y%xho|E6-` zh4Sb^iRzBHzI-v7OjEr-Xye2h(G_~Jc0D>|(ckoTY3(TXK#BI1jyYSINZ> zGaD~h0dgOZK|x~R?;(Q2^fE2n!g!t>@4YgF- z6wQHZde5g&4akV=j)_8S0t{p9S$Sj8ED<5DZ`dq`%|!XCVozBfy(Si15H`{->#m-D?Z7N#ZjM>cIH!EjGrOU=*C zhDD4A??a$4T+OC<*pwQrVpy79hMMfPfY3~jyvnBtmj}T)$7thM(iT#UQN~T`=p({R zTy$z5I>@ojF^z)*yX+Hh=>AIiq;MTQ*oP-wS7j1qt8A0}2-s~$)Na;s{3CwC4g=Z7 z*~P_!U_S`WIpU6P3%?Ctx1kdMr~v`)MmS*F&8zRv>H6nK^ir!A{3_?1ii=65Wb4M} z^aYVchmAl2V;?jRGZE{J?9oXcq#r&IR8z6%$61dl%fgPzNU1S>)h(Q_wa;3sFRl)FaM?rHIuYy|1osv0G z;yG<-w6ES5jVx1ToNQVF#nJ30*-(Mx-gnwh3+%b!e$lhbAT#FGGYGK_263~lG)QruF%j>kc6Y%zMk zRKVc;=3P(;V=%K)&I*BZ8C`c{fTlu29Rl+WfwXJh%a6WMyOXuS(FHyY%)R!RRL1G= z8c1uMDB)mSZWXBKglqW%Rf%2_@1v%C*D94~DfY8@EU(k8aIx$c>HB}mtCizF^%<=e zX7nrW`3mu&zD>(p(sIFUe9m>((LlMz>@dubOFLgN6^9uc^eRExLLs5OjMYuYb#ddG z4VoSdU$$+lu`_m^*i*S^f4_IXTtj20{rvl3-1Q3Q4) zvze}|NUy#@MNcP7HZRI6$Am!iU_Mk~$%e=W?rN@g2`ncPhe0;i%atIzDQ%ZR4@>b1 zx7`)v%av-HafJN+k5g@^dp`MYI4UVFPFL@E&^Eoeem5IJ;rT9Fe#iwPdbg%hg(p)g z;YDQkKLgzgCOAlS8}<$jiI+4`n~Rd;;N!k&b7{Sbp7Zs- zy9qthc2m!9klgS7^%SnN%S46~8jBi67Hf6#{g*gfMN!chqaX$S+4eZ0@0Y3h(**sF zP9%c2rcaPj!lI(1%}Rv_Y9xW&3Hbs?|1^nhb7mTAk|$D6U7hy?b|U_zzrRn!SUmrQ zNq#<+{l09906ZKbM$Kz0QHCbnc_$j@!^JlVZcZ3;IFQ2kib-+o>n*=#jTZ^eJ!|nj zrV>A@t@JCiZCXb`*SVt1MccQm&tWV2PrJ~SHDH z>;VM2_SO8HTqAAs#EY))8?R>Jk76>&iywYI&O1L0>Y^2?J!XbqKcWqfHV)J1R0`PZ z3V4N^LCW->9OdVx7&rZu2*wL(eCnk^W)&7Xp_DeYnG;o7qq0dnm_gqNKi4%n0LBi6 z(A7G&*$4yfQ-?SAkr7U36BKu0i(XsW`EANHdqo`R+5CAsLNdi>z7*tEE>(JK|+ivqw znLfUi1#|CIsMk>x#|AB&y-Im&{RyMdbgwl z!y>LUJP%UJ_gp*Dns;(1MeRGAsUYqF4Qtz7ACw9`O@a`$Ym64{Ql80MTgL7)8DVXI zARtV=&fo@vNoJL(G|z2Y;A>u$JQ4KwbG z#F$HUS@Ke4)a1`8F71f)xiwV32Q&8Q{4pWNU{=WiDh*aTD-=Y%&m$S*SzFT4<$@(G z^z{8h4<*vQn3c3Uqvp}2GISIQ1X$AVqFYVB;U@+e*=@g)BQvm;YQ7rXi8+QySa61l zC4_y_SX0OIp8U<=ko{#d!Ev5+^)^9Zu~=1E_05|k{gWIN)t@8+Li`NU5&A>}RVVsh zSTS`D>7mN$lA^TB6&deiNwu4$;4G8m+Do++eaw=pMy|qg8uDrkSePg#6gthBxQoU< zQ%5jM-&w;d^;S(cBm^NwngjDOvy zvX56<`aDibU|cC}zHUlPnwR=R|3+et0%jKM+E|)mQ|@Uqa|sfJLHYpVrx{cCcfi^o zNmd{m-U=K-S|;4ey^9H;y#gC?$@Gv(xDot-xmplJa4^obh)*YbGB6MmgN1{SKLw9| zOOxvt_}^*+3vYo*S3_6`Hpp?FFopwqgfGPV(4?IW?^f?JF^K@Vm464Dx`%}GrC|h7 z)~XSQDI^J}*&CIktTz$T*WMLt&zhY{dRI9+5^Arhjw9_7cr^bx-_=2zv;U1XSqZJ= zKx9RBum}GA71d>P5!6VroyLn{0y>uqzkUel8MHk?C*JD$`}FCz z{ap#~QGd%Sj%6ouQ@@d+NcVli*k$g@6}4wIf1aD?*nJAXrY#ONuu>pkKsK+K{~8ZZ zzE^tYw-`*ObozJAT;&mM+Q`41!Oauj&kId6v{4`B+*NJ6R<4N4>skjgBk|%qkV5w@ z0*jjNqtNBDKalaUgJGB=e=QV5Mf8l4cTm!?u+$aD{~KeaXDQQZi`OC2LyG<-VVp98 zI}`jSLEG!FkAQ9B7^^CB(Z6b+GrtDsP{5XXo{0hZ`0u`hu{KDa7&p>qf2Em+^YCuf zxUZSt&G(*{Wc_(DFCE9-|Do$GpsL)Wu3@iABMs6aAqa<*29bkwgA#`l4k+CqA)s_4 zpma;9lynNxAawxgl5V6M{P%;t-+2ET^F)GrN`wdQ=<$jb+B*@vhRPzs#sE=DFx3xP(3MKpIJ8A47&Kby$Hcd{TalE^V$ ziM^Rdzr7Ik0Q{!++bZk(=;`@D8Gu$-wL=Ohgn~BUz>Ee$$|*p;k9eHq%a<>$)!}h5 zU?4+MMFp>@eorABj610~*aIby4wP}Tsf~?|pA!SrfmX2EJ-@`fee+0ba&Pw8EL4K5#ktr-Hu#({v<#?06^^S;LCABC1DeK1K<+&_My2dZb;xhsUQk)RZT!ajEU~& z8a}9z#I7U)*F&0`nr3Jh8xpa~sH8tK;4r`!0NY5s(PM+pv(Q^aDdDI4wb;i|?ziRm z&1;E=?GdIcP>*u$>S_$YM6Jd%!#$~|rPka349SUnF z2qndp8DKI5=Wl=ho%~iixqb1=bC1b}^K?6{($T%`X~V{Eo)YAWlo2u?qs#C2<{hWe zV|o!1vY-tP`FHIDE5L~s1(&JDzE--(xujPD3xVSwWK>2On@uOzgqux$+j1;iKF7sM zJBCu}1MyR>_>?C*(`by+2_*iw%)9OjUt926Kr_2AK6wFDji`QY`1$G=@>nlYLY7HY zk%jQo^X%js7@^GV+3(gMI{+adIu@RDAXnL2@4gRM;)4*0%9jc%@&>{zjE3Rg_c9&S}@BooQ$G4 zKDDj&7YjPpk(Ge3YhcM^;dBGW8ltNyy0Nfl_7*#HU}xw2|as5xon3 zy@dD=lbC9KPNWLKnE>D#40+cUhWKR2m%4;xncf5Z{UV-Gk!l)gdC65+=PbD-!ENwi z(9B$#m#et?_CQ5-Q)9Uab@T4tx5)BBx-EfZPKomGY+2d#2RF&JV|E$wMONvrr+z?`$%~+d zG=IRX7BLu*;sK2Jw`#2Z>+6<;%xID*=g-_0Rg-PKY4pzYe&~0afwSxv7`I+`im;QK zzP>dF7W_p^BkY2T5j=C~lh|p5$N6^1c4#C9N6@)}bZYPieVUF=-f@=~PP4!mb?4!j z{rG$89?@4!wxLxAnQUe(yh2T_rfYW?aC2wd9PH;OjEI|IA z?a}Sbgc<$ivNDPY!KO0lq3t8Q?Tm7lr zxBr|t_~7=<8Y-FN%JBH4(&2k+`6u7fEw@Tfe6E-17Nkr*Jrd2zn?F;H(IO85k+X`{FP9(;`4cjqH5KAQMS% z%6Um?_^*FT$Vu@Y}EYGFIkd?$Gk$WY&s% z_lWeQZD?cX_i2TW9+kk+lrWG9p*L54ndY8L)+=B)WBq=URz+<0$&|~eL3<26CVZs~ z7z}V2HR$JUU)>?`keHr7jx~ImwnL zflkyF`21k|q8Ki~FoQDt02-GM#+oq~H69YMlSF*LfY(DyBLB#bdj9h5{}ESt`l5Jt zqFN0-w?0(rUIK$(7i)R!BwygGt+j2?QGKPWm=p|lcX01qYc|8U z{n&hWrX23whDxmakE$rr3vn1oa^I2PFtN0Bx~YOcWs8r#GG4Os_Y{HH2b>)2!mP|ta-2!pgc6e)?)AK?QM&e zr44~hM8G69){DLrivmLb$ec+Tr)gV3Yk>uMSpt7oN#htE#?xm;PEWP8)~nGVbMa_K z%)~GqMOW(nbQifW`RgzzxvEn;i5PrRz=B3xHyucQJW^77muz_9&+<6|Ucehx*j=Ou zI8`=d+B{twSBhv~UXhts#r)z1}p`X;M%l+Wh| zZ=KD7bJwAN;MQ);1HqNeXpcJlK5E~|Jkq(0ITg1Q%UJh&6jHpT);LJTqm9vi@Vz}x9@!E?2aY5GZ(^Fs^+tp9vdY`~wFFooOYNJB z(CjNTf|Y_=I+lNF*Dbbem-_pJN>}KOr!@mfvp31MwOC++I?MI)2U~n{n0yy`+)C=J zG|v83_vM^g9CRbj+Nbd!}F(8UhT#IrKrL{ECX1_WYqF}JTE^+3ZR`}HNiXmEjRRNpCr?1Vh5@G}5~?-O^h zCVc~n`XaWIKt{8;YEJAMVj2WJna^?Vz~XBcu*ueKbTKx7or1T&%f<)=^I(g0KSL08 zX^yxUI<2Oc*Ee;`jVsqN;~<+zm&5hpYM}QSt})rn3)~*?UBRz{P1^hD7kwJLV#KAD z=*S0rm~fa`5H5u;q}W|sTv(p-2TjtP4ouYXE?++!<3Z}@FABINJ4sft`KO=i=$Km% zpK`k{jvDzCBIOZtqc2G0PjkY+bGXop{_uf$QtI|^F1uCUgAgCo1BMEwxB=9a^=9ZhsV&rv53h3m4AbmqYJHy|H z{X|geZ!L#T<(?YxTGx-CFFggxjF zPqMgUj{Qc<8}#ETonS2q@mr^3DIHbzb8s8u1U!<9n2Ka~Fp)GVko6$yL)Idwm}B>J z3U}PRftw+f;$*Xz4|p-{8Yv@3jr5pXe#eJEzAg4h9EMq#*^!U}om6*OFt_|m7%8L% zDc`#R>K?hc$3rL`hfZw#tJLR2f8)m)t+!7<;m(AVYDL^b!u+nHxAO#Tq}cC)DcSAj zxv!uRknx6GhGS8Rn_9|U3O7tZmS-PBV*9cl%jeHm+W2ppVG@_cWGmkc{q|=I+Hx#U z?dX0k6!lZ?4!)9ntxns1)=qxYIJpR8K&^g;)1NFjmzj=uI%uydkW(@?#7N9;8Dp+1 zr7 zsaGc!BJu-1`N)?bDalof9Xr3#4gR>lPs6_fz3@5j#E+hgJOp&En~uUWmlk7HM>zTD zz~n4032TV)68STmDE~M1^l9+*vlrM@n&Nf^VYe5SDqKvn$SwGC4Q@>b3|@Ysn6wA# z4Q(;ZiW-57nX4Zn6I0xmhcQYq>WNAxV1A0fp-@l_4}`|!O_ER@DA zE-zE^W5GL&=@QZd;xx43f?iMO!B(Mi-e}T^S#FsGnap9lHLfKmW@2#lIoaPEmdpB} z%Yyx0eEK@tiUtAe0dl9wGGGgv0)&?k4{I-vCOsnp?DM~l^VE)^y%HQ}|N5H?xT!BL zE}F+@ey%>6u&OF4EoWh;j#^_imzJ|qX*V;~V*@F=i4`lG{2#wt*gzHx8uLJc2Bk<8 zQqfsiQGHZFme%S4ViKGhH|!cOT@fMux`2s0@g=D!nyYTJ)U_sx%zyc78%g`?sCxvM z^yIjdAO!Haf%tTIm+8Wi$pBHNZ1p3}@dumG=GT^k(GObY%w6AS!>M+_yu+Gf7cJ%K zFb^Gf>{b+hoxfx+T4r6whE~aYP{M+Ah_8C@2YZS6z&)ger_hP8!~7E@o0Aa0oDL5_ zlXYll<|cAKvEv0i-v70c@Y(9eh?EhhrtPTpwcoTt)W{J`o z6^lHo1^kYlEHCuvbk)L!(v9pET{%iNSe~z4I9_ZN2p;a)7^Qs4>(Z%l%;AYo2@FJs zjXcB{Ez@@@FHdi8Z+G1a8g&o>rqUMO<$#aK_Y)$fvvUp>;=cFfC?^sklM9e79geAr za2o6050JLn>@of7ebvDG!ju=GeViNR2xse}L*?e?W<$lT z>B(e&1Mx;FZZP1cssLL4pS7G&cOW(z1<9_vH9Jb8POb6G}Bb8hm-!?~iA28N~ zx^%KeK1Xeo(l}fzyxiQnZ~6h+_akoGDIpq99vYCOXkU6J;)PQr{@`bi>Ol0*c>XS& z{^lA-pm@CtG2#6=vN*B+C2c~Fd*5105)8fsCIn{;dqBGKbM%nMNU>3IW4#r0pUtyp zo14~`lU&y~iZW1}%0eScSLTH!#_4vAm^o&(=_wwVzTL}+9{2E=&Exk-!V;^cpV2DY zn#KyKT^TIiJhAg`-V~nCH}Jg;!|+F*yfyD+MSa_O<^MZ}&if=Yns^25{9#`+r+J+$ zl$^067>qfaP(Vj}ggw6YPGKrLo&!OY>$i3lUBaek0u)Htq-AKMo|R{#tpFZynCN!( zM_q zk^nJ;)i8I0t`U8yHZF$V`L^@)k6E{?k$pj4 zC9XPV8n;8y(930#T$hA$jVOWBi$bJ>WLs#7cR|t{WCSAp{_bE(=Bo|1CCRqV)m}H( z=t$z)W5Lhio-%X2Bv(SJ#<4aE@sN{^PiyoTZF6nHOE{N)dD26qBvG7TH_BrGdzyi` zR$PSyvu4`h)pX9ntID9t1CV4)w#+hlx3&Wj1R&1}sg}E~W(FPn?gDN%gxkiA9q`{w zNEshCIo|DTHZ_G!dGHi_f*O}zQ}lOt4>j)Y?S@?A1LAMNj1#4i&t-+TR`gFkBG?SV zHw&+g29Y{&R&c+K{kH`VmEOG}6O$MBNSG|vK zit44diCL-#ez=RBwLCje0eD|2ll|)hW+5J=f&qJD;Mm3Nkx1w2bP8m4huuR^G4D9v zSiF@l*5vpDjsC>v$(bW~DsNAdmT_WZfrOxPCh}f0sFD+1Y5eDD3n>*96e`O*3c?PP z?XSQbWb;IYRTcI90GwLC3fhnIz@mwa-a@$RtfyAlPERcGsQC;r^v4&ahZO*?2J#AD z!TG|NX9jpQkUaY?D9kqqp5uOORWpRwmn!a9UMy0D7hEF{tUC?yINU`fPH8G3M>z6oq7r zTw|B&;+NC6f{;CFW?wH)^}bC}h`pYoPpOpskM@7gr6Z-DN?w-b>jO(PZp?-FtFyQ8 zm5bI?>3SuX%J9$(u0-o%5I%`UjBZL!cP!3^{h$x~Tl)?~nTXi<$-eja$)s_PhkLss zmHq6^^a<6+TvZgwG%ANzubRBks*hwZe>t?x{u9kH18T?FCo9FsyegA!8OUii>2GKkg6zCT{tYm4@AY z{pV-4!}pSY=xg}qtQv!%F(duHC<@byU~Y^GibY{TLG8N#-b>m-fd!)xR{$xu*Ay~u zn!6h%*kJuXP*SRDE>;YSBD>VM^PC7wSLFifp3D{;Ka8j%_9Y8+-`YpRm4XwC>;M_X$is?TuutI)%%>9 z0#YRlDmV33Q>9S=0T9f--j9f8$E1-hR^Kh~n;~Hn-bu|&vjmHcm-6apPcWge`$Bp9 z4qa6JQSSsY&eDdYE}gd<+2GHSK-V6EVAa|VS`dde=_;|_WM&fc~nlGPN0`>p?H*V4gsICu(o{~R_M+rBIs4ta#bq-;yQ{n$zNBHp_7|H)QVwPn=%-3n zI_J9D(~rB`XYtsFyZH-cs@p#iR-J9YY+YarWpa?sID8|@}z>)snd8_%25J?6jG$IlK&n)biVm>X5}HS zA3divo?EKG#lpLrQ*;%GY?$EH=vG7_QvR}^mpp_J)VCe~dprH>)cG`o(gHo}# zMd%$&{pr)}yxb*ItIWqqwj7F*=6CKXU3a+tt~q*V265O(c558TM8I^wm9VRr>&0Vz zkH->Y)-nwNp}Ckxl$%Wfo;CJ!i`1!{Nhx9Mc%3Z+3uV9Fy;Jmk$0K%mFeHLSqX^J9 z0D6XiA#{wIn#uN+ikQgf=Gd_SCmtCZA;1gT1<+8{_?-g!hd~!@ccC)j-)9x>ku;pG zqlj(OKGz<3Iqi0u-6Z6_BF4xk+=63JeVTX6UJ+h?L^_sJxION{Frrg^MNZ{u< zB)>{+E_~W{*XVg`FriFeWwm}0EDNcKDs=>wTkRTWJxTmH0268kMnNWvnD7pU=Inp> z3@ugo-672amNtZjIcVeIQEs>P#QxxR*NKZB7fCxS#glzhNgF1J{#NH_Cn>mAOH0eI zu3HG9RFzbsuC6YgWyCVnh6K|5B_4;CjCt-2r^{4RAn!Z@{85J8`HW z`y1|{K!1{Oz0n@^1&SE`A9&fVcG6O#fH|P@d6}p~=O=5IEs|gPcf5NHmL_8!>8!QX z)-Fr82RrBPes^W)!9pEdK=9epkq=%nA1O!OG#ZcUgF8EZgq{!FMte8=|xeLVzW zfjlqW#qoU1N%7pClj3=!l=2-eVy)Dd6k!jGzF^Ib{V8a}XXw z&eOo^i<8S#HScb$P7~?znubjKQz-(J&?iI}a z55K)$P9S-&xZXK5VRuwS?T4F~S^Hec-StjarYut~nq{o5!*2|{1BVcJN{+w39a{<( z0SRA-tOz0YssDe!EVLzJP1JO*I>cQ@CZ+v3iBF1dWcSRMw_F4vdRkE6m@EPCg+6dy z^tgJ9LA$D^T?o(zqr6-&0z>6V9)YaJmbE&BGJT*_larJqs>T~>kj=bz8g|*L>7T2r0 z@ib%j+Lxb53|F+?=J93R@Hn4(pnq}3!kD*_`MCBv!5c~TIE4~C%}ld2eVw4#E4|Mu zrX7g7|BtNBsEmifMum$rJt@rRLa5=+X|33s+4^$A^g{esN@DUAQGXAXdEZ)k%;_jG zJ7;QbBQJi?ZKH(RxgfRYcXV=!0Afi%OYh(S2)O^$%tY1zRO|2n#6s{Fr&YdYQzoJT zBf11lym}mP1axWI3f*XVHS?e#fdt>u z+g?pB{mbE<_9-nbuWuAl21jqx?i%xYd4zLYyn3!*LJWE|)H%Yt$IYXSR;}Zfbrp96 z=!t&1Z^?j7wd&BhFVn$oHzT&$_~**QyDvo;@Qg~+?C=Od+nV5cJn)~p{5+BvqO3n!ffO%lTxdMvx)|x*oSi~E+>LMT*glrSU z8&2@=-Zm&Xd;Q1@>GS{&edme^_J?J=;@RJ$-G9S0d{n9%t;A3+y~U?4-*xVRGu@_7 z8U}-xmu8ic6%nHzK}!J>)Xvd`g`p!E_M$e{5)@YtTclGt`{*6I;8D`If^B~ zXKEhwN_ZV7`+(BME)=B|Q*qjUR?T?e{L9E(4w4=lQ{T>OQ$Zp>Ht;Y#f-YzjKo4rH z**;N;Pcp8-G>~WW4!zh69Ee3H2X5)#uU6avb`Z~tuORk%biK$}oN7;>XG*A$WViuS z#oJrl_VSZtBhH{BXvEDZgSt4ak_1Oxt{1R1?ZE~E6_YVjcEWbD6rjdZu?YQ zo2rHef1?4A;&?odtbr01MU5{?gx4_PA(}kJ4RBbm>URDv`=6r|-oaP&Goq1N?M76` zoiPzRb1ovq?YBM4&I|Qkd+NVje!Yw;ZgUE|3|<#{pL$;*bczjAJZNG9Ar50Fj=E)& znU!@D6dSc^jaO$I5OYp^))4&;r9YUC)AM{-2M||CcVKJ0;Nx?Hf>@VWXnvO!HvQ;P z6@9i;J9cdOk2z(QTQlHwiBoB2WQS>&y!e++cu_IS-MhhPx>;7G@Du&=O?T{J7d_L4MH2MqR6YQVSDa zocZO8f~xd;ODYm(HWgX`n+QQMcq-BuQr47;!k6AzFx*V;NrI)g^Q^+(DF5p%2Dsb+P6OboX|4~3BE~=kUY_9A4XZLY z-UR}cEdW?J6wdyY@TnMu8SWlV)y2!vZIjS&v8M==GX$LsAfJH>dYO_KskaXjHHj-W9mgHI=a^4gyxU}0)Hb4ieGYIrIle%= zE)%{jp}*e2Qt%_$_hpz=SZ~HeE54SCdOUm|H?d@KC8 z{XczV@)HXa&z&4PLs!GT<>F46%?V3&p+xXoh64q1cxXEw)w(_b^I9S?Dpd5GA z;NXRJ5kzFOmB45u?+!KrrM55D9p)DG3K0zvgm=e;Aguwhhks!WQmP;YDxj|Iy)ddM0(%tpHuu zgMQcN_6;~v*aqZ=t3S^vo^1xkH-7^0kv4MJZl<0B$VT!x`Y$H{$__*+5|?<{M-4oY zbo;A5fD{P3mys;iKq`ui<<{F9zD+84S+MNI-441AP@tM|vv|p~17(x6q_4%`0ox+k_;G1_MDTnR`drK2R`~ke!v0Cae+`nL>x@cb- zdVtDN6wouEF0S7T-R8@uUp+o|dDK=?(H!Mpl# zUC)B-yw(@s4)S3!H8nLJn^lZYAgbko5TGbAw|QB0JT3{2v+in@W8lA#l9ViEZzIG` z=?#e`iPYR(%S)$pDh!HCDz8=Yha(?o7$^dlvmBl(*a%Ro55)Gpp!r)}t&&5w$`(;1 z`3j?rG^!qj6XA6xFBp?SMoUJbWnSUY5 zY7(NrO8i==J}$Qy3g?HvG@kq&rwfZb>HB71%QGsxlaJ#tJ}Pz*eG0buSLd}s*oYHJ z-fDW1(RYpKO8!fKg9#q&-f2KVh4lmSeboBM`;iZq=f@p@VEtt}EXgL*eg8iUYE+gq zb=5~yyHH?=tt1;l-Ch&~j@U}B@mBRco7^i<0_^f z-?#ygh(Zw-`=wCpKR#XIqZS|`2IB03KjP2MzGBYr#y^G~O%Lbrm%&@I1DhN~2A|~p zCabVrd1B%7&9bT#yUMcKT90HKHyfrjA1kBWby?bvhtzv+ZZ^L`UN;%ioSkD8d(J=E zjvV*-b6N3jO3S=L!8nf7ia097WxrP0rI5KU&741Z)7y5NcKwqFFDW`k|BoNMakWuw zRSlLsIk{zj3|+~-osL0!h=KIApd}|qGtgb1%%2kCamJpmX#kCCk3`P)RkT1J*1vTc zX8K*j*SpeFfTZh@w%|w|wu!aCD^9ac1%OYk<^J?y>1luscIXW4LNe1$eEnh{SA+#1 zwe+k{pX9i33jL6Sz*G4ra@sjs(bydz3W6ipsR78l19qGx zN1MD>q%9&(Dba+Z&7f}YM2WRF&13yDqFV9c=t_;;@bTLB${hr+v5&@%z})G_8!wu< za#+cB^^*Ws-qtA`D73xfxf|p|Ph6}HZ~6_0TqwBJyzt`g*X;nDyX%!(pj2v466z{a zenh{E&s*Hvx)F9*ieJ+!i9ut!n2Rqx2{m$#@r#F^=m<_mZ_+aLRM|@TTv+EFdJFt! zsG9sXeK@OrX!^i;MFD8Kh?@(1rKiFOXR{L6LP^ZBrs|3v?BcfryNZ3?$50%vz4gdy zf1Hh!I(Q+-?i*UeOXXCNXLZJUU!T9FeYj9&U5fwT^%_|9d=0Rr6QJ=G2-#Cicn(v% zOv(J#CNI`!Pw>9ZuAhq$WIaJBY(+`yPF#5{(2xD3#(6toV*h!dA zOuC90iO^)RMRL)SumVW15&9ihd2bR!P3Q496iFltQ2MDipWZ77n*Z`lM;?7+Im-9h zQ+by85}4LoK0;b{SQmm(W;aMQ(Z^QvVGj9|-Os`$e7btESh3WYB}ZJ{OmQD~l7w`c z6XHBKOM)KtTdU6R?lUw!_?3fW(5Z1-$@JIvw|YfU!cNQ9#9@JPg(R}X`(yWWKmBmJ z8jz)1b8jw%c;O`^L0OB8QDTFehfmzn*iie`$}tAXBzVdBVWV{Y>4#$Ft(vOhW<5E9 z=SvlK{QIgbtcXdQfKeZl+1SW0_hU1Kx~%F&7YH<+t=Y^T{KXf&q8nJ0l6L$Q8$|cq zW9Y==K763Cx<33?t?aF%k(tzWIpA1m2DB)Pexmt4UN2VLOQ`2Z=R4509!$s>&Yy~b zh64OPwWtq3k`a#c9x#|gyxSLa%v4k&b!rhAk~q^O`-qhj@xxn`lPPZVAt%729mSr0 zS?32{E474mk(GdpRk(a;43Q`Yzq7UlDcKrcEGM;vmt6D@f3MSv{eCKtXGy6OD4^Sk z)e`1}$$`c&df6S2#~iwr;Em&1d6iFemq3S=10ZSfY*nPBI{{eD?Pq0b@uY&j;zV6=)Lj*6d!3~s` z&Qo2csA+Z#8==m&sPn%sfJQBNan{XaZeHl_9VHMNL~Oo(-{o2!z@bbh^*{JkMkM8? zj%yms8JN5NfHixd^aDeK8z-BLBX#`3F7A-DstdJWr6sNxn&Izmd9409-Pl&qJNXpyQv)`CR@OQduyjNf<(JuuPLOn`as-;LP ztkC)p9_rYp%l#l90H*Oc&NEqAiRdf=vrwv=j5_T=1wo& z%NRG9#^Z+zs)%CsNA+JNXo0DQjeaAd-@O!B2SA@H;rNjau3a&fIsvwyhJZx?c$TIs zB^6%IfFx}hEuo7mzu~}gL?JKug6-J2qExv)Ui3@a%ng_mGoD5VBhNK<*&t^W#*@fN z{oNS%uo8}=YK@P5E(jP_WN`{s~6Bcx$R{aG;bCzb4aMC_Lt076lF9SpP+ zm5+*ee`<9Qj9hcgJs+6)0TSAxZ_Ub}CZdw&zIgVk>7Bdvt+tmQI!d^ivK#Uq+6!Zx z5l%u|$_{L7xK7r|TG7r{-R}7;aE5rpQ}YW(2PV-d=XQ#^UK0%tqoknuxQeI(t{@UB z@>uR@kavyH(D|6M-W#Y5gCicW7ODL-520}#Yf1=1k}ehKOiC4)U>l3F^)NRVQzZEr zZR?=Ln;sVERrMt((p5&^e3|v^3n`*=pjT2P?lr7Q;xmAUQ}(Hh7H?wn3C{LM6LcJh6^Z+E!8cRv5|R{1)C_rO3y zLp$^Hx++{5yWb)=4fNR|%f;Xrn>R9qB+L{o$#DBup)vkiK4OgzA72x|M;ou6)h*`G zcSQA@|CFjKJNPcs`)2e8%+#F*mBWS9(&#~sr(w4k>={d)b%r zd30B3jE*`!S6~lV4HJX3Al9gsq?&qFwJ2>gU?oM@OTTP&l^5x6Xd#9E4~Cf{BR zGL)pp8YEx%C50~+^*jHn$q3Uj)P!M0jaV^ETb1N&)O}oEgYDoHZ+oLQY=Yaa>&Lr< zVgH&>nT6cAWN1a9q1apZ8Y^heYm?gBWo(|pwJ(>;Yuq-deLiM%l}y*yi;45E2y@1# zrx)jG+omzgPQ|KhvCR>3`O?fG4|@ERfUHr`OJ1d`HK%ZKCN zZ=*4WY8SpGiy_%%rQCh36YwNyLNC)?4s3a5Q6rMP33#bcY<*fmN1RTdC019%SHwF+ z;e$zqEbh@~J31$a1n0suR&tqE?;08YRwjS{guike(S2#59#iDtS<5ODNk3-9kd`4B#S0)&nAMw?28 zTAv`3L2g#w_5`P+b<6y)^GrwZxXH^4Alx3a)akjw3hFT?Y*Bu38PsKsAnB;!XM#Nu z&XHc63!*DR%7wCyJFPhy$5_64NXZ}PzwLXId4UnJrm~xpo7Eb@z zSdiElSG#t-0((*H56K62l~@BD_)1G7!-d|xzm?6uKMn45;I7HM=lpE}OZ==>kj;Qs z;cIlcu8mmyXf+F}HgX6#e58UM-y_)84RQyK_&lLb8#WRamXUEHl1Ic<#?>Mt72umz zYXNGZ0~2vfCs7|q4~-+?5Y7ohV80{LWy=l4OmqjsbQHMg5yF|m1tpAF)0QludR;MV zSut8p&adPhm`O*-y;I*F3MG|!l(lb^g_>%abEe~3i5C(It*KNphqailu%Fg-ao8)Ss&NCOc(9`^49*X6VxyS(EsD&V$({x`3dE@ zs$tAa78deBF$slV`T^M3^d~6dxBsfU*z1lBwF$ouJe~!q6!q532VjZzEpA>~tn@te zHuprg%3}e6*fj2K!KCHf2<2|DFFx{sCzozRfuv4IwM38yFIQeRv_9SY>@&cJCf56g zC$tYHQ!)Qw>Xg{VvL>nbe0-Key5TZH%QNin@VKxiO?)z8@`pbbad^#gNvMx?*`ZEs zNM>)772kMG38GU&%x1fG3&dQCE7;sDNhXp!A${27-|WEOB%<41Y~7z&1%-41fuA-~ zXdV+80Xlk_iUIO7)dI=AIz&l+CceYUi|obqSphuxIx^9_z$HN8!P6bt7&v8HW$T!K zxVAazO?lqA&*D4z==m;FPNsKT8rX8tz>&B@CqJ-E; z*l;ZF$R(IpF~<=u>j$?#irpW}FJtPNAs3H%elPJbBXNwA-Nt3bGJ?;dVoGTwUMsBg ziLubL*YdS+W&iU`wLU9hLPM(hW%o2a-<4$m%#H5Xvs9<@qu=j;RtrxZE{%cbxJT_a zAd@GEj`uQyXeV-MXX-}0(;iyH@Wdy9L`!pSmgp3fv*31BAcau+-_gV?5!^5lKHKJCn-zYq2WeGerM~6m;Zd&Gmej)=A>m4H`}r*gWX^b^C9^?(VXofm&|*9n?N z4Agk|0TO~j)G8%pcYiZ~Xvu-K_P8m8Wln2=ji$7$ETZNhL+;6+-qimB@|~mn%z)8R zR`#|;VKxy;i99@>EV+<@o!#qIfHiv*dunBF*l=@H`Ql(4Q<<|(;f7J{Q?1BeUCP{v zT;ZzEph8)8oj3I~-}cCOBNtuEzY^Nv39xU_x@o!G0?d6tsd+f6QpD%=v+9ZLaBSC( zU1+rvM2`7CACXwlueZ7J__u+!feY!;l#?nl;vMc0@g24TtKa!e*YScPxl z*vhSJr2{6tmYHp02$3`Z4ovEZI*QI*NSu%Nmz$fBqUqvSZ5!+R4`-ysALD=a~o~oeZ&Ld$=0*NU~K@#3ZE*3X5k=P&xo86J|I8= z8IrXRYW?5yY{tWOkbZL*)|3A^_W6@1Zo@O+SXfYi3t@X{FNhAfUje18Lvow9H>bcz z?Ieqx*S8NJ*tO>mhEzMi5SiU#D}X-l1maSdaA0`_IQw^TIxPL5y915h6Zl8UTs8c? zW#>m16PHk%0+8Ky!i+B9_!$kLLD!D>o1{_#cg_|d0u%(G5c1-Nvj>o%;N|f-2&52Q zCjc^-1XM+Sg=1^2V#5e9flh!gw(~ej4)k^HlcmfLWmqXe$G2}XB<9Hzc?MDg6P_;e z=U@f`jA574mL!ny5|$)vQi2UQXDj??n6tR`nK{Wu&upS9RshvH{=O=Z(qOs#1yo1 ztq6>H`2qGiLiQgJS(H=^jRw=B1DwAWKXOAC-l@d82-B}ti>d%~ib1S^qjc*08{k@b z>$@XqM}R+~6a(g>sln?_^_IyzLQ#xuIlPQj6+e7Wc27EC>Ibo^*xOk^*8cSQGmm3s z(6%32FpgJLIY8F$c8=6r_%&sK;oU-6e|ZLCs7dtet`}`ohtA)#P!6Avr78#vB?JE# zi%~mM(1xGz+5nRU`SE|TCj)Luq6sMbQ!?OUsnM zKx?ld>>}dt<~ElIXK-&qyKAmqT3t;d@>vWrZ86V*8OY(0AkZ0f z(8{VCO}hyb_SsLKHUE95JT05B+brH75C}?qeA2N82!8WmPAHa)8Kk_x$W8X6QKNVJ zL<83O+!!)y_@=8OARPjkjLJMk4wh3=KU`{v(UbZgof5^%Yck#KO#a|DQ)&;vS}-@e z1C$TfmcXMXyr1eEQz>^Hn=^lZf9VUtJGvhRemg@@Iaj%!EIh0W(un9E(y#+63PM1C zsUi;}5-Zi~XuNtZkm?;MH@cl~Z(`Iw$YIwAB*-#jK^p)*#7n;S*?6qUcBh1df zrX#sP{{4^`E!MQb-c2B$=m)gC)Frx6q+5`5du^@A$EW8RtnT2YSgG@Jaj6FBoB`-5 z19pRWLI22%bz~562vTI!t~^?1g>%UNX2-$%eYMaVPujSgIpo{pNU9(T2AF%k39aaU zPGJ2pL{~5i;Bkl@02H^a-kVdEcbY17ff>Tf%n?#;{kIVDq#e=p1JaB!8fe>qS_)G_ zJ;eS`|5kGE2L4Bv#J|!B06^C^*(w;K&4b++7Jv|ud7yl2 zmArriBXi;LakXGR=^E2DKoonZP}u{N^52)^@nO;6_s;@<<}x$2B)`gV-G%w~ze1zrFe-p_9MZ+KtTJ9#zhd07GH)0v@P7+NIvJEG`{19(GYp)qWABO|-_ za`?4&OF=iwuey7ChezVeQ=Dt`Ww4sC4OTe~YDoZjb)d+u3#56WkUS;`xNoZ6NRy=X zYyNQvpm&5Sd<~7>>UVSKSECY$Yq8tkmBJa!0Fw+1Wf+3vGv+7d8tBIGF8j~;r`R#X zW=P+IVFGm=sV%e2JRXKIgw?tJTQ0XJl=!2i zW+|fpyV95Z@04XJJJm_Xgk_?Mi&cn>6CEj8pn6YO`(bY8@wuE?`5eV<|(!M z)PJ8fFE)^JA~YXN%~=<_5VMRJ!z`;R#a0nTl0t3G1kd&y4k3IRJ-w>Xh)V4}2;|qA zWhVzsfOlAYCLV9-@82qmh5Nc)?dDmqHRIHOU%M4R@xFrP&@=ynT~3G;CAgMhV!z!H zaRn(bz@D1ZKLsjQ(r@Qez*mc_k6vhW%5z_qQ9gwQq%;ymtgqwe4;q%s|1rr5-~>;R z|D&bb)8Y3J&688d5;_H%RUH_Nav#c|2;=B;MJ!bwNuOF13W#^;0y&u?8C;ml0SBzlWg*NY*n; z8yjc9iXeecvxIQ^pG@yRuNPNN?1O6}VSJkejR=8Pkka~=H4-Z0ZrQNib9&Iu=| zgaib&T77X(VZyl4P&$WhuvBCjjCkDscx%(fK)D5m!|6kZHiL@p&%lxYf7{1LqdY+e z(#5BFz_oz!zbG2+jJ!+VfnbldGPo*(vHG9q2ZzY{*PFRB5p{JOFwnmS|JH1+71krD z=dipg4L-@KZrV9I2*G})(f4)-z;$94$ zTFdyVS^?KP@sA(c0umK?rO|$zq+SB2FhzrnCxF=0y-!Dge@5!P&uT(D43^`O;Gv!a z#*F6AvbCxFhmGs!ns*wOui}w)OjNE-eZ+fJ>RSqwNl|v|*StzE3wmwSbk|Ben(i>{JXx@4yHOuljU$-p5qc;w1|B1@C&7ZLEF}tL;75Z-4zj)!l}?kDlhXyQhAp;+!Y30rmEX)e zGAadH3(A{!=@_&s-){j~WPO9}OdjNSDh)jruzNfXv@5K-_z_L8t8@b0s^YLJL~Z0a z&*s)yQ*&*|Bd#zOX;0hb;qE?}T{}J9liq(joMFdxHz8xO2tRZoTD?5l-PoX!P?pCs zi(BgJ@X*F`$1n>e2o9uP?>d<&-HLHLA=s?zUM3f|eB~Dnvms7QO&Nn+3$UmCxce3; zSYekyBZKJ`nVkx&72S^GkccCR0RxAY;T|^oqJ4v3K_g(YxV=8@geTpO!^Y3h4PU>y zyKq3rLDIya3IW!nf2aO`UR>uYa??e%2D=fIgxiXn!%5_#B^?k^y+vMg&QZ2GZjU>lbNDv-t_`d#KNi?cu zI5-ezJ`E93)YWE2h36Ci8LV=O%akllI*uFpp4ET<-mK$tfN=>g{?nA40Z!HcE5g{= zX1nw*`@7#YIO=Q%?LwfR<@n9?r!%m0kJ>Cyw^ zF4Xd|i1)!Z$jqu={v5^9%A_A_2X*iO+Zf4`-<_TBxAE$k4d>TXpgZ@@X1W5LQX>~^ z{!l9`+BMU!g!YZXx{;?hd$r>V?9OmG2menpq7B>ShhzU2TCchBnSa#9GA(f_<2wFa zZ)m*;y?nDr{=7ti=^72(CpD3@r20rW>ON!FF|YNH9e3XVG$)M2%aV^Z%xuV{O6RuP zE}{#)OgyzT8A843Mco{-kMJ93Bq2%GOgcTfK2mQdVc4m%W1JRR527spqB+1KaY06Q znk8fu7&cqvedSnx&@CvZ)+KllpFP$Z3`Epk2}+5}KD-||GsTVT3+^-BYN#VsL%$Rl z`KVjrfSBKRn{m}RJB=-em18+hvZ}XD2=o3aW<;SZrUC1>Lsh}s)(#q(0_TT)S6)__ z@e!ZZxW#5EcZ49LBZL}l8NsqhTfjX0d!oX1j%3jl#!qXV% zEzAgDoOdF3c6N@Y>Wu78wIwCo)$!{iPR+XS)Q8=wGOu1<}USiLstVZ(P zcdDdW%>pWYWB>GrBq^KQSV}&BY|h^itkN`(Y)m-w(im^kM!WVVq6efs7+f!`7%dKL zNRUhdsIcq@{p?YSZ$l6AE~1+Zn{DLHUZ;7q7SE;F|J61@Jtd;5d2iN11Z*tx-Fv2n z7jYYz$g_gI(A@W)t3lai#qwX-H>pnK7~EK`y4B$I2k zij#xG4vW1i?=YzT{JHeh-vuE?GprmW?LA4{DVMb28wIy-%483-BYyQmM=$RFf?(z1 zX0yx`ssUPr6KmpP;uKrpXJkQ>W50FZWrC~SGAh>IKi~x!1*7rY8hC<_>%CQwiTV8p zqu=?`&2rvgO;Gm8y$yWXV*}vVStKZ-vq=hMQD3HB%DlOT>sdD@en%y`~o z%ofBF6fkeg`ECF5kjMAFvjU*LH%}8NrLA?XhXlkLFiw>NN7IO|ezY)B|FhpL*?4+8>pukOts2=z0kUG0mlv#(pOE+YLqLO;E0sF>%D25}jrI7rA{N zaO5ZG_>4OLM1*S=V+}i-di=u&7ZP?Dn2QaETJw#c6H!Q`)EKwosSU|py0MwDp-X0< zk%bFzq}kROl3>l7ggnz)J8{mq)VkJ@HjlSLG@06q^&P6Gtmnho|0$LeJ)eFx0B&>V z?=V!)4j>IbjyoHj>&u?ag^BTHHq) zQOxaH{+2&jcVS^zf4M2;T*}vMrs1(Xeak#uX#CgnKbF~a3@)jzb>Ax|Kz(771eiPd zThI=sjWMJ8kOPHIu_>b>BhisxVj#Sz9kG46V^(RjDM^m;Kr!^GHbU6aGrb9Ax&~D+ zoMi-?CvU8XGr)p)p&j_Qw{Wnrx1G(~zHYhBR-1VV?EOKqSM=+{2|oPM+EL09XXtaf zN8cQ`@-R>x5iIgXKlX|Mi`3^DGtu^kL^v=6ALMb7X24G6{9Iqkt8S_`t2^RxkZC8&`rZfMsZ`iQ;!3EI9ZBrCGH^3ahnOvV>$sw6D zMAyY((UUZIT2H}9ZPjFsQ=j;4-gH{Dnm18~CmZ1HH8l<=A9TLjn+}CatG|-@Dn2b>w6lrc2 z5O11Ufu#i=+!tLo`+pyg{+>ghws!C$>B#*i{|bxrEw`*XYK@%nyiL=+j{T>9=D@)} z3PgEikzDd5V!CcG_Qpm>M=cnrL9@<>R*<9N26T;{n3B;Pu$T!It_noU#byFtwR|`f z!PJw0Bajjq^GC-Q{R7A(Q1DL3_vhA1Hq3Xr0hPu-fcO;vVpS^mgoT}V1;uc};Qdj(M{V11+G*+32G4G(kBI>$Fudq-L3(05epf+_p zopj*a;?F7;Y~Ju4@lGVAP(s*rcu)S#m-O8br>C}8*IhU|h@Jn{=8^GDgBH;Ok6k`fn6H3LU4>JyR`2blLY-A=#A!BX~ zSA8Ax*i?6j%x&ihQ@DsgT(&?E-UgYO!S|MvsTmn1q=&RR$oMQzKtP^1PN@IB3ZLCP znhACN<`&UH zpSm`|)UO$B5hQ%FQ>9q5u3`r^=7tFpOf4+-?#9+nY#TBMT1kgG^GxSqyFBnmgf}(l zcIXv?KnMu#61wQ-(2sO?`u)b`Di2PUA@We3I8@k&H7 zV0~n~Kz=WId2?;e7}jY!SGFgPr$1p8(M2irWXFa{kG8wo;gz`bE_~o#O1$c~jJ2DT6l*(rS-YnREhW57rSDs)A#>t-ukLUqoLD3F6;~ zy~e=+3O~mm-qD`q3jZyJ?A{~>_o+F}m*Vo-MNCS{N|&HZ8HH34?Qq7I&*(V+of|vW z|MvV_gi`bkSWuWTyy`pvx=1-wgB&-xQ~IszxWuPNMT;aI;9k;YR(Jl?J2LF-`{m4 zE1Pq0gJa(t%bBB_ldX2+RV6EshQ!1Q_LRo4GPbPz#t1fu*vaHr^bS8v;jtWxXJ&6h zi2(i2l)e9YKz5K=sb9xMFhN0PzF1)2^=;o;3a~*@Of}kJGho7rM@B?c{rMe}D0Nj9 zA@X#u3Fex@vfUXTjjSs-H7kW0QK?5u`#IXikV+=>nC8z2pR4otWuS{2(ipAgEIR!K=q_NK~BaTO1jxn=E4&8lQkwxCK?U#ApHH4IS~U(V{? z3-1X?rne|sz8*psMP~dWcmB>q)cud|=$v0=0>dLkgN1jd|Dz|xTLsA3`0pD(fOc#s z8Mx(}A?mB&^7ZbQCI9t25wBUyEiR9yQM9DVWlCWQa2w2RVE;yU9hu z;^N}5mvUcEk0yXO(hkN+6%Fn~?!u;)cghvWrD)(NYtjmmkUFn<28Ig(5c z=0Ef5?|eL@CN@e4GK^+UK`fz})Tnx!mMvlQ2Z)BO$@RZ=R%u=jy&~(IQl5d;G}mLX zB^+c-JL#?=73{XC8LNIoNUWWLEdOwP`pb!H#JJ2#QLzq6V>I%TPyx~ zowwves&&Scfv!d=Db43@U$+V0Q3Im{tr57RS4$lc2M&h|wXW@|5nZ*HFe$^1;X5^W z1G=Gs$FiWj92FJ~O>PElK_~?8q`dj|V)TGU-3Sq?NhXB(O#Mn%h$w%<;}4dX__F#);^>I4BaQ_q z(!|xO(QrtCG{R^=8FW+p0)xGvEeRGxNZs>G&`v#BP_C7a763$Ay7Wu)gdXkh=n^?Y zUW|@uQ(o9bbE4JwmHRG;T@hE9WeC98PGVw3-|8;^Cfd#@qx8f?9;Ti)l_|-w@BF&U zZUdh%^hv4l+mOC`kt&Xp8F`v6)y9U)H+Nan0k7Z`_AXn)w%K@-y!EC!n*rxN9>^O< z4Vek}B4rJc39ifi%THn*mH^a1qMXc?{}RPbu=Y!ECKMPx^GH49ltb3QszHQ?;WQwK znFF8~^s0BlB&M&KhGk#N;r% z=&~rpGq{FLIVV3*==tU>97FjzfL@wT4&9BkZ2WrfR zeqX)#oBDRDQ|J^>U!maSuL6rZ#;dGZ66z%f+q?zI|BepBfG%-}un%f^Ll4_$O2X6* z@Jg@a7U>KupDAUfX+ey1sQq2tb%jyFoi^AUc~BsZ!zk^^KqQyXBHWn>LM!Z8htqW7 zm|oUveyNynv4@|^`4S`8_|0`1(hu^J%G?(6xLm+>^sT_hR&$TxAwQ$F>K)$_0V1~v zW$7#FfPFBtEmaFObJk@d*+bnTD&_gZTJ1fDPIWBSIBe?@s9+G6P2NjEOXjI%dJ=D7 zoSxCWUCE_V5V%k?vDckZjJOJz{i|X0ZuSW2E@&&pw|iNbdU*WV7dOXNW%S=6Q*Lqs zPh)F9L}%xu?k|WBNR*Efz!sBbv|nMapJ1He;V!?0=SR8UDbE>bd|rs

    au^1 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

    e5Wz%(-OhTyrORwqrmY&jJO&!%9gpRzT#vmn$ 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 Xt)%a%c}TV2fS2|){i_96?mqlCNFKes diff --git a/mssql/.system/instance_id b/mssql/.system/instance_id new file mode 100644 index 000000000..c04def3e2 --- /dev/null +++ b/mssql/.system/instance_id @@ -0,0 +1 @@ +42e93c96-946a-448e-9d1f-182c8ccc5005 \ No newline at end of file diff --git a/mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Crypto/RSA/S-1-5-21-4137405425-2340124300-2890394999-500/42e7704ae40b0d75de00736cc66b813a_67aaedee-1e4a-4132-b8ba-5397448c74de b/mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Crypto/RSA/S-1-5-21-4137405425-2340124300-2890394999-500/42e7704ae40b0d75de00736cc66b813a_67aaedee-1e4a-4132-b8ba-5397448c74de new file mode 100644 index 0000000000000000000000000000000000000000..38c6581adbbfd6648241b86b2703fe28fc4cb5bb GIT binary patch literal 89 zcmZQ#fB-`%jf?WlOfJeV&QB{*2oCg72u>|3OD$6I4F+<8U4z10gH+rSb8?&#le3*u Ki%OjH(is4``ViIt literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/CREDHIST b/mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/CREDHIST new file mode 100644 index 0000000000000000000000000000000000000000..ce6eac20739851d050f1cff4863d2c19730f95da GIT binary patch literal 24 ecmZQ%U|`S@ah6x=I_%jM&MLAuDmV-%!~g(0j|CP0 literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/S-1-5-21-4137405425-2340124300-2890394999-500/48e880fa-19d4-4fd8-b209-07cff1308993 b/mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/S-1-5-21-4137405425-2340124300-2890394999-500/48e880fa-19d4-4fd8-b209-07cff1308993 new file mode 100644 index 0000000000000000000000000000000000000000..874116296afec1737116075da74c5cbe6977be24 GIT binary patch literal 468 zcmZQ#KmZd43x-r6wqP(|NMlH3&}A@Wuw+PKFafemfFdbC8C`}X1|y)nC6HynV9t;X z6i)-HGY0Z3fTET_77VZg85^LS2~b)DCJCjPfV85d;@*sgx)p7cR+?PcuIJ<+&%nUf zz`!7o#=wxszS4cd;_WLKH>4OJuFy)J(Y4$7$Lm)IrA#aKn#T&PkQNB4-IJ=e{r9t% z>Zt;p@j@BZ7Qc0s6L<0`dS@o|3bb|{oPLA@WSJYi%e?vdWwbLHCCom@}lulb*aRMfBrQbUd(0IbGP@rHcEdYJW)z+51Xr9#vS3& zGVTbY;q{pqcce67`>rNE!pL3y>GGxMdZhik!$VE?I@5cZ$8syib2uKi88g!)^h)~V zb6+d-^-GzL->1(@R4=Uv2oU%`2u!|*W6aNW``=w0r1^YUe1G4U$5-Ye=bweocl+Pm zGe}Ey>6uiYIiI~ds{2N_|J9K}Y9B6d$!LCi%>PPh^Y^Aj{ zU$^;5Ii9MM@$>pwD|5%{^LBl)so(jdX?N6v@w+osG|udt6Y(4G@P+Yy1nTSj~T=wtB5zmW_Fd^pu_*-A=h{zyC}< zkCR!s-?{O+|2r~A^H>sJeXy=yPwI|xUr)?OUT^mg(!CEn_UNf6p4w5c+~)CA>uo;z zbNc$}>tEc&cs9y&SMPkJlh5KfkIP>JyB@sPcqR+>$~ukoGM>B7p1*M6+&kwZ`9>J~ zXSN95QF12tPpto_xV{*7_5SIV*hiy&W|eA+aKXZ6Py$JTl5pBVRSZ?^aC^!2va(y9A-W~uSsTyEy! z$HO=5pI`uBffM0oO(P`M`5hD`Lf=k)069Ma(%Ryqm62| zTB&!rj`l8%`k7UBU;E8#tgk$O`SVu!gh#mTZu#a@vi;=v_G|4{t+$iEUR|r#Zs|at zzv_M6oVRt_@aehtM!n1V)%$Npe&u#Nv{IUu|MLf<`Y*qJZBW%u@&81GqY~~25FkK+ z009C72oNAZfB*pkw^tzlo^kAlbZEQ$ULD~|iAR_^<@?Resb5Ro-a&Xe0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U mAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!Cu1Uf^$}I0;Sw literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/1b42c59ee5d0b243aaf792ba47169816 b/mssql/.system/profiles/Temp/1b42c59ee5d0b243aaf792ba47169816 new file mode 100644 index 0000000000000000000000000000000000000000..af94535ffcccdc58cc2e7882be7148f10ea4456f GIT binary patch literal 65536 zcmeIuF$#k~5Czb233vhVJRT*G!p2I{YiW_gc$C~I>X1N?)T!PS`sX1A0s^O9%8+BZ30t2Q&L_uv$-uR4vgeb#Y&6Q8}m-nb(`fB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs Q0RjXF5FkK+0D=DtY#QSfI{*Lx literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/1c81b699afe567302ac6ebbccfe58faf b/mssql/.system/profiles/Temp/1c81b699afe567302ac6ebbccfe58faf new file mode 100644 index 0000000000000000000000000000000000000000..f81bd84dd1e3a624d5110c97719631242d65c41c GIT binary patch literal 4096 zcmeH^y=nqc5QRrg1hFw-kwU_j7Gjk`tP~3+t*uquA^{OZ3m+oI7J0Nhh!0@lcb0qM z;u38FX=dc?nRDmIyJx5C!!a|n8u+f8<**_vpJrWHHA?mheu9Q7p`J8y2ERDyfF?Kq z^=O~=^hlIHfD=g{R{aq?lSHlANupcmk3_f81zLNwZ@FLOgOE!%LVgSknd)x=()WV( z<$H`^XX literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/1e42979f514909df4e55f88bc5f33d2f b/mssql/.system/profiles/Temp/1e42979f514909df4e55f88bc5f33d2f new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/23d74814f69031dbc0ccc2df7136e49d b/mssql/.system/profiles/Temp/23d74814f69031dbc0ccc2df7136e49d new file mode 100644 index 0000000000000000000000000000000000000000..439401d7049061a8cf70fc4a7d2f954409ce6997 GIT binary patch literal 4096 zcmeH^y-EX75QUGwAT|+vfD{%X1S<w=%cmvGPVyodMus+VH(gA~t`$I1CYg843E zd~=U$yyIK-HPTp9z4DCK+CMq*-TnO;I0M<--vz6DfOp*{+m_2cx#ss?6FuuqAM9AO z>x-Ur$v>VoJKdp^HFj_A&+|(EUv=dU5r+byKqwFjgaV;JC=d#S0--=C5DNTFfggjy BAqoHh literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/2aa13217ef04d399db1f5bf837df6133 b/mssql/.system/profiles/Temp/2aa13217ef04d399db1f5bf837df6133 new file mode 100644 index 0000000000000000000000000000000000000000..dda426bec11b35010cfc08f5589ccf704ebfd27a GIT binary patch literal 98304 zcmeI%&ud&o902gy*5*fzWfheOY8M30Ma3#zHJ)q5zd%;B=tZdXA|=sBETuAh(slbKi&a`FQ{Cc>Hndvz4ZOXxYj0DfQXh^I+VReqMK}SM$0{ zT?XDdQ9Medsn-^p_^mVT_AB4syk4f>zT!W6R^{0a=Fcy+9>;p_E4SM%JJSTJ98a4& zd*3(metnfeSNzkb*c{nPnrmF|uO+{dL;Ad(KjnL{`@p}SZ!g4qbk`R{e^`zy-_Cva_2z62bn|VYTBwrjoO~-= zH+SA^EA8)nT5~GtUQ6)-SA6SW{Aaq4IdVw8ecJi|(d_f>{BvcrX+3^v{ce1phVq{E z^ZV4s5di`O2oNAZfB*pk1PBlyaBm2tzh}JnU^sb@|6X0{Q9dtq806oBjb?vabZ;10 zB>@5i2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 i2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjY$Q{Z=vNbc zz+mvFv$=OUbMKk^GqYz-ujh+_q!sYCD%E(~pj)LKymO><2;LLNEtzXdt7&{;qYpO0 z9Jt2wJm;9e@jB>}7~-AZ0HcDt_p;zU_*22R;IDAc@x1EcqTWrh`C5t>$>ZewIKlik zV|@1?BfR4?9ciK~HM-%OEVVzg>j*-mB6b=U1BP zUXR^c=~h$TqG4@yz^m?Sk9Tjod!D16-@)_p%zQ@a|EsRNL&Tv#C=d#S0--=C5DJ6> Op+G1Q3WNfGSKt#-9wY_; literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/30ebb5aa7a83a397d7be7db38866066 b/mssql/.system/profiles/Temp/30ebb5aa7a83a397d7be7db38866066 new file mode 100644 index 0000000000000000000000000000000000000000..339576ff2f941e877d88f3ad939b8af1309b7329 GIT binary patch literal 4096 zcmeH^y-EX76okj02*F0d2iQVFieP0C?8L%gn>JOlO<+lsY>~%EVPWB8`7jn1ezV*Q z7lT?@*qpOW=FB}mdv|iXXt$N51Mqq%)v%-Lex(c8HA=b$Z%IRY;hr*T2A?@N11F#b z?(shFxg>FZ4BknGuLJr z-+jjzc7CTD%{13iE1ucj_>L2QyWih{bCARH1Mra#VE26&Kh^R~?)iGJjh=Y_Tx*_I ySNy+Ccb|JavcI0ovw2s^|J7ICA@Xn_90&)(fp8!k2nWJ}a3CBA2f~5BJMammvLFut literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/32f4099bd7615b9e5661802aa7f5263c b/mssql/.system/profiles/Temp/32f4099bd7615b9e5661802aa7f5263c new file mode 100644 index 0000000000000000000000000000000000000000..68445f63694bae4944a6a612161c49b447719eef GIT binary patch literal 786432 zcmeI%O^X~w7y#g!B$^#Ihb4rt0X2hydJu_N5quhkx4ygTsiJ1sO{soPjORZ+w@8D7 z<-u}L6paQij83#-N_9TsUfnGnJ{sk(R_%W%%FF)o?4PgeBMys-@>4%skw_np?|)mo zzkZe}71KEAv>D~P7(91$Z|G8Y=EZgiJ%PrT2S)NbC^SRaGvVOMmx+8Aqbw`Xr zcaO!oqoj`0Q+0X7sNMPbi_c=}QTE@Cr|RjA*3YtB%fnbtdFHBTKX#_hPU}#;v;E$8 z@_zlA_v5$q`x4#rC;|Zj{|ABoJsfNPbUeTN<|1vB_s!zYohK$Iqvr3$kH+)wo?WDT zNtS(Q7EZ?V?=KenpN5a!DnSR+!L*c(eOa}BW0hQ!+WO?RYCro`<-9kFPc{Em zu;oDDF{i{uFwY%5bkMg`dvqz|uh^JA6<|OfB~FsPpzgF;Mx5r=Q>1?4I9f_aL!YLF%vXsPP`wdE0&WO6Od}dE42n z&)em_%X_8lKRs`=;nnKA#=6Qimrwtk)uqL)l%L3_eBPRTPK@&J)+o>CZTqcjH*UQD z;k77kVp(6@Z>{?;r6-50`)^(S<7Za&SKqt;Wzj#y@3)A}3nT~-AV7cs0RjXF5FkK+ z009C72oPul%KvAa`y(Ac%>S>BILY~lX_Wu&y1&`hD@e*xwG Bym9~l literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/3381e0697f2e1f4d0a8ec84906e38be b/mssql/.system/profiles/Temp/3381e0697f2e1f4d0a8ec84906e38be new file mode 100644 index 0000000000000000000000000000000000000000..89cd80135af8a3d7ad54daef21da869faf860ca6 GIT binary patch literal 262144 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 zKCa8d{V2!FEHjsWKe{=|Z$7v8c=CBEe-V5+uDXn1^hZPd5* z|1Y|KW}X%T1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkL{FNeVIt}MUuoqyJ5dTr;v_(uDDPwe3H4_20c z@QuYbeW-n_9d9qUGwpmk)h@KR+vVZx-(Oii_RYmMb+7%$v(&zy&C&Yx98&XTzsBt&$rjwZ^d6HInH1kLzbJoq`yb}`H#1Q!|@-i zEAM=??->7VI~r}4Ep|5Aa=TbEqwLSoUel|U|L&-2E(a<-Bw{sR=|kvnl?W+Mn^~6?7q5 zWpbss{Hr1y@S`y%6~}2>TacTEIHqP zK595S^ut$U99X|>*Z<XFQrxTmZ5K<+XLPA2y7KalPKRKgNOc!@*VFAFeFF zkmF(dUt|4F#F&}O{@Q;eN;?^4U5HXHwAaIR^Qb)=W8;g%)waHOe!n6dN7v&K=hkr# zg~lqc$8X1YbF|`_ZqviA4=SF1+^x0vjzlj$+McZ)*}hv{k8#-2aA@UU*W=7;r5|bs zhTZ!sy;b`jX&cMV6EptwpZR$7oT*#oJC)y%d91EgI>)Ok@n5!Q-i5Y{zmJbS-im+v z`kryTe>nO?E+6h7{>^3Qc{QHQ%>DG3U+<3xt3G*5E+;CTBjMSh4tdA@?ESIFpMKFF n$BSSrYV&$2H(aauHt)>yqy4|IdHabr)~A2Am~n*V+VZ~vt>$Ap literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/42b29843fc2cb7da8c24ad9c1610bf0b b/mssql/.system/profiles/Temp/42b29843fc2cb7da8c24ad9c1610bf0b new file mode 100644 index 0000000000000000000000000000000000000000..0e087dfd3e019c2d8a66e4b183e1f08a80d811ec GIT binary patch literal 4096 zcmeH^y-EZ@5QNKL5EBIh!wU`MP&`n~L{MW*ClK!r6b?oA6hi|a!N<7JN4dbq@vC*_ z7!VXAlkTOqyS964duosRs(T}UIaZFTV(f_K&rUkeXaNkd{XgM_!Mp(>s>TwgY8_KFXZ|yXOi5%&M^Ni zkXIKR0N2MlRMM4hbjy`=uAv&;=}`~rw{_C4cC^Qpn6G03u`k|j1lBz8v@jz-TL7 literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/4322133a39682df51341c921988ba43e b/mssql/.system/profiles/Temp/4322133a39682df51341c921988ba43e new file mode 100644 index 0000000000000000000000000000000000000000..bfacc733e1f070ecd9af8a1c71691dcdfe434f27 GIT binary patch literal 65536 zcmeI#Jx&`z6ae6{jYNaQmRO2}YpRr~@da`O3 zWtVwRu@RQiAVu&^^ZefYc;*{xtu3Xt@pO4Po0Y-3UAKd-G#L!bXe*Xd^NdZ*n;d3+ z^fdmstM~J>t&VGd#xl>IKIST=e3>rB-S^klmeOrwU6U9yiN0Js%0Hsq-aWMK_kMTR z!zjHNZel+fPh-@kt*wc3XFQ2>XUs)^5A)nvsqtfYWW0`Xi(i}bulGl1yQBZ-ETI2h z(avW3-n@#Pjy=i0jy=fvt9mod&reUktNwPfYdhW?b{DkO=JEOY{yxXOmQlU8CgRrA z{^R^vE+s(V9SG#}df!oRr;Dqm`+v&kNXC8R)d>(FK!5-N0~*l6KrSXlUBeu|}qGvN*nMQsF| z-7uM*>?4=SaC10D0CL174_Sv8i>Bd$)9UP3)#Bpf{PL5(OA2SPpCr#%r9 zPJhjpiJg zoiq15+@0+%4oMwAhPY&bn5?L$PoPFtjU}{*tJ9>HP)`^!2Twex5JloZs7L#>r^!Tl zo=~CjAQZ@rKx=j!=n{1j=rZ-0T6?r_vLD7xmrLhdo;W5!^^t@0x8VBpJ=$dDeRMFz z9BXX(o4$-6d7^jM|8IyY;Y0Hgaq|ac^}UNvH9zBfp6}JejJ_|h!kF0(do1~k_?KWk08?B_2Z>W8Y$@x=?3X8=}kkd}0$Cj%MDL}s#(m2A97c5;xDT;wJXdCA91t_*s!)|`RHp_tsYPw-P?vhtrvVLV#H%!>2~BB6b6U`nR(3NgnM(9WShkA#GF`N;MWE7(r!&t^K zo(W835|f$2RHiYV8O&rBvzfzO<}sfIEMyUjS;A75v78mGWEHDf!&=ty3%|0S4Qyl+ zo7uuvwy~WZ>|__a*~4D;v7ZARi9{2eZLJ^*e80q=QFGPtNEqaWYv0}%G8!vu>gozR-Nt!Hqij=8> z)M07Trc0k8W2VemvSxcRdybsBa_7mL@1^_&3KlB-a*?9NikB!^s&tvM<;qv6SgGfjnM=7(C>01wX>D;Uh+l8a-z0xbYJvPMSPr>a^)IX3m;DXYRcD3l=U~ykzOJ zzhUF1&0Dr^+rDGxuHAd~?%RLh;Gx4ujvhOH;^e8*XU?8Gf8pY# z%U7;myME*5t=qr-{>PoW_wGLc__x<5KZJkrqwm63kMqxe$4`HH+<27Uev}OVRN#Xr zUi{{XU7HFhpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Min!|3=`euOEE%v!QSC z`4{i--uquZsNQ|_`41nakH3GIp4tB9Gn*8C(6`|WvjPezpnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Min!Qv^;# ae9D1s1r$&~0R)L`=Na>@?6d>Rq7g)Msk#(Y|>)jk_+FF1h^Rm;}{l4$|L(>+|;*kd==y z!~#pKvE^^^GJfQV-d)d6h$i7f^KIhp56J3!7oTc=#`iqmE5)AA-{kk~@#`k}ZGZ_q qlE0esvwl~||LP0xV7WP94wwVxfH`0em;>g3IbaT$1LnZ*4m)-|Dh3}7=cU8Uu`O8dAe5!5FkK+009C72oNAZfB=C90u4{-00jU5 literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/7bcc896c1f2df666851a1f73c84e9cff b/mssql/.system/profiles/Temp/7bcc896c1f2df666851a1f73c84e9cff new file mode 100644 index 0000000000000000000000000000000000000000..41d173bd02999c532b51ac55943ada4e2b743cd0 GIT binary patch literal 4096 zcmeHDyADA?6dcb)G$cMip-_k@L_{YFB08;#tB~9vaSNZJQYn0t&rz7U*-bVCg+g=R$Pm_uA zJaK2zB&%K^8ce*_>@3hF>Lk!*>I=2@Xy5!WiCQj~&bj>Pm;}|Q4$|L(>(h7i$;w9< zV1Xqz*z&h{89(tvZ`c3FM3wNNdA;rK56J3!7oTc=#`iqmYll77ykUd`dg!3dEKY9( sjOml^p;O(OzSomRnilv1!;SLUi+6Xqg zVKO_nk6dQFIi(SR0&y(@F loZl1jzxu*ESZ)rO1LlA^U=ElA=72e14wwVxfI09R2cE{m9|8aX literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/8129f518dd51573cf4133f18ec1b91f5 b/mssql/.system/profiles/Temp/8129f518dd51573cf4133f18ec1b91f5 new file mode 100644 index 0000000000000000000000000000000000000000..17a6f5993195b1e6bb69658096074c704d922eaa GIT binary patch literal 65536 zcmeI#KWkG_6aes>q>!c16kF^dnAQ5Pi{NH)5ZwF*#)1JC@f#SNMEnrlTpT)yo2z3N zo$DqPYH%;lyu5QXiP6PH+TUAF&N=tq_ulV@8&XPhT^MfO`?OwKC)G*Snw0vjc3GK; zr8IfQUd-!vv)-AGUz^nH`FS0!HT{fbl$|=}Dy2LcZrqyOzqzVXCXaE_Br&ERy<9xX zucBOiJFTkc_0#RQqqH;}#`9#n9HYinbM@lAGj7FuXUs)Ew)4HS(!`zc$haTl-oG8+ zee!*Edw%r)oCWl+Et-4Sx|>^3H~xwqW0#E?bnDrrWURk))9a|&ncdg7r{Al3cd|7b z54-cX9z}EU`5wf+mQJ&8y@<1GO+M%Jg|d_YfwL@-=k=f7@p!oL;mzdtDbJCNvu9vE z_v@ES)AQ=-%Ei^`THVjB=1hAxjs0n{l!Ght^{r0R7+uYJ42+Qdar8H$KDf4g{QT_S zv!Cn5{LBxpH|u4-d!xzQaWId!=lciI&+&tpzj(*&kK%qW%iFyI0EI>5}i?;y5`00t5)0FM-Fy&7Ftqr8AEIs~HE8XDq$=-#R{D zKHio90RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF P5FkK+009C7{!QQq-<4W` literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/84c18e096493bccd90c998b08df6a21d b/mssql/.system/profiles/Temp/84c18e096493bccd90c998b08df6a21d new file mode 100644 index 0000000000000000000000000000000000000000..6103150db912e6de6af115e7053dc0d7494201ee GIT binary patch literal 2129920 zcmeI)36x#sT>$WJCJTWEGO2}9THp}~2_z|lR2#N32qC2)i6tooT4sQ-ge@rvSZZxw zDO3hpiCsbTI0c&4f-Uw$8$=HetrgF43F@gFMI9CqDGdP;kZt_F`@S3QyE6k}DU`$S zJLk^-{=fC!-@EV5Tjop%s5uc6-@)^z?GC9lQEE+b8yPwol082exY0 zm*cx*ddp7N?b217f4uQS+q|;zJ=?yr@%7`M5T`q8(%LOP{ta7quK!ZU_f36ecbDv+;gI`r6 zg!2C1SzFCIub*m5+TX7B`=Q<*UZj277illY_x3hMPaSLOzyC&e>OB7X5RBK*upX#yLCqRGz z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N 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 WK!5-N0t5&UAV7cs0Rpd%!2bhZ{UQ?p literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/8e7242dcdb663928bc35e846ec723a6 b/mssql/.system/profiles/Temp/8e7242dcdb663928bc35e846ec723a6 new file mode 100644 index 0000000000000000000000000000000000000000..060e114b52e81cbb3d2ef40eaa6c9176708cba8b GIT binary patch literal 1576960 zcmeI$>6aW;8NlJ&lWEd3VVoWaBrHmRxNmH(L5-lGA|i?cu2CYOprE*mIH-YS6c~=6 zpn#$*0-_NWcLn!-;S` z?biO)v(0~N+lJ70m(f}-`-VOWeIeb^Hzxgn zq#qdi-f%pdlD;|V2POUB(8po^Ly~@I8T8NB>Y(~OI*cC%&&Pxw=RYj;J!P(U-V*vs zXm0OGoj3*+PK?P=X{wFh2bJ*7N8=}(Bg|7%NmQkm&J zhck7iC&uwJ-4D&~DP^BJexEx2p)kIxmGac2KfSE0^Q^1$92K75`N4dDq(_IoGN>yY z6OMl{Gw4s?V}skE^wX5%lKzaOKQpX5TcUptL z&x_N``r6mm{^W3e4V#E|Z>yriF>^tUJd9ZA0+=@%ybok@RJ(l1K- z#Yum6(%+NxOOpQHa6KOnnwxF6y)TT9?;qYDdUIZ^4KE+)`fQWh`^%0EmzMT6`N7cR zJRb_Zo#)}jzfHz}IP`X&2j-^pe57pa&)?Cu`u_9MaD5mp)&9}4sUJVwRL}RzlIy_7 zlKc2_(l1Z08y_$8b=~>8?kAG|$)xW}`V~pPGU>aMz9;D`Wn7PcT#x@#WwG|f+CQB* zTvZnO@uP+Myj)%8YM-n9n()3QzVBKsv;FwtY+d)-GV1$iROfkB_lj)a;SBqCKc##o zdET!JeKf4|T%Wuj`)soA=aSdS4PpLaxbNH;dR+JO$+}-i*1aiN_vSEvT=$mHxfb-xmNT=%wQ-P@CO??~3YGt3{?{c7lO-Mf-??@rdeCt3GvVg9)8 zy`jf-zn-l7jqY{6xw(GE*ZJOL-EVg1OFMo%(_TMMzr209-xt;$59{Z_Z*}Xo;|J@S zvt!}G<#znHyS}mS=S)8Je<#e}e2!?Y=hN}`clV2S{BTgu$M1I6?Y2*^=Q}6!d@uCr zePKHP_q*PHzMFg=S-5+-y2z^xr1^cS-+!(*Kb3KZf2ouQ8NACH>E#$K(G?(*GKIbZc)4?P8Pb zf93Dj_YDC81PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7{$~ZYmojJ$etYxfAMGFU_t~<1*SgZ= za#Zu!(mdMV?`$6Jwy}BKcv&f1n|=E@wt4L69?h<7ZomB7w*IVAj&Iub=F!gipSHQ? zm+gA(qutiNAD7k1&l|h_e%*fmZoky+59s!r%ihWOP2K*$Za<05m&41-W~> zrQ09T?KhO&YyV`jKf0_;4(-sgI@ur8&3jncGx_~u+4V2u{Xl>K0RjXF5FkK+009C7 I{u=}y0U^y=QUCw| literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/9d3bc5ac6d976a983b53e8e6fbb3a24e b/mssql/.system/profiles/Temp/9d3bc5ac6d976a983b53e8e6fbb3a24e new file mode 100644 index 0000000000000000000000000000000000000000..ef4d7859fc1717a91759eef392173a5e3bf672a2 GIT binary patch literal 12288 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 Q-rp*>M&Q;6T>laHKRKqh+yDRo literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/a248390ce868079187416f934759fba9 b/mssql/.system/profiles/Temp/a248390ce868079187416f934759fba9 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/a2b2d2c1e3374a928a751febe0395fd b/mssql/.system/profiles/Temp/a2b2d2c1e3374a928a751febe0395fd new file mode 100644 index 0000000000000000000000000000000000000000..cb16554b81fc130e552f75097ba9ab89c69b2870 GIT binary patch literal 4096 zcmeH^y=nqc5QRq*1+huM!a~H-Lab5*E5$;wwYAbM5?E|jf)A0xB9E2_@c}IS&T=nY z6q81e0zM#yPlteR}e$Pzq7xjWzvxC8EhJKzqu1MYx3;10M0?!f&VI0IoG9uNQk literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/ae5574d6c15bd1a63341127b45e498da b/mssql/.system/profiles/Temp/ae5574d6c15bd1a63341127b45e498da new file mode 100644 index 0000000000000000000000000000000000000000..aa55e3a1a8b2f6bba000832da49835f51be27631 GIT binary patch literal 65536 zcmeI#Jx&`z6ae6{9f>9qTgDPnT&GHz-WT8qk;_DaBj6g*aRCm%0qizaN{(Q3PXDsvV>0_=^%FpRy+c+?R)bob~^SX&mH?A=dbF`G#B31QIq0r@tIgx{NjPru%=&=SaqV$G0)rd={$be?vfPD@FE009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs IfqxPB16?f|y8r+H literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/b0be8059be14de098ad41f86831e1da1 b/mssql/.system/profiles/Temp/b0be8059be14de098ad41f86831e1da1 new file mode 100644 index 0000000000000000000000000000000000000000..8f349a6d36225b1bae386b7efb0dc6e50309b9fb GIT binary patch literal 4096 zcmeHDyAA`}l`5zs6 z#eHKf65cdlC+iiJ rsgd;6oS#)bZU5>^zr(mGU<#N5rhqA63YY?>fGJ=Km;$E2ZwfpBJkTC^ literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/b457fe0369797a89bff03c6e1fc69fa2 b/mssql/.system/profiles/Temp/b457fe0369797a89bff03c6e1fc69fa2 new file mode 100644 index 0000000000000000000000000000000000000000..c8b62bbc09810464f4b9d6efaf15d8b974ea58ab GIT binary patch literal 1048576 zcmeIxzi*TU9LMpKkTfNd+++-COk)T!#+cI>LQJDo1cBCaQkC+`k*`E8b) zr~TEs?}@$hOWj9eZ~j{M7h>;q>pmKL`?tEk82iTUy6=s>d#CREVsHLl_m^Vtt=IkK z*t>t${gv1|_v-#??Ctw?Z^hpFtM0GI-u%1nZ^XXwuaMRxAp$L75m%Kuo{s(~`s3(NqEAN8M4yU29epPHZ1ktmv(cYL&qaS8{YCV-=r5zc zivBu!KKh&Jh3NCq7oxw7z8HNe`f_w9dNKM+^wsF4=xfp6MPHA;5xpG!ee@5}KSuu) zy%PO%v?M@)009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*B-va*vSHZaD literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/b71273b08a354ee7e274d621bf431e90 b/mssql/.system/profiles/Temp/b71273b08a354ee7e274d621bf431e90 new file mode 100644 index 0000000000000000000000000000000000000000..882b1bc085d88f0910b374fbd85b4efd08e11c23 GIT binary patch literal 4096 zcmeH^zeNo1J66-MQUc?&dq`42BI!3-Du6>Jp8{>?>^%U8AHHoMuh<2KUr> Q!hvug90&)(fp9?j1URWGhyVZp literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/be6eef1d8f9b5ffbc7282050e4c34197 b/mssql/.system/profiles/Temp/be6eef1d8f9b5ffbc7282050e4c34197 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/c33e2c07b053ed06080e18f9cc59f77 b/mssql/.system/profiles/Temp/c33e2c07b053ed06080e18f9cc59f77 new file mode 100644 index 0000000000000000000000000000000000000000..71dd0225e87b8f2a0a9915e5f2299bc011c9b64c GIT binary patch literal 65536 zcmeIup$-5b2n9e)R)fLc_0NUwW;Gn!8|;mAE$*}L^|PHLqUTr3th{Si3;_ZJ2oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly XK!5-N0t5&UAV7cs0RjXF{4H<*<7fcc literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/c3eca02fc0502f7786376d0cd281d604 b/mssql/.system/profiles/Temp/c3eca02fc0502f7786376d0cd281d604 new file mode 100644 index 0000000000000000000000000000000000000000..1651e390beb2f367c58611a5eeedfae115f205f0 GIT binary patch literal 4096 zcmeIup$$MG6a&D=UI=Dm0xT#NV-Mudhbc&|rfKS~tX@+@%sfuFeRnH&|DO;bK!5-N Q0t5&UAV7cs0RnFeeByuz#Q*>R literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/c428f4c0244fbb9b4a888ddfe25fcb03 b/mssql/.system/profiles/Temp/c428f4c0244fbb9b4a888ddfe25fcb03 new file mode 100644 index 0000000000000000000000000000000000000000..54b448dd4d400a8f9a2f54d8a18aaf115ee180b8 GIT binary patch literal 65536 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 P$XFm_fs6(Izbx=St7tt4 literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/c7fff830bc209b3cb2d2a9541c61aa6 b/mssql/.system/profiles/Temp/c7fff830bc209b3cb2d2a9541c61aa6 new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/d1136286d24fd64a5a957a3d86bc0576 b/mssql/.system/profiles/Temp/d1136286d24fd64a5a957a3d86bc0576 new file mode 100644 index 0000000000000000000000000000000000000000..2e738812a9454c3e3ef86fb80ab4b815879b61a2 GIT binary patch literal 4096 zcmeH^y-EW?6opST3Stw%2S{NNL;?YeU?&zzu(M6&ZW9Or$rgDG%M>Z{Pp+G1Q3j9rhFNohD AivR!s literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/d38e57dc354641377a0a21444180bc92 b/mssql/.system/profiles/Temp/d38e57dc354641377a0a21444180bc92 new file mode 100644 index 0000000000000000000000000000000000000000..d5a5c6bbda392454be18592d2889fdb36ca16dde GIT binary patch literal 4096 zcmeHEyAAqzAVgz}{S1{#;iG)c7G^g0CN~6yLUYb$ z_MExrvFFYXS8>t=kRxt+AflHwvp3M7SB@$4h`Zx-FQ%H%A~s%lP$SAjOsGclG^fo# zagj(FwCR;E5iJIut9KUg3V9sxD*2UMb2M*$nnWEJix*s+I8O)Vrw-!ZjN`L=^yw9k zFu(#!>~Q3>cxgZLM0eNs4@8~trheTm^#}B-duN|=zQ@-*@3qAqYi_v7HeI93KYYkG t0>;!yd#Km<`+1@NS6#S+#ioEMU<#N5rhqA63YY?>fGJ=Km;%2k@Bm&;Aa(!% literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/d68589df980066c61cbc6b6e0781bb b/mssql/.system/profiles/Temp/d68589df980066c61cbc6b6e0781bb new file mode 100644 index 0000000000000000000000000000000000000000..08e7df176454f3ee5eeda13efa0adaa54828dfd8 GIT binary patch literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/d71268d41db313db8113907726e7bad b/mssql/.system/profiles/Temp/d71268d41db313db8113907726e7bad new file mode 100644 index 0000000000000000000000000000000000000000..b6fae64b5ae8a0bbb2b6353312653b6f4edc43ef GIT binary patch literal 4096 zcmeHDyAAW;s=8b{)RyNPi2ikN=}dR^CAi zBTTTsiqGg}{KOOeyS~39ii8i%*NMA7Agk|Pe5&~w-}8L0EoPWvjx{#eW6XENlMQO* wWqdQBOTXm3cKAJhZ^-}Z3-4gLIbaT$1LlA^U=ElA=72e14wwVxz;6yb0Q`0#g#Z8m literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/d9afcc42ac8e8fa3d7f426545902b6d5 b/mssql/.system/profiles/Temp/d9afcc42ac8e8fa3d7f426545902b6d5 new file mode 100644 index 0000000000000000000000000000000000000000..f6721d8e9cbca1784cca0228387025d38eef848e GIT binary patch literal 4096 zcmeH^y-EX76of~kLP(?F18gB;Ayz3ux*%e()iRZCBZOes6nTskDJ=3>K8!_*e6!pO z7lT?@*qjq4bLO6(y*oR4Su86_2Viq3)v%*#|D|)-HA?D(kEEf!a8DUEgKG{>!3kIZ z_jsT8T#z_F0-q#TuLJr z-@eBHc7Cg&CVJMZX8b05<10@5?tcChoPivkzXaQS0K4zI_^Fm>a?jU$HJbDMCpEeQ yH+v}r3z2jIOU)v%-5{7dJsYm{^aK9YvE!aZfw46Zpi1zpep z_jsT8T#z_F0-q$8uamNlAmMYOuU0bQNhM$ zH%w;t_L0rpaGj(PfE;nj12I_^WpAKCR*ot3h^vc9FQ%H%Vm6+5P$SAjLa0XbG^a&J zevwe3`5=_Y%^+6qEQl+N(;%)gJ~P%F&6^)4am)FN3(ij+lc4<6LGd@^`0PLWWcecu zu)qo%?D#BR+K)WZzw7&3qE2{IzrKI-2V~W~vrjqS<7=Mx(tZajzr>!qc6o;#w0X~? literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/e7c8cf705009960cb96991c9207c386 b/mssql/.system/profiles/Temp/e7c8cf705009960cb96991c9207c386 new file mode 100644 index 0000000000000000000000000000000000000000..0601ef9a0f2e82b181472670aa492b209a58040a GIT binary patch literal 65536 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 literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/f68cc8518fc6f0388dd468caa5024e62 b/mssql/.system/profiles/Temp/f68cc8518fc6f0388dd468caa5024e62 new file mode 100644 index 0000000000000000000000000000000000000000..11b37ff0116919b2d8d77766829e8829b781f60d GIT binary patch literal 4096 zcmeHEyNbe46dZL|SZrMI15$`sh*$`Uoor#SwYAcK2w@ep$Y)qsSom3fjD^L{gnQw# zK`kt7&XIA>-1ErIWW3yG5r7hLE&~Z!5#|3tgRB}$=o1&GNrg~P7zqcDJg5^@Vo#_? z`?ROYMEM7CWzr_A{z*hkyw+?S=r8JRplj48YVFa!*)C2xE|;#jJabHf>Qe{lXTkOP zdko3Se=x!v3#{?W-@Gt>;ECQ{&rgYO!iVNt#LXX&)psu*)%=X_`G2nrTRwk-6$a>` x%kP`!_nFWm`KviU>vx6xuDg3IbaT$1LlA^U=Fpk+#zU=<<}Q7a1-8?6KzK_n`OKk(bS442_j+=)xjJ0UhMK$~}m z_npTKoad7x$RnM67n~JjCE3-3m!y=N^19-u{*Djb7kxKr`X_;&cTc|$V&=OgKWW(kO3Wry6dVxWy4&vJLM~CRMkJr sheWbiKBhuL-GsGfLcP7#F&P0PU<8bS5ikNqzz7%tBVYuKz^@6s0X6I?@Bjb+ literal 0 HcmV?d00001 diff --git a/mssql/.system/profiles/Temp/f94a5478dc3f78f6c45943eda1a0285e b/mssql/.system/profiles/Temp/f94a5478dc3f78f6c45943eda1a0285e new file mode 100644 index 0000000000000000000000000000000000000000..83dd22e6deed220e995a1b9640f11a2ca2485fee GIT binary patch literal 4096 zcmeHEyJ`Ya6dV%`NSX+KfQ7{(VwED;iG?C|wpMWk#nlAdVm~9Lg@qsG=WOB3axYw5 zjD>~GIm2?Cd#Ws&LkqMUL)E}yw>bA&~@rG(C^eoYVFa!*?t^%T`v9V^2{*_s!trG?*-Qv z-|XTm15_ z36|*bKTe7}jp&m+)~uiR`$B$JUw8-0%>i@3954sW0dv3{FbB*5bHE%h2Oe|a0tWFQ A?*IS* literal 0 HcmV?d00001 diff --git a/mssql/.system/programdata/Microsoft/NetFramework/BreadcrumbStore/Microsoft.Diagnostics.Tracing.EventSource, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a b/mssql/.system/programdata/Microsoft/NetFramework/BreadcrumbStore/Microsoft.Diagnostics.Tracing.EventSource, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a new file mode 100644 index 000000000..e69de29bb diff --git a/mssql/.system/programdata/Microsoft/NetFramework/BreadcrumbStore/Microsoft.Diagnostics.Tracing.EventSource, Version=1.1.26.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a b/mssql/.system/programdata/Microsoft/NetFramework/BreadcrumbStore/Microsoft.Diagnostics.Tracing.EventSource, Version=1.1.26.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a new file mode 100644 index 000000000..e69de29bb diff --git a/mssql/.system/system/licensing.hiv b/mssql/.system/system/licensing.hiv new file mode 100644 index 0000000000000000000000000000000000000000..b94e22df3172c335b3d43547628f8cc52efa15a9 GIT binary patch literal 8192 zcmeHLJ!~9R5S}w}d`b9;u#13%bOnmiSlQp(T?&Ya?YO|$+#SM&oBes~JNa^J?)EHO zfH0j)%9N>)B^v15(7QnjqA}1=Py`wbN|&!MrhTm;Si?{*yoFzAq?!RyMWB zqhO$5pkSb2pkSb2pkSb2pkSb2pkUw}2AV;uBbV^|KCc~|o}P9#D>VJ%cfY9LiI_T7 zKNu_M@R)7+yEFLaxx0k5+R93Ub=RQV+azLrmNMjXNQo}(ZQ;8I;Wh)ApmkzfnwX)t z=p`y;;FB-Qxf|Ks1P^Gkf>(w6(0v7#1KrGGbZ+u_sFlX-#>Xd!v)wF_1`qld)gSWs zV9X4FXdfNs0aGJbnY-=_0$I0l7tat=-&?^D28_QPhY zBS_(Z8VYCr{xuJWV^BD2(96q5a-Wk=ePyxn!CY-Y;WS}?^IQ7#A)JiY5yzl#j?Tfk zHHN{%E0E<@*iCv#oDS9%-ZA{_zV_tNgB(1LMd96fE%berIfVUZhaX?b!;vvSmmBXHw-?aAj>DtQ zrCh}8CghvJfN|;~?en=ig3S{2_aR4+G8UI0`;cQu`7*{34MnvFIf5*qkbj2V_GX!0 zg^woeIA4~zdyRYDq`$@Mb($p|Vna+aWX~cCTBG&{L-xr2!uF4c>=zsL3)oM|_-`T4 zv-mS}ncsiKe=PIAMtm-|hU^#Tmy%v8Ly&ns9^*kLPtGg*3PxWI*(3jXKlN)#l2tnE z-KK5wsY|yhp)E@By-z(nA5t6rtY!N#CGXY0M*Xe&X;aqiU3vpIYt}OStNb@FY1m(t zKk(mfbO%ZPP`uAPfd8Qf1u_gl72sFzHbj{YQ zuAysM7iR4c06Z?DkZ+{Z+|M*dHy$e4lLw;7fNz@P1yGfMA#rMWXRK;WA zEL!A}CQl-tLj$LB7T=I!ROKuMczk(c1?DWwv3`g-2f88T6PYW&9!XxN=}q)^a33gM z7W?gXL+qsUBKG_3RMsBrA3{H?qpX(K2erIDRLkq&$_H0Isx+oPcx+=NaF?lDpXd&9 VEn2}q!9c-4!9c-4!NA2B_y@qFG-Ln( literal 0 HcmV?d00001 diff --git a/mssql/.system/system/lsa.hiv b/mssql/.system/system/lsa.hiv new file mode 100644 index 0000000000000000000000000000000000000000..f307ac5781b20a2ab706936efdd5a7e61eb68f92 GIT binary patch literal 16384 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 literal 0 HcmV?d00001 diff --git a/mssql/.system/system/system32/Microsoft/Protect/S-1-5-18/User/Preferred b/mssql/.system/system/system32/Microsoft/Protect/S-1-5-18/User/Preferred new file mode 100644 index 0000000000000000000000000000000000000000..fec27ea556141d79ee3571f6897e39bb73b073fa GIT binary patch literal 24 gcmbO>RsI5dSBS@)D3f;Pca1&_=?CgocU)!!0DnFTV*mgE literal 0 HcmV?d00001 diff --git a/mssql/.system/system/system32/Microsoft/Protect/S-1-5-18/User/d01f9596-8a07-4854-9c5a-348703ee814c b/mssql/.system/system/system32/Microsoft/Protect/S-1-5-18/User/d01f9596-8a07-4854-9c5a-348703ee814c new file mode 100644 index 0000000000000000000000000000000000000000..1dc713246b9fa76cbf5406d82e1d7b52d90b669c GIT binary patch literal 468 zcmZQ#K!6km0|rBeGzLosQy?~D&}Fb-NCb+R16d|OwkeR*1nYkO*sA)W#Bs=f1fXXV?+tVYaO>h1BWW~aj4j}iw zc*;@yrz$z>cT;vzkIbzOWcNBhZETrhvoL&1(B7k*Q=eP%Ejp_EFIqv(=C0c>y|Uh< z|Bti7@~vARo%C?ssqt*rWA@AcUnK4d(>FO1^7ySrMfjOnCzK|KD*J}L)w`?tZ0g2Z qzfWr~oHTvLF7jS^)1O+Err+~TgQPa7)p=b{wti7s&kS@AIsgF3NS_)2 literal 0 HcmV?d00001 diff --git a/mssql/secrets/machine-key b/mssql/secrets/machine-key new file mode 100644 index 0000000000000000000000000000000000000000..e4995d7f6b478a8e2922ad5529f3ff8cb98b11af GIT binary patch literal 44 scmZQ%K!D=wlU}Txs#+^7bFRdxFHrTnlHZ)|6={Ndz4LauTzDA)00DXriU0rr literal 0 HcmV?d00001 From 5a8b1ebb973ffa905d72f2ffa382a6af9ec9ceb9 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Tue, 10 Oct 2017 18:17:20 -0700 Subject: [PATCH 063/136] README updated --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b3b9db873..a3eccafd6 100644 --- a/README.md +++ b/README.md @@ -25,8 +25,8 @@ The architecture proposes a simplified microservice oriented architecture implem

    -> ### Important Note on AP Gateways and published microservice APIs -> Note that the previous architecture is a how you deploy it in a local Docker development machine. For a production-ready architecture we recommend to keep evolving your architecture with additional features like API Gateways based on AzureAPI Management or any other approach for API Gateways explained in the related documentation/eBook. +> ### Important Note on API Gateways and published APIs +> Note that the previous architecture diagram is a how you deploy it in a local Docker development machine. For a production-ready architecture we recommend to keep evolving your architecture with additional features like API Gateways based on AzureAPI Management or any other approach for API Gateways explained in the related documentation/eBook, so you can filter APIs and apply security in a single tier.

    From 7a4abf655369ce6ecdd326876e3d92f988388310 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Tue, 10 Oct 2017 18:29:08 -0700 Subject: [PATCH 064/136] README updated in regards Azure API Management --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a3eccafd6..31306fa7b 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ The architecture proposes a simplified microservice oriented architecture implem

    > ### Important Note on API Gateways and published APIs -> Note that the previous architecture diagram is a how you deploy it in a local Docker development machine. For a production-ready architecture we recommend to keep evolving your architecture with additional features like API Gateways based on AzureAPI Management or any other approach for API Gateways explained in the related documentation/eBook, so you can filter APIs and apply security in a single tier. +> Note that the previous architecture diagram shows how you deploy eShopOnContainers in a local Docker development machine. For a production-ready architecture we recommend to keep evolving your architecture with additional features like API Gateways based on AzureAPI Management or any other approach for API Gateways explained in the related documentation/eBook, so you can filter APIs and apply security in a single tier while hiding/securing the internal microservices to the client apps or outside consumers.

    From 6b525ae78576bf30615e58beb64b30f01c17c62b Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Tue, 10 Oct 2017 18:35:09 -0700 Subject: [PATCH 065/136] Updated README in regards the databases --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 31306fa7b..e1781d34b 100644 --- a/README.md +++ b/README.md @@ -38,12 +38,11 @@ The microservices are different in type, meaning different internal architecture

    -Additional miroservice styles with other frameworks and No-SQL databases will be added, eventually. This is a great opportunity for pull requests from the community, like a new microservice using Nancy, or even other languages like Node, Go, Python or data containers with MongoDB with Azure DocDB compatibility, PostgreSQL, RavenDB, Event Store, MySql, etc. You name it! :) > ### Important Note on Database Servers/Containers > In this solution's current configuration for a development environment, the SQL databases are automatically deployed with sample data into a single SQL Server for Linux container (a single shared Docker container for SQL databases) so the whole solution can be up and running without any dependency to any cloud or specific server. Each database could also be deployed as a single Docker container, but then you'd need more then 8GB or memory RAM assigned to Docker in your development machine in order to be able to run 3 SQL Server Docker containers in your Docker Linux host in "Docker for Windows" or "Docker for Mac" development environments. ->

    A similar case is defined in regards Redis cache running as a container for the development environment. ->

    However, in a real production environment it is recommended to have your databases (SQL Server and Redis, in this case) in HA (High Available) services like Azure SQL Database, Redis as a service or any other clustering system. If you want to change to a production configuration, you'll just need to change the connection strings once you have set up the servers in a HA cloud or on-premises. +>

    A similar case is defined in regards Redis cache running as a container for the development environment. Or a No-SQL database (MongoDB) running as a container. +>

    However, in a real production environment it is recommended to have your databases (SQL Server, Redis, and the NO-SQL database, in this case) in HA (High Available) services like Azure SQL Database, Redis as a service and Azure CosmosDB instead the MongoDB container (as both systems share the same access protoco;). If you want to change to a production configuration, you'll just need to change the connection strings once you have set up the servers in a HA cloud or on-premises. ## Related documentation and guidance While developing this reference application, we've been creating a reference Guide/eBook focusing on architecting and developing containerized and microservice based .NET Applications (download link available below) which explains in detail how to develop this kind of architectural style (microservices, Docker containers, Domain-Driven Design for certain microservices) plus other simpler architectural styles, like monolithic apps that can also live as Docker containers. From 99686facafd69457758e63163d403f983866d376 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Tue, 10 Oct 2017 18:37:10 -0700 Subject: [PATCH 066/136] Minor update in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e1781d34b..c71966f5f 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ The microservices are different in type, meaning different internal architecture > ### Important Note on Database Servers/Containers > In this solution's current configuration for a development environment, the SQL databases are automatically deployed with sample data into a single SQL Server for Linux container (a single shared Docker container for SQL databases) so the whole solution can be up and running without any dependency to any cloud or specific server. Each database could also be deployed as a single Docker container, but then you'd need more then 8GB or memory RAM assigned to Docker in your development machine in order to be able to run 3 SQL Server Docker containers in your Docker Linux host in "Docker for Windows" or "Docker for Mac" development environments. >

    A similar case is defined in regards Redis cache running as a container for the development environment. Or a No-SQL database (MongoDB) running as a container. ->

    However, in a real production environment it is recommended to have your databases (SQL Server, Redis, and the NO-SQL database, in this case) in HA (High Available) services like Azure SQL Database, Redis as a service and Azure CosmosDB instead the MongoDB container (as both systems share the same access protoco;). If you want to change to a production configuration, you'll just need to change the connection strings once you have set up the servers in a HA cloud or on-premises. +>

    However, in a real production environment it is recommended to have your databases (SQL Server, Redis, and the NO-SQL database, in this case) in HA (High Available) services like Azure SQL Database, Redis as a service and Azure CosmosDB instead the MongoDB container (as both systems share the same access protocol). If you want to change to a production configuration, you'll just need to change the connection strings once you have set up the servers in a HA cloud or on-premises. ## Related documentation and guidance While developing this reference application, we've been creating a reference Guide/eBook focusing on architecting and developing containerized and microservice based .NET Applications (download link available below) which explains in detail how to develop this kind of architectural style (microservices, Docker containers, Domain-Driven Design for certain microservices) plus other simpler architectural styles, like monolithic apps that can also live as Docker containers. From 373bdd989679b0b127c59c9dfa0465c6411d7ff1 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Tue, 10 Oct 2017 19:56:34 -0700 Subject: [PATCH 067/136] Set Retries with exponential backoff to most microservices sqlOptions, so errors when spinning the SQL container late shouldn't happen. --- src/Services/Catalog/Catalog.API/Startup.cs | 9 +------ src/Services/Identity/Identity.API/Startup.cs | 26 +++++++++++++++---- .../Marketing/Marketing.API/Startup.cs | 2 +- src/Services/Ordering/Ordering.API/Startup.cs | 13 ++++++---- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/Services/Catalog/Catalog.API/Startup.cs b/src/Services/Catalog/Catalog.API/Startup.cs index 8bfa347d2..befe82828 100644 --- a/src/Services/Catalog/Catalog.API/Startup.cs +++ b/src/Services/Catalog/Catalog.API/Startup.cs @@ -70,7 +70,7 @@ { sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name); //Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency - sqlOptions.EnableRetryOnFailure(maxRetryCount: 5, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); + sqlOptions.EnableRetryOnFailure(maxRetryCount: 10, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); }); // Changing default behavior when client evaluation occurs to throw. @@ -79,13 +79,6 @@ //Check Client vs. Server evaluation: https://docs.microsoft.com/en-us/ef/core/querying/client-eval }); - services.AddDbContext(options => - { - options.UseSqlServer(Configuration["ConnectionString"], opts => - opts.MigrationsAssembly("Catalog.API")); - }); - - services.Configure(Configuration); // Add framework services. diff --git a/src/Services/Identity/Identity.API/Startup.cs b/src/Services/Identity/Identity.API/Startup.cs index 3cd8acaa4..ea5e49102 100644 --- a/src/Services/Identity/Identity.API/Startup.cs +++ b/src/Services/Identity/Identity.API/Startup.cs @@ -33,7 +33,13 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API { // Add framework services. services.AddDbContext(options => - options.UseSqlServer(Configuration["ConnectionString"])); + options.UseSqlServer(Configuration["ConnectionString"], + sqlServerOptionsAction: sqlOptions => + { + sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name); + //Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency + sqlOptions.EnableRetryOnFailure(maxRetryCount: 10, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); + })); services.AddIdentity() .AddEntityFrameworkStores() @@ -77,13 +83,23 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API .AddAspNetIdentity() .AddConfigurationStore(options => { - options.ConfigureDbContext = builder => builder.UseSqlServer(connectionString, opts => - opts.MigrationsAssembly(migrationsAssembly)); + options.ConfigureDbContext = builder => builder.UseSqlServer(connectionString, + sqlServerOptionsAction: sqlOptions => + { + sqlOptions.MigrationsAssembly(migrationsAssembly); + //Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency + sqlOptions.EnableRetryOnFailure(maxRetryCount: 10, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); + }); }) .AddOperationalStore(options => { - options.ConfigureDbContext = builder => builder.UseSqlServer(connectionString, opts => - opts.MigrationsAssembly(migrationsAssembly)); + options.ConfigureDbContext = builder => builder.UseSqlServer(connectionString, + sqlServerOptionsAction: sqlOptions => + { + sqlOptions.MigrationsAssembly(migrationsAssembly); + //Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency + sqlOptions.EnableRetryOnFailure(maxRetryCount: 10, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); + }); }) .Services.AddTransient(); diff --git a/src/Services/Marketing/Marketing.API/Startup.cs b/src/Services/Marketing/Marketing.API/Startup.cs index b1d0004c1..0df0285d8 100644 --- a/src/Services/Marketing/Marketing.API/Startup.cs +++ b/src/Services/Marketing/Marketing.API/Startup.cs @@ -73,7 +73,7 @@ { sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name); //Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency - sqlOptions.EnableRetryOnFailure(maxRetryCount: 5, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); + sqlOptions.EnableRetryOnFailure(maxRetryCount: 10, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); }); // Changing default behavior when client evaluation occurs to throw. diff --git a/src/Services/Ordering/Ordering.API/Startup.cs b/src/Services/Ordering/Ordering.API/Startup.cs index 8c95ed828..1a32a97c4 100644 --- a/src/Services/Ordering/Ordering.API/Startup.cs +++ b/src/Services/Ordering/Ordering.API/Startup.cs @@ -75,7 +75,7 @@ sqlServerOptionsAction: sqlOptions => { sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name); - sqlOptions.EnableRetryOnFailure(maxRetryCount: 5, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); + sqlOptions.EnableRetryOnFailure(maxRetryCount: 10, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); }); }, ServiceLifetime.Scoped //Showing explicitly that the DbContext is shared across the HTTP request scope (graph of objects started in the HTTP request) @@ -83,10 +83,13 @@ services.AddDbContext(options => { - options.UseSqlServer(Configuration["ConnectionString"], opts => - { - opts.MigrationsAssembly("Ordering.API"); - }); + options.UseSqlServer(Configuration["ConnectionString"], + sqlServerOptionsAction: sqlOptions => + { + sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name); + //Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency + sqlOptions.EnableRetryOnFailure(maxRetryCount: 10, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); + }); }); From f87db5ef5d887033e1246e12a7d36f1b9104ec84 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Wed, 11 Oct 2017 00:11:38 -0700 Subject: [PATCH 068/136] Removed the mssql folder... --- mssql/.system/instance_id | 1 - ...b813a_67aaedee-1e4a-4132-b8ba-5397448c74de | Bin 89 -> 0 bytes .../Roaming/Microsoft/Protect/CREDHIST | Bin 24 -> 0 bytes .../48e880fa-19d4-4fd8-b209-07cff1308993 | Bin 468 -> 0 bytes .../Preferred | Bin 24 -> 0 bytes .../My/AppContainerUserCertRead | 0 .../Temp/1a541f5da82a46408b4fbfc4cbc88b2 | Bin 196608 -> 0 bytes .../Temp/1b42c59ee5d0b243aaf792ba47169816 | Bin 65536 -> 0 bytes .../Temp/1c81b699afe567302ac6ebbccfe58faf | Bin 4096 -> 0 bytes .../Temp/1e42979f514909df4e55f88bc5f33d2f | Bin 4096 -> 0 bytes .../Temp/23d74814f69031dbc0ccc2df7136e49d | Bin 4096 -> 0 bytes .../Temp/2aa13217ef04d399db1f5bf837df6133 | Bin 98304 -> 0 bytes .../Temp/2ceaf558dea6ea34749579158b71cd81 | Bin 4096 -> 0 bytes .../Temp/30ebb5aa7a83a397d7be7db38866066 | Bin 4096 -> 0 bytes .../Temp/32f4099bd7615b9e5661802aa7f5263c | Bin 786432 -> 0 bytes .../Temp/3381e0697f2e1f4d0a8ec84906e38be | Bin 262144 -> 0 bytes .../Temp/3d358c0071446cfcdf51d001911f0a76 | Bin 1048576 -> 0 bytes .../Temp/42b29843fc2cb7da8c24ad9c1610bf0b | Bin 4096 -> 0 bytes .../Temp/4322133a39682df51341c921988ba43e | Bin 65536 -> 0 bytes .../Temp/43359794eab4b6542013fa43abadfaa3 | Bin 4096 -> 0 bytes .../Temp/4f00a20180e71c01826e3251bef80fd8 | Bin 4096 -> 0 bytes .../Temp/6015d19ff83133aab7fbc00e055c31a | Bin 69632 -> 0 bytes .../Temp/732d238512e92e4ef9089fb4c61a4808 | Bin 4096 -> 0 bytes .../Temp/7907394830ef17d4ba0175bd9826da51 | Bin 4096 -> 0 bytes .../Temp/7bcc896c1f2df666851a1f73c84e9cff | Bin 4096 -> 0 bytes .../Temp/7d1bf98b298a3c8850d74e5b660332fb | Bin 4096 -> 0 bytes .../Temp/8129f518dd51573cf4133f18ec1b91f5 | Bin 65536 -> 0 bytes .../Temp/84c18e096493bccd90c998b08df6a21d | Bin 2129920 -> 0 bytes .../Temp/8e7242dcdb663928bc35e846ec723a6 | Bin 1576960 -> 0 bytes .../Temp/9d3bc5ac6d976a983b53e8e6fbb3a24e | Bin 12288 -> 0 bytes .../Temp/a248390ce868079187416f934759fba9 | Bin 4096 -> 0 bytes .../Temp/a2b2d2c1e3374a928a751febe0395fd | Bin 4096 -> 0 bytes .../Temp/ae5574d6c15bd1a63341127b45e498da | Bin 65536 -> 0 bytes .../Temp/af09a9c0f1aac9656097f623fc81d159 | Bin 65536 -> 0 bytes .../Temp/b0be8059be14de098ad41f86831e1da1 | Bin 4096 -> 0 bytes .../Temp/b457fe0369797a89bff03c6e1fc69fa2 | Bin 1048576 -> 0 bytes .../Temp/b71273b08a354ee7e274d621bf431e90 | Bin 4096 -> 0 bytes .../Temp/be6eef1d8f9b5ffbc7282050e4c34197 | Bin 4096 -> 0 bytes .../Temp/c33e2c07b053ed06080e18f9cc59f77 | Bin 65536 -> 0 bytes .../Temp/c3eca02fc0502f7786376d0cd281d604 | Bin 4096 -> 0 bytes .../Temp/c428f4c0244fbb9b4a888ddfe25fcb03 | Bin 65536 -> 0 bytes .../Temp/c460f565e5f9bf596e84618bae567754 | Bin 16384 -> 0 bytes .../Temp/c7fff830bc209b3cb2d2a9541c61aa6 | Bin 4096 -> 0 bytes .../Temp/d1136286d24fd64a5a957a3d86bc0576 | Bin 4096 -> 0 bytes .../Temp/d38e57dc354641377a0a21444180bc92 | Bin 4096 -> 0 bytes .../Temp/d68589df980066c61cbc6b6e0781bb | Bin 4096 -> 0 bytes .../Temp/d71268d41db313db8113907726e7bad | Bin 4096 -> 0 bytes .../Temp/d9afcc42ac8e8fa3d7f426545902b6d5 | Bin 4096 -> 0 bytes .../Temp/e18b66c54da5d9742837799f70ac6d31 | Bin 4096 -> 0 bytes .../Temp/e464d86334b854c8f93090881f82e70d | Bin 4096 -> 0 bytes .../Temp/e7c8cf705009960cb96991c9207c386 | Bin 65536 -> 0 bytes .../Temp/ec4c7e8181ae15da5710fd3d87d1e7 | Bin 262144 -> 0 bytes .../Temp/f68cc8518fc6f0388dd468caa5024e62 | Bin 4096 -> 0 bytes .../Temp/f6960589693f36be384813057950420c | Bin 4096 -> 0 bytes .../Temp/f94a5478dc3f78f6c45943eda1a0285e | Bin 4096 -> 0 bytes ...e=neutral, PublicKeyToken=b03f5f7f11d50a3a | 0 ...e=neutral, PublicKeyToken=b03f5f7f11d50a3a | 0 mssql/.system/system/licensing.hiv | Bin 8192 -> 0 bytes mssql/.system/system/lsa.hiv | Bin 16384 -> 0 bytes mssql/.system/system/security.hiv | Bin 49152 -> 0 bytes .../Microsoft/Protect/S-1-5-18/User/Preferred | Bin 24 -> 0 bytes .../User/d01f9596-8a07-4854-9c5a-348703ee814c | Bin 468 -> 0 bytes mssql/secrets/machine-key | Bin 44 -> 0 bytes 63 files changed, 1 deletion(-) delete mode 100644 mssql/.system/instance_id delete mode 100644 mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Crypto/RSA/S-1-5-21-4137405425-2340124300-2890394999-500/42e7704ae40b0d75de00736cc66b813a_67aaedee-1e4a-4132-b8ba-5397448c74de delete mode 100644 mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/CREDHIST delete mode 100644 mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/S-1-5-21-4137405425-2340124300-2890394999-500/48e880fa-19d4-4fd8-b209-07cff1308993 delete mode 100644 mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/S-1-5-21-4137405425-2340124300-2890394999-500/Preferred delete mode 100644 mssql/.system/profiles/Client/AppData/Roaming/Microsoft/SystemCertificates/My/AppContainerUserCertRead delete mode 100644 mssql/.system/profiles/Temp/1a541f5da82a46408b4fbfc4cbc88b2 delete mode 100644 mssql/.system/profiles/Temp/1b42c59ee5d0b243aaf792ba47169816 delete mode 100644 mssql/.system/profiles/Temp/1c81b699afe567302ac6ebbccfe58faf delete mode 100644 mssql/.system/profiles/Temp/1e42979f514909df4e55f88bc5f33d2f delete mode 100644 mssql/.system/profiles/Temp/23d74814f69031dbc0ccc2df7136e49d delete mode 100644 mssql/.system/profiles/Temp/2aa13217ef04d399db1f5bf837df6133 delete mode 100644 mssql/.system/profiles/Temp/2ceaf558dea6ea34749579158b71cd81 delete mode 100644 mssql/.system/profiles/Temp/30ebb5aa7a83a397d7be7db38866066 delete mode 100644 mssql/.system/profiles/Temp/32f4099bd7615b9e5661802aa7f5263c delete mode 100644 mssql/.system/profiles/Temp/3381e0697f2e1f4d0a8ec84906e38be delete mode 100644 mssql/.system/profiles/Temp/3d358c0071446cfcdf51d001911f0a76 delete mode 100644 mssql/.system/profiles/Temp/42b29843fc2cb7da8c24ad9c1610bf0b delete mode 100644 mssql/.system/profiles/Temp/4322133a39682df51341c921988ba43e delete mode 100644 mssql/.system/profiles/Temp/43359794eab4b6542013fa43abadfaa3 delete mode 100644 mssql/.system/profiles/Temp/4f00a20180e71c01826e3251bef80fd8 delete mode 100644 mssql/.system/profiles/Temp/6015d19ff83133aab7fbc00e055c31a delete mode 100644 mssql/.system/profiles/Temp/732d238512e92e4ef9089fb4c61a4808 delete mode 100644 mssql/.system/profiles/Temp/7907394830ef17d4ba0175bd9826da51 delete mode 100644 mssql/.system/profiles/Temp/7bcc896c1f2df666851a1f73c84e9cff delete mode 100644 mssql/.system/profiles/Temp/7d1bf98b298a3c8850d74e5b660332fb delete mode 100644 mssql/.system/profiles/Temp/8129f518dd51573cf4133f18ec1b91f5 delete mode 100644 mssql/.system/profiles/Temp/84c18e096493bccd90c998b08df6a21d delete mode 100644 mssql/.system/profiles/Temp/8e7242dcdb663928bc35e846ec723a6 delete mode 100644 mssql/.system/profiles/Temp/9d3bc5ac6d976a983b53e8e6fbb3a24e delete mode 100644 mssql/.system/profiles/Temp/a248390ce868079187416f934759fba9 delete mode 100644 mssql/.system/profiles/Temp/a2b2d2c1e3374a928a751febe0395fd delete mode 100644 mssql/.system/profiles/Temp/ae5574d6c15bd1a63341127b45e498da delete mode 100644 mssql/.system/profiles/Temp/af09a9c0f1aac9656097f623fc81d159 delete mode 100644 mssql/.system/profiles/Temp/b0be8059be14de098ad41f86831e1da1 delete mode 100644 mssql/.system/profiles/Temp/b457fe0369797a89bff03c6e1fc69fa2 delete mode 100644 mssql/.system/profiles/Temp/b71273b08a354ee7e274d621bf431e90 delete mode 100644 mssql/.system/profiles/Temp/be6eef1d8f9b5ffbc7282050e4c34197 delete mode 100644 mssql/.system/profiles/Temp/c33e2c07b053ed06080e18f9cc59f77 delete mode 100644 mssql/.system/profiles/Temp/c3eca02fc0502f7786376d0cd281d604 delete mode 100644 mssql/.system/profiles/Temp/c428f4c0244fbb9b4a888ddfe25fcb03 delete mode 100644 mssql/.system/profiles/Temp/c460f565e5f9bf596e84618bae567754 delete mode 100644 mssql/.system/profiles/Temp/c7fff830bc209b3cb2d2a9541c61aa6 delete mode 100644 mssql/.system/profiles/Temp/d1136286d24fd64a5a957a3d86bc0576 delete mode 100644 mssql/.system/profiles/Temp/d38e57dc354641377a0a21444180bc92 delete mode 100644 mssql/.system/profiles/Temp/d68589df980066c61cbc6b6e0781bb delete mode 100644 mssql/.system/profiles/Temp/d71268d41db313db8113907726e7bad delete mode 100644 mssql/.system/profiles/Temp/d9afcc42ac8e8fa3d7f426545902b6d5 delete mode 100644 mssql/.system/profiles/Temp/e18b66c54da5d9742837799f70ac6d31 delete mode 100644 mssql/.system/profiles/Temp/e464d86334b854c8f93090881f82e70d delete mode 100644 mssql/.system/profiles/Temp/e7c8cf705009960cb96991c9207c386 delete mode 100644 mssql/.system/profiles/Temp/ec4c7e8181ae15da5710fd3d87d1e7 delete mode 100644 mssql/.system/profiles/Temp/f68cc8518fc6f0388dd468caa5024e62 delete mode 100644 mssql/.system/profiles/Temp/f6960589693f36be384813057950420c delete mode 100644 mssql/.system/profiles/Temp/f94a5478dc3f78f6c45943eda1a0285e delete mode 100644 mssql/.system/programdata/Microsoft/NetFramework/BreadcrumbStore/Microsoft.Diagnostics.Tracing.EventSource, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a delete mode 100644 mssql/.system/programdata/Microsoft/NetFramework/BreadcrumbStore/Microsoft.Diagnostics.Tracing.EventSource, Version=1.1.26.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a delete mode 100644 mssql/.system/system/licensing.hiv delete mode 100644 mssql/.system/system/lsa.hiv delete mode 100644 mssql/.system/system/security.hiv delete mode 100644 mssql/.system/system/system32/Microsoft/Protect/S-1-5-18/User/Preferred delete mode 100644 mssql/.system/system/system32/Microsoft/Protect/S-1-5-18/User/d01f9596-8a07-4854-9c5a-348703ee814c delete mode 100644 mssql/secrets/machine-key diff --git a/mssql/.system/instance_id b/mssql/.system/instance_id deleted file mode 100644 index c04def3e2..000000000 --- a/mssql/.system/instance_id +++ /dev/null @@ -1 +0,0 @@ -42e93c96-946a-448e-9d1f-182c8ccc5005 \ No newline at end of file diff --git a/mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Crypto/RSA/S-1-5-21-4137405425-2340124300-2890394999-500/42e7704ae40b0d75de00736cc66b813a_67aaedee-1e4a-4132-b8ba-5397448c74de b/mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Crypto/RSA/S-1-5-21-4137405425-2340124300-2890394999-500/42e7704ae40b0d75de00736cc66b813a_67aaedee-1e4a-4132-b8ba-5397448c74de deleted file mode 100644 index 38c6581adbbfd6648241b86b2703fe28fc4cb5bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89 zcmZQ#fB-`%jf?WlOfJeV&QB{*2oCg72u>|3OD$6I4F+<8U4z10gH+rSb8?&#le3*u Ki%OjH(is4``ViIt diff --git a/mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/CREDHIST b/mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/CREDHIST deleted file mode 100644 index ce6eac20739851d050f1cff4863d2c19730f95da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24 ecmZQ%U|`S@ah6x=I_%jM&MLAuDmV-%!~g(0j|CP0 diff --git a/mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/S-1-5-21-4137405425-2340124300-2890394999-500/48e880fa-19d4-4fd8-b209-07cff1308993 b/mssql/.system/profiles/Client/AppData/Roaming/Microsoft/Protect/S-1-5-21-4137405425-2340124300-2890394999-500/48e880fa-19d4-4fd8-b209-07cff1308993 deleted file mode 100644 index 874116296afec1737116075da74c5cbe6977be24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmZQ#KmZd43x-r6wqP(|NMlH3&}A@Wuw+PKFafemfFdbC8C`}X1|y)nC6HynV9t;X z6i)-HGY0Z3fTET_77VZg85^LS2~b)DCJCjPfV85d;@*sgx)p7cR+?PcuIJ<+&%nUf zz`!7o#=wxszS4cd;_WLKH>4OJuFy)J(Y4$7$Lm)IrA#aKn#T&PkQNB4-IJ=e{r9t% z>Zt;p@j@BZ7Qc0s6L<0`dS@o|3bb|{oPLA@WSJYi%e?vdWwbLHCCom@}lulb*aRMfBrQbUd(0IbGP@rHcEdYJW)z+51Xr9#vS3& zGVTbY;q{pqcce67`>rNE!pL3y>GGxMdZhik!$VE?I@5cZ$8syib2uKi88g!)^h)~V zb6+d-^-GzL->1(@R4=Uv2oU%`2u!|*W6aNW``=w0r1^YUe1G4U$5-Ye=bweocl+Pm zGe}Ey>6uiYIiI~ds{2N_|J9K}Y9B6d$!LCi%>PPh^Y^Aj{ zU$^;5Ii9MM@$>pwD|5%{^LBl)so(jdX?N6v@w+osG|udt6Y(4G@P+Yy1nTSj~T=wtB5zmW_Fd^pu_*-A=h{zyC}< zkCR!s-?{O+|2r~A^H>sJeXy=yPwI|xUr)?OUT^mg(!CEn_UNf6p4w5c+~)CA>uo;z zbNc$}>tEc&cs9y&SMPkJlh5KfkIP>JyB@sPcqR+>$~ukoGM>B7p1*M6+&kwZ`9>J~ zXSN95QF12tPpto_xV{*7_5SIV*hiy&W|eA+aKXZ6Py$JTl5pBVRSZ?^aC^!2va(y9A-W~uSsTyEy! z$HO=5pI`uBffM0oO(P`M`5hD`Lf=k)069Ma(%Ryqm62| zTB&!rj`l8%`k7UBU;E8#tgk$O`SVu!gh#mTZu#a@vi;=v_G|4{t+$iEUR|r#Zs|at zzv_M6oVRt_@aehtM!n1V)%$Npe&u#Nv{IUu|MLf<`Y*qJZBW%u@&81GqY~~25FkK+ z009C72oNAZfB*pkw^tzlo^kAlbZEQ$ULD~|iAR_^<@?Resb5Ro-a&Xe0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U mAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!Cu1Uf^$}I0;Sw diff --git a/mssql/.system/profiles/Temp/1b42c59ee5d0b243aaf792ba47169816 b/mssql/.system/profiles/Temp/1b42c59ee5d0b243aaf792ba47169816 deleted file mode 100644 index af94535ffcccdc58cc2e7882be7148f10ea4456f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 zcmeIuF$#k~5Czb233vhVJRT*G!p2I{YiW_gc$C~I>X1N?)T!PS`sX1A0s^O9%8+BZ30t2Q&L_uv$-uR4vgeb#Y&6Q8}m-nb(`fB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs Q0RjXF5FkK+0D=DtY#QSfI{*Lx diff --git a/mssql/.system/profiles/Temp/1c81b699afe567302ac6ebbccfe58faf b/mssql/.system/profiles/Temp/1c81b699afe567302ac6ebbccfe58faf deleted file mode 100644 index f81bd84dd1e3a624d5110c97719631242d65c41c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeH^y=nqc5QRrg1hFw-kwU_j7Gjk`tP~3+t*uquA^{OZ3m+oI7J0Nhh!0@lcb0qM z;u38FX=dc?nRDmIyJx5C!!a|n8u+f8<**_vpJrWHHA?mheu9Q7p`J8y2ERDyfF?Kq z^=O~=^hlIHfD=g{R{aq?lSHlANupcmk3_f81zLNwZ@FLOgOE!%LVgSknd)x=()WV( z<$H`^XX diff --git a/mssql/.system/profiles/Temp/1e42979f514909df4e55f88bc5f33d2f b/mssql/.system/profiles/Temp/1e42979f514909df4e55f88bc5f33d2f deleted file mode 100644 index 08e7df176454f3ee5eeda13efa0adaa54828dfd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 diff --git a/mssql/.system/profiles/Temp/23d74814f69031dbc0ccc2df7136e49d b/mssql/.system/profiles/Temp/23d74814f69031dbc0ccc2df7136e49d deleted file mode 100644 index 439401d7049061a8cf70fc4a7d2f954409ce6997..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeH^y-EX75QUGwAT|+vfD{%X1S<w=%cmvGPVyodMus+VH(gA~t`$I1CYg843E zd~=U$yyIK-HPTp9z4DCK+CMq*-TnO;I0M<--vz6DfOp*{+m_2cx#ss?6FuuqAM9AO z>x-Ur$v>VoJKdp^HFj_A&+|(EUv=dU5r+byKqwFjgaV;JC=d#S0--=C5DNTFfggjy BAqoHh diff --git a/mssql/.system/profiles/Temp/2aa13217ef04d399db1f5bf837df6133 b/mssql/.system/profiles/Temp/2aa13217ef04d399db1f5bf837df6133 deleted file mode 100644 index dda426bec11b35010cfc08f5589ccf704ebfd27a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98304 zcmeI%&ud&o902gy*5*fzWfheOY8M30Ma3#zHJ)q5zd%;B=tZdXA|=sBETuAh(slbKi&a`FQ{Cc>Hndvz4ZOXxYj0DfQXh^I+VReqMK}SM$0{ zT?XDdQ9Medsn-^p_^mVT_AB4syk4f>zT!W6R^{0a=Fcy+9>;p_E4SM%JJSTJ98a4& zd*3(metnfeSNzkb*c{nPnrmF|uO+{dL;Ad(KjnL{`@p}SZ!g4qbk`R{e^`zy-_Cva_2z62bn|VYTBwrjoO~-= zH+SA^EA8)nT5~GtUQ6)-SA6SW{Aaq4IdVw8ecJi|(d_f>{BvcrX+3^v{ce1phVq{E z^ZV4s5di`O2oNAZfB*pk1PBlyaBm2tzh}JnU^sb@|6X0{Q9dtq806oBjb?vabZ;10 zB>@5i2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 i2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjY$Q{Z=vNbc zz+mvFv$=OUbMKk^GqYz-ujh+_q!sYCD%E(~pj)LKymO><2;LLNEtzXdt7&{;qYpO0 z9Jt2wJm;9e@jB>}7~-AZ0HcDt_p;zU_*22R;IDAc@x1EcqTWrh`C5t>$>ZewIKlik zV|@1?BfR4?9ciK~HM-%OEVVzg>j*-mB6b=U1BP zUXR^c=~h$TqG4@yz^m?Sk9Tjod!D16-@)_p%zQ@a|EsRNL&Tv#C=d#S0--=C5DJ6> Op+G1Q3WNfGSKt#-9wY_; diff --git a/mssql/.system/profiles/Temp/30ebb5aa7a83a397d7be7db38866066 b/mssql/.system/profiles/Temp/30ebb5aa7a83a397d7be7db38866066 deleted file mode 100644 index 339576ff2f941e877d88f3ad939b8af1309b7329..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeH^y-EX76okj02*F0d2iQVFieP0C?8L%gn>JOlO<+lsY>~%EVPWB8`7jn1ezV*Q z7lT?@*qpOW=FB}mdv|iXXt$N51Mqq%)v%-Lex(c8HA=b$Z%IRY;hr*T2A?@N11F#b z?(shFxg>FZ4BknGuLJr z-+jjzc7CTD%{13iE1ucj_>L2QyWih{bCARH1Mra#VE26&Kh^R~?)iGJjh=Y_Tx*_I ySNy+Ccb|JavcI0ovw2s^|J7ICA@Xn_90&)(fp8!k2nWJ}a3CBA2f~5BJMammvLFut diff --git a/mssql/.system/profiles/Temp/32f4099bd7615b9e5661802aa7f5263c b/mssql/.system/profiles/Temp/32f4099bd7615b9e5661802aa7f5263c deleted file mode 100644 index 68445f63694bae4944a6a612161c49b447719eef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 786432 zcmeI%O^X~w7y#g!B$^#Ihb4rt0X2hydJu_N5quhkx4ygTsiJ1sO{soPjORZ+w@8D7 z<-u}L6paQij83#-N_9TsUfnGnJ{sk(R_%W%%FF)o?4PgeBMys-@>4%skw_np?|)mo zzkZe}71KEAv>D~P7(91$Z|G8Y=EZgiJ%PrT2S)NbC^SRaGvVOMmx+8Aqbw`Xr zcaO!oqoj`0Q+0X7sNMPbi_c=}QTE@Cr|RjA*3YtB%fnbtdFHBTKX#_hPU}#;v;E$8 z@_zlA_v5$q`x4#rC;|Zj{|ABoJsfNPbUeTN<|1vB_s!zYohK$Iqvr3$kH+)wo?WDT zNtS(Q7EZ?V?=KenpN5a!DnSR+!L*c(eOa}BW0hQ!+WO?RYCro`<-9kFPc{Em zu;oDDF{i{uFwY%5bkMg`dvqz|uh^JA6<|OfB~FsPpzgF;Mx5r=Q>1?4I9f_aL!YLF%vXsPP`wdE0&WO6Od}dE42n z&)em_%X_8lKRs`=;nnKA#=6Qimrwtk)uqL)l%L3_eBPRTPK@&J)+o>CZTqcjH*UQD z;k77kVp(6@Z>{?;r6-50`)^(S<7Za&SKqt;Wzj#y@3)A}3nT~-AV7cs0RjXF5FkK+ z009C72oPul%KvAa`y(Ac%>S>BILY~lX_Wu&y1&`hD@e*xwG Bym9~l diff --git a/mssql/.system/profiles/Temp/3381e0697f2e1f4d0a8ec84906e38be b/mssql/.system/profiles/Temp/3381e0697f2e1f4d0a8ec84906e38be deleted file mode 100644 index 89cd80135af8a3d7ad54daef21da869faf860ca6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262144 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 zKCa8d{V2!FEHjsWKe{=|Z$7v8c=CBEe-V5+uDXn1^hZPd5* z|1Y|KW}X%T1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkL{FNeVIt}MUuoqyJ5dTr;v_(uDDPwe3H4_20c z@QuYbeW-n_9d9qUGwpmk)h@KR+vVZx-(Oii_RYmMb+7%$v(&zy&C&Yx98&XTzsBt&$rjwZ^d6HInH1kLzbJoq`yb}`H#1Q!|@-i zEAM=??->7VI~r}4Ep|5Aa=TbEqwLSoUel|U|L&-2E(a<-Bw{sR=|kvnl?W+Mn^~6?7q5 zWpbss{Hr1y@S`y%6~}2>TacTEIHqP zK595S^ut$U99X|>*Z<XFQrxTmZ5K<+XLPA2y7KalPKRKgNOc!@*VFAFeFF zkmF(dUt|4F#F&}O{@Q;eN;?^4U5HXHwAaIR^Qb)=W8;g%)waHOe!n6dN7v&K=hkr# zg~lqc$8X1YbF|`_ZqviA4=SF1+^x0vjzlj$+McZ)*}hv{k8#-2aA@UU*W=7;r5|bs zhTZ!sy;b`jX&cMV6EptwpZR$7oT*#oJC)y%d91EgI>)Ok@n5!Q-i5Y{zmJbS-im+v z`kryTe>nO?E+6h7{>^3Qc{QHQ%>DG3U+<3xt3G*5E+;CTBjMSh4tdA@?ESIFpMKFF n$BSSrYV&$2H(aauHt)>yqy4|IdHabr)~A2Am~n*V+VZ~vt>$Ap diff --git a/mssql/.system/profiles/Temp/42b29843fc2cb7da8c24ad9c1610bf0b b/mssql/.system/profiles/Temp/42b29843fc2cb7da8c24ad9c1610bf0b deleted file mode 100644 index 0e087dfd3e019c2d8a66e4b183e1f08a80d811ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeH^y-EZ@5QNKL5EBIh!wU`MP&`n~L{MW*ClK!r6b?oA6hi|a!N<7JN4dbq@vC*_ z7!VXAlkTOqyS964duosRs(T}UIaZFTV(f_K&rUkeXaNkd{XgM_!Mp(>s>TwgY8_KFXZ|yXOi5%&M^Ni zkXIKR0N2MlRMM4hbjy`=uAv&;=}`~rw{_C4cC^Qpn6G03u`k|j1lBz8v@jz-TL7 diff --git a/mssql/.system/profiles/Temp/4322133a39682df51341c921988ba43e b/mssql/.system/profiles/Temp/4322133a39682df51341c921988ba43e deleted file mode 100644 index bfacc733e1f070ecd9af8a1c71691dcdfe434f27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 zcmeI#Jx&`z6ae6{jYNaQmRO2}YpRr~@da`O3 zWtVwRu@RQiAVu&^^ZefYc;*{xtu3Xt@pO4Po0Y-3UAKd-G#L!bXe*Xd^NdZ*n;d3+ z^fdmstM~J>t&VGd#xl>IKIST=e3>rB-S^klmeOrwU6U9yiN0Js%0Hsq-aWMK_kMTR z!zjHNZel+fPh-@kt*wc3XFQ2>XUs)^5A)nvsqtfYWW0`Xi(i}bulGl1yQBZ-ETI2h z(avW3-n@#Pjy=i0jy=fvt9mod&reUktNwPfYdhW?b{DkO=JEOY{yxXOmQlU8CgRrA z{^R^vE+s(V9SG#}df!oRr;Dqm`+v&kNXC8R)d>(FK!5-N0~*l6KrSXlUBeu|}qGvN*nMQsF| z-7uM*>?4=SaC10D0CL174_Sv8i>Bd$)9UP3)#Bpf{PL5(OA2SPpCr#%r9 zPJhjpiJg zoiq15+@0+%4oMwAhPY&bn5?L$PoPFtjU}{*tJ9>HP)`^!2Twex5JloZs7L#>r^!Tl zo=~CjAQZ@rKx=j!=n{1j=rZ-0T6?r_vLD7xmrLhdo;W5!^^t@0x8VBpJ=$dDeRMFz z9BXX(o4$-6d7^jM|8IyY;Y0Hgaq|ac^}UNvH9zBfp6}JejJ_|h!kF0(do1~k_?KWk08?B_2Z>W8Y$@x=?3X8=}kkd}0$Cj%MDL}s#(m2A97c5;xDT;wJXdCA91t_*s!)|`RHp_tsYPw-P?vhtrvVLV#H%!>2~BB6b6U`nR(3NgnM(9WShkA#GF`N;MWE7(r!&t^K zo(W835|f$2RHiYV8O&rBvzfzO<}sfIEMyUjS;A75v78mGWEHDf!&=ty3%|0S4Qyl+ zo7uuvwy~WZ>|__a*~4D;v7ZARi9{2eZLJ^*e80q=QFGPtNEqaWYv0}%G8!vu>gozR-Nt!Hqij=8> z)M07Trc0k8W2VemvSxcRdybsBa_7mL@1^_&3KlB-a*?9NikB!^s&tvM<;qv6SgGfjnM=7(C>01wX>D;Uh+l8a-z0xbYJvPMSPr>a^)IX3m;DXYRcD3l=U~ykzOJ zzhUF1&0Dr^+rDGxuHAd~?%RLh;Gx4ujvhOH;^e8*XU?8Gf8pY# z%U7;myME*5t=qr-{>PoW_wGLc__x<5KZJkrqwm63kMqxe$4`HH+<27Uev}OVRN#Xr zUi{{XU7HFhpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Min!|3=`euOEE%v!QSC z`4{i--uquZsNQ|_`41nakH3GIp4tB9Gn*8C(6`|WvjPezpnw7jD4>7>3Mim}0tzUg zfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7> z3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36A zpnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim} z0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7j zD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Mim}0tzUgfC36Apnw7jD4>7>3Min!Qv^;# ae9D1s1r$&~0R)L`=Na>@?6d>Rq7g)Msk#(Y|>)jk_+FF1h^Rm;}{l4$|L(>+|;*kd==y z!~#pKvE^^^GJfQV-d)d6h$i7f^KIhp56J3!7oTc=#`iqmE5)AA-{kk~@#`k}ZGZ_q qlE0esvwl~||LP0xV7WP94wwVxfH`0em;>g3IbaT$1LnZ*4m)-|Dh3}7=cU8Uu`O8dAe5!5FkK+009C72oNAZfB=C90u4{-00jU5 diff --git a/mssql/.system/profiles/Temp/7bcc896c1f2df666851a1f73c84e9cff b/mssql/.system/profiles/Temp/7bcc896c1f2df666851a1f73c84e9cff deleted file mode 100644 index 41d173bd02999c532b51ac55943ada4e2b743cd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeHDyADA?6dcb)G$cMip-_k@L_{YFB08;#tB~9vaSNZJQYn0t&rz7U*-bVCg+g=R$Pm_uA zJaK2zB&%K^8ce*_>@3hF>Lk!*>I=2@Xy5!WiCQj~&bj>Pm;}|Q4$|L(>(h7i$;w9< zV1Xqz*z&h{89(tvZ`c3FM3wNNdA;rK56J3!7oTc=#`iqmYll77ykUd`dg!3dEKY9( sjOml^p;O(OzSomRnilv1!;SLUi+6Xqg zVKO_nk6dQFIi(SR0&y(@F loZl1jzxu*ESZ)rO1LlA^U=ElA=72e14wwVxfI09R2cE{m9|8aX diff --git a/mssql/.system/profiles/Temp/8129f518dd51573cf4133f18ec1b91f5 b/mssql/.system/profiles/Temp/8129f518dd51573cf4133f18ec1b91f5 deleted file mode 100644 index 17a6f5993195b1e6bb69658096074c704d922eaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 zcmeI#KWkG_6aes>q>!c16kF^dnAQ5Pi{NH)5ZwF*#)1JC@f#SNMEnrlTpT)yo2z3N zo$DqPYH%;lyu5QXiP6PH+TUAF&N=tq_ulV@8&XPhT^MfO`?OwKC)G*Snw0vjc3GK; zr8IfQUd-!vv)-AGUz^nH`FS0!HT{fbl$|=}Dy2LcZrqyOzqzVXCXaE_Br&ERy<9xX zucBOiJFTkc_0#RQqqH;}#`9#n9HYinbM@lAGj7FuXUs)Ew)4HS(!`zc$haTl-oG8+ zee!*Edw%r)oCWl+Et-4Sx|>^3H~xwqW0#E?bnDrrWURk))9a|&ncdg7r{Al3cd|7b z54-cX9z}EU`5wf+mQJ&8y@<1GO+M%Jg|d_YfwL@-=k=f7@p!oL;mzdtDbJCNvu9vE z_v@ES)AQ=-%Ei^`THVjB=1hAxjs0n{l!Ght^{r0R7+uYJ42+Qdar8H$KDf4g{QT_S zv!Cn5{LBxpH|u4-d!xzQaWId!=lciI&+&tpzj(*&kK%qW%iFyI0EI>5}i?;y5`00t5)0FM-Fy&7Ftqr8AEIs~HE8XDq$=-#R{D zKHio90RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF P5FkK+009C7{!QQq-<4W` diff --git a/mssql/.system/profiles/Temp/84c18e096493bccd90c998b08df6a21d b/mssql/.system/profiles/Temp/84c18e096493bccd90c998b08df6a21d deleted file mode 100644 index 6103150db912e6de6af115e7053dc0d7494201ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2129920 zcmeI)36x#sT>$WJCJTWEGO2}9THp}~2_z|lR2#N32qC2)i6tooT4sQ-ge@rvSZZxw zDO3hpiCsbTI0c&4f-Uw$8$=HetrgF43F@gFMI9CqDGdP;kZt_F`@S3QyE6k}DU`$S zJLk^-{=fC!-@EV5Tjop%s5uc6-@)^z?GC9lQEE+b8yPwol082exY0 zm*cx*ddp7N?b217f4uQS+q|;zJ=?yr@%7`M5T`q8(%LOP{ta7quK!ZU_f36ecbDv+;gI`r6 zg!2C1SzFCIub*m5+TX7B`=Q<*UZj277illY_x3hMPaSLOzyC&e>OB7X5RBK*upX#yLCqRGz z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N 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 WK!5-N0t5&UAV7cs0Rpd%!2bhZ{UQ?p diff --git a/mssql/.system/profiles/Temp/8e7242dcdb663928bc35e846ec723a6 b/mssql/.system/profiles/Temp/8e7242dcdb663928bc35e846ec723a6 deleted file mode 100644 index 060e114b52e81cbb3d2ef40eaa6c9176708cba8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1576960 zcmeI$>6aW;8NlJ&lWEd3VVoWaBrHmRxNmH(L5-lGA|i?cu2CYOprE*mIH-YS6c~=6 zpn#$*0-_NWcLn!-;S` z?biO)v(0~N+lJ70m(f}-`-VOWeIeb^Hzxgn zq#qdi-f%pdlD;|V2POUB(8po^Ly~@I8T8NB>Y(~OI*cC%&&Pxw=RYj;J!P(U-V*vs zXm0OGoj3*+PK?P=X{wFh2bJ*7N8=}(Bg|7%NmQkm&J zhck7iC&uwJ-4D&~DP^BJexEx2p)kIxmGac2KfSE0^Q^1$92K75`N4dDq(_IoGN>yY z6OMl{Gw4s?V}skE^wX5%lKzaOKQpX5TcUptL z&x_N``r6mm{^W3e4V#E|Z>yriF>^tUJd9ZA0+=@%ybok@RJ(l1K- z#Yum6(%+NxOOpQHa6KOnnwxF6y)TT9?;qYDdUIZ^4KE+)`fQWh`^%0EmzMT6`N7cR zJRb_Zo#)}jzfHz}IP`X&2j-^pe57pa&)?Cu`u_9MaD5mp)&9}4sUJVwRL}RzlIy_7 zlKc2_(l1Z08y_$8b=~>8?kAG|$)xW}`V~pPGU>aMz9;D`Wn7PcT#x@#WwG|f+CQB* zTvZnO@uP+Myj)%8YM-n9n()3QzVBKsv;FwtY+d)-GV1$iROfkB_lj)a;SBqCKc##o zdET!JeKf4|T%Wuj`)soA=aSdS4PpLaxbNH;dR+JO$+}-i*1aiN_vSEvT=$mHxfb-xmNT=%wQ-P@CO??~3YGt3{?{c7lO-Mf-??@rdeCt3GvVg9)8 zy`jf-zn-l7jqY{6xw(GE*ZJOL-EVg1OFMo%(_TMMzr209-xt;$59{Z_Z*}Xo;|J@S zvt!}G<#znHyS}mS=S)8Je<#e}e2!?Y=hN}`clV2S{BTgu$M1I6?Y2*^=Q}6!d@uCr zePKHP_q*PHzMFg=S-5+-y2z^xr1^cS-+!(*Kb3KZf2ouQ8NACH>E#$K(G?(*GKIbZc)4?P8Pb zf93Dj_YDC81PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7{$~ZYmojJ$etYxfAMGFU_t~<1*SgZ= za#Zu!(mdMV?`$6Jwy}BKcv&f1n|=E@wt4L69?h<7ZomB7w*IVAj&Iub=F!gipSHQ? zm+gA(qutiNAD7k1&l|h_e%*fmZoky+59s!r%ihWOP2K*$Za<05m&41-W~> zrQ09T?KhO&YyV`jKf0_;4(-sgI@ur8&3jncGx_~u+4V2u{Xl>K0RjXF5FkK+009C7 I{u=}y0U^y=QUCw| diff --git a/mssql/.system/profiles/Temp/9d3bc5ac6d976a983b53e8e6fbb3a24e b/mssql/.system/profiles/Temp/9d3bc5ac6d976a983b53e8e6fbb3a24e deleted file mode 100644 index ef4d7859fc1717a91759eef392173a5e3bf672a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 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 Q-rp*>M&Q;6T>laHKRKqh+yDRo diff --git a/mssql/.system/profiles/Temp/a248390ce868079187416f934759fba9 b/mssql/.system/profiles/Temp/a248390ce868079187416f934759fba9 deleted file mode 100644 index 08e7df176454f3ee5eeda13efa0adaa54828dfd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 diff --git a/mssql/.system/profiles/Temp/a2b2d2c1e3374a928a751febe0395fd b/mssql/.system/profiles/Temp/a2b2d2c1e3374a928a751febe0395fd deleted file mode 100644 index cb16554b81fc130e552f75097ba9ab89c69b2870..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeH^y=nqc5QRq*1+huM!a~H-Lab5*E5$;wwYAbM5?E|jf)A0xB9E2_@c}IS&T=nY z6q81e0zM#yPlteR}e$Pzq7xjWzvxC8EhJKzqu1MYx3;10M0?!f&VI0IoG9uNQk diff --git a/mssql/.system/profiles/Temp/ae5574d6c15bd1a63341127b45e498da b/mssql/.system/profiles/Temp/ae5574d6c15bd1a63341127b45e498da deleted file mode 100644 index aa55e3a1a8b2f6bba000832da49835f51be27631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 zcmeI#Jx&`z6ae6{9f>9qTgDPnT&GHz-WT8qk;_DaBj6g*aRCm%0qizaN{(Q3PXDsvV>0_=^%FpRy+c+?R)bob~^SX&mH?A=dbF`G#B31QIq0r@tIgx{NjPru%=&=SaqV$G0)rd={$be?vfPD@FE009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs IfqxPB16?f|y8r+H diff --git a/mssql/.system/profiles/Temp/b0be8059be14de098ad41f86831e1da1 b/mssql/.system/profiles/Temp/b0be8059be14de098ad41f86831e1da1 deleted file mode 100644 index 8f349a6d36225b1bae386b7efb0dc6e50309b9fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeHDyAA`}l`5zs6 z#eHKf65cdlC+iiJ rsgd;6oS#)bZU5>^zr(mGU<#N5rhqA63YY?>fGJ=Km;$E2ZwfpBJkTC^ diff --git a/mssql/.system/profiles/Temp/b457fe0369797a89bff03c6e1fc69fa2 b/mssql/.system/profiles/Temp/b457fe0369797a89bff03c6e1fc69fa2 deleted file mode 100644 index c8b62bbc09810464f4b9d6efaf15d8b974ea58ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1048576 zcmeIxzi*TU9LMpKkTfNd+++-COk)T!#+cI>LQJDo1cBCaQkC+`k*`E8b) zr~TEs?}@$hOWj9eZ~j{M7h>;q>pmKL`?tEk82iTUy6=s>d#CREVsHLl_m^Vtt=IkK z*t>t${gv1|_v-#??Ctw?Z^hpFtM0GI-u%1nZ^XXwuaMRxAp$L75m%Kuo{s(~`s3(NqEAN8M4yU29epPHZ1ktmv(cYL&qaS8{YCV-=r5zc zivBu!KKh&Jh3NCq7oxw7z8HNe`f_w9dNKM+^wsF4=xfp6MPHA;5xpG!ee@5}KSuu) zy%PO%v?M@)009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*B-va*vSHZaD diff --git a/mssql/.system/profiles/Temp/b71273b08a354ee7e274d621bf431e90 b/mssql/.system/profiles/Temp/b71273b08a354ee7e274d621bf431e90 deleted file mode 100644 index 882b1bc085d88f0910b374fbd85b4efd08e11c23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeH^zeNo1J66-MQUc?&dq`42BI!3-Du6>Jp8{>?>^%U8AHHoMuh<2KUr> Q!hvug90&)(fp9?j1URWGhyVZp diff --git a/mssql/.system/profiles/Temp/be6eef1d8f9b5ffbc7282050e4c34197 b/mssql/.system/profiles/Temp/be6eef1d8f9b5ffbc7282050e4c34197 deleted file mode 100644 index 08e7df176454f3ee5eeda13efa0adaa54828dfd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 diff --git a/mssql/.system/profiles/Temp/c33e2c07b053ed06080e18f9cc59f77 b/mssql/.system/profiles/Temp/c33e2c07b053ed06080e18f9cc59f77 deleted file mode 100644 index 71dd0225e87b8f2a0a9915e5f2299bc011c9b64c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 zcmeIup$-5b2n9e)R)fLc_0NUwW;Gn!8|;mAE$*}L^|PHLqUTr3th{Si3;_ZJ2oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly XK!5-N0t5&UAV7cs0RjXF{4H<*<7fcc diff --git a/mssql/.system/profiles/Temp/c3eca02fc0502f7786376d0cd281d604 b/mssql/.system/profiles/Temp/c3eca02fc0502f7786376d0cd281d604 deleted file mode 100644 index 1651e390beb2f367c58611a5eeedfae115f205f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeIup$$MG6a&D=UI=Dm0xT#NV-Mudhbc&|rfKS~tX@+@%sfuFeRnH&|DO;bK!5-N Q0t5&UAV7cs0RnFeeByuz#Q*>R diff --git a/mssql/.system/profiles/Temp/c428f4c0244fbb9b4a888ddfe25fcb03 b/mssql/.system/profiles/Temp/c428f4c0244fbb9b4a888ddfe25fcb03 deleted file mode 100644 index 54b448dd4d400a8f9a2f54d8a18aaf115ee180b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 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 P$XFm_fs6(Izbx=St7tt4 diff --git a/mssql/.system/profiles/Temp/c7fff830bc209b3cb2d2a9541c61aa6 b/mssql/.system/profiles/Temp/c7fff830bc209b3cb2d2a9541c61aa6 deleted file mode 100644 index 08e7df176454f3ee5eeda13efa0adaa54828dfd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 diff --git a/mssql/.system/profiles/Temp/d1136286d24fd64a5a957a3d86bc0576 b/mssql/.system/profiles/Temp/d1136286d24fd64a5a957a3d86bc0576 deleted file mode 100644 index 2e738812a9454c3e3ef86fb80ab4b815879b61a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeH^y-EW?6opST3Stw%2S{NNL;?YeU?&zzu(M6&ZW9Or$rgDG%M>Z{Pp+G1Q3j9rhFNohD AivR!s diff --git a/mssql/.system/profiles/Temp/d38e57dc354641377a0a21444180bc92 b/mssql/.system/profiles/Temp/d38e57dc354641377a0a21444180bc92 deleted file mode 100644 index d5a5c6bbda392454be18592d2889fdb36ca16dde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeHEyAAqzAVgz}{S1{#;iG)c7G^g0CN~6yLUYb$ z_MExrvFFYXS8>t=kRxt+AflHwvp3M7SB@$4h`Zx-FQ%H%A~s%lP$SAjOsGclG^fo# zagj(FwCR;E5iJIut9KUg3V9sxD*2UMb2M*$nnWEJix*s+I8O)Vrw-!ZjN`L=^yw9k zFu(#!>~Q3>cxgZLM0eNs4@8~trheTm^#}B-duN|=zQ@-*@3qAqYi_v7HeI93KYYkG t0>;!yd#Km<`+1@NS6#S+#ioEMU<#N5rhqA63YY?>fGJ=Km;%2k@Bm&;Aa(!% diff --git a/mssql/.system/profiles/Temp/d68589df980066c61cbc6b6e0781bb b/mssql/.system/profiles/Temp/d68589df980066c61cbc6b6e0781bb deleted file mode 100644 index 08e7df176454f3ee5eeda13efa0adaa54828dfd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 ocmeIu0Sy2E0K%a6Pi+qe5hx58Fkrxd0RsjM7%*VKfPwdc0T2KH0RR91 diff --git a/mssql/.system/profiles/Temp/d71268d41db313db8113907726e7bad b/mssql/.system/profiles/Temp/d71268d41db313db8113907726e7bad deleted file mode 100644 index b6fae64b5ae8a0bbb2b6353312653b6f4edc43ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeHDyAAW;s=8b{)RyNPi2ikN=}dR^CAi zBTTTsiqGg}{KOOeyS~39ii8i%*NMA7Agk|Pe5&~w-}8L0EoPWvjx{#eW6XENlMQO* wWqdQBOTXm3cKAJhZ^-}Z3-4gLIbaT$1LlA^U=ElA=72e14wwVxz;6yb0Q`0#g#Z8m diff --git a/mssql/.system/profiles/Temp/d9afcc42ac8e8fa3d7f426545902b6d5 b/mssql/.system/profiles/Temp/d9afcc42ac8e8fa3d7f426545902b6d5 deleted file mode 100644 index f6721d8e9cbca1784cca0228387025d38eef848e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeH^y-EX76of~kLP(?F18gB;Ayz3ux*%e()iRZCBZOes6nTskDJ=3>K8!_*e6!pO z7lT?@*qjq4bLO6(y*oR4Su86_2Viq3)v%*#|D|)-HA?D(kEEf!a8DUEgKG{>!3kIZ z_jsT8T#z_F0-q#TuLJr z-@eBHc7Cg&CVJMZX8b05<10@5?tcChoPivkzXaQS0K4zI_^Fm>a?jU$HJbDMCpEeQ yH+v}r3z2jIOU)v%-5{7dJsYm{^aK9YvE!aZfw46Zpi1zpep z_jsT8T#z_F0-q$8uamNlAmMYOuU0bQNhM$ zH%w;t_L0rpaGj(PfE;nj12I_^WpAKCR*ot3h^vc9FQ%H%Vm6+5P$SAjLa0XbG^a&J zevwe3`5=_Y%^+6qEQl+N(;%)gJ~P%F&6^)4am)FN3(ij+lc4<6LGd@^`0PLWWcecu zu)qo%?D#BR+K)WZzw7&3qE2{IzrKI-2V~W~vrjqS<7=Mx(tZajzr>!qc6o;#w0X~? diff --git a/mssql/.system/profiles/Temp/e7c8cf705009960cb96991c9207c386 b/mssql/.system/profiles/Temp/e7c8cf705009960cb96991c9207c386 deleted file mode 100644 index 0601ef9a0f2e82b181472670aa492b209a58040a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 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 diff --git a/mssql/.system/profiles/Temp/f68cc8518fc6f0388dd468caa5024e62 b/mssql/.system/profiles/Temp/f68cc8518fc6f0388dd468caa5024e62 deleted file mode 100644 index 11b37ff0116919b2d8d77766829e8829b781f60d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeHEyNbe46dZL|SZrMI15$`sh*$`Uoor#SwYAcK2w@ep$Y)qsSom3fjD^L{gnQw# zK`kt7&XIA>-1ErIWW3yG5r7hLE&~Z!5#|3tgRB}$=o1&GNrg~P7zqcDJg5^@Vo#_? z`?ROYMEM7CWzr_A{z*hkyw+?S=r8JRplj48YVFa!*)C2xE|;#jJabHf>Qe{lXTkOP zdko3Se=x!v3#{?W-@Gt>;ECQ{&rgYO!iVNt#LXX&)psu*)%=X_`G2nrTRwk-6$a>` x%kP`!_nFWm`KviU>vx6xuDg3IbaT$1LlA^U=Fpk+#zU=<<}Q7a1-8?6KzK_n`OKk(bS442_j+=)xjJ0UhMK$~}m z_npTKoad7x$RnM67n~JjCE3-3m!y=N^19-u{*Djb7kxKr`X_;&cTc|$V&=OgKWW(kO3Wry6dVxWy4&vJLM~CRMkJr sheWbiKBhuL-GsGfLcP7#F&P0PU<8bS5ikNqzz7%tBVYuKz^@6s0X6I?@Bjb+ diff --git a/mssql/.system/profiles/Temp/f94a5478dc3f78f6c45943eda1a0285e b/mssql/.system/profiles/Temp/f94a5478dc3f78f6c45943eda1a0285e deleted file mode 100644 index 83dd22e6deed220e995a1b9640f11a2ca2485fee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeHEyJ`Ya6dV%`NSX+KfQ7{(VwED;iG?C|wpMWk#nlAdVm~9Lg@qsG=WOB3axYw5 zjD>~GIm2?Cd#Ws&LkqMUL)E}yw>bA&~@rG(C^eoYVFa!*?t^%T`v9V^2{*_s!trG?*-Qv z-|XTm15_ z36|*bKTe7}jp&m+)~uiR`$B$JUw8-0%>i@3954sW0dv3{FbB*5bHE%h2Oe|a0tWFQ A?*IS* diff --git a/mssql/.system/programdata/Microsoft/NetFramework/BreadcrumbStore/Microsoft.Diagnostics.Tracing.EventSource, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a b/mssql/.system/programdata/Microsoft/NetFramework/BreadcrumbStore/Microsoft.Diagnostics.Tracing.EventSource, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a deleted file mode 100644 index e69de29bb..000000000 diff --git a/mssql/.system/programdata/Microsoft/NetFramework/BreadcrumbStore/Microsoft.Diagnostics.Tracing.EventSource, Version=1.1.26.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a b/mssql/.system/programdata/Microsoft/NetFramework/BreadcrumbStore/Microsoft.Diagnostics.Tracing.EventSource, Version=1.1.26.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a deleted file mode 100644 index e69de29bb..000000000 diff --git a/mssql/.system/system/licensing.hiv b/mssql/.system/system/licensing.hiv deleted file mode 100644 index b94e22df3172c335b3d43547628f8cc52efa15a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 zcmeHLJ!~9R5S}w}d`b9;u#13%bOnmiSlQp(T?&Ya?YO|$+#SM&oBes~JNa^J?)EHO zfH0j)%9N>)B^v15(7QnjqA}1=Py`wbN|&!MrhTm;Si?{*yoFzAq?!RyMWB zqhO$5pkSb2pkSb2pkSb2pkSb2pkUw}2AV;uBbV^|KCc~|o}P9#D>VJ%cfY9LiI_T7 zKNu_M@R)7+yEFLaxx0k5+R93Ub=RQV+azLrmNMjXNQo}(ZQ;8I;Wh)ApmkzfnwX)t z=p`y;;FB-Qxf|Ks1P^Gkf>(w6(0v7#1KrGGbZ+u_sFlX-#>Xd!v)wF_1`qld)gSWs zV9X4FXdfNs0aGJbnY-=_0$I0l7tat=-&?^D28_QPhY zBS_(Z8VYCr{xuJWV^BD2(96q5a-Wk=ePyxn!CY-Y;WS}?^IQ7#A)JiY5yzl#j?Tfk zHHN{%E0E<@*iCv#oDS9%-ZA{_zV_tNgB(1LMd96fE%berIfVUZhaX?b!;vvSmmBXHw-?aAj>DtQ zrCh}8CghvJfN|;~?en=ig3S{2_aR4+G8UI0`;cQu`7*{34MnvFIf5*qkbj2V_GX!0 zg^woeIA4~zdyRYDq`$@Mb($p|Vna+aWX~cCTBG&{L-xr2!uF4c>=zsL3)oM|_-`T4 zv-mS}ncsiKe=PIAMtm-|hU^#Tmy%v8Ly&ns9^*kLPtGg*3PxWI*(3jXKlN)#l2tnE z-KK5wsY|yhp)E@By-z(nA5t6rtY!N#CGXY0M*Xe&X;aqiU3vpIYt}OStNb@FY1m(t zKk(mfbO%ZPP`uAPfd8Qf1u_gl72sFzHbj{YQ zuAysM7iR4c06Z?DkZ+{Z+|M*dHy$e4lLw;7fNz@P1yGfMA#rMWXRK;WA zEL!A}CQl-tLj$LB7T=I!ROKuMczk(c1?DWwv3`g-2f88T6PYW&9!XxN=}q)^a33gM z7W?gXL+qsUBKG_3RMsBrA3{H?qpX(K2erIDRLkq&$_H0Isx+oPcx+=NaF?lDpXd&9 VEn2}q!9c-4!9c-4!NA2B_y@qFG-Ln( diff --git a/mssql/.system/system/lsa.hiv b/mssql/.system/system/lsa.hiv deleted file mode 100644 index f307ac5781b20a2ab706936efdd5a7e61eb68f92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 diff --git a/mssql/.system/system/system32/Microsoft/Protect/S-1-5-18/User/Preferred b/mssql/.system/system/system32/Microsoft/Protect/S-1-5-18/User/Preferred deleted file mode 100644 index fec27ea556141d79ee3571f6897e39bb73b073fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24 gcmbO>RsI5dSBS@)D3f;Pca1&_=?CgocU)!!0DnFTV*mgE diff --git a/mssql/.system/system/system32/Microsoft/Protect/S-1-5-18/User/d01f9596-8a07-4854-9c5a-348703ee814c b/mssql/.system/system/system32/Microsoft/Protect/S-1-5-18/User/d01f9596-8a07-4854-9c5a-348703ee814c deleted file mode 100644 index 1dc713246b9fa76cbf5406d82e1d7b52d90b669c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 468 zcmZQ#K!6km0|rBeGzLosQy?~D&}Fb-NCb+R16d|OwkeR*1nYkO*sA)W#Bs=f1fXXV?+tVYaO>h1BWW~aj4j}iw zc*;@yrz$z>cT;vzkIbzOWcNBhZETrhvoL&1(B7k*Q=eP%Ejp_EFIqv(=C0c>y|Uh< z|Bti7@~vARo%C?ssqt*rWA@AcUnK4d(>FO1^7ySrMfjOnCzK|KD*J}L)w`?tZ0g2Z qzfWr~oHTvLF7jS^)1O+Err+~TgQPa7)p=b{wti7s&kS@AIsgF3NS_)2 diff --git a/mssql/secrets/machine-key b/mssql/secrets/machine-key deleted file mode 100644 index e4995d7f6b478a8e2922ad5529f3ff8cb98b11af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44 scmZQ%K!D=wlU}Txs#+^7bFRdxFHrTnlHZ)|6={Ndz4LauTzDA)00DXriU0rr From a04cef97ef3d2c3ca60faa5e112977f2737f27a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Wed, 11 Oct 2017 16:26:44 +0200 Subject: [PATCH 069/136] Added AppInsights service --- .env | 1 + docker-compose.override.yml | 12 +++++++++++- src/Services/Basket/Basket.API/Basket.API.csproj | 1 + src/Services/Basket/Basket.API/Program.cs | 5 +++++ src/Services/Basket/Basket.API/Startup.cs | 11 ++++++++--- src/Services/Basket/Basket.API/appsettings.json | 5 ++++- src/Services/Catalog/Catalog.API/Catalog.API.csproj | 1 + src/Services/Catalog/Catalog.API/Program.cs | 8 +++++++- src/Services/Catalog/Catalog.API/Startup.cs | 4 ++++ src/Services/Catalog/Catalog.API/appsettings.json | 5 ++++- .../Identity/Identity.API/Identity.API.csproj | 1 + src/Services/Identity/Identity.API/Program.cs | 5 +++++ src/Services/Identity/Identity.API/Startup.cs | 6 +++++- src/Services/Identity/Identity.API/appsettings.json | 3 +++ .../Location/Locations.API/Locations.API.csproj | 1 + src/Services/Location/Locations.API/Program.cs | 9 ++++++++- src/Services/Location/Locations.API/Startup.cs | 5 +++++ src/Services/Location/Locations.API/appsettings.json | 5 ++++- .../Marketing/Marketing.API/Marketing.API.csproj | 8 ++++++++ src/Services/Marketing/Marketing.API/Program.cs | 10 +++++++++- src/Services/Marketing/Marketing.API/Startup.cs | 5 +++++ .../Marketing/Marketing.API/appsettings.json | 10 ++++++---- .../Ordering/Ordering.API/Ordering.API.csproj | 1 + src/Services/Ordering/Ordering.API/Program.cs | 9 ++++++++- src/Services/Ordering/Ordering.API/Startup.cs | 6 +++++- src/Services/Ordering/Ordering.API/settings.json | 5 ++++- src/Services/Payment/Payment.API/Payment.API.csproj | 1 + src/Services/Payment/Payment.API/Program.cs | 9 ++++++++- src/Services/Payment/Payment.API/appsettings.json | 5 ++++- src/Web/WebMVC/Program.cs | 9 ++++++++- src/Web/WebMVC/Startup.cs | 4 ++++ src/Web/WebMVC/WebMVC.csproj | 1 + src/Web/WebMVC/appsettings.json | 3 +++ src/Web/WebSPA/Program.cs | 6 ++++++ src/Web/WebSPA/Startup.cs | 6 ++++++ src/Web/WebSPA/WebSPA.csproj | 1 + src/Web/WebSPA/appsettings.json | 3 +++ src/Web/WebStatus/Program.cs | 9 ++++++++- src/Web/WebStatus/Startup.cs | 7 ++++++- src/Web/WebStatus/WebStatus.csproj | 1 + src/Web/WebStatus/appsettings.json | 5 ++++- 41 files changed, 188 insertions(+), 24 deletions(-) diff --git a/.env b/.env index 797e5fc5c..a1c927e77 100644 --- a/.env +++ b/.env @@ -23,3 +23,4 @@ ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP=10.121.122.92 #ESHOP_AZURE_STORAGE_MARKETING_KEY= #ESHOP_SERVICE_BUS_USERNAME= #ESHOP_SERVICE_BUS_PASSWORD= +#INSTRUMENTATION_KEY= diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 39110c1be..ece9c804b 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -19,6 +19,7 @@ services: - EventBusUserName=${ESHOP_SERVICE_BUS_USERNAME} - EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD} - AzureServiceBusEnabled=False + - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} ports: - "5103:80" @@ -36,6 +37,7 @@ services: - UseCustomizationData=True - AzureServiceBusEnabled=False - AzureStorageEnabled=False + - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} ports: - "5101:80" @@ -51,7 +53,8 @@ services: - MarketingApiClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5110 - BasketApiClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5103 - OrderingApiClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5102 - - UseCustomizationData=True + - UseCustomizationData=True + - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} ports: - "5105:80" @@ -69,6 +72,7 @@ services: - AzureServiceBusEnabled=False - CheckUpdateTime=30000 - GracePeriodTime=1 + - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} ports: - "5102:80" @@ -90,6 +94,7 @@ services: - AzureStorageAccountKey=${ESHOP_AZURE_STORAGE_MARKETING_KEY} - AzureServiceBusEnabled=False - AzureStorageEnabled=False + - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} ports: - "5110:80" @@ -110,6 +115,7 @@ services: - MarketingUrlHC=http://marketing.api/hc - PaymentUrlHC=http://payment.api/hc - UseCustomizationData=True + - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} ports: - "5104:80" @@ -130,6 +136,7 @@ services: - MarketingUrlHC=http://marketing.api/hc - PaymentUrlHC=http://payment.api/hc - UseCustomizationData=True + - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} ports: - "5100:80" @@ -146,6 +153,7 @@ services: - PaymentUrl=http://payment.api/hc - mvc=http://webmvc/hc - spa=http://webspa/hc + - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} ports: - "5107:80" @@ -157,6 +165,7 @@ services: - EventBusUserName=${ESHOP_SERVICE_BUS_USERNAME} - EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD} - AzureServiceBusEnabled=False + - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} ports: - "5108:80" @@ -172,6 +181,7 @@ services: - EventBusUserName=${ESHOP_SERVICE_BUS_USERNAME} - EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD} - AzureServiceBusEnabled=False + - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} ports: - "5109:80" diff --git a/src/Services/Basket/Basket.API/Basket.API.csproj b/src/Services/Basket/Basket.API/Basket.API.csproj index 8864c9d06..4943faf19 100644 --- a/src/Services/Basket/Basket.API/Basket.API.csproj +++ b/src/Services/Basket/Basket.API/Basket.API.csproj @@ -16,6 +16,7 @@ + diff --git a/src/Services/Basket/Basket.API/Program.cs b/src/Services/Basket/Basket.API/Program.cs index 53b6f311f..2ae9b47b2 100644 --- a/src/Services/Basket/Basket.API/Program.cs +++ b/src/Services/Basket/Basket.API/Program.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using System.IO; @@ -23,6 +24,10 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API .UseHealthChecks("/hc") .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup() + .ConfigureAppConfiguration((builderContext, config) => + { + config.AddEnvironmentVariables(); + }) .ConfigureLogging((hostingContext, builder) => { builder.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); diff --git a/src/Services/Basket/Basket.API/Startup.cs b/src/Services/Basket/Basket.API/Startup.cs index b82a912d8..e7f3c1276 100644 --- a/src/Services/Basket/Basket.API/Startup.cs +++ b/src/Services/Basket/Basket.API/Startup.cs @@ -43,7 +43,9 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API // This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) - { + { + services.AddApplicationInsightsTelemetry(Configuration); + // Add framework services. services.AddMvc(options => { @@ -167,14 +169,17 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment env) + public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { + loggerFactory.AddAzureWebAppDiagnostics(); + loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); var pathBase = Configuration["PATH_BASE"]; if (!string.IsNullOrEmpty(pathBase)) { app.UsePathBase(pathBase); - } + } + app.UseStaticFiles(); app.UseCors("CorsPolicy"); diff --git a/src/Services/Basket/Basket.API/appsettings.json b/src/Services/Basket/Basket.API/appsettings.json index f062f76d7..027fe9d23 100644 --- a/src/Services/Basket/Basket.API/appsettings.json +++ b/src/Services/Basket/Basket.API/appsettings.json @@ -10,5 +10,8 @@ "IdentityUrl": "http://localhost:5105", "ConnectionString": "127.0.0.1", "AzureServiceBusEnabled": false, - "SubscriptionClientName": "Basket" + "SubscriptionClientName": "Basket", + "ApplicationInsights": { + "InstrumentationKey": "" + } } \ No newline at end of file diff --git a/src/Services/Catalog/Catalog.API/Catalog.API.csproj b/src/Services/Catalog/Catalog.API/Catalog.API.csproj index 0d8c77efd..a2a4baad9 100644 --- a/src/Services/Catalog/Catalog.API/Catalog.API.csproj +++ b/src/Services/Catalog/Catalog.API/Catalog.API.csproj @@ -35,6 +35,7 @@ + diff --git a/src/Services/Catalog/Catalog.API/Program.cs b/src/Services/Catalog/Catalog.API/Program.cs index 1eeeeb5ec..7d18e2e66 100644 --- a/src/Services/Catalog/Catalog.API/Program.cs +++ b/src/Services/Catalog/Catalog.API/Program.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; using Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -32,14 +33,19 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API WebHost.CreateDefaultBuilder(args) .UseStartup() .UseHealthChecks("/hc") - .UseContentRoot(Directory.GetCurrentDirectory()) + .UseContentRoot(Directory.GetCurrentDirectory()) .UseWebRoot("Pics") + .ConfigureAppConfiguration((builderContext, config) => + { + config.AddEnvironmentVariables(); + }) .ConfigureLogging((hostingContext, builder) => { builder.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); builder.AddConsole(); builder.AddDebug(); }) + .UseApplicationInsights() .Build(); } } \ No newline at end of file diff --git a/src/Services/Catalog/Catalog.API/Startup.cs b/src/Services/Catalog/Catalog.API/Startup.cs index befe82828..34b80526b 100644 --- a/src/Services/Catalog/Catalog.API/Startup.cs +++ b/src/Services/Catalog/Catalog.API/Startup.cs @@ -41,6 +41,8 @@ { // Add framework services. + services.AddApplicationInsightsTelemetry(Configuration); + services.AddHealthChecks(checks => { var minutes = 1; @@ -160,6 +162,8 @@ loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); + loggerFactory.AddAzureWebAppDiagnostics(); + loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); var pathBase = Configuration["PATH_BASE"]; if (!string.IsNullOrEmpty(pathBase)) diff --git a/src/Services/Catalog/Catalog.API/appsettings.json b/src/Services/Catalog/Catalog.API/appsettings.json index dafeca845..dc4e0aa5c 100644 --- a/src/Services/Catalog/Catalog.API/appsettings.json +++ b/src/Services/Catalog/Catalog.API/appsettings.json @@ -12,5 +12,8 @@ }, "AzureServiceBusEnabled": false, "AzureStorageEnabled": false, - "SubscriptionClientName": "Catalog" + "SubscriptionClientName": "Catalog", + "ApplicationInsights": { + "InstrumentationKey": "" + } } diff --git a/src/Services/Identity/Identity.API/Identity.API.csproj b/src/Services/Identity/Identity.API/Identity.API.csproj index cee95b94f..a84d21d55 100644 --- a/src/Services/Identity/Identity.API/Identity.API.csproj +++ b/src/Services/Identity/Identity.API/Identity.API.csproj @@ -16,6 +16,7 @@ + diff --git a/src/Services/Identity/Identity.API/Program.cs b/src/Services/Identity/Identity.API/Program.cs index 0b32b4549..7b73838e6 100644 --- a/src/Services/Identity/Identity.API/Program.cs +++ b/src/Services/Identity/Identity.API/Program.cs @@ -43,12 +43,17 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup() + .ConfigureAppConfiguration((builderContext, config) => + { + config.AddEnvironmentVariables(); + }) .ConfigureLogging((hostingContext, builder) => { builder.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); builder.AddConsole(); builder.AddDebug(); }) + .UseApplicationInsights() .Build(); } } diff --git a/src/Services/Identity/Identity.API/Startup.cs b/src/Services/Identity/Identity.API/Startup.cs index ea5e49102..11e946da6 100644 --- a/src/Services/Identity/Identity.API/Startup.cs +++ b/src/Services/Identity/Identity.API/Startup.cs @@ -31,6 +31,8 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API // This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { + services.AddApplicationInsightsTelemetry(Configuration); + // Add framework services. services.AddDbContext(options => options.UseSqlServer(Configuration["ConnectionString"], @@ -114,7 +116,9 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); - + loggerFactory.AddAzureWebAppDiagnostics(); + loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); + if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); diff --git a/src/Services/Identity/Identity.API/appsettings.json b/src/Services/Identity/Identity.API/appsettings.json index 5633c1022..05e06c441 100644 --- a/src/Services/Identity/Identity.API/appsettings.json +++ b/src/Services/Identity/Identity.API/appsettings.json @@ -12,5 +12,8 @@ "System": "Information", "Microsoft": "Information" } + }, + "ApplicationInsights": { + "InstrumentationKey": "" } } diff --git a/src/Services/Location/Locations.API/Locations.API.csproj b/src/Services/Location/Locations.API/Locations.API.csproj index b1b322708..3d94cdd33 100644 --- a/src/Services/Location/Locations.API/Locations.API.csproj +++ b/src/Services/Location/Locations.API/Locations.API.csproj @@ -11,6 +11,7 @@ + diff --git a/src/Services/Location/Locations.API/Program.cs b/src/Services/Location/Locations.API/Program.cs index 7ebc0ab8a..85f3191cc 100644 --- a/src/Services/Location/Locations.API/Program.cs +++ b/src/Services/Location/Locations.API/Program.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using System.IO; @@ -18,11 +19,17 @@ namespace Microsoft.eShopOnContainers.Services.Locations.API .UseHealthChecks("/hc") .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup() + .ConfigureAppConfiguration((builderContext, config) => + { + config.AddEnvironmentVariables(); + }) .ConfigureLogging((hostingContext, builder) => { builder.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); builder.AddConsole(); builder.AddDebug(); - }).Build(); + }) + .UseApplicationInsights() + .Build(); } } diff --git a/src/Services/Location/Locations.API/Startup.cs b/src/Services/Location/Locations.API/Startup.cs index 442210216..47cf592f7 100644 --- a/src/Services/Location/Locations.API/Startup.cs +++ b/src/Services/Location/Locations.API/Startup.cs @@ -37,6 +37,8 @@ namespace Microsoft.eShopOnContainers.Services.Locations.API public IServiceProvider ConfigureServices(IServiceCollection services) { + services.AddApplicationInsightsTelemetry(Configuration); + services.AddMvc(options => { options.Filters.Add(typeof(HttpGlobalExceptionFilter)); @@ -142,6 +144,9 @@ namespace Microsoft.eShopOnContainers.Services.Locations.API // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { + loggerFactory.AddAzureWebAppDiagnostics(); + loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); + var pathBase = Configuration["PATH_BASE"]; if (!string.IsNullOrEmpty(pathBase)) { diff --git a/src/Services/Location/Locations.API/appsettings.json b/src/Services/Location/Locations.API/appsettings.json index 511bb5c6a..0064466af 100644 --- a/src/Services/Location/Locations.API/appsettings.json +++ b/src/Services/Location/Locations.API/appsettings.json @@ -11,5 +11,8 @@ } }, "AzureServiceBusEnabled": false, - "SubscriptionClientName": "Locations" + "SubscriptionClientName": "Locations", + "ApplicationInsights": { + "InstrumentationKey": "" + } } \ No newline at end of file diff --git a/src/Services/Marketing/Marketing.API/Marketing.API.csproj b/src/Services/Marketing/Marketing.API/Marketing.API.csproj index 2afba2204..9b29871f8 100644 --- a/src/Services/Marketing/Marketing.API/Marketing.API.csproj +++ b/src/Services/Marketing/Marketing.API/Marketing.API.csproj @@ -7,9 +7,12 @@ $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; aspnet-Marketing.API-20161122013619 + /subscriptions/6c22bb55-0221-4ce4-9bf1-3c4a10a7294c/resourcegroups/eshop-log/providers/microsoft.insights/components/eshopappinsights + /subscriptions/6c22bb55-0221-4ce4-9bf1-3c4a10a7294c/resourcegroups/eshop-log/providers/microsoft.insights/components/eshopappinsights + PreserveNewest @@ -18,6 +21,7 @@ + @@ -45,4 +49,8 @@ PreserveNewest + + + + diff --git a/src/Services/Marketing/Marketing.API/Program.cs b/src/Services/Marketing/Marketing.API/Program.cs index 32852073c..70b2362e1 100644 --- a/src/Services/Marketing/Marketing.API/Program.cs +++ b/src/Services/Marketing/Marketing.API/Program.cs @@ -3,6 +3,7 @@ using AspNetCore.Hosting; using Microsoft.AspNetCore; using Microsoft.eShopOnContainers.Services.Marketing.API.Infrastructure; + using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System.IO; @@ -25,15 +26,22 @@ public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) + .UseApplicationInsights() .UseHealthChecks("/hc") .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup() .UseWebRoot("Pics") + .ConfigureAppConfiguration((builderContext, config) => + { + config.AddEnvironmentVariables(); + }) .ConfigureLogging((hostingContext, builder) => { builder.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); builder.AddConsole(); builder.AddDebug(); - }).Build(); + }) + .UseApplicationInsights() + .Build(); } } diff --git a/src/Services/Marketing/Marketing.API/Startup.cs b/src/Services/Marketing/Marketing.API/Startup.cs index 0df0285d8..321bf93c7 100644 --- a/src/Services/Marketing/Marketing.API/Startup.cs +++ b/src/Services/Marketing/Marketing.API/Startup.cs @@ -44,6 +44,8 @@ // This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { + services.AddApplicationInsightsTelemetry(Configuration); + // Add framework services. services.AddMvc(options => { @@ -172,6 +174,9 @@ // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory) { + loggerFactory.AddAzureWebAppDiagnostics(); + loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); + var pathBase = Configuration["PATH_BASE"]; if (!string.IsNullOrEmpty(pathBase)) diff --git a/src/Services/Marketing/Marketing.API/appsettings.json b/src/Services/Marketing/Marketing.API/appsettings.json index 21aae065a..cc55a4052 100644 --- a/src/Services/Marketing/Marketing.API/appsettings.json +++ b/src/Services/Marketing/Marketing.API/appsettings.json @@ -1,4 +1,4 @@ -{ +{ "Logging": { "IncludeScopes": false, "LogLevel": { @@ -12,6 +12,8 @@ "PicBaseUrl": "http://localhost:5110/api/v1/campaigns/[0]/pic/", "AzureServiceBusEnabled": false, "SubscriptionClientName": "Marketing", - "AzureStorageEnabled": false - -} + "AzureStorageEnabled": false, + "ApplicationInsights": { + "InstrumentationKey": "" + } +} \ No newline at end of file diff --git a/src/Services/Ordering/Ordering.API/Ordering.API.csproj b/src/Services/Ordering/Ordering.API/Ordering.API.csproj index 123f9e838..d4ebd294a 100644 --- a/src/Services/Ordering/Ordering.API/Ordering.API.csproj +++ b/src/Services/Ordering/Ordering.API/Ordering.API.csproj @@ -37,6 +37,7 @@ + diff --git a/src/Services/Ordering/Ordering.API/Program.cs b/src/Services/Ordering/Ordering.API/Program.cs index 46221b42c..011f3004f 100644 --- a/src/Services/Ordering/Ordering.API/Program.cs +++ b/src/Services/Ordering/Ordering.API/Program.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; using Microsoft.eShopOnContainers.Services.Ordering.API.Infrastructure; using Microsoft.eShopOnContainers.Services.Ordering.Infrastructure; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -30,16 +31,22 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API } public static IWebHost BuildWebHost(string[] args) => - WebHost.CreateDefaultBuilder(args) + WebHost.CreateDefaultBuilder(args) .UseStartup() .UseHealthChecks("/hc") .UseContentRoot(Directory.GetCurrentDirectory()) + .ConfigureAppConfiguration((builderContext, config) => + { + config.AddJsonFile("settings.json"); + config.AddEnvironmentVariables(); + }) .ConfigureLogging((hostingContext, builder) => { builder.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); builder.AddConsole(); builder.AddDebug(); }) + .UseApplicationInsights() .Build(); } } diff --git a/src/Services/Ordering/Ordering.API/Startup.cs b/src/Services/Ordering/Ordering.API/Startup.cs index 1a32a97c4..a4b5d1e1f 100644 --- a/src/Services/Ordering/Ordering.API/Startup.cs +++ b/src/Services/Ordering/Ordering.API/Startup.cs @@ -46,6 +46,8 @@ public IServiceProvider ConfigureServices(IServiceCollection services) { + services.AddApplicationInsightsTelemetry(Configuration); + // Add framework services. services.AddMvc(options => { @@ -196,6 +198,8 @@ { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); + loggerFactory.AddAzureWebAppDiagnostics(); + loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); var pathBase = Configuration["PATH_BASE"]; if (!string.IsNullOrEmpty(pathBase)) @@ -203,7 +207,7 @@ loggerFactory.CreateLogger("init").LogDebug($"Using PATH BASE '{pathBase}'"); app.UsePathBase(pathBase); } - + app.UseCors("CorsPolicy"); ConfigureAuth(app); diff --git a/src/Services/Ordering/Ordering.API/settings.json b/src/Services/Ordering/Ordering.API/settings.json index d2068fcab..f20261e31 100644 --- a/src/Services/Ordering/Ordering.API/settings.json +++ b/src/Services/Ordering/Ordering.API/settings.json @@ -13,5 +13,8 @@ "AzureServiceBusEnabled": false, "SubscriptionClientName": "Ordering", "GracePeriodTime": "1", - "CheckUpdateTime": "30000" + "CheckUpdateTime": "30000", + "ApplicationInsights": { + "InstrumentationKey": "" + } } diff --git a/src/Services/Payment/Payment.API/Payment.API.csproj b/src/Services/Payment/Payment.API/Payment.API.csproj index ab28a210d..736d13d7a 100644 --- a/src/Services/Payment/Payment.API/Payment.API.csproj +++ b/src/Services/Payment/Payment.API/Payment.API.csproj @@ -8,6 +8,7 @@ + diff --git a/src/Services/Payment/Payment.API/Program.cs b/src/Services/Payment/Payment.API/Program.cs index a373e2695..aff7bf359 100644 --- a/src/Services/Payment/Payment.API/Program.cs +++ b/src/Services/Payment/Payment.API/Program.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using System.IO; @@ -18,11 +19,17 @@ namespace Payment.API .UseHealthChecks("/hc") .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup() + .ConfigureAppConfiguration((builderContext, config) => + { + config.AddEnvironmentVariables(); + }) .ConfigureLogging((hostingContext, builder) => { builder.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); builder.AddConsole(); builder.AddDebug(); - }).Build(); + }) + .UseApplicationInsights() + .Build(); } } diff --git a/src/Services/Payment/Payment.API/appsettings.json b/src/Services/Payment/Payment.API/appsettings.json index 9aef99a14..ad668a388 100644 --- a/src/Services/Payment/Payment.API/appsettings.json +++ b/src/Services/Payment/Payment.API/appsettings.json @@ -7,5 +7,8 @@ }, "PaymentSucceded": true, "AzureServiceBusEnabled": false, - "SubscriptionClientName": "Payment" + "SubscriptionClientName": "Payment", + "ApplicationInsights": { + "InstrumentationKey": "" + } } diff --git a/src/Web/WebMVC/Program.cs b/src/Web/WebMVC/Program.cs index ec711b2ae..07332a02a 100644 --- a/src/Web/WebMVC/Program.cs +++ b/src/Web/WebMVC/Program.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using System.IO; @@ -17,11 +18,17 @@ namespace Microsoft.eShopOnContainers.WebMVC .UseContentRoot(Directory.GetCurrentDirectory()) .UseHealthChecks("/hc") .UseStartup() + .ConfigureAppConfiguration((builderContext, config) => + { + config.AddEnvironmentVariables(); + }) .ConfigureLogging((hostingContext, builder) => { builder.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); builder.AddConsole(); builder.AddDebug(); - }).Build(); + }) + .UseApplicationInsights() + .Build(); } } diff --git a/src/Web/WebMVC/Startup.cs b/src/Web/WebMVC/Startup.cs index a5b690296..6208b4c06 100644 --- a/src/Web/WebMVC/Startup.cs +++ b/src/Web/WebMVC/Startup.cs @@ -31,6 +31,8 @@ namespace Microsoft.eShopOnContainers.WebMVC // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { + services.AddApplicationInsightsTelemetry(Configuration); + services.AddMvc(); services.AddSession(); @@ -115,6 +117,8 @@ namespace Microsoft.eShopOnContainers.WebMVC loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); + loggerFactory.AddAzureWebAppDiagnostics(); + loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); if (env.IsDevelopment()) { diff --git a/src/Web/WebMVC/WebMVC.csproj b/src/Web/WebMVC/WebMVC.csproj index e8cdbc528..5b086a904 100644 --- a/src/Web/WebMVC/WebMVC.csproj +++ b/src/Web/WebMVC/WebMVC.csproj @@ -36,6 +36,7 @@ --> + diff --git a/src/Web/WebMVC/appsettings.json b/src/Web/WebMVC/appsettings.json index a9a73120f..b68e719dd 100644 --- a/src/Web/WebMVC/appsettings.json +++ b/src/Web/WebMVC/appsettings.json @@ -18,5 +18,8 @@ "System": "Information", "Microsoft": "Information" } + }, + "ApplicationInsights": { + "InstrumentationKey": "" } } \ No newline at end of file diff --git a/src/Web/WebSPA/Program.cs b/src/Web/WebSPA/Program.cs index 92a6af2da..c1a7da269 100644 --- a/src/Web/WebSPA/Program.cs +++ b/src/Web/WebSPA/Program.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Hosting; using System.IO; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Configuration; namespace eShopConContainers.WebSPA { @@ -17,12 +18,17 @@ namespace eShopConContainers.WebSPA .UseStartup() .UseHealthChecks("/hc") .UseContentRoot(Directory.GetCurrentDirectory()) + .ConfigureAppConfiguration((builderContext, config) => + { + config.AddEnvironmentVariables(); + }) .ConfigureLogging((hostingContext, builder) => { builder.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); builder.AddConsole(); builder.AddDebug(); }) + .UseApplicationInsights() .Build(); } } diff --git a/src/Web/WebSPA/Startup.cs b/src/Web/WebSPA/Startup.cs index 0e9585c8c..0960d68e1 100644 --- a/src/Web/WebSPA/Startup.cs +++ b/src/Web/WebSPA/Startup.cs @@ -36,6 +36,8 @@ namespace eShopConContainers.WebSPA // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { + services.AddApplicationInsightsTelemetry(Configuration); + services.AddHealthChecks(checks => { var minutes = 1; @@ -76,6 +78,10 @@ namespace eShopConContainers.WebSPA // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IAntiforgery antiforgery) { + + loggerFactory.AddAzureWebAppDiagnostics(); + loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); + if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); diff --git a/src/Web/WebSPA/WebSPA.csproj b/src/Web/WebSPA/WebSPA.csproj index 1efcb89e6..40ab683fe 100644 --- a/src/Web/WebSPA/WebSPA.csproj +++ b/src/Web/WebSPA/WebSPA.csproj @@ -27,6 +27,7 @@ + diff --git a/src/Web/WebSPA/appsettings.json b/src/Web/WebSPA/appsettings.json index 7f8a004f8..7b1930f84 100644 --- a/src/Web/WebSPA/appsettings.json +++ b/src/Web/WebSPA/appsettings.json @@ -15,5 +15,8 @@ "System": "Information", "Microsoft": "Information" } + }, + "ApplicationInsights": { + "InstrumentationKey": "" } } \ No newline at end of file diff --git a/src/Web/WebStatus/Program.cs b/src/Web/WebStatus/Program.cs index 6a895f9e7..adab0e6b3 100644 --- a/src/Web/WebStatus/Program.cs +++ b/src/Web/WebStatus/Program.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using System.IO; @@ -16,11 +17,17 @@ namespace WebStatus WebHost.CreateDefaultBuilder(args) .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup() + .ConfigureAppConfiguration((builderContext, config) => + { + config.AddEnvironmentVariables(); + }) .ConfigureLogging((hostingContext, builder) => { builder.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); builder.AddConsole(); builder.AddDebug(); - }).Build(); + }) + .UseApplicationInsights() + .Build(); } } diff --git a/src/Web/WebStatus/Startup.cs b/src/Web/WebStatus/Startup.cs index acbe9edcb..0b7271238 100644 --- a/src/Web/WebStatus/Startup.cs +++ b/src/Web/WebStatus/Startup.cs @@ -23,6 +23,8 @@ namespace WebStatus // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { + services.AddApplicationInsightsTelemetry(Configuration); + services.AddOptions(); // Add framework services. @@ -49,8 +51,11 @@ namespace WebStatus } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment env) + public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { + loggerFactory.AddAzureWebAppDiagnostics(); + loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); + if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); diff --git a/src/Web/WebStatus/WebStatus.csproj b/src/Web/WebStatus/WebStatus.csproj index 7939b146a..603db6850 100644 --- a/src/Web/WebStatus/WebStatus.csproj +++ b/src/Web/WebStatus/WebStatus.csproj @@ -5,6 +5,7 @@ ..\..\..\docker-compose.dcproj + diff --git a/src/Web/WebStatus/appsettings.json b/src/Web/WebStatus/appsettings.json index e8d5a9f60..bf413fcbf 100644 --- a/src/Web/WebStatus/appsettings.json +++ b/src/Web/WebStatus/appsettings.json @@ -13,5 +13,8 @@ "IdentityUrl": "http://localhost:5105/hc", "MarketingUrl": "http://localhost:5110/hc", "LocationsUrl": "http://localhost:5109/hc", - "PaymentUrl": "http://localhost:5108/hc" + "PaymentUrl": "http://localhost:5108/hc", + "ApplicationInsights": { + "InstrumentationKey": "" + } } From c3e15969b9e001a0bd57d2ea5318bf3e5bbf4875 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Wed, 11 Oct 2017 18:53:26 +0200 Subject: [PATCH 070/136] Added Appinsights K8s telemetry initializer --- .env | 1 + docker-compose.override.yml | 9 ++ k8s/conf_local.yml | 2 + k8s/deployments.yaml | 84 +++++++++++++++++-- .../Basket/Basket.API/Basket.API.csproj | 2 + src/Services/Basket/Basket.API/Program.cs | 1 + src/Services/Basket/Basket.API/Startup.cs | 10 ++- .../Catalog/Catalog.API/Catalog.API.csproj | 2 + src/Services/Catalog/Catalog.API/Program.cs | 4 +- src/Services/Catalog/Catalog.API/Startup.cs | 7 +- .../Identity/Identity.API/Identity.API.csproj | 2 + src/Services/Identity/Identity.API/Startup.cs | 6 ++ .../Locations.API/Locations.API.csproj | 2 + .../Location/Locations.API/Startup.cs | 6 ++ .../Marketing.API/Marketing.API.csproj | 2 + .../Marketing/Marketing.API/Startup.cs | 8 +- .../Ordering/Ordering.API/Ordering.API.csproj | 2 + src/Services/Ordering/Ordering.API/Startup.cs | 8 +- .../Payment/Payment.API/Payment.API.csproj | 2 + src/Services/Payment/Payment.API/Startup.cs | 14 +++- src/Web/WebMVC/Startup.cs | 6 ++ src/Web/WebMVC/WebMVC.csproj | 2 + src/Web/WebSPA/Startup.cs | 6 ++ src/Web/WebSPA/WebSPA.csproj | 2 + src/Web/WebStatus/Startup.cs | 6 ++ src/Web/WebStatus/WebStatus.csproj | 2 + 26 files changed, 182 insertions(+), 16 deletions(-) diff --git a/.env b/.env index a1c927e77..9deb66be7 100644 --- a/.env +++ b/.env @@ -24,3 +24,4 @@ ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP=10.121.122.92 #ESHOP_SERVICE_BUS_USERNAME= #ESHOP_SERVICE_BUS_PASSWORD= #INSTRUMENTATION_KEY= +#ORCHESTRATOR_TYPE= \ No newline at end of file diff --git a/docker-compose.override.yml b/docker-compose.override.yml index ece9c804b..81a6ba959 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -20,6 +20,7 @@ services: - EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD} - AzureServiceBusEnabled=False - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} + - OrchestratorType=${ORCHESTRATOR_TYPE} ports: - "5103:80" @@ -38,6 +39,7 @@ services: - AzureServiceBusEnabled=False - AzureStorageEnabled=False - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} + - OrchestratorType=${ORCHESTRATOR_TYPE} ports: - "5101:80" @@ -55,6 +57,7 @@ services: - OrderingApiClient=http://${ESHOP_EXTERNAL_DNS_NAME_OR_IP}:5102 - UseCustomizationData=True - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} + - OrchestratorType=${ORCHESTRATOR_TYPE} ports: - "5105:80" @@ -73,6 +76,7 @@ services: - CheckUpdateTime=30000 - GracePeriodTime=1 - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} + - OrchestratorType=${ORCHESTRATOR_TYPE} ports: - "5102:80" @@ -95,6 +99,7 @@ services: - AzureServiceBusEnabled=False - AzureStorageEnabled=False - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} + - OrchestratorType=${ORCHESTRATOR_TYPE} ports: - "5110:80" @@ -116,6 +121,7 @@ services: - PaymentUrlHC=http://payment.api/hc - UseCustomizationData=True - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} + - OrchestratorType=${ORCHESTRATOR_TYPE} ports: - "5104:80" @@ -137,6 +143,7 @@ services: - PaymentUrlHC=http://payment.api/hc - UseCustomizationData=True - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} + - OrchestratorType=${ORCHESTRATOR_TYPE} ports: - "5100:80" @@ -154,6 +161,7 @@ services: - mvc=http://webmvc/hc - spa=http://webspa/hc - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} + - OrchestratorType=${ORCHESTRATOR_TYPE} ports: - "5107:80" @@ -182,6 +190,7 @@ services: - EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD} - AzureServiceBusEnabled=False - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} + - OrchestratorType=${ORCHESTRATOR_TYPE} ports: - "5109:80" diff --git a/k8s/conf_local.yml b/k8s/conf_local.yml index 00d1c2398..a605ff7aa 100644 --- a/k8s/conf_local.yml +++ b/k8s/conf_local.yml @@ -25,5 +25,7 @@ data: keystore: keystore-data GracePeriodManager_GracePeriodTime: "1" GracePeriodManager_CheckUpdateTime: "15000" + Instrumentation_Key: "" + diff --git a/k8s/deployments.yaml b/k8s/deployments.yaml index 2a9d6862e..14b5ac31b 100644 --- a/k8s/deployments.yaml +++ b/k8s/deployments.yaml @@ -32,11 +32,18 @@ spec: configMapKeyRef: name: externalcfg key: UseAzureServiceBus + - name: ApplicationInsights__InstrumentationKey + valueFrom: + configMapKeyRef: + name: externalcfg + key: Instrumentation_Key - name: IdentityUrl valueFrom: configMapKeyRef: name: urls key: IdentityUrl + - name: OrchestratorType + value: 'K8S' ports: - containerPort: 80 readinessProbe: @@ -95,6 +102,13 @@ spec: configMapKeyRef: name: externalcfg key: CatalogBus + - name: ApplicationInsights__InstrumentationKey + valueFrom: + configMapKeyRef: + name: externalcfg + key: Instrumentation_Key + - name: OrchestratorType + value: 'K8S' ports: - containerPort: 80 readinessProbe: @@ -133,7 +147,7 @@ spec: env: - name: PATH_BASE value: /identity - - name: ConnectionStrings__DefaultConnection + - name: ConnectionString valueFrom: configMapKeyRef: name: externalcfg @@ -174,7 +188,14 @@ spec: valueFrom: configMapKeyRef: name: urls - key: OrderingApiClient + key: OrderingApiClient + - name: ApplicationInsights__InstrumentationKey + valueFrom: + configMapKeyRef: + name: externalcfg + key: Instrumentation_Key + - name: OrchestratorType + value: 'K8S' ports: - containerPort: 80 readinessProbe: @@ -242,7 +263,14 @@ spec: valueFrom: configMapKeyRef: name: externalcfg - key: GracePeriodManager_GracePeriodTime + key: GracePeriodManager_GracePeriodTime + - name: ApplicationInsights__InstrumentationKey + valueFrom: + configMapKeyRef: + name: externalcfg + key: Instrumentation_Key + - name: OrchestratorType + value: 'K8S' ports: - containerPort: 80 readinessProbe: @@ -310,7 +338,14 @@ spec: valueFrom: configMapKeyRef: name: urls - key: IdentityUrl + key: IdentityUrl + - name: ApplicationInsights__InstrumentationKey + valueFrom: + configMapKeyRef: + name: externalcfg + key: Instrumentation_Key + - name: OrchestratorType + value: 'K8S' ports: - containerPort: 80 readinessProbe: @@ -388,7 +423,14 @@ spec: valueFrom: configMapKeyRef: name: urls - key: Marketing_PicBaseUrl + key: Marketing_PicBaseUrl + - name: ApplicationInsights__InstrumentationKey + valueFrom: + configMapKeyRef: + name: externalcfg + key: Instrumentation_Key + - name: OrchestratorType + value: 'K8S' ports: - containerPort: 80 readinessProbe: @@ -437,6 +479,13 @@ spec: configMapKeyRef: name: externalcfg key: PaymentBus + - name: ApplicationInsights__InstrumentationKey + valueFrom: + configMapKeyRef: + name: externalcfg + key: Instrumentation_Key + - name: OrchestratorType + value: 'K8S' ports: - containerPort: 80 readinessProbe: @@ -546,7 +595,14 @@ spec: valueFrom: configMapKeyRef: name: urls - key: PaymentHealthCheckUrl + key: PaymentHealthCheckUrl + - name: ApplicationInsights__InstrumentationKey + valueFrom: + configMapKeyRef: + name: externalcfg + key: Instrumentation_Key + - name: OrchestratorType + value: 'K8S' ports: - containerPort: 80 readinessProbe: @@ -629,7 +685,14 @@ spec: valueFrom: configMapKeyRef: name: urls - key: PaymentHealthCheckUrl + key: PaymentHealthCheckUrl + - name: ApplicationInsights__InstrumentationKey + valueFrom: + configMapKeyRef: + name: externalcfg + key: Instrumentation_Key + - name: OrchestratorType + value: 'K8S' ports: - containerPort: 80 imagePullSecrets: @@ -726,6 +789,13 @@ spec: configMapKeyRef: name: urls key: PaymentHealthCheckUrl + - name: ApplicationInsights__InstrumentationKey + valueFrom: + configMapKeyRef: + name: externalcfg + key: Instrumentation_Key + - name: OrchestratorType + value: 'K8S' ports: - containerPort: 80 readinessProbe: diff --git a/src/Services/Basket/Basket.API/Basket.API.csproj b/src/Services/Basket/Basket.API/Basket.API.csproj index 4943faf19..5e07fbddb 100644 --- a/src/Services/Basket/Basket.API/Basket.API.csproj +++ b/src/Services/Basket/Basket.API/Basket.API.csproj @@ -17,6 +17,8 @@ + + diff --git a/src/Services/Basket/Basket.API/Program.cs b/src/Services/Basket/Basket.API/Program.cs index 2ae9b47b2..19bbf2c24 100644 --- a/src/Services/Basket/Basket.API/Program.cs +++ b/src/Services/Basket/Basket.API/Program.cs @@ -34,6 +34,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API builder.AddConsole(); builder.AddDebug(); }) + .UseApplicationInsights() .Build(); } } diff --git a/src/Services/Basket/Basket.API/Startup.cs b/src/Services/Basket/Basket.API/Startup.cs index e7f3c1276..ae65a8486 100644 --- a/src/Services/Basket/Basket.API/Startup.cs +++ b/src/Services/Basket/Basket.API/Startup.cs @@ -65,6 +65,12 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API services.Configure(Configuration); + if(Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + //By connecting here we are making sure that our service //cannot start until redis is ready. This might slow down startup, //but given that there is a delay on resolving the ip address @@ -203,8 +209,8 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API // prevent from mapping "sub" claim to nameidentifier. JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); - var identityUrl = Configuration.GetValue("IdentityUrl"); - + var identityUrl = Configuration.GetValue("IdentityUrl"); + services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; diff --git a/src/Services/Catalog/Catalog.API/Catalog.API.csproj b/src/Services/Catalog/Catalog.API/Catalog.API.csproj index a2a4baad9..5d5812953 100644 --- a/src/Services/Catalog/Catalog.API/Catalog.API.csproj +++ b/src/Services/Catalog/Catalog.API/Catalog.API.csproj @@ -36,6 +36,8 @@ + + diff --git a/src/Services/Catalog/Catalog.API/Program.cs b/src/Services/Catalog/Catalog.API/Program.cs index 7d18e2e66..bef3fa360 100644 --- a/src/Services/Catalog/Catalog.API/Program.cs +++ b/src/Services/Catalog/Catalog.API/Program.cs @@ -32,6 +32,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup() + .UseApplicationInsights() .UseHealthChecks("/hc") .UseContentRoot(Directory.GetCurrentDirectory()) .UseWebRoot("Pics") @@ -44,8 +45,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API builder.AddConfiguration(hostingContext.Configuration.GetSection("Logging")); builder.AddConsole(); builder.AddDebug(); - }) - .UseApplicationInsights() + }) .Build(); } } \ No newline at end of file diff --git a/src/Services/Catalog/Catalog.API/Startup.cs b/src/Services/Catalog/Catalog.API/Startup.cs index 34b80526b..ef61f1aeb 100644 --- a/src/Services/Catalog/Catalog.API/Startup.cs +++ b/src/Services/Catalog/Catalog.API/Startup.cs @@ -13,7 +13,6 @@ using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; using Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ; using Microsoft.eShopOnContainers.BuildingBlocks.EventBusServiceBus; - using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF.Services; using Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure; using Microsoft.eShopOnContainers.Services.Catalog.API.IntegrationEvents.EventHandling; @@ -43,6 +42,12 @@ services.AddApplicationInsightsTelemetry(Configuration); + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + services.AddHealthChecks(checks => { var minutes = 1; diff --git a/src/Services/Identity/Identity.API/Identity.API.csproj b/src/Services/Identity/Identity.API/Identity.API.csproj index a84d21d55..84b1c280c 100644 --- a/src/Services/Identity/Identity.API/Identity.API.csproj +++ b/src/Services/Identity/Identity.API/Identity.API.csproj @@ -17,6 +17,8 @@ + + diff --git a/src/Services/Identity/Identity.API/Startup.cs b/src/Services/Identity/Identity.API/Startup.cs index 11e946da6..da93e1a51 100644 --- a/src/Services/Identity/Identity.API/Startup.cs +++ b/src/Services/Identity/Identity.API/Startup.cs @@ -33,6 +33,12 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API { services.AddApplicationInsightsTelemetry(Configuration); + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + // Add framework services. services.AddDbContext(options => options.UseSqlServer(Configuration["ConnectionString"], diff --git a/src/Services/Location/Locations.API/Locations.API.csproj b/src/Services/Location/Locations.API/Locations.API.csproj index 3d94cdd33..f6a2b0e98 100644 --- a/src/Services/Location/Locations.API/Locations.API.csproj +++ b/src/Services/Location/Locations.API/Locations.API.csproj @@ -12,6 +12,8 @@ + + diff --git a/src/Services/Location/Locations.API/Startup.cs b/src/Services/Location/Locations.API/Startup.cs index 47cf592f7..115fa5f32 100644 --- a/src/Services/Location/Locations.API/Startup.cs +++ b/src/Services/Location/Locations.API/Startup.cs @@ -39,6 +39,12 @@ namespace Microsoft.eShopOnContainers.Services.Locations.API { services.AddApplicationInsightsTelemetry(Configuration); + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + services.AddMvc(options => { options.Filters.Add(typeof(HttpGlobalExceptionFilter)); diff --git a/src/Services/Marketing/Marketing.API/Marketing.API.csproj b/src/Services/Marketing/Marketing.API/Marketing.API.csproj index 9b29871f8..a462eb04e 100644 --- a/src/Services/Marketing/Marketing.API/Marketing.API.csproj +++ b/src/Services/Marketing/Marketing.API/Marketing.API.csproj @@ -22,6 +22,8 @@ + + diff --git a/src/Services/Marketing/Marketing.API/Startup.cs b/src/Services/Marketing/Marketing.API/Startup.cs index 321bf93c7..540cb8a12 100644 --- a/src/Services/Marketing/Marketing.API/Startup.cs +++ b/src/Services/Marketing/Marketing.API/Startup.cs @@ -46,6 +46,12 @@ { services.AddApplicationInsightsTelemetry(Configuration); + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + // Add framework services. services.AddMvc(options => { @@ -200,7 +206,7 @@ ConfigureEventBus(app); } - private void ConfigureAuthService(IServiceCollection services) + private void ConfigureAuthService(IServiceCollection services, ILoggerFactory loggerFactory) { // prevent from mapping "sub" claim to nameidentifier. JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); diff --git a/src/Services/Ordering/Ordering.API/Ordering.API.csproj b/src/Services/Ordering/Ordering.API/Ordering.API.csproj index d4ebd294a..89a3b81a6 100644 --- a/src/Services/Ordering/Ordering.API/Ordering.API.csproj +++ b/src/Services/Ordering/Ordering.API/Ordering.API.csproj @@ -38,6 +38,8 @@ + + diff --git a/src/Services/Ordering/Ordering.API/Startup.cs b/src/Services/Ordering/Ordering.API/Startup.cs index a4b5d1e1f..79de89394 100644 --- a/src/Services/Ordering/Ordering.API/Startup.cs +++ b/src/Services/Ordering/Ordering.API/Startup.cs @@ -47,7 +47,13 @@ public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddApplicationInsightsTelemetry(Configuration); - + + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + // Add framework services. services.AddMvc(options => { diff --git a/src/Services/Payment/Payment.API/Payment.API.csproj b/src/Services/Payment/Payment.API/Payment.API.csproj index 736d13d7a..465acae4c 100644 --- a/src/Services/Payment/Payment.API/Payment.API.csproj +++ b/src/Services/Payment/Payment.API/Payment.API.csproj @@ -9,6 +9,8 @@ + + diff --git a/src/Services/Payment/Payment.API/Startup.cs b/src/Services/Payment/Payment.API/Startup.cs index 0fc94fc1d..e20b2fd76 100644 --- a/src/Services/Payment/Payment.API/Startup.cs +++ b/src/Services/Payment/Payment.API/Startup.cs @@ -32,9 +32,16 @@ namespace Payment.API // This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { + services.AddApplicationInsightsTelemetry(Configuration); services.Configure(Configuration); + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + if (Configuration.GetValue("AzureServiceBusEnabled")) { services.AddSingleton(sp => @@ -84,8 +91,11 @@ namespace Payment.API } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. - public void Configure(IApplicationBuilder app, IHostingEnvironment env) - { + public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) + { + loggerFactory.AddAzureWebAppDiagnostics(); + loggerFactory.AddApplicationInsights(app.ApplicationServices, LogLevel.Trace); + var pathBase = Configuration["PATH_BASE"]; if (!string.IsNullOrEmpty(pathBase)) { diff --git a/src/Web/WebMVC/Startup.cs b/src/Web/WebMVC/Startup.cs index 6208b4c06..509a55947 100644 --- a/src/Web/WebMVC/Startup.cs +++ b/src/Web/WebMVC/Startup.cs @@ -33,6 +33,12 @@ namespace Microsoft.eShopOnContainers.WebMVC { services.AddApplicationInsightsTelemetry(Configuration); + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + services.AddMvc(); services.AddSession(); diff --git a/src/Web/WebMVC/WebMVC.csproj b/src/Web/WebMVC/WebMVC.csproj index 5b086a904..d1a957b27 100644 --- a/src/Web/WebMVC/WebMVC.csproj +++ b/src/Web/WebMVC/WebMVC.csproj @@ -37,6 +37,8 @@ + + diff --git a/src/Web/WebSPA/Startup.cs b/src/Web/WebSPA/Startup.cs index 0960d68e1..9315088cf 100644 --- a/src/Web/WebSPA/Startup.cs +++ b/src/Web/WebSPA/Startup.cs @@ -38,6 +38,12 @@ namespace eShopConContainers.WebSPA { services.AddApplicationInsightsTelemetry(Configuration); + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + services.AddHealthChecks(checks => { var minutes = 1; diff --git a/src/Web/WebSPA/WebSPA.csproj b/src/Web/WebSPA/WebSPA.csproj index 40ab683fe..f3fa64cdc 100644 --- a/src/Web/WebSPA/WebSPA.csproj +++ b/src/Web/WebSPA/WebSPA.csproj @@ -28,6 +28,8 @@ + + diff --git a/src/Web/WebStatus/Startup.cs b/src/Web/WebStatus/Startup.cs index 0b7271238..f869fbb9b 100644 --- a/src/Web/WebStatus/Startup.cs +++ b/src/Web/WebStatus/Startup.cs @@ -25,6 +25,12 @@ namespace WebStatus { services.AddApplicationInsightsTelemetry(Configuration); + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + services.AddOptions(); // Add framework services. diff --git a/src/Web/WebStatus/WebStatus.csproj b/src/Web/WebStatus/WebStatus.csproj index 603db6850..9a547e3fc 100644 --- a/src/Web/WebStatus/WebStatus.csproj +++ b/src/Web/WebStatus/WebStatus.csproj @@ -6,6 +6,8 @@ + + From 121a92c557e23638623b4c557428ba50d748eeee Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Wed, 11 Oct 2017 10:00:39 -0700 Subject: [PATCH 071/136] Fix for regression bug at AddDbContext for Catalog.API --- src/Services/Catalog/Catalog.API/Startup.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/Services/Catalog/Catalog.API/Startup.cs b/src/Services/Catalog/Catalog.API/Startup.cs index befe82828..31a3e88fb 100644 --- a/src/Services/Catalog/Catalog.API/Startup.cs +++ b/src/Services/Catalog/Catalog.API/Startup.cs @@ -79,6 +79,17 @@ //Check Client vs. Server evaluation: https://docs.microsoft.com/en-us/ef/core/querying/client-eval }); + services.AddDbContext(options => + { + options.UseSqlServer(Configuration["ConnectionString"], + sqlServerOptionsAction: sqlOptions => + { + sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().Assembly.GetName().Name); + //Configuring Connection Resiliency: https://docs.microsoft.com/en-us/ef/core/miscellaneous/connection-resiliency + sqlOptions.EnableRetryOnFailure(maxRetryCount: 10, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null); + }); + }); + services.Configure(Configuration); // Add framework services. From c9ad364aa58d18c406454c1634d30f4adb2d11a3 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Wed, 11 Oct 2017 10:10:52 -0700 Subject: [PATCH 072/136] Missing fix --- src/Services/Catalog/Catalog.API/Startup.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Services/Catalog/Catalog.API/Startup.cs b/src/Services/Catalog/Catalog.API/Startup.cs index 78c2d7ace..c04039a73 100644 --- a/src/Services/Catalog/Catalog.API/Startup.cs +++ b/src/Services/Catalog/Catalog.API/Startup.cs @@ -13,6 +13,7 @@ using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; using Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ; using Microsoft.eShopOnContainers.BuildingBlocks.EventBusServiceBus; + using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF; using Microsoft.eShopOnContainers.BuildingBlocks.IntegrationEventLogEF.Services; using Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure; using Microsoft.eShopOnContainers.Services.Catalog.API.IntegrationEvents.EventHandling; From 3f6f598e8a00b35b97efc521f376ba7e4bbfacc2 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Wed, 11 Oct 2017 11:33:35 -0700 Subject: [PATCH 073/136] Fixed bug about loggerFactory and ConfigureAuthService() at MArketing.API Startup.cs --- src/Services/Marketing/Marketing.API/Startup.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Services/Marketing/Marketing.API/Startup.cs b/src/Services/Marketing/Marketing.API/Startup.cs index 540cb8a12..45f4974c1 100644 --- a/src/Services/Marketing/Marketing.API/Startup.cs +++ b/src/Services/Marketing/Marketing.API/Startup.cs @@ -206,7 +206,7 @@ ConfigureEventBus(app); } - private void ConfigureAuthService(IServiceCollection services, ILoggerFactory loggerFactory) + private void ConfigureAuthService(IServiceCollection services) { // prevent from mapping "sub" claim to nameidentifier. JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); From a2fb0baaae76249d987f13b8a8de2521ccebcd5b Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Wed, 11 Oct 2017 16:24:11 -0700 Subject: [PATCH 074/136] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c71966f5f..67632ecef 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # eShopOnContainers - Microservices Architecture and Containers based Reference Application (**BETA state** - Visual Studio 2017 and CLI environments compatible) Sample .NET Core reference application, powered by Microsoft, based on a simplified microservices architecture and Docker containers.

    +**Note Visual Studio 2017 version required**: This is important as of Oct. 11th 2017. For working with Docker and docker-compose files, do not migrate to VS 2017 15.4 as it has a bug when using TAGs in the docker-compose files. Please, either use VS 2017 15.35 or VS 2017 15.5 Preview 1 or later. Download of Preview here: https://www.visualstudio.com/vs/preview/ + **Note for Pull Requests**: We accept pull request from the community. When doing it, please do it onto the DEV branch which is the consolidated work-in-progress branch. Do not request it onto Master, if possible. ## Moving to .NET Core 2.0 "wave" From 8d033f09511e2b874c896060c50c02f1742d49b2 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Wed, 11 Oct 2017 16:32:52 -0700 Subject: [PATCH 075/136] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 67632ecef..ebb9164b8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ # eShopOnContainers - Microservices Architecture and Containers based Reference Application (**BETA state** - Visual Studio 2017 and CLI environments compatible) Sample .NET Core reference application, powered by Microsoft, based on a simplified microservices architecture and Docker containers.

    @@ -38,15 +38,15 @@ The architecture proposes a simplified microservice oriented architecture implem > The sample code in this repo is NOT making use of Azure API Management in order to be able to provide an "F5 experience" in Visual Studio (or CLI) of the sample with no up-front dependencies in Azure. But you should evaluate API Gateways alternatives when building for production. -The microservices are different in type, meaning different internal architecture patterns approaches depending on it purpose, as shown in the image below. +The microservices are different in type, meaning different internal architecture pattern approaches depending on its purpose, as shown in the image below.

    > ### Important Note on Database Servers/Containers -> In this solution's current configuration for a development environment, the SQL databases are automatically deployed with sample data into a single SQL Server for Linux container (a single shared Docker container for SQL databases) so the whole solution can be up and running without any dependency to any cloud or specific server. Each database could also be deployed as a single Docker container, but then you'd need more then 8GB or memory RAM assigned to Docker in your development machine in order to be able to run 3 SQL Server Docker containers in your Docker Linux host in "Docker for Windows" or "Docker for Mac" development environments. ->

    A similar case is defined in regards Redis cache running as a container for the development environment. Or a No-SQL database (MongoDB) running as a container. +> In this solution's current configuration for a development environment, the SQL databases are automatically deployed with sample data into a single SQL Server for Linux container (a single shared Docker container for SQL databases) so the whole solution can be up and running without any dependency to any cloud or specific server. Each database could also be deployed as a single Docker container, but then you'd need more than 8GB of RAM assigned to Docker in your development machine in order to be able to run 3 SQL Server Docker containers in your Docker Linux host in "Docker for Windows" or "Docker for Mac" development environments. +>

    A similar case is defined in regard to Redis cache running as a container for the development environment. Or a No-SQL database (MongoDB) running as a container. >

    However, in a real production environment it is recommended to have your databases (SQL Server, Redis, and the NO-SQL database, in this case) in HA (High Available) services like Azure SQL Database, Redis as a service and Azure CosmosDB instead the MongoDB container (as both systems share the same access protocol). If you want to change to a production configuration, you'll just need to change the connection strings once you have set up the servers in a HA cloud or on-premises. ## Related documentation and guidance @@ -79,7 +79,7 @@ The screenshot below shows the VS Solution structure for those microservices/con Finally, those microservices are consumed by multiple client web and mobile apps, as described below.
    -*MVC Application (ASP.NET Core)*: Its an MVC application where you can find interesting scenarios on how to consume HTTP-based microservices from C# running in the server side, as it is a typical ASP.NET Core MVC application. Since it is a server-side application, access to other containers/microservices is done within the internal Docker Host network with its internal name resolution. +*MVC Application (ASP.NET Core)*: It's an MVC application where you can find interesting scenarios on how to consume HTTP-based microservices from C# running in the server side, as it is a typical ASP.NET Core MVC application. Since it is a server-side application, access to other containers/microservices is done within the internal Docker Host network with its internal name resolution.
    *SPA (Single Page Application)*: Providing similar "eShop business functionality" but developed with Angular 2, Typescript and slightly using ASP.NET Core MVC. This is another approach for client web applications to be used when you want to have a more modern client behavior which is not behaving with the typical browser round-trip on every action but behaving like a Single-Page-Application which is more similar to a desktop app usage experience. The consumption of the HTTP-based microservices is done from TypeScript/JavaScript in the client browser, so the client calls to the microservices come from out of the Docker Host internal network (Like from your network or even from the Internet). @@ -107,7 +107,7 @@ https://github.com/dotnet/eShopOnContainers/wiki/04.-Setting-eShopOnContainer-so See at the Wiki the posts on setup/instructions about how to deploy to Kubernetes or Service Fabric in Azure (although you could also deploy to any other cloud or on-premises). ## Sending feedback and pull requests -As mentioned, we'd appreciate to your feedback, improvements and ideas. +As mentioned, we'd appreciate your feedback, improvements and ideas. You can create new issues at the issues section, do pull requests and/or send emails to **eshop_feedback@service.microsoft.com** ## Questions From 42ce19627004bb178167286fa3c50098f5ba5676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Mon, 16 Oct 2017 16:10:40 +0200 Subject: [PATCH 086/136] Updated SF Linux manifests --- .env | 3 +-- .../Bus/ApplicationParameters/Cloud.xml | 2 +- .../NoSQL/ApplicationParameters/Cloud.xml | 2 +- .../Redis/ApplicationParameters/Cloud.xml | 2 +- .../Sql/ApplicationParameters/Cloud.xml | 2 +- .../ApplicationManifest.xml | 6 ++++-- .../MarketingApiPkg/ServiceManifest.xml | 2 +- .../ApplicationParameters/Cloud.xml | 15 ++++++++------- .../ApplicationParameters/Cloud.xml | 2 +- .../WebMVCPkg/ServiceManifest.xml | 8 +++++++- .../ApplicationParameters/Cloud.xml | 2 +- .../ApplicationParameters/Cloud.xml | 2 +- .../WebStatusPkg/ServiceManifest.xml | 17 +++++++++-------- .../ApplicationParameters/Cloud.xml | 2 +- src/Services/Basket/Basket.API/Startup.cs | 10 +++++++--- src/Services/Catalog/Catalog.API/Startup.cs | 10 +++++++--- src/Services/Identity/Identity.API/Startup.cs | 10 +++++++--- src/Services/Location/Locations.API/Startup.cs | 10 +++++++--- src/Services/Marketing/Marketing.API/Startup.cs | 10 +++++++--- src/Services/Ordering/Ordering.API/Startup.cs | 10 +++++++--- src/Services/Payment/Payment.API/Startup.cs | 10 +++++++--- src/Web/WebMVC/Startup.cs | 10 +++++++--- src/Web/WebSPA/Startup.cs | 10 +++++++--- src/Web/WebStatus/Startup.cs | 10 +++++++--- 24 files changed, 108 insertions(+), 59 deletions(-) diff --git a/.env b/.env index 9deb66be7..a3fd59ffc 100644 --- a/.env +++ b/.env @@ -23,5 +23,4 @@ ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP=10.121.122.92 #ESHOP_AZURE_STORAGE_MARKETING_KEY= #ESHOP_SERVICE_BUS_USERNAME= #ESHOP_SERVICE_BUS_PASSWORD= -#INSTRUMENTATION_KEY= -#ORCHESTRATOR_TYPE= \ No newline at end of file +#INSTRUMENTATION_KEY= \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Cloud.xml index 8990ebec4..5a4c2828d 100644 --- a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Cloud.xml @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml index 246e938b5..8b48c39d1 100644 --- a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml index 96eba3857..951ce24db 100644 --- a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml index c59b1bdc4..3ad12232a 100644 --- a/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml index 608fd7a25..6cffab120 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -12,7 +12,8 @@ - + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml index 01f86972a..d99e1573a 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml @@ -1,7 +1,7 @@  - + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml index 3b50ef8b6..fdeb6fd88 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml @@ -1,7 +1,7 @@  - + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml index 1c32dd6b0..26e50454b 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml @@ -22,14 +22,15 @@ - - - - - - - - + + + + + + + + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml index f77d4b08e..f49e04e6b 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml @@ -1,7 +1,7 @@  - + \ No newline at end of file diff --git a/src/Services/Basket/Basket.API/Startup.cs b/src/Services/Basket/Basket.API/Startup.cs index 190af72ee..f54db4697 100644 --- a/src/Services/Basket/Basket.API/Startup.cs +++ b/src/Services/Basket/Basket.API/Startup.cs @@ -209,13 +209,17 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API private void RegisterAppInsights(IServiceCollection services) { services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + var orchestratorType = Configuration.GetValue("OrchestratorType"); + if (string.IsNullOrEmpty(orchestratorType)) + { + return; + } + if (orchestratorType.ToUpper().Equals("K8S")) { // Enable K8s telemetry initializer services.EnableKubernetes(); } - if (Configuration.GetValue("OrchestratorType").Equals("SF")) + if (orchestratorType.ToUpper().Equals("SF")) { // Enable SF telemetry initializer services.AddSingleton((serviceProvider) => diff --git a/src/Services/Catalog/Catalog.API/Startup.cs b/src/Services/Catalog/Catalog.API/Startup.cs index 34738cd58..bfee8a8d2 100644 --- a/src/Services/Catalog/Catalog.API/Startup.cs +++ b/src/Services/Catalog/Catalog.API/Startup.cs @@ -207,13 +207,17 @@ private void RegisterAppInsights(IServiceCollection services) { services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + var orchestratorType = Configuration.GetValue("OrchestratorType"); + if (string.IsNullOrEmpty(orchestratorType)) + { + return; + } + if (orchestratorType.ToUpper().Equals("K8S")) { // Enable K8s telemetry initializer services.EnableKubernetes(); } - if (Configuration.GetValue("OrchestratorType").Equals("SF")) + if (orchestratorType.ToUpper().Equals("SF")) { // Enable SF telemetry initializer services.AddSingleton((serviceProvider) => diff --git a/src/Services/Identity/Identity.API/Startup.cs b/src/Services/Identity/Identity.API/Startup.cs index dfb368fae..5e958b1b0 100644 --- a/src/Services/Identity/Identity.API/Startup.cs +++ b/src/Services/Identity/Identity.API/Startup.cs @@ -163,13 +163,17 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API private void RegisterAppInsights(IServiceCollection services) { services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + var orchestratorType = Configuration.GetValue("OrchestratorType"); + if (string.IsNullOrEmpty(orchestratorType)) + { + return; + } + if (orchestratorType.ToUpper().Equals("K8S")) { // Enable K8s telemetry initializer services.EnableKubernetes(); } - if (Configuration.GetValue("OrchestratorType").Equals("SF")) + if (orchestratorType.ToUpper().Equals("SF")) { // Enable SF telemetry initializer services.AddSingleton((serviceProvider) => diff --git a/src/Services/Location/Locations.API/Startup.cs b/src/Services/Location/Locations.API/Startup.cs index d2045e70a..645cabb73 100644 --- a/src/Services/Location/Locations.API/Startup.cs +++ b/src/Services/Location/Locations.API/Startup.cs @@ -181,13 +181,17 @@ namespace Microsoft.eShopOnContainers.Services.Locations.API private void RegisterAppInsights(IServiceCollection services) { services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + var orchestratorType = Configuration.GetValue("OrchestratorType"); + if (string.IsNullOrEmpty(orchestratorType)) + { + return; + } + if (orchestratorType.ToUpper().Equals("K8S")) { // Enable K8s telemetry initializer services.EnableKubernetes(); } - if (Configuration.GetValue("OrchestratorType").Equals("SF")) + if (orchestratorType.ToUpper().Equals("SF")) { // Enable SF telemetry initializer services.AddSingleton((serviceProvider) => diff --git a/src/Services/Marketing/Marketing.API/Startup.cs b/src/Services/Marketing/Marketing.API/Startup.cs index 92bb95aad..da805f0e8 100644 --- a/src/Services/Marketing/Marketing.API/Startup.cs +++ b/src/Services/Marketing/Marketing.API/Startup.cs @@ -212,13 +212,17 @@ private void RegisterAppInsights(IServiceCollection services) { services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + var orchestratorType = Configuration.GetValue("OrchestratorType"); + if (string.IsNullOrEmpty(orchestratorType)) + { + return; + } + if (orchestratorType.ToUpper().Equals("K8S")) { // Enable K8s telemetry initializer services.EnableKubernetes(); } - if (Configuration.GetValue("OrchestratorType").Equals("SF")) + if (orchestratorType.ToUpper().Equals("SF")) { // Enable SF telemetry initializer services.AddSingleton((serviceProvider) => diff --git a/src/Services/Ordering/Ordering.API/Startup.cs b/src/Services/Ordering/Ordering.API/Startup.cs index b5e2e1729..a61f7ed83 100644 --- a/src/Services/Ordering/Ordering.API/Startup.cs +++ b/src/Services/Ordering/Ordering.API/Startup.cs @@ -234,13 +234,17 @@ private void RegisterAppInsights(IServiceCollection services) { services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + var orchestratorType = Configuration.GetValue("OrchestratorType"); + if (string.IsNullOrEmpty(orchestratorType)) + { + return; + } + if (orchestratorType.ToUpper().Equals("K8S")) { // Enable K8s telemetry initializer services.EnableKubernetes(); } - if (Configuration.GetValue("OrchestratorType").Equals("SF")) + if (orchestratorType.ToUpper().Equals("SF")) { // Enable SF telemetry initializer services.AddSingleton((serviceProvider) => diff --git a/src/Services/Payment/Payment.API/Startup.cs b/src/Services/Payment/Payment.API/Startup.cs index d3729a6f5..6f88785cc 100644 --- a/src/Services/Payment/Payment.API/Startup.cs +++ b/src/Services/Payment/Payment.API/Startup.cs @@ -110,13 +110,17 @@ namespace Payment.API private void RegisterAppInsights(IServiceCollection services) { services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + var orchestratorType = Configuration.GetValue("OrchestratorType"); + if (string.IsNullOrEmpty(orchestratorType)) + { + return; + } + if (orchestratorType.ToUpper().Equals("K8S")) { // Enable K8s telemetry initializer services.EnableKubernetes(); } - if (Configuration.GetValue("OrchestratorType").Equals("SF")) + if (orchestratorType.ToUpper().Equals("SF")) { // Enable SF telemetry initializer services.AddSingleton((serviceProvider) => diff --git a/src/Web/WebMVC/Startup.cs b/src/Web/WebMVC/Startup.cs index d90cb82c9..0dd967e41 100644 --- a/src/Web/WebMVC/Startup.cs +++ b/src/Web/WebMVC/Startup.cs @@ -180,13 +180,17 @@ namespace Microsoft.eShopOnContainers.WebMVC private void RegisterAppInsights(IServiceCollection services) { services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + var orchestratorType = Configuration.GetValue("OrchestratorType"); + if (string.IsNullOrEmpty(orchestratorType)) + { + return; + } + if (orchestratorType.ToUpper().Equals("K8S")) { // Enable K8s telemetry initializer services.EnableKubernetes(); } - if (Configuration.GetValue("OrchestratorType").Equals("SF")) + if (orchestratorType.ToUpper().Equals("SF")) { // Enable SF telemetry initializer services.AddSingleton((serviceProvider) => diff --git a/src/Web/WebSPA/Startup.cs b/src/Web/WebSPA/Startup.cs index 8750d4974..56e3118e7 100644 --- a/src/Web/WebSPA/Startup.cs +++ b/src/Web/WebSPA/Startup.cs @@ -134,13 +134,17 @@ namespace eShopConContainers.WebSPA private void RegisterAppInsights(IServiceCollection services) { services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + var orchestratorType = Configuration.GetValue("OrchestratorType"); + if (string.IsNullOrEmpty(orchestratorType)) + { + return; + } + if (orchestratorType.ToUpper().Equals("K8S")) { // Enable K8s telemetry initializer services.EnableKubernetes(); } - if (Configuration.GetValue("OrchestratorType").Equals("SF")) + if (orchestratorType.ToUpper().Equals("SF")) { // Enable SF telemetry initializer services.AddSingleton((serviceProvider) => diff --git a/src/Web/WebStatus/Startup.cs b/src/Web/WebStatus/Startup.cs index 443c660e7..a17fd00f8 100644 --- a/src/Web/WebStatus/Startup.cs +++ b/src/Web/WebStatus/Startup.cs @@ -87,13 +87,17 @@ namespace WebStatus private void RegisterAppInsights(IServiceCollection services) { services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + var orchestratorType = Configuration.GetValue("OrchestratorType"); + if (string.IsNullOrEmpty(orchestratorType)) + { + return; + } + if (orchestratorType.ToUpper().Equals("K8S")) { // Enable K8s telemetry initializer services.EnableKubernetes(); } - if (Configuration.GetValue("OrchestratorType").Equals("SF")) + if (orchestratorType.ToUpper().Equals("SF")) { // Enable SF telemetry initializer services.AddSingleton((serviceProvider) => From 6db288dc7676c6a5ce8e2656d9f9d07776d3fff9 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 14:14:54 -0700 Subject: [PATCH 087/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 4b6920e42..016279e0a 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -1,8 +1,13 @@ -# Deploying Azure Service Fabric (No Secured) +# Deploying a Service Fabric cluster based on Windows nodes (No Secured) +You can always deploy a SF cluster through the Azure portal, as explained in this article: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-get-started-azure-cluster -The ARM template `servicefabricdeploy.json` and its parameter file (`servicefabricdeploy.parameters.json`) are used to create a service fabric cluster environment for windows containers. +However, when creating a cluster, there are quite a few configurations to take into account, like enabling the internal DNS service or Reverse Proxy service, choosing between Linux/Windows, open/publish your application ports in the load-balancer and most of all (the most complex setup) how to create a secure cluster. -## Editing servicefabricdeploy.parameters.json file +Because of those reasons, we have created a set of ARM templates and scripts so you can create, re-create and configure the SF clusters much faster, as explained below: + +Within eShopOnContainers root folder, at the folder [..\deploy\az\servicefabric\WindowsContainers](https://github.com/dotnet-architecture/eShopOnContainers/tree/dev/deploy/az/servicefabric/WindowsContainers), you can find the ARM template `servicefabricdeploy.json` and its parameters file (`servicefabricdeploy.parameters.json`) to create a Service Fabric cluster environment for Windows Containers. + +## Edit the servicefabricdeploy.parameters.json file Edit the following params in `servicefabricdeploy.parameters.json` file to set your values: From d79e7e2dac3bff124d05c2f1bad473cb356997cc Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 14:14:59 -0700 Subject: [PATCH 088/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 5bdd86737..bfaf9c81a 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -1,6 +1,11 @@ -# Deploying Azure Service Fabric (No Secured) +# Deploying a Service Fabric cluster based on Linux nodes (No Secured) +You can always deploy a SF cluster through the Azure portal, as explained in this article: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-get-started-azure-cluster -The ARM template `servicefabricdeploy.json` and its parameter file (`servicefabricdeploy.parameters.json`) are used to create a service fabric cluster environment for linux containers. +However, when creating a cluster, there are quite a few configurations to take into account, like enabling the internal DNS service or Reverse Proxy service, choosing between Linux/Windows, open/publish your application ports in the load-balancer and most of all (the most complex setup) how to create a secure cluster. + +Because of those reasons, we have created a set of ARM templates and scripts so you can create, re-create and configure the SF clusters much faster, as explained below: + +Within eShopOnContainers root folder, at the folder [..\deploy\az\servicefabric\LinuxContainers](https://github.com/dotnet-architecture/eShopOnContainers/tree/dev/deploy/az/servicefabric/LinuxContainers), you can find the ARM template `servicefabricdeploy.json` and its parameters file (`servicefabricdeploy.parameters.json`) to create a Service Fabric cluster environment for Linux Containers. ## Editing servicefabricdeploy.parameters.json file From c16b1120a09185bdb98099464b33ac95da0be748 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 14:38:54 -0700 Subject: [PATCH 089/136] Update readme.md --- .../servicefabric/WindowsContainers/readme.md | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 016279e0a..c995883dc 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -12,26 +12,33 @@ Within eShopOnContainers root folder, at the folder [..\deploy\az\servicefabric\ Edit the following params in `servicefabricdeploy.parameters.json` file to set your values: - clusterName: Name of your SF cluster +- clusterLocation: Datacenter location, like westus or westeurope +- computeLocation: Datacenter location, like westus or westeurope +- adminUserName: user-name for VMs administration +- adminPassword: user-password for VMs administration - dnsName: Name assigned to your SF dns -- adminUserName: user name for administration -- adminPassword: user password for administration -Optionally, you can modify which ports are opened in the LoadBalancer for accessing externally to the apps: - -- webMvcHttpPort: port externally exposed for the WebMVC app -- webSpaHttpPort: port externally exposed for the WebSPA app -- webStatusHttpPort: port externally exposed for the WebStatus app -- IdSrvHttpRule: port externally exposed for the Identity app +Optionally, you could modify which ports are opened in the LoadBalancer for the multiple eShopOnContainer apps and API services. +By default, they are setup as: +- webMvcHttpPort: 5100 +- webSpaHttpPort: 5104 +- webStatusHttpPort: 5107 +- IdSrvHttpRule: 5105 +- BasketApiHttpRule: 5103 +- CatalogApiHttpRule: 5101 +- OrderingApiHttpRule: 5102 +- MarketingApiHttpRule: 5110 +- LocationsApiHttpRule: 5109 ## Deploy the template Once parameter file is edited you can deploy it using [create-resources script](../readme.md). -i. e. if you are in windows, to deploy sql databases in a new resourcegroup located in westus, go to `deploy\az` folder and type: - +For example, to deploy the cluster to a new resourcegroup located in westus, go to `deploy\az` folder and type: ``` create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploy newResourceGroup -c westus ``` + ## Deploy eShopOnServiceFabric with Visual Studio. Alternatively, instead of using ARM templates, you can deploy eShop on service fabric directly by publishing the project eShopOnServiceFabric in eShopOnContainers-ServicesAndWebApps.sln with Visual Studio publish tool. From 94a64fd3825d3898eba4be947d42566812db4b73 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 14:38:58 -0700 Subject: [PATCH 090/136] Update readme.md --- .../servicefabric/LinuxContainers/readme.md | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index bfaf9c81a..0c29b50cc 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -7,31 +7,39 @@ Because of those reasons, we have created a set of ARM templates and scripts so Within eShopOnContainers root folder, at the folder [..\deploy\az\servicefabric\LinuxContainers](https://github.com/dotnet-architecture/eShopOnContainers/tree/dev/deploy/az/servicefabric/LinuxContainers), you can find the ARM template `servicefabricdeploy.json` and its parameters file (`servicefabricdeploy.parameters.json`) to create a Service Fabric cluster environment for Linux Containers. -## Editing servicefabricdeploy.parameters.json file +## Edit the servicefabricdeploy.parameters.json file Edit the following params in `servicefabricdeploy.parameters.json` file to set your values: - clusterName: Name of your SF cluster +- clusterLocation: Datacenter location, like westus or westeurope +- computeLocation: Datacenter location, like westus or westeurope +- adminUserName: user-name for VMs administration +- adminPassword: user-password for VMs administration - dnsName: Name assigned to your SF dns -- adminUserName: user name for administration -- adminPassword: user password for administration -Optionally, you can modify which ports are opened in the LoadBalancer for accessing externally to the apps: - -- webMvcHttpPort: port externally exposed for the WebMVC app -- webSpaHttpPort: port externally exposed for the WebSPA app -- webStatusHttpPort: port externally exposed for the WebStatus app -- IdSrvHttpRule: port externally exposed for the Identity app +Optionally, you could modify which ports are opened in the LoadBalancer for the multiple eShopOnContainer apps and API services. +By default, they are setup as: +- webMvcHttpPort: 5100 +- webSpaHttpPort: 5104 +- webStatusHttpPort: 5107 +- IdSrvHttpRule: 5105 +- BasketApiHttpRule: 5103 +- CatalogApiHttpRule: 5101 +- OrderingApiHttpRule: 5102 +- MarketingApiHttpRule: 5110 +- LocationsApiHttpRule: 5109 ## Deploy the template Once parameter file is edited you can deploy it using [create-resources script](../readme.md). -i. e. if you are in windows, to deploy sql databases in a new resourcegroup located in westus, go to `deploy\az` folder and type: +For example, to deploy the cluster to a new resourcegroup located in westus, go to `deploy\az` folder and type: ``` create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploy newResourceGroup -c westus ``` + ## Deploy eShopOnServiceFabric with Visual Studio. Alternatively, instead of using ARM templates, you can deploy eShop on service fabric directly by publishing the project eShopOnServiceFabric in eShopOnContainers-ServicesAndWebApps.sln with Visual Studio publish tool. From 788eee408346791c9b38d0919317b10bc8d129fe Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 14:45:52 -0700 Subject: [PATCH 091/136] Update for servicefabricdeploy.parameters.json files for Windows and Linux --- .../servicefabricdeploy.parameters.json | 10 +++++----- .../servicefabricdeploy.parameters.json | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json index d905f2d00..5e938823b 100644 --- a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json +++ b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json @@ -3,19 +3,19 @@ "contentVersion": "1.0.0.0", "parameters": { "clusterName": { - "value": "your_sf_name" + "value": "eshopsflinux" }, "clusterLocation": { - "value": "westeurope" + "value": "westus" }, "computeLocation": { - "value": "westeurope" + "value": "westus" }, "adminUserName": { "value": "eshop" }, "adminPassword": { - "value": "your_admin_password" + "value": "your_password" }, "nicName": { "value": "NIC-eshoponsflin" @@ -24,7 +24,7 @@ "value": "eshoponsflin-PubIP" }, "dnsName": { - "value": "your_sf_dns" + "value": "eshopsflinux" }, "virtualNetworkName": { "value": "VNet-eshoponsflin" diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json index bf1b89642..97b5b8b27 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json @@ -3,13 +3,13 @@ "contentVersion": "1.0.0.0", "parameters": { "clusterName": { - "value": "eshoponservicefabric" + "value": "eshopsfwindows" }, "clusterLocation": { - "value": "westeurope" + "value": "westus" }, "computeLocation": { - "value": "westeurope" + "value": "westus" }, "adminUserName": { "value": "eshop" @@ -24,7 +24,7 @@ "value": "eshopsfwin-PubIP" }, "dnsName": { - "value": "eshoponservicefabric" + "value": "eshopsfwindows" }, "virtualNetworkName": { "value": "VNet-eshopsfwin" From 40cd4f29ea903c9088b2a2554e68bc1cc3b53d40 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 14:59:57 -0700 Subject: [PATCH 092/136] Updates to servicefabricdeploy.parameters.json file --- .../LinuxContainers/servicefabricdeploy.parameters.json | 4 ++-- .../WindowsContainers/servicefabricdeploy.parameters.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json index 5e938823b..7e88f32c4 100644 --- a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json +++ b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json @@ -3,7 +3,7 @@ "contentVersion": "1.0.0.0", "parameters": { "clusterName": { - "value": "eshopsflinux" + "value": "qa-eshop-sflinux-cluster" }, "clusterLocation": { "value": "westus" @@ -24,7 +24,7 @@ "value": "eshoponsflin-PubIP" }, "dnsName": { - "value": "eshopsflinux" + "value": "qa-eshop-sflinux-cluster" }, "virtualNetworkName": { "value": "VNet-eshoponsflin" diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json index 97b5b8b27..e14e07606 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json @@ -3,7 +3,7 @@ "contentVersion": "1.0.0.0", "parameters": { "clusterName": { - "value": "eshopsfwindows" + "value": "qa-eshop-sfwin-cluster" }, "clusterLocation": { "value": "westus" @@ -24,7 +24,7 @@ "value": "eshopsfwin-PubIP" }, "dnsName": { - "value": "eshopsfwindows" + "value": "qa-eshop-sfwin-cluster" }, "virtualNetworkName": { "value": "VNet-eshopsfwin" From 6e1e3c63658ae040c61b1a5518dc77637d74f39a Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:07:24 -0700 Subject: [PATCH 093/136] Update to servicefabricdeploy.parameters.json file for Windows --- .../WindowsContainers/servicefabricdeploy.parameters.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json index e14e07606..98632308d 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json @@ -36,10 +36,10 @@ "value": "LBIP-eshopsfwin" }, "applicationDiagnosticsStorageAccountName": { - "value": "sfdgeshopsfwin6744" + "value": "sfdgqaeshopsfwin" }, "supportLogStorageAccountName": { - "value": "sflogseshopsfwin3480" + "value": "sflogsqaeshopsfwin" }, "vmImageSku": { "value": "2016-Datacenter-with-Containers" From 0c4fee24a6642e51156be8b8313121ca1d7d9032 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:17:45 -0700 Subject: [PATCH 094/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index c995883dc..2cc4d9334 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -30,13 +30,13 @@ By default, they are setup as: - MarketingApiHttpRule: 5110 - LocationsApiHttpRule: 5109 -## Deploy the template +## Deploy the Service Fabric cluster using the script and ARM templates Once parameter file is edited you can deploy it using [create-resources script](../readme.md). -For example, to deploy the cluster to a new resourcegroup located in westus, go to `deploy\az` folder and type: +For example, to deploy the cluster to a new resourcegroup located in westus, using the Command Prompt, go to `deploy\az` folder and type: ``` -create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploy newResourceGroup -c westus +create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploy qa-eshop-sfwin-resgrp -c westus ``` ## Deploy eShopOnServiceFabric with Visual Studio. From 75599dc88593bacd772f91908f788d64926b1b1b Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:17:49 -0700 Subject: [PATCH 095/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 0c29b50cc..1e683f96c 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -30,14 +30,14 @@ By default, they are setup as: - MarketingApiHttpRule: 5110 - LocationsApiHttpRule: 5109 -## Deploy the template +## Deploy the Service Fabric cluster using the script and ARM templates Once parameter file is edited you can deploy it using [create-resources script](../readme.md). For example, to deploy the cluster to a new resourcegroup located in westus, go to `deploy\az` folder and type: ``` -create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploy newResourceGroup -c westus +create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploy qa-eshop-sflinux-resgrp -c westus ``` ## Deploy eShopOnServiceFabric with Visual Studio. From 59e9d9f276042f4ad82f6f3e7674f893806f09c4 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:21:31 -0700 Subject: [PATCH 096/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 2cc4d9334..1cb69f943 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -1,4 +1,7 @@ -# Deploying a Service Fabric cluster based on Windows nodes (No Secured) +# Deploying a Service Fabric cluster based on Windows nodes + +## A. Not secured cluster (SF Windows cluster) +For a secured cluster, see option B. below. You can always deploy a SF cluster through the Azure portal, as explained in this article: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-get-started-azure-cluster However, when creating a cluster, there are quite a few configurations to take into account, like enabling the internal DNS service or Reverse Proxy service, choosing between Linux/Windows, open/publish your application ports in the load-balancer and most of all (the most complex setup) how to create a secure cluster. @@ -43,7 +46,7 @@ create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploy qa-esho Alternatively, instead of using ARM templates, you can deploy eShop on service fabric directly by publishing the project eShopOnServiceFabric in eShopOnContainers-ServicesAndWebApps.sln with Visual Studio publish tool. -# Deploying Azure Service Fabric (Secured) +## B. Secured cluster (SF Windows cluster) The ARM template `servicefabricdeploysecured.json` and its parameter file (`servicefabricdeploysecured.parameters.json`) are used to create a service fabric cluster environment for windows containers secured with a certificate. From 9cfe8f87ea5da21952b2e5ea7d3709a6ce7249c1 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:21:36 -0700 Subject: [PATCH 097/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 1e683f96c..969acf0b7 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -1,4 +1,7 @@ -# Deploying a Service Fabric cluster based on Linux nodes (No Secured) +# Deploying a Service Fabric cluster based on Linux nodes + +## A. Not secured cluster (SF Linux cluster) +For a secured cluster, see option B. below. You can always deploy a SF cluster through the Azure portal, as explained in this article: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-get-started-azure-cluster However, when creating a cluster, there are quite a few configurations to take into account, like enabling the internal DNS service or Reverse Proxy service, choosing between Linux/Windows, open/publish your application ports in the load-balancer and most of all (the most complex setup) how to create a secure cluster. @@ -44,7 +47,7 @@ create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploy qa-eshop- Alternatively, instead of using ARM templates, you can deploy eShop on service fabric directly by publishing the project eShopOnServiceFabric in eShopOnContainers-ServicesAndWebApps.sln with Visual Studio publish tool. -# Deploying Azure Service Fabric (Secured) +## B. Secured cluster (SF Linux cluster) The ARM template `servicefabricdeploysecured.json` and its parameter file (`servicefabricdeploysecured.parameters.json`) are used to create a service fabric cluster environment for linux containers secured with a certificate. From ad5b4c5c267b441105cb5e2465480539192968f0 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:26:34 -0700 Subject: [PATCH 098/136] Updates to servicefabricdeploy.parameters.json files --- .../LinuxContainers/servicefabricdeploy.parameters.json | 2 +- .../WindowsContainers/servicefabricdeploy.parameters.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json index 7e88f32c4..0e37d24ec 100644 --- a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json +++ b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploy.parameters.json @@ -15,7 +15,7 @@ "value": "eshop" }, "adminPassword": { - "value": "your_password" + "value": "Your_complex_Pass@word1" }, "nicName": { "value": "NIC-eshoponsflin" diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json index 98632308d..2c214b754 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploy.parameters.json @@ -15,7 +15,7 @@ "value": "eshop" }, "adminPassword": { - "value": "your_password" + "value": "Your_complex_Pass@word1" }, "nicName": { "value": "NIC-eshopsfwin" From 795edefab57e828ef5f7fd8620e10edc95c2887a Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:32:02 -0700 Subject: [PATCH 099/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 969acf0b7..bdc9a58f0 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -2,6 +2,7 @@ ## A. Not secured cluster (SF Linux cluster) For a secured cluster, see option B. below. + You can always deploy a SF cluster through the Azure portal, as explained in this article: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-get-started-azure-cluster However, when creating a cluster, there are quite a few configurations to take into account, like enabling the internal DNS service or Reverse Proxy service, choosing between Linux/Windows, open/publish your application ports in the load-balancer and most of all (the most complex setup) how to create a secure cluster. @@ -43,6 +44,9 @@ For example, to deploy the cluster to a new resourcegroup located in westus, go create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploy qa-eshop-sflinux-resgrp -c westus ``` +You should see a similar execution to the following: +![image](https://user-images.githubusercontent.com/1712635/31638180-15da9f84-b287-11e7-9d4e-604f33690198.png) + ## Deploy eShopOnServiceFabric with Visual Studio. Alternatively, instead of using ARM templates, you can deploy eShop on service fabric directly by publishing the project eShopOnServiceFabric in eShopOnContainers-ServicesAndWebApps.sln with Visual Studio publish tool. From 3249ce3595626f81ecc23bdf4d4a1e5b3a8a334f Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:33:55 -0700 Subject: [PATCH 100/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index bdc9a58f0..9d39f1510 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -47,9 +47,6 @@ create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploy qa-eshop- You should see a similar execution to the following: ![image](https://user-images.githubusercontent.com/1712635/31638180-15da9f84-b287-11e7-9d4e-604f33690198.png) -## Deploy eShopOnServiceFabric with Visual Studio. - -Alternatively, instead of using ARM templates, you can deploy eShop on service fabric directly by publishing the project eShopOnServiceFabric in eShopOnContainers-ServicesAndWebApps.sln with Visual Studio publish tool. ## B. Secured cluster (SF Linux cluster) From 181efb3da2493f4b7746f05799adebeb934c0183 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:33:59 -0700 Subject: [PATCH 101/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 1cb69f943..d2970452a 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -2,6 +2,7 @@ ## A. Not secured cluster (SF Windows cluster) For a secured cluster, see option B. below. + You can always deploy a SF cluster through the Azure portal, as explained in this article: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-get-started-azure-cluster However, when creating a cluster, there are quite a few configurations to take into account, like enabling the internal DNS service or Reverse Proxy service, choosing between Linux/Windows, open/publish your application ports in the load-balancer and most of all (the most complex setup) how to create a secure cluster. @@ -42,9 +43,8 @@ For example, to deploy the cluster to a new resourcegroup located in westus, usi create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploy qa-eshop-sfwin-resgrp -c westus ``` -## Deploy eShopOnServiceFabric with Visual Studio. +You should see a similar execution to the following: -Alternatively, instead of using ARM templates, you can deploy eShop on service fabric directly by publishing the project eShopOnServiceFabric in eShopOnContainers-ServicesAndWebApps.sln with Visual Studio publish tool. ## B. Secured cluster (SF Windows cluster) From 33c0cee673df9d78769d8b25c01c8a059d45c867 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:40:25 -0700 Subject: [PATCH 102/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 9d39f1510..2c631ad4d 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -47,6 +47,9 @@ create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploy qa-eshop- You should see a similar execution to the following: ![image](https://user-images.githubusercontent.com/1712635/31638180-15da9f84-b287-11e7-9d4e-604f33690198.png) +Now, if you go to your subscription in Azure, you should be able to see the SF cluster already created and available, like in the following image: + +![image](https://user-images.githubusercontent.com/1712635/31638398-3fc08ad8-b288-11e7-879b-fc4df0daad2b.png) ## B. Secured cluster (SF Linux cluster) From 09771724f435d9ebb1441439fe05d4d2517b9273 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:44:34 -0700 Subject: [PATCH 103/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 2c631ad4d..97212132a 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -51,6 +51,8 @@ Now, if you go to your subscription in Azure, you should be able to see the SF c ![image](https://user-images.githubusercontent.com/1712635/31638398-3fc08ad8-b288-11e7-879b-fc4df0daad2b.png) +In this case, this is an unsecured SF cluster with a single node, good for initial tests and getting started with SF. + ## B. Secured cluster (SF Linux cluster) The ARM template `servicefabricdeploysecured.json` and its parameter file (`servicefabricdeploysecured.parameters.json`) are used to create a service fabric cluster environment for linux containers secured with a certificate. From 124fd82145153d764250cc2f5a85bbfb34573cf4 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:46:13 -0700 Subject: [PATCH 104/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 97212132a..0dd30eaf9 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -51,7 +51,7 @@ Now, if you go to your subscription in Azure, you should be able to see the SF c ![image](https://user-images.githubusercontent.com/1712635/31638398-3fc08ad8-b288-11e7-879b-fc4df0daad2b.png) -In this case, this is an unsecured SF cluster with a single node, good for initial tests and getting started with SF. +In this case, this is an unsecured SF cluster with a single Linux node, good for initial tests and getting started with SF. ## B. Secured cluster (SF Linux cluster) From 0e855cd74f730f87025bfe5f4cc858a39eb66c49 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:51:06 -0700 Subject: [PATCH 105/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 0dd30eaf9..9b3132757 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -55,6 +55,8 @@ In this case, this is an unsecured SF cluster with a single Linux node, good for ## B. Secured cluster (SF Linux cluster) +Within eShopOnContainers root folder, at the folder [..\deploy\az\servicefabric\LinuxContainers](https://github.com/dotnet-architecture/eShopOnContainers/tree/dev/deploy/az/servicefabric/LinuxContainers), you can find the ARM template `servicefabricdeploysecured.json` and its parameter file (`servicefabricdeploysecured.parameters.json`) to create a secured Service Fabric cluster environment for Linux Containers (IN THIS CASE, IT IS A SECURED CLUSTER USING A CERTIFICATE). + The ARM template `servicefabricdeploysecured.json` and its parameter file (`servicefabricdeploysecured.parameters.json`) are used to create a service fabric cluster environment for linux containers secured with a certificate. ## Create Azure Keyvault service From fa92ab00bf3afe01ffdddafb6d4e06e3065e0d75 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:51:10 -0700 Subject: [PATCH 106/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index d2970452a..79bd8621c 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -9,7 +9,7 @@ However, when creating a cluster, there are quite a few configurations to take i Because of those reasons, we have created a set of ARM templates and scripts so you can create, re-create and configure the SF clusters much faster, as explained below: -Within eShopOnContainers root folder, at the folder [..\deploy\az\servicefabric\WindowsContainers](https://github.com/dotnet-architecture/eShopOnContainers/tree/dev/deploy/az/servicefabric/WindowsContainers), you can find the ARM template `servicefabricdeploy.json` and its parameters file (`servicefabricdeploy.parameters.json`) to create a Service Fabric cluster environment for Windows Containers. +Within eShopOnContainers root folder, at the folder [..\deploy\az\servicefabric\WindowsContainers](https://github.com/dotnet-architecture/eShopOnContainers/tree/dev/deploy/az/servicefabric/WindowsContainers), you can find the ARM template `servicefabricdeploy.json` and its parameters file (`servicefabricdeploy.parameters.json`) to create a Service Fabric cluster environment for Windows Containers (NOT SECURED CLUSTER). ## Edit the servicefabricdeploy.parameters.json file @@ -44,11 +44,18 @@ create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploy qa-esho ``` You should see a similar execution to the following: +++++++++++++ IMAGE TBD ++++++++++++++ + +Now, if you go to your subscription in Azure, you should be able to see the SF cluster already created and available, like in the following image: + +++++++++++++ IMAGE TBD ++++++++++++++ + +In this case, this is an unsecured SF cluster with a single Windows node, good for initial tests and getting started with SF. ## B. Secured cluster (SF Windows cluster) -The ARM template `servicefabricdeploysecured.json` and its parameter file (`servicefabricdeploysecured.parameters.json`) are used to create a service fabric cluster environment for windows containers secured with a certificate. +Within eShopOnContainers root folder, at the folder [..\deploy\az\servicefabric\WindowsContainers](https://github.com/dotnet-architecture/eShopOnContainers/tree/dev/deploy/az/servicefabric/WindowsContainers), you can find the ARM template `servicefabricdeploysecured.json` and its parameter file (`servicefabricdeploysecured.parameters.json`) to create a secured Service Fabric cluster environment for Windows Containers (IN THIS CASE, IT IS A SECURED CLUSTER USING A CERTIFICATE). ## Create Azure Keyvault service Go to PortalAzure and create a Keyvault service. Make sure Enable access for deployment checkboxes are selected. From 369b68bae184d7df557fb1d3ba2a5289ecc516fc Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:52:28 -0700 Subject: [PATCH 107/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 79bd8621c..058ea06f4 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -1,6 +1,6 @@ # Deploying a Service Fabric cluster based on Windows nodes -## A. Not secured cluster (SF Windows cluster) +## A. Unsecured cluster (SF Windows cluster) For a secured cluster, see option B. below. You can always deploy a SF cluster through the Azure portal, as explained in this article: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-get-started-azure-cluster From 4895983e553690b99cb31946eb6d3e9effe668d0 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:52:31 -0700 Subject: [PATCH 108/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 9b3132757..7c9cdad1c 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -1,6 +1,6 @@ # Deploying a Service Fabric cluster based on Linux nodes -## A. Not secured cluster (SF Linux cluster) +## A. Unsecured cluster (SF Linux cluster) For a secured cluster, see option B. below. You can always deploy a SF cluster through the Azure portal, as explained in this article: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-get-started-azure-cluster From 03d6a2abf14841cf0e55a875a37d630444fa0e51 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:58:25 -0700 Subject: [PATCH 109/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 7c9cdad1c..b916a5ecf 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -62,7 +62,7 @@ The ARM template `servicefabricdeploysecured.json` and its parameter file (`serv ## Create Azure Keyvault service Go to PortalAzure and create a Keyvault service. Make sure Enable access for deployment checkboxes are selected. - +![image](https://user-images.githubusercontent.com/1712635/31638848-9b266530-b28a-11e7-953b-1e3ec1a54f77.png) ## Generate a certificate in Azure Keyvault Execute the gen-keyvaultcert.ps1 script to generate and download a certificate from Keyvault. From 5ee8a35c398b8465734b9d6642429cf2db0f1189 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 15:58:28 -0700 Subject: [PATCH 110/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 058ea06f4..2947237b6 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -60,7 +60,7 @@ Within eShopOnContainers root folder, at the folder [..\deploy\az\servicefabric\ ## Create Azure Keyvault service Go to PortalAzure and create a Keyvault service. Make sure Enable access for deployment checkboxes are selected. - +![image](https://user-images.githubusercontent.com/1712635/31638848-9b266530-b28a-11e7-953b-1e3ec1a54f77.png) ## Generate a certificate in Azure Keyvault Execute the gen-keyvaultcert.ps1 script to generate and download a certificate from Keyvault. From 524f4b459ca05499e744c5f35a5f18da9a717f72 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 16:04:18 -0700 Subject: [PATCH 111/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 2947237b6..1d09b1d6c 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -44,11 +44,11 @@ create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploy qa-esho ``` You should see a similar execution to the following: -++++++++++++ IMAGE TBD ++++++++++++++ +![image](https://user-images.githubusercontent.com/1712635/31638979-4881d7aa-b28b-11e7-873c-e1185043a9eb.png) Now, if you go to your subscription in Azure, you should be able to see the SF cluster already created and available, like in the following image: -++++++++++++ IMAGE TBD ++++++++++++++ +![image](https://user-images.githubusercontent.com/1712635/31639043-9b26c786-b28b-11e7-8d59-eeea97f74176.png) In this case, this is an unsecured SF cluster with a single Windows node, good for initial tests and getting started with SF. From ab1bb8bc75893a8ea4739fcac0bcb33f3efa4349 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 16:41:31 -0700 Subject: [PATCH 112/136] Update readme.md --- .../servicefabric/WindowsContainers/readme.md | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 1d09b1d6c..9e42be2d7 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -63,12 +63,33 @@ Go to PortalAzure and create a Keyvault service. Make sure Enable access for dep ![image](https://user-images.githubusercontent.com/1712635/31638848-9b266530-b28a-11e7-953b-1e3ec1a54f77.png) ## Generate a certificate in Azure Keyvault -Execute the gen-keyvaultcert.ps1 script to generate and download a certificate from Keyvault. +In a POWER-SHELL window, move to the folder [..\deploy\az\servicefabric\WindowsContainers](https://github.com/dotnet-architecture/eShopOnContainers/tree/dev/deploy/az/servicefabric/WindowsContainers). + +**Select your Azure subscription** You might have [several Azure subscriptions](https://docs.microsoft.com/en-us/cli/azure/account#set) as shown if you type the following. + + >``` + >az account list + >``` + If you have multiple subscription accounts, you first need to select the Azure subscription account you want to target. Type the following: + >``` + >az account set --subscription "Your Azure Subscription Name or ID" + >``` + +**Execute the gen-keyvaultcert.ps1 script** to generate and download a certificate from Keyvault. +Make sure you're going to run it against the Azure subscription you mean it. + +You might need to authenticate from the browser when running this PowerShell script. ``` -.\gen-keyvaultcert.ps1 -vaultName -certName -certPwd -subjectName CN=.westeurope.cloudapp.azure.com -saveDir C:\Users\\Downloads +.\gen-keyvaultcert.ps1 -vaultName -certName -certPwd -subjectName CN=.westus.cloudapp.azure.com -saveDir C:\Users\\Downloads ``` +You should see a similar execution to the following: + +![image](https://user-images.githubusercontent.com/1712635/31639818-a50ab63c-b28f-11e7-8791-bcfadeed5a56.png) + +IMPORTANT: At this point, copy/cut the .PFX certifiacte file saved in the downloads forlder and save it in a secure place. + ## Install the certificate Install the certificate under 'Current User' store location and check it as exportable. From d0225a6d87ee119242eb377aee4249d97eb9b99d Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 16:47:48 -0700 Subject: [PATCH 113/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 9e42be2d7..585ffbdc5 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -85,8 +85,7 @@ You might need to authenticate from the browser when running this PowerShell scr ``` You should see a similar execution to the following: - -![image](https://user-images.githubusercontent.com/1712635/31639818-a50ab63c-b28f-11e7-8791-bcfadeed5a56.png) +![image](https://user-images.githubusercontent.com/1712635/31640172-93efcca0-b291-11e7-970e-5b5e6bf07042.png) IMPORTANT: At this point, copy/cut the .PFX certifiacte file saved in the downloads forlder and save it in a secure place. From 0bd23e21f4c1a252f296c319d1e775641513f4dd Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 17:02:50 -0700 Subject: [PATCH 114/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 585ffbdc5..0acd8716a 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -90,7 +90,7 @@ You should see a similar execution to the following: IMPORTANT: At this point, copy/cut the .PFX certifiacte file saved in the downloads forlder and save it in a secure place. ## Install the certificate -Install the certificate under 'Current User' store location and check it as exportable. +Install the certificate (by double-clicking on the .PFX file) under 'Current User' store location (by default location) and check it as exportable. From 6a3ab0e72c241c1f6bf229a70f7e6b6a5db34f63 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 17:02:55 -0700 Subject: [PATCH 115/136] Update readme.md --- .../servicefabric/LinuxContainers/readme.md | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index b916a5ecf..51fc0dc7a 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -65,14 +65,32 @@ Go to PortalAzure and create a Keyvault service. Make sure Enable access for dep ![image](https://user-images.githubusercontent.com/1712635/31638848-9b266530-b28a-11e7-953b-1e3ec1a54f77.png) ## Generate a certificate in Azure Keyvault +In a POWER-SHELL window, move to the folder [..\deploy\az\servicefabric\LinuxContainers](https://github.com/dotnet-architecture/eShopOnContainers/tree/dev/deploy/az/servicefabric/LinuxContainers). + +**Select your Azure subscription** You might have [several Azure subscriptions](https://docs.microsoft.com/en-us/cli/azure/account#set) as shown if you type the following. + + >``` + >az account list + >``` + If you have multiple subscription accounts, you first need to select the Azure subscription account you want to target. Type the following: + >``` + >az account set --subscription "Your Azure Subscription Name or ID" + >``` + Execute the gen-keyvaultcert.ps1 script to generate and download a certificate from Keyvault. ``` .\gen-keyvaultcert.ps1 -vaultName -certName -certPwd -subjectName CN=.westeurope.cloudapp.azure.com -saveDir C:\Users\\Downloads ``` + +You should see a similar execution to the following: +![image](https://user-images.githubusercontent.com/1712635/31640172-93efcca0-b291-11e7-970e-5b5e6bf07042.png) + +IMPORTANT: At this point, copy/cut the .PFX certifiacte file saved in the downloads forlder and save it in a secure place. + ## Install the certificate -Install the certificate under 'Current User' store location and check it as exportable. +Install the certificate (by double-clicking on the .PFX file) under 'Current User' store location (by default location) and check it as exportable. From f0f56c3d478b7d1b9abad182d35a15a8e64343fa Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 17:05:01 -0700 Subject: [PATCH 116/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 51fc0dc7a..2014352ae 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -92,7 +92,7 @@ IMPORTANT: At this point, copy/cut the .PFX certifiacte file saved in the downlo ## Install the certificate Install the certificate (by double-clicking on the .PFX file) under 'Current User' store location (by default location) and check it as exportable. - + ## Editing servicefabricdeploysecured.parameters.json file From e41b1c3261cb35f52d78985f79fd63756df3b95b Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 17:17:44 -0700 Subject: [PATCH 117/136] Updates to servicefabricdeploysecured.parameters.json files --- ...servicefabricdeploysecured.parameters.json | 16 +++++++-------- ...servicefabricdeploysecured.parameters.json | 20 +++++++++---------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.parameters.json b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.parameters.json index 4a783768e..9f8a82c80 100644 --- a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.parameters.json +++ b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.parameters.json @@ -3,19 +3,19 @@ "contentVersion": "1.0.0.0", "parameters": { "clusterName": { - "value": "your_sf_name" + "value": "pro-eshop-sflinux-cluster" }, "clusterLocation": { - "value": "westeurope" + "value": "westus" }, "computeLocation": { - "value": "westeurope" + "value": "westus" }, "adminUserName": { "value": "eshop" }, "adminPassword": { - "value": "your_admin_password" + "value": "Your_complex_Pass@word1" }, "nicName": { "value": "NIC-eshopsflinsec" @@ -24,7 +24,7 @@ "value": "eshopsflinsec-PubIP" }, "dnsName": { - "value": "your_sf_dns" + "value": "pro-eshop-sflinux-cluster" }, "virtualNetworkName": { "value": "VNet-eshopsflinsec" @@ -36,13 +36,13 @@ "value": "LBIP-eshopsflinsec" }, "sourceVaultValue": { - "value": "" + "value": "your-value-check-keyvault-at-azure" }, "certificateUrlValue": { - "value": "" + "value": "your-value-check-keyvault-at-azure" }, "certificateThumbprint": { - "value": "" + "value": "your-value-check-keyvault-at-azure" }, "vmImageSku": { "value": "16.04-LTS" diff --git a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecured.parameters.json b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecured.parameters.json index 2092ebd9a..bbc8eb663 100644 --- a/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecured.parameters.json +++ b/deploy/az/servicefabric/WindowsContainers/servicefabricdeploysecured.parameters.json @@ -3,19 +3,19 @@ "contentVersion": "1.0.0.0", "parameters": { "clusterName": { - "value": "your_sf_name" + "value": "pro-eshop-sfwin-cluster" }, "clusterLocation": { - "value": "westeurope" + "value": "westus" }, "computeLocation": { - "value": "westeurope" + "value": "westus" }, "adminUserName": { "value": "eshop" }, "adminPassword": { - "value": "your_admin_password" + "value": "Your_complex_Pass@word1" }, "nicName": { "value": "NIC-eshopsfwin" @@ -24,7 +24,7 @@ "value": "eshopsfwin-PubIP" }, "dnsName": { - "value": "your_sf_dns" + "value": "pro-eshop-sfwin-cluster" }, "virtualNetworkName": { "value": "VNet-eshopsfwin" @@ -36,19 +36,19 @@ "value": "LBIP-eshopsfwin" }, "applicationDiagnosticsStorageAccountName": { - "value": "sfdgeshopsfwin6744" + "value": "sfdgqaeshopsfwinsec" }, "supportLogStorageAccountName": { - "value": "sflogseshopsfwin3480" + "value": "sflogsqaeshopsfwinsec" }, "sourceVaultValue": { - "value": "" + "value": "your-value-check-keyvault-at-azure" }, "certificateUrlValue": { - "value": "" + "value": "your-value-check-keyvault-at-azure" }, "certificateThumbprint": { - "value": "" + "value": "your-value-check-keyvault-at-azure" }, "vmImageSku": { "value": "2016-Datacenter-with-Containers" From 9f1316db10e2302d1df1adb7a43475c1303c9e7b Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 17:21:47 -0700 Subject: [PATCH 118/136] Update to servicefabricdeploysecured.parameters.json file --- .../servicefabricdeploysecured.parameters.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.parameters.json b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.parameters.json index 9f8a82c80..65875cb31 100644 --- a/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.parameters.json +++ b/deploy/az/servicefabric/LinuxContainers/servicefabricdeploysecured.parameters.json @@ -15,7 +15,7 @@ "value": "eshop" }, "adminPassword": { - "value": "Your_complex_Pass@word1" + "value": "Pass@word1" }, "nicName": { "value": "NIC-eshopsflinsec" @@ -27,13 +27,13 @@ "value": "pro-eshop-sflinux-cluster" }, "virtualNetworkName": { - "value": "VNet-eshopsflinsec" + "value": "VNet-eshopsflin" }, "lbName": { - "value": "LB-eshopsflinsec" + "value": "LB-eshopsflin" }, "lbIPName": { - "value": "LBIP-eshopsflinsec" + "value": "LBIP-eshopsflin" }, "sourceVaultValue": { "value": "your-value-check-keyvault-at-azure" From 5efdc73695064e6f76ff1e043f19933a43da500d Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 17:52:05 -0700 Subject: [PATCH 119/136] Update readme.md --- .../servicefabric/WindowsContainers/readme.md | 21 ++++++------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 0acd8716a..9d0326fdd 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -96,22 +96,13 @@ Install the certificate (by double-clicking on the .PFX file) under 'Current Use ## Editing servicefabricdeploysecured.parameters.json file -Edit the following params in `servicefabricdeploysecured.parameters.json` file to set your values: +Edit the parameters in `servicefabricdeploysecured.parameters.json` in a similar way you can do with tthe unsecured .json file shown above (clusterName, dnsName, etc.), plus edit the following values: -- clusterName: Name of your SF cluster -- dnsName: Name assigned to your SF dns -- adminUserName: user name for administration -- adminPassword: user password for administration -- sourceVaultValue: keyvault resource id (check azure keyvault properties) -- certificateUrlValue: certificate url (check azure Keyvault certificate properties) -- certificateThumbprint: certificate thumbprint (check azure Keyvault certificate properties) - -Optionally, you can modify which ports are opened in the LoadBalancer for accessing externally to the apps: - -- webMvcHttpPort: port externally exposed for the WebMVC app -- webSpaHttpPort: port externally exposed for the WebSPA app -- webStatusHttpPort: port externally exposed for the WebStatus app -- IdSrvHttpRule: port externally exposed for the Identity app +- sourceVaultValue: Your Azure Keyvault's RESOURCE ID (check Azure keyvault properties, similar to: /subscriptions/e1234ac1-c09c-3jaf-6767-98b3c5f1f246/resourceGroups/eshop-global-resgrp/providers/Microsoft.KeyVault/vaults/eshopkeyvault") + +- certificateUrlValue: Your certificate Secret Identifier (check Azure Keyvault secret certificate properties, should be in the format of https://.vault.azure.net:443/secrets/, similar to: https://eshopkeyvault.vault.azure.net/secrets/pro-eshop-sfwin-cluster-cert/4d087088df974e869f1c0978cb100e47) + +- certificateThumbprint: certificate thumbprint (check azure Keyvault certificate thumbprint, something like 69JK453486D55A6818577Z0699100365HDK70FCE) ## Deploy the template From d114e1448a1c8d458ba81c578a15510d976aa19e Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 18:09:26 -0700 Subject: [PATCH 120/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 9d0326fdd..44055ecd5 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -104,14 +104,20 @@ Edit the parameters in `servicefabricdeploysecured.parameters.json` in a similar - certificateThumbprint: certificate thumbprint (check azure Keyvault certificate thumbprint, something like 69JK453486D55A6818577Z0699100365HDK70FCE) -## Deploy the template +## Deploy the secured SF cluster (Windows nodes) Once parameter file is edited you can deploy it using [create-resources script](../readme.md). +Use a command prompt window positioned into the deploy\az folder. ``` -create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploysecured newResourceGroup -c westus +create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploysecured pro-eshop-sfwin-resgrp -c westus ``` -## Deploy eShopOnServiceFabric with Visual Studio. +The execution should be something like the following: + +![image](https://user-images.githubusercontent.com/1712635/31641955-0bc9d59e-b29d-11e7-9230-5ba02843d98a.png) + + +# Deploy eShopOnServiceFabric with Visual Studio. Modify the cloud.xml file of each Service Fabric application in PublishProfile directory and set your certificate settings to be able to deploy eshopOnContainers in the secured cluster: From 5a0dad82d67dece49b04763419fce678d5a36540 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 18:10:53 -0700 Subject: [PATCH 121/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 44055ecd5..85054636d 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -87,7 +87,7 @@ You might need to authenticate from the browser when running this PowerShell scr You should see a similar execution to the following: ![image](https://user-images.githubusercontent.com/1712635/31640172-93efcca0-b291-11e7-970e-5b5e6bf07042.png) -IMPORTANT: At this point, copy/cut the .PFX certifiacte file saved in the downloads forlder and save it in a secure place. +IMPORTANT: At this point, copy/cut the .PFX certificate file saved in the downloads forlder and save it in a secure place. ## Install the certificate Install the certificate (by double-clicking on the .PFX file) under 'Current User' store location (by default location) and check it as exportable. From dadda540173f0ece2b029f40f53110a7332fb815 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 18:11:10 -0700 Subject: [PATCH 122/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 2014352ae..de87936b6 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -87,7 +87,7 @@ Execute the gen-keyvaultcert.ps1 script to generate and download a certificate f You should see a similar execution to the following: ![image](https://user-images.githubusercontent.com/1712635/31640172-93efcca0-b291-11e7-970e-5b5e6bf07042.png) -IMPORTANT: At this point, copy/cut the .PFX certifiacte file saved in the downloads forlder and save it in a secure place. +IMPORTANT: At this point, copy/cut the .PFX certificate file saved in the downloads forlder and save it in a secure place. ## Install the certificate Install the certificate (by double-clicking on the .PFX file) under 'Current User' store location (by default location) and check it as exportable. @@ -96,23 +96,12 @@ Install the certificate (by double-clicking on the .PFX file) under 'Current Use ## Editing servicefabricdeploysecured.parameters.json file -Edit the following params in `servicefabricdeploysecured.parameters.json` file to set your values: +Edit the parameters in `servicefabricdeploysecured.parameters.json` in a similar way you can do with tthe unsecured .json file shown above (clusterName, dnsName, etc.), plus edit the following values: -- clusterName: Name of your SF cluster -- dnsName: Name assigned to your SF dns -- adminUserName: user name for administration -- adminPassword: user password for administration - sourceVaultValue: keyvault resource id (check azure keyvault properties) - certificateUrlValue: certificate url (check azure Keyvault certificate properties) - certificateThumbprint: certificate thumbprint (check azure Keyvault certificate properties) -Optionally, you can modify which ports are opened in the LoadBalancer for accessing externally to the apps: - -- webMvcHttpPort: port externally exposed for the WebMVC app -- webSpaHttpPort: port externally exposed for the WebSPA app -- webStatusHttpPort: port externally exposed for the WebStatus app -- IdSrvHttpRule: port externally exposed for the Identity app - ## Deploy the template Once parameter file is edited you can deploy it using [create-resources script](../readme.md). From 51a101cddf30a416cb7434af92ca9cb6c425d545 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 18:29:00 -0700 Subject: [PATCH 123/136] Update readme.md --- .../az/servicefabric/WindowsContainers/readme.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 85054636d..30591ff7d 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -96,19 +96,21 @@ Install the certificate (by double-clicking on the .PFX file) under 'Current Use ## Editing servicefabricdeploysecured.parameters.json file -Edit the parameters in `servicefabricdeploysecured.parameters.json` in a similar way you can do with tthe unsecured .json file shown above (clusterName, dnsName, etc.), plus edit the following values: +Edit the parameters in `servicefabricdeploysecured.parameters.json` in a similar way you can do with the unsecured .json file shown above (clusterName, dnsName, etc.), plus edit the following values: - sourceVaultValue: Your Azure Keyvault's RESOURCE ID (check Azure keyvault properties, similar to: /subscriptions/e1234ac1-c09c-3jaf-6767-98b3c5f1f246/resourceGroups/eshop-global-resgrp/providers/Microsoft.KeyVault/vaults/eshopkeyvault") -- certificateUrlValue: Your certificate Secret Identifier (check Azure Keyvault secret certificate properties, should be in the format of https://.vault.azure.net:443/secrets/, similar to: https://eshopkeyvault.vault.azure.net/secrets/pro-eshop-sfwin-cluster-cert/4d087088df974e869f1c0978cb100e47) +- certificateUrlValue: Your certificate Secret Identifier (check Azure Keyvault secret certificate properties, should be in the format of https://.vault.azure.net:443/secrets/, similar to: +https://eshopkeyvault.vault.azure.net/secrets/pro-eshop-sfwin-cluster-cert/w647684642cGE2sj83b3hfe4h8e08963) -- certificateThumbprint: certificate thumbprint (check azure Keyvault certificate thumbprint, something like 69JK453486D55A6818577Z0699100365HDK70FCE) +- certificateThumbprint: certificate thumbprint (check azure Keyvault certificate thumbprint, something like 88JK453486D55A6818573G0DW9100365HDK70HDK) ## Deploy the secured SF cluster (Windows nodes) -Once parameter file is edited you can deploy it using [create-resources script](../readme.md). +Once parameters file is edited you can deploy it using [create-resources script](../readme.md). Use a command prompt window positioned into the deploy\az folder. + ``` create-resources.cmd servicefabric\WindowsContainers\servicefabricdeploysecured pro-eshop-sfwin-resgrp -c westus ``` @@ -116,6 +118,11 @@ The execution should be something like the following: ![image](https://user-images.githubusercontent.com/1712635/31641955-0bc9d59e-b29d-11e7-9230-5ba02843d98a.png) +Once the cluster is created you can explore it with Azure's portal, like in the following image: +![image](https://user-images.githubusercontent.com/1712635/31642431-bf1c409e-b29f-11e7-980f-a7685a45108c.png) + +In this case, the ARM template is creating a 5 node cluster when creating a SECURE cluster for "production". + # Deploy eShopOnServiceFabric with Visual Studio. From e4e3cefdd159a1be7925efff3d92d7b3da3ad88d Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 18:43:50 -0700 Subject: [PATCH 124/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 30591ff7d..856984b03 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -91,9 +91,12 @@ IMPORTANT: At this point, copy/cut the .PFX certificate file saved in the downlo ## Install the certificate Install the certificate (by double-clicking on the .PFX file) under 'Current User' store location (by default location) and check it as exportable. +Also, install the same certificate as CA (Certificate Authority) under Current User, too. +![image](https://user-images.githubusercontent.com/1712635/31642795-c6ffa434-b2a1-11e7-8ff8-2a63549a780e.png) + ## Editing servicefabricdeploysecured.parameters.json file Edit the parameters in `servicefabricdeploysecured.parameters.json` in a similar way you can do with the unsecured .json file shown above (clusterName, dnsName, etc.), plus edit the following values: From 1c315cfa0b5370f0fc9efde96171d33b06154b3f Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 18:44:55 -0700 Subject: [PATCH 125/136] Update readme.md --- deploy/az/servicefabric/WindowsContainers/readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/WindowsContainers/readme.md b/deploy/az/servicefabric/WindowsContainers/readme.md index 856984b03..18aa8ad78 100644 --- a/deploy/az/servicefabric/WindowsContainers/readme.md +++ b/deploy/az/servicefabric/WindowsContainers/readme.md @@ -91,10 +91,11 @@ IMPORTANT: At this point, copy/cut the .PFX certificate file saved in the downlo ## Install the certificate Install the certificate (by double-clicking on the .PFX file) under 'Current User' store location (by default location) and check it as exportable. -Also, install the same certificate as CA (Certificate Authority) under Current User, too. +Also, install the same certificate as CA (Certificate Authority) under Current User, too. + ![image](https://user-images.githubusercontent.com/1712635/31642795-c6ffa434-b2a1-11e7-8ff8-2a63549a780e.png) ## Editing servicefabricdeploysecured.parameters.json file From b66a12c45fe69d66e24a631dfe10edc602e51826 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 18:44:58 -0700 Subject: [PATCH 126/136] Update readme.md --- .../servicefabric/LinuxContainers/readme.md | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index de87936b6..8e52fa8b6 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -94,21 +94,35 @@ Install the certificate (by double-clicking on the .PFX file) under 'Current Use +Also, install the same certificate as CA (Certificate Authority) under Current User, too. + +![image](https://user-images.githubusercontent.com/1712635/31642795-c6ffa434-b2a1-11e7-8ff8-2a63549a780e.png) + ## Editing servicefabricdeploysecured.parameters.json file -Edit the parameters in `servicefabricdeploysecured.parameters.json` in a similar way you can do with tthe unsecured .json file shown above (clusterName, dnsName, etc.), plus edit the following values: +Edit the parameters in `servicefabricdeploysecured.parameters.json` in a similar way you can do with the unsecured .json file shown above (clusterName, dnsName, etc.), plus edit the following values: + +- sourceVaultValue: Your Azure Keyvault's RESOURCE ID (check Azure keyvault properties, similar to: /subscriptions/e1234ac1-c09c-3jaf-6767-98b3c5f1f246/resourceGroups/eshop-global-resgrp/providers/Microsoft.KeyVault/vaults/eshopkeyvault") + +- certificateUrlValue: Your certificate Secret Identifier (check Azure Keyvault secret certificate properties, should be in the format of https://.vault.azure.net:443/secrets/, similar to: +https://eshopkeyvault.vault.azure.net/secrets/pro-eshop-sflinux-cluster-cert/fd47684442c04cdj83b3hfe4h8e08123) -- sourceVaultValue: keyvault resource id (check azure keyvault properties) -- certificateUrlValue: certificate url (check azure Keyvault certificate properties) -- certificateThumbprint: certificate thumbprint (check azure Keyvault certificate properties) +- certificateThumbprint: certificate thumbprint (check azure Keyvault certificate thumbprint, something like 69JK453486D55A6818577Z0699100365HDK70FCE) ## Deploy the template -Once parameter file is edited you can deploy it using [create-resources script](../readme.md). +Once parameters file is edited you can deploy it using [create-resources script](../readme.md). +Use a command prompt window positioned into the deploy\az folder. ``` -create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploysecured newResourceGroup -c westus +create-resources.cmd servicefabric\LinuxContainers\servicefabricdeploysecured pro-eshop-sflinux-resgrp -c westus ``` +The execution should be something like the following: +![image](https://user-images.githubusercontent.com/1712635/31642529-54479704-b2a0-11e7-90ee-2abf32c92205.png) + +Once the cluster is created you can explore it with Azure's portal, like in the following image: + + ## Deploy eShopOnServiceFabric with Visual Studio. Modify the cloud.xml file of each Service Fabric application in PublishProfile directory and set your certificate settings to be able to deploy eshopOnContainers in the secured cluster: From 54db2cad980b2cf2fa77e0a4ab9e51dbbfd672e4 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Mon, 16 Oct 2017 18:50:28 -0700 Subject: [PATCH 127/136] Update readme.md --- deploy/az/servicefabric/LinuxContainers/readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deploy/az/servicefabric/LinuxContainers/readme.md b/deploy/az/servicefabric/LinuxContainers/readme.md index 8e52fa8b6..98d097b10 100644 --- a/deploy/az/servicefabric/LinuxContainers/readme.md +++ b/deploy/az/servicefabric/LinuxContainers/readme.md @@ -109,7 +109,7 @@ https://eshopkeyvault.vault.azure.net/secrets/pro-eshop-sflinux-cluster-cert/fd4 - certificateThumbprint: certificate thumbprint (check azure Keyvault certificate thumbprint, something like 69JK453486D55A6818577Z0699100365HDK70FCE) -## Deploy the template +## Deploy the secured SF Linux cluster Once parameters file is edited you can deploy it using [create-resources script](../readme.md). Use a command prompt window positioned into the deploy\az folder. @@ -122,6 +122,7 @@ The execution should be something like the following: Once the cluster is created you can explore it with Azure's portal, like in the following image: +![image](https://user-images.githubusercontent.com/1712635/31642956-b7cfc8d0-b2a2-11e7-8ede-a141ec190eb4.png) ## Deploy eShopOnServiceFabric with Visual Studio. From d7e3dc6facd861be68eb919a79c70c7cfbd8321f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Tue, 17 Oct 2017 11:34:48 +0200 Subject: [PATCH 128/136] Updated SF Windows manifests Set single instance per SF service --- .../Bus/ApplicationParameters/Cloud.xml | 2 +- .../NoSQL/ApplicationParameters/Cloud.xml | 2 +- .../Redis/ApplicationParameters/Cloud.xml | 2 +- .../SqlServerPkg/ServiceManifest.xml | 4 ++-- .../Sql/ApplicationParameters/Cloud.xml | 2 +- .../ApplicationManifest.xml | 6 ++++-- .../CatalogApiPkg/ServiceManifest.xml | 2 +- .../MarketingApiPkg/ServiceManifest.xml | 2 +- .../ApplicationParameters/Cloud.xml | 15 ++++++++------- .../ApplicationParameters/Cloud.xml | 2 +- .../WebMVCPkg/ServiceManifest.xml | 6 ++++++ .../ApplicationParameters/Cloud.xml | 2 +- .../ApplicationParameters/Cloud.xml | 2 +- .../WebStatusPkg/ServiceManifest.xml | 17 +++++++++-------- .../ApplicationParameters/Cloud.xml | 2 +- img/appinsights/create-insights.PNG | Bin 0 -> 27395 bytes img/appinsights/settings-insights.PNG | Bin 0 -> 23770 bytes img/sf/set-instrumentationkey.PNG | Bin 0 -> 46915 bytes 18 files changed, 39 insertions(+), 29 deletions(-) create mode 100644 img/appinsights/create-insights.PNG create mode 100644 img/appinsights/settings-insights.PNG create mode 100644 img/sf/set-instrumentationkey.PNG diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Cloud.xml index 8990ebec4..5a4c2828d 100644 --- a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/ApplicationParameters/Cloud.xml @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml index 246e938b5..8b48c39d1 100644 --- a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/ApplicationParameters/Cloud.xml @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml index 96eba3857..951ce24db 100644 --- a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/ApplicationParameters/Cloud.xml @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml index b71459931..252c74f21 100644 --- a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationPackageRoot/SqlServerPkg/ServiceManifest.xml @@ -15,12 +15,12 @@ - microsoft/mssql-server-windows-developer:2016-sp1-windowsservercore-10.0.14393.1480 + microsoft/mssql-server-windows-developer:2017 - + diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml index c59b1bdc4..3ad12232a 100644 --- a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/ApplicationParameters/Cloud.xml @@ -1,6 +1,6 @@  - + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml index 1f7e89dab..29679fbaa 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -12,7 +12,8 @@ - + + - + diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml index 33fd44d83..db840c274 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -27,7 +27,7 @@ - + diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml index 68931e6f4..bf87a8296 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml @@ -1,14 +1,15 @@  - - - - - - + + + + + + - + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml index 01a3f70df..207735106 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationParameters/Cloud.xml @@ -1,7 +1,7 @@  - + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml index f054246d0..927220a15 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml @@ -28,6 +28,12 @@ + + + + + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml index 01f86972a..d99e1573a 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml @@ -1,7 +1,7 @@  - + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml index 3b50ef8b6..fdeb6fd88 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationParameters/Cloud.xml @@ -1,7 +1,7 @@  - + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml index ee821045d..3cbfc87a9 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml @@ -22,14 +22,15 @@ - - - - - - - - + + + + + + + + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml index f77d4b08e..f49e04e6b 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml @@ -1,7 +1,7 @@  - + \ No newline at end of file diff --git a/img/appinsights/create-insights.PNG b/img/appinsights/create-insights.PNG new file mode 100644 index 0000000000000000000000000000000000000000..535ae4b9829bf247b9b81f25e85a76f6f8554a94 GIT binary patch literal 27395 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 literal 0 HcmV?d00001 diff --git a/img/appinsights/settings-insights.PNG b/img/appinsights/settings-insights.PNG new file mode 100644 index 0000000000000000000000000000000000000000..16e6323d377cfe313eed34463baea69f89cb160c GIT binary patch literal 23770 zcmce;cT|(xw=Qf)H!2_sL7IXJN;85KDG{j(0*Xozh$ey{AVxrnDIzL?Kq3MXX%Ug4 zGy_O4mXOeU6A&~<{lYAqh9=_Uzw2_k3gAZ`?8N9}e1^cda$cGoM+O;Wk!gd;U83 z*QQOI_MA62zPxGER^X;ho44%T!T(JQ-Qhj|%VyupX6H8LwMb3yf7o{0@S@?SO+=g^ z=jL|)&%5rKJNRzewD;@Azs(e%tXrElIr*G7HoOw(GE>DZbiEoh*NB2mCcXEa&9#lU zb-j9G>>}szC0t1^={cU{UT&cjeENhjPU~3kNzp;5#=rdmE%rbMl<6>gn^H;c~C&f20LIB&(B?JX;pN z`?h?2%NR#H(`bq`mj9sK3SjO%vYPY|7QRBdCO`|whf zE&St#58xD+H>U@h)GIIyEf)_A{IK9&ww~#-JF-^K=r|Bhd+KMWoX(nfj19001_OT$}L*M;h@esI{w(SfOSKF^VdRv~OT^VKh*2?qC>} z1&E=N?3SWay_XJWSzLb&*4H#b>h*LB*<=u3QpLU01)37shphdfHL%Kb091K0t*c~l zvDyZlUe;(+;-`GJH!y7&o@672I9bi)w)l2*hqYDTvV!P_fFXxKEw@*)bvih7#^oKL zegXUG81FF#B29K#l5V=@z^i~nAr``0`(#PQcyecnnsJgZL?6zazvP=h4`X3q{;ZT8 zzm4BlBdN>p9Bnj1P;{XD^$TokEhYGDRY(24x>oU%Xzmt5l8yfhdSRC;yAk0Zy%w?H zR$xtS3s2Eg-FHU`)MQrqBMyy>?a^j-X_5*6)?j6r3;Q)zwTSu3t!0E+-ao1{8=-&| z$Vvm=l9gKly(8d{6_;k!`5&j0L!xX_22LbX_J=PU=gD?@sn;ZkLT>M7hUoFMwYnS{ z7g7rV0;WT$Mq$^M%~IfG`}8C3v$^iUDwLZG6FMgeLhQE>4B<#BNZIgyJ2Y$XN5Up%u{D+xa-&=dwI z>3nuKduRjxChH9lB#Z)GqC#6cwB?BU2om(^%7qbKm-VddvReLz8IiJ_5xNApFG$_wom=23e{LhG~|_P{XbfGhxeXR^arwF@lraK?K5S0Yl>i^vrITXLI-(yw=wlGAlq*W)P=d=YK4BNx zIz$5R-Y#g>wi-XE)%Fqt@!)*JkxyR}2?cw1Y5|2UQV4jmkT(;fO?WRFzMM8}X}4Z> zQ6@kplqPWhjFH0x)r!FE(lbn|(9ST=5v|`4lB=wP>LMUazHsD{HeCaFibb5 zkxdR+*P}ds;5?jKP0V(dLd`0W-=3;X(@wo2vKh+yPdrDKa@hJy*%uZVi0kEPQCKNjwFw$_f|9?)2VY(h-5P_BK++ERd=XXN1eM z#~+`G(4ibe%pV^ny+$O^6*3(-i%!9j>My1`t&h*<@jT2P7GD*U{fOpKIh#f>IFH!z z1j@Mhe72vA?U9nLY{Ck@WepAQfH}$Gv@+JPID1o2Q#AE66&_FCTIMpWeQYMoUhCBH znk8+A$T;t2fdSH`gx1UYh6fu*7u+r&%{y@%AT}`Ng>}PNe8G9j$sbzS^L%rvt)U*j z#75fIbUmx4^3bEi7d-)6l$?z&5Cxm#XvZ^6q&%m?wC8i#UF~|dGOfU_ZYqe4R_xI> z;9L~d^`;uMaLoYL)1d}e)iQi#9|v9lUJU(PhzG6iqzmp*pafo~8%y}Snj-BwVas(Y znL2XbU~DPQx&W9P3QLieb&b7v(8UADBe}#NrLx|_0rX`&fXPl0kUN^ zWXyKv+cjj0n$2~I1;~Yf+LV!76`p(L%95$!u(oS6h541ZM>Bzy$6x9V;jc+b%SM+D zhiHy&MuwYtF9uTK?N~kd#e-p!CwQE!=WN_44BG4R(0jmT1# z@L@PppG#-W^~;V1B-^1cA$3rfUs6JTirZG?*+apkNb5KgD#v3l1m(Q8rAupuwYL_3 zngZ`|VTd4XQ|RuFzd)@7oSXaO%^+&eNzc!6zu2l9;)*yh9*hiPU;`?lV|y`&*1yjo1C(x% zK8Fe<_ExWa%$+whKXfjT%$ApBnP2yD6!GnK4){o=x9H9}sp@|b7AbtVI!i0+wDMdl zMgu)-|Kq*N9JR{%FJoOI7g!6K--P#h4F?P(a`A_gYoE!?U6$M>EVCR;*B$=WBM$~e z^&Wjx&O!dzD(lX8bbpLOSX6i0C$=GvNZ?djIr?W+ES$3a0&6fl=&R&Vn`-|Nh_J{o zho&{a!6Bxh$>)yHzQZWeGii4~oS#DR7L5VdNeTuF;l+9{5vvu$-Y(1U?Q#d3Q&s#U zB_d3kdLX;$e0@ktyd) zfJu=(XM(Yfz_0cd1QAs z)PK0LfBodA;>CBA?Z;gD%IZjzFzwHjmB+!HBWI9H?q}~}!2L0;wUO&*K;D*TANIEi zAt6a!sdrb*^!u}v*;98qyHUFuE{M-n2W48$2|>!;U-pllG8lP~(#R}ag26{^GmCZ} zvgTd_gVMke&fK4gywli@)}Kl(9f61DT03~3>N*Y3P(slnT2SprhGR+O*CnK!cPI;xhLx?c$St%d&7gKRAe@BLOoQp&=B`aM%B$nxt60sUk~ zn59jg<|tiz;Z?oCBc9IQ{aRy8)#kAN_mOAj=c-{j^RXTPEOjL4?un^y2;E|2l zx?GpJr_H6>1iXH9R2}@9P1D~8ZT2>wqQ08)NG#Bfhrib+^j}N5aJ#Oz@<)l%19oS1 ziiXxVp@~w!Auy8IVPI@i%PB?e_q7`s@TsZd9?8|KmErE}esu-ReL2Z^m1@9v9h|V$ zYi(sFo7%!K;`7?Ikm3jl$RNTMPD8w+pMF8f24oGK&KN{l7B<85{3>C08o=Lbw_ffkzwe#_SicrycmW&o+;xI zd1|>+3u!PCNRRq226n1>0{(?e4No}pmSrL8AJ?LA$*SlZ&Z-zNz&avh-Sr5}@vGfG zwKIJIv)*S4*@7xR`>3NRoFT_%t9=Fl1Q8|$>q%Iy@y{5(#w1G^PA4upV3k~i)nRwj zHvVvlz#K6MzXf`|aCX)=0Z|85KAqvQQZsp@T+{@?iKC`uAg4=;tWUjHgUB9?M?;%u zx$L(`9799#rPK2S9uFGod{$(t-w<<77J~# zvC==JS_~a@hKA1^%3$4s_X`xc5=e-rwf2YC_9GCrK_QpVtXf=$U?}G;SDVGNaD5rE zW=Ul}4f6yFNi*miuN-o?IVj|ebDh~Pc4yFb$l$pdsKf+7L2+d|&4&|I$sqq-Ft})N zp6u7V>$>=6D?Dd>hrdn;a>4?9q9;>k%-Kdvtt}l>Y1QToG&BfTlBUGg^I}zNHcv&8&>|htV61{pj5ivdz;5% zxAil4_ys=Uw=5&@B^6!$kEGlQl-O{tsN?`}HjhYp@Vt{r)q6LxQ}&>*I4m-{y83?N zc@IO&1pv;2+%N94RDYYZ)o>|h1Uq`FxL$Npo~>jkO)~US8co~AI&Ey(%VhkAA;Din zdRU<^IT>p&kYkRC`^hLNIlryL;GP@%UB)TUoe0+7UFI;y38XmMmInN|LK^RBhqHG% zTY=p1C$!V&xOod_ zr)?KpWgm~=kXL29s`FJ49oUtwG#~6p-u6k2Y&fyj^fjM4L)A1hD`TA z>%gBHwH3%B(6I%0F~o>4vok5aLA^_9rn9=5T6xw=y}Co^xt|^xdWP&Qx5AgsBWgIZ zoV*n_6f#qagUG@vj~1wjAdIgNO8t`d&1uj*8%E%l^AMs_?{Yl(Mx~?g`6sI$jk#sz z`vqH)=YKg;!SN8`K~klKjSTlkyk2tUNUhAU*9f7UmCtkrE+>;FLaVz>iBv&RVDdnn z-8&RjNu@v|&z`WtJO*ZncQPSOU9NlU6s-N<)My)gY^{bk0WX%3%~0&A+q>AQGDwDV zQXY@0cPWK#I&-qSb0dTRd{)luOItt^xI$f>1`4=>J|DNsh~?~s1&I>%pd?^(CWH*p zkEw!RNZ-``+>6PQaV3D z)}|IiqM(XV$KRB71Sz#TM;?xW){ckqV)OC7NCTcp(wu!}mpCaXBxy&-9Zb6bKQrL@ zI(m0mA6X4CzcqVkEqvs27j{v5ZYhnslZfj`deCh9B=~*k&k?eukJC|Qjra)Nm9)S` z{F~vxs>bEl{}wFd)2>RN&k)*HaU*A8Pn+_yiOnW6(DyqMVU}(yUMq~m-$>}NTNyI> z_31U-nXWH#ZoY*gl&;EekhUO)Bc?>}{ag|xr9Fu!VR zD}lkM1x<%%CV+UK{F_m%G>l!O2CI;oF$Wr~93Ayckk#iHS8#93a{Dd0lKfRNWd4Lj zVNvv7q^C^gSjp*DRHL|Kd%M}YnIpee$JhQsE^~Aa<<5t8xgEl%>}7wk+oqmh_2O9L zdYkOe0AourNrmLK+&D_Ju+}Jr(xymn*%NRNqK~eoKFC>b>UDl_W%tHrB{n{NCF972 zXO4Tw#~{LrVD?ItH!^3qTTECHoy3u`9896z#cl9s^3x6B9uI$!dM%WQ#&;SZpx0Bt z9E$Mi^kVeB?)L9-icVBbgVDwfkzqpqc^HTW%vO&RiI;UoPfd32g*fb2g?=nHRdWp#i0oq<4IyX0s*3aZB`xN&Q={rzMj5gKKgCE zC!$vFGVuA&V@b`QhpHYXc3OiFI<9Uezc%)}-0zkXd6_f_UmsE0LVK$=MC89PevorE zkwSO8aj6g5O-H`FT-1~+;DwSIfXF$TSIr9CH1l_4~vf4|F=G`KvXknmjq z)ipgBP#QEBkNO}7sSBl`Rv6bRZB{_*%MZPWgoRZV`1xtV>`QwR-r@4Tqei(qepyze zgi@L?aG}Mbcxo>A?E&qwl*J6!gzY-#Hm9bUHM@tpqj3ah_(E-V$9wrpzWi>(>52z4 zjtgHiNqe_M=o*eP%6#c9#mHklY5Ac7LU|Dw80ie2W1jOfv6z&7CfF}e!wSvna+Ttj z<}-iU;cqunzh-(ELQRf;0n^&i{zV!vw&ws)c`@zA4P8~L!zYTa^uDcd)95V-4~`r0 z(7KlyF=S^raM$8}gBd718sJ&4#$gWZ`CfYjT?EeGS$v1`{`SWh0mm+4V|)7 zf(A-_d_W4}BDI$$wb)nmG5Bw`f2+0-_zS$;RwB=lHsPKv%r*`?p;oUHGd#ltYQ(oH zcZ{T6QSNg15c$@dLP%{ckJi=`5&LJHH`xc3tP^3j?w#Wb5&C|PLGfJRj2w5`EnS5%+aaf z^`kEjI|`p1Bz`V^s6O@UEqbOs%bn9F7|9#BoG8s#`ib8rfKi69XGw={P?G`P@g0R9 z90MSaP_HpJh#Oid{Ko(CH#UB#lXL42fQVfpF@L>eBLq$U*Rs0}_o0#_tvg03XE6K- zB8QG+PTkrWFRlB4*;~)wrkBLOr2RS2&r+=v%F=&jvLCobM3f>n9P{^zud>nKN_+^- zZWh;mnNOl2De^PzD1`jz_i-V4av6SxCEtq6<2J%vh)I)I(=U*Ir7s55yzZ*>zZ-{F zal`L-@zLdvz1x%eyy9~Ih8j2MFSRsH6Vb$PC$9gE5>4b^4u}87Z@Cs;E&iqIEER}m zp@*tg+D6!tYu|nwE9MISH{{3z7(ilf!QWfk2su!4Ly}1oP`zmJahuz9jlZ|I zp$2kf-1dFI_6CemqPIxSzfe!?3aPFEW1Q&S^k?H60gsQtBEa53UrXP~mb975Myv;K znVc5IJ_@q9=Azf{1^w`^i1h8PoSVuumwWwQg}*odCsYy96CW4ly4a#fUy5faDg4{T)TaK55NK7Z@_Sp6UZ_d9@B?h$41QruVTq^wnp6SWxjI^td zRr&M+n-hn8NtykKSzQa<`-!}kGO+ey-$B-riSA;z>d^KtYOZf5Jj*HH8w76+F#qUs zL+0w&igVD08s<05KNv?FIyYPq7kONVhHPI5sfBl^>-9t*pA!OqyrM-uFlAZ1xaFHB z^51GvS%cKf=Gk1^r}AE*G2lv36iyK$e7H zGj zVImT09v%?%=J2&6kIZYhMi#iZIQGOoBeR^!v&B)v|DBq+^)5oz-|J3B0CuN}$nL^C ze(bI9VtOV55JxHAr?Mmp9#;Ud!)GAKZ~ud+OpilawCC`&!Zn=gI_ILNI54sGe|U_> zKMAI^<1q(~X7$mr9(l9EioHW9OUBayWys4Mjgn%M|7L!hL~M)IhSz3jgglV9jZ~dK-Y=F@pod3h({s}z4z>V)J z{{ZtJ;`vWx>-$TN_E|vI>%nwiyOUqLNuv(e308Zcd81Qz-t;m%^8i W3WQRsn8=sgD?Qv(sW_#T^Ck^ou*n)y+y(taFq{ME$)^Txn;4VK?otI%HtE!Ha}*6^lk?$${1MUHQ7 zayM=&nJvvM8yyHJCd+M!t@c{)0H@U14e{oNJ82Sy?!RNHX*fWvErv&h&sD7!FEf=` z{Qa4#yj1|smEt>R21>N-zzF{Vp~pLJ+QvjBtfdBw-bvF1N-@xuGQLw=7Fd!s3zFXY ze7!fhxm}T?p`3y}8A4iv#0#Y7;wDY&!R1MM7(ijxpT+Ps+<_WzaZdzh+(NCYh!qNA zhSDO{TRxy)iS#=8USt%+SLFo#2odOKB^TMJ2#5h)k3d@VR|jc2twB~5s0-tF`z43w zpV6e}0>k+B=Vr?fmVf6?H`0uE3!WE)?39?@d&}Ow@KeTK|3dWP{Gvc5mFEmzpXMvoEM|xb{OBFzyQDXR7uMOaVPFKF9Oz{Gz%f;Lutu#@Y@4g z2CQ4E{(I_u8wZp4jkjzFNzJvr2)9P#@T(MFLrWQ29}PSh96G2*8`<2u(amVNEd^pM z@Ov%rGB>S#KrnAHet^4_iDG9qLvi}WPQlx%6rO=0EyG*cFW^6X zxGhpoy+?0J_6GlI|AAOBAP@1Vbx!Mg<>i|FAlI&+&bx->A<>O$S=@G6?j^<-@#=f; z<3EKgNCgbSlt5XBE`?+@|2I&U99Cd(-M8|(jyT|yw#eT+<>opv@}4hdh0WE&PLDFWYb#sf;(s0jP`_k0-mjeHe=0CUerc7Wm{jQNEzI4dK;vjYd>R zxg$QaZ|m8iSK_D=Zqm`heFymkCetoqpp$VC^9O^U+-u)SwH0J5$T*uf_oV(}cAA$- zAF^Dd8=*jcKd$b6l)Rwhth-HEdEtJb&3lESQVjRvmSN?yg@@#kVuQ+uSW1W|r^Hrc z&!c0h9Z56%8bO>kM5Hn8rt+E0kXp4bDh37*SYz?|lVEqlsJcc$2Qj*GlZTQ9QidC2 zznRJ%RRDeCJ^xx#{c%aWu>)WcM0#SLScI>hE@-^={q$?=*``A$s7dkIt>cLd#p-Pa zuL_xpZ)r-DVCMYKmFT(`HcfQ`1m@Y@6S{|lt<+Gg#sQslpAExBBCLE>R_2C>d2-*M zio291sl#O@3**Ai-59bb<+y3c(LP-q_Ta5{YiSVH8;0UAZeqaExiVV0+p2h;XI>TW znWm3pDZqr!1wW>OG5Fl`zu30dTl8jLM-vz^0)AhQK|Rfwl|$nz-Ji+w=EIsXE=zB& z3J#%Zp*3uy<9XI_s%Wkd++?2OynWL84CS6)72j+PPVAk%uwd@MJFTp8&!Nd}6jMEh zStvAj+njt!*70mS*}mcH?ejM-8tvZ(L8EWBRIuHe(5JV(-ImH8*?VEz&&Q8`Mi-r5 zQ=~*5qJ76R1@Dj6mZHm+^y}QGVUd$Q{TsS}s;h!pY0v+N3-ULV@JHSohR#4;iFfz! z^_sd=^g=OW%xkN6T-d#~WLfjW`vw6 z_xO;5`auzf5TWw*w;4lTeHiighq>p1IXW{eO2Yl0f&%|Q4+FJ}WfAoHyEgivXI-hadR?VOHVxoald6*}e zvn?dTF*R0(>fD9HmSsZ=iV|xw!>~xBRU+_uTyQ*O) zRq8ut(y9!p8)onYT>XI2u^r;5{moS5>v>0on<~frLJl?8JNuXIoFA8%fVW4v0ubXQ zEU0@#J!Q$)SruOX=&~J=R0@?YEd4upVgTs5nj2mWfo+E0E6*OuFFH9|5i9v-o`2wxvpL|xQmpbiqrF3FXDvWB zdh#I1Ju-MYcSD%g<)NvoQKgBi;;04j8R)G_fyD`HRJn9~3-Pr!6}HJ4;ZuYTVe$lr zMQ0xz?lWF#uI7!Kf%>aKwP~TZQ-a*q3|hr&n6sP+*{Mcf;? zyM?7@+svKD?>@^ZVp1{}JrW19^yni5UBig;Ka9>DWj_OWVxwo)P@G%zzOs>`8IlqP zia(kbtU&A6MGe9yie++UbZRfuzXVfMGxdxf$xNhwXXF9;@Z<#QBdg+$XdjT^{b#vm%dNW2dZ0t20%k zB_-ga_z8kG^QOS;wMlGxUA4d7*lK2}(KA2<^ey4=S|2`lHwLw9bNf-q$>P=ToKF#( zY+S^)9(~h>-g4xe&hjbXUSJg3Fo&djqQPu`biS^ZTm=3yyzrJqIN*DG-E%D^5mB{m zB8wy253e4VMZo@o`#bM%X4XHxrE)ElUl;%3fD$WjMa=r*ftcutC>1XM^W0W~} zkA?S7mDC`h1=3`U`tZ-xVf_s`lnZ`2rvWN9l2F4^zyMn(AaeHkz04zOmYF8L*Mq^^ z_owlwLQR_m@5r3SVBFaB^!u}LlJ1sB0-JNno}+UU&bZHh3w*iA41x~rI$q_ZRvH>7 z3$-OU%b5mL8Nc(H-T7cSSA4CNPmtrd?Ey_c0&?Yctna)5FBD?rC%Fy}#*Hvr=V-Cj z;=i0!LTpCw*@5k6A&umg)Jl!An2#$@z#G&jAke zd&jEIO8vR0nv6o5wGA5fAT{5_VECs)IN(RL0`kjC`|wKvASTP1jT3C?c${FOf$jH*AP*- z-iKq^)v>V>oV=@~N81kInrn4qpChIolAQN*Z=G6aJO!Sd)h4HISRi(rA^eF2-8-DI;!rt#ZagyTVI zZ>hz4X*6ZK$UV}dg~q$eZQ(cym06?M3q~Olv2sl!HT-7h(1E89Z z+d)>QL&`D=i3gm7OS3MPj{`bQ_RD+nyGUX{H{kg7*m(RAY7-Msj^ihu@*mI=Xp=|> zwLgje1$&YgawFfye9AK3{boBxZU;urG>HGvOTSua{CwS(Pazo_cRL)m@#`Rw-%k8V z?T_CSDP(QbMwPexXYOvf3xjXoXn?ti{Gar%{(n{rPMhprmq75@e)I9nqyosV^xUFx z{*AV`Ci^K20$LsP&92&p;4{#YkqofmaAr#I9bKQY-H^zlxkS2s{Hg8{P&uUx>q;k} zc=u;T>TLO5kTZ%G|Q6s=F^wn9rDX+Eg(_QMnvVBXdctGR1 zzy$ll5uwXxL6=CkYRaS@@GBPkz=NvoS7o?zFW%Ukh|2Y;EUVfm7{-=G;Q6;+zIhej z`lYlF?E#R*bI!O!6L-&w0gKw@uP(GJh&A4kWLOx4JS|zQ5bGzZz)n1X|FCd%BvIHT z`}Y>oucL}BM$76SA8HjOFyA8W;Br09!ZDL{fUl+Slv$QhHC6rB@#p@lbHFbrQ>h8w zDrg4894YlD+@)g8OcWbMWFza2RTBJb4^`$)G%(D5H$2%m`FZX_lHbID38J0Sv{d~cDg zZGBchO7Om=Fv9GZev2EwDqI1L;r0bYA{3WIw;RdWD!016vUhnu&~4EAxyV~WEhyqUznbQt^pB16Gp6Tm z(XHnIjR9K@{k6IOlG)654{n6mhes`fQ+)yN^kNYE2(xcKe6V}i5FUOXjR}rY`)jkI z^vC0de0{fBBfBh+YqP;5oo7z*_u(E%B9k6_3uHwoN*99oT4-|o$8A1D%k8kAzfk!> z5r=cRWLj+;IY~L=SXbzNO=bWuHdJ=EMUB7x1>q7%rmAoOXlN zZE%%8RmHfcqQLyXS|!KLq1-Wk(d+)~(!A_DYrO>$?F~lNvBlx>`Z)x@{*}+hb(5R^ z-6eNW6k+g7Jpm@4IJ~)aJ~W&>a!vS@kOA|@{n>t#rio0#(De6;03Fw+KRrOci1_#5 zTs7p}I=)P+6Ie|Vk63YFR@}x2wTr66j({7&(hhKbyV~)VVSyOGAN0Ez+MsB>TWyk& zV$rLsdLkZO_VbzKON(bAXAS-C37DQUy(MB)#vaMr!zzM4+<>`aZ~k35t1}Z>XV6E+ zOxDTh-`$?$kVV<8Ox1=ESc3T)wGjz0Fp`Kl#^y6 z*yy~GBLqgKVecbg%eq{93Am0x>;FdoivM^r!xurOJbZNt4cHbU#^dvI+Wpym%6&zc{{2l6MLKfGvN39b{cwWMr)w$%jDkafNMk%??kx|C$_InC=~f6jhE!K(w9 zKLu%9t(pxz({&5lNNCJDM?CTrH*h35N<_dU$XNOYsA6~1TOP@RJ z-Hn|)fvo7Sozv%iyEf2K8}3WVbFR2H`O})dy8$2>v?vR`1cI9mpHUFGUHRdsk@xXd z#uFj-*kS=gU=kvJr7IxI1QL2$3(PYqgYI3>67n0Eq_k} z-H8DFs37e+iELfsMhshbcdx3V1kO*bVf^(+EF~u+@*a38r3_|lgQCT)I_`XZpjUDW z6$=Ftfa(u8wL!0)MzH=61M%Jw9Eg_%i$#z1W9h~mGVd@&$eBnlKj?XkEIR;&!M@&} zm4tx0Ci=x;%Fc)v;;Z5_nPr+bLSHE>GXr+)%u2uJkR z;H|pOq*F39qnUX_FJ?23Kd;;}f^{XTr5ED#S}N6yu>$}Pt_ z0E<1QM{<-#LHF{1C zGl$Q#7O824Nghi#Az0g-LC%G%xae8fh&4jjoXEv3;-}cnh&u*;DVKxpT2vks_h*jg z2aKA4oZXuMGoxYJafG!ady}nfOIGz3*6aI#~s>7D>Y* z7ceLmS}~(~;nt|+c%olUZ}-b!7|bMS*xna81bWTfj5?@9(w>(Xp!h9CLvgM!Nh&8h zawhP5ZPAa2=Pkp|kcgR+98p2yotDGoFTkjp>S`$0GDXsc&~ImRP;IIC;h@+-!I#h% z!+qkT)gu64ZGU&h{*kx7xA|R{5v5g&pkcs*n(R4O#LOYGY>DqHn&oJD^fbY5x@N!V zC}%LUgXuK2AVd-yc+oO)7+3m~Z0yyAnHftHOA`ftYFta$&C}vfGKBxeDiw$y^;XDh z(Oj!hdp#go&}i@(f9_Sr^-VVap4`?2|KuEhm6DZ9>>-dvIHA z%zPaqwBGQ#u$o|YM|{5?=RJI1dfyuPM5*F~C<|z>iSvZ^5Z=0KFmrNIVjy5yVkE53 z!04gM-J^r; zvG)t=tH5DrW?zE<=3lxYE~gSdX#@;QTHU{jty$7hHX zkau?&q}iZ8%`!`7rhLQqk3$}$Of+1(dZnyX)cyacw9>6GX{d5t|OIi;}{hU~Ii5`^Ee`qsn09=aA~0Fgwy!XM0ly3>?fDMtWG z$nlD)zzio})xHu^e~H=?s!}`uQjPp;gp697&v2#LFq}+z$HtnG-*69fI#W!+iBeEw z2BF?Jg>Ezon|}wS*+V4;7VJa&ZbyRd(oanms(_~B^X9CUtP%aSBYb=j)9EQ)H=KCU zdR`dE?&j>%g}zqC9=HM~0g2L$chnt4wtf`zBzGP89h5PEA8!w;?ftZ?AT~2bk-%|1 z?+=j}EowV|y<~_VsYJ`!U&>V-BSSDkNT}0^MsdlG#qi_LI%+* z(5xR$;2pP6ilg!W&fYO@j^{<^*r@)BY1DK*Ux-h zum+`R2L}Jsp41hlD{5e+wc|hg-=1Fu^K%8(63vb;p`X6m!&BWuk#pm<)yTj|xR156ZB7$i%4JOH8loV{Oq?Lkp6Wwl2&894r6X!=w`n?=fx7|RkxIH zg|hkaFpbyx^p%h^y~|-;aTDbNhj60v z?Du8Pi=U3{BvKCi6ut0_&+qG_f2U)@!17N`liT#O1+VpPhh1wL04=F}@LZ~qsHfNs zO9_Q=Lxvqxip9nrej1cUaTdHmBGh9%2erXRW#Op7LkRv&g$Dy(dY<~U^8RLO#UrqE zTA?FH=%x&!rQvo`;=!h?r0Ic@R=2{VzXoSQqlAIV5Wj_2wc+|MyevgFdNds{}2B&eM&pPwhtmixl2Vmo7h>Vhk?(%4Cr^|wXR_4Kdpn_8&ZJTEGq zU6fWeNh0fU5VAOKv&}<}`cPiAU!;wlD=g=zyOERg@_aJF z!+;3ldu?&>aP9QIwIdmQGSo`QBpBMwYn{kL96VktPCtn8B^9$< zm#LLafBoY)A5C^EXeaNku<9t!deI|)D5k-$qh%mw2=|!)C-U#C*q=x) zPYK2HJQCH!Vhb;F%Bmon;dQuvt3^SCFL;YA^TbDi+AE9QTDOBDfl)%Vf-cn#zLeE= zcv}|^*L4E77ZKcs<7g(Nz%`CiF7bt#gV%MojPW`V5iS*wa=rL;wL?=T1jDr;gUwWPB(j*XN4ZDN9Uv-|uX0{EUvm=O1zNEc)P!y(z z?K7LU^-VRHPd#PH!2J}e5gwVovz6!)xhpFhW~0y}51uf`#urs9AP^>5X+dwKiP_Su zCH_dQP>~vB@J@cqeX+954oMX+@~d^yl(8XaF4&5xJ=RevhlICfDD7BO zOmwS>qZ#`Cb)gfim-j)@)L6>rcrurwQ%8J6#kwv=Bh1`Iq1}C~NZ;e@g$dTRVw9^5 zTl@KiDQTNEkJr*`yTGKV{Jt=Dy|46IdSs2`RxWKNQlD}@vGjv#^vKP`O1 z1b%8qvT~-1QnI@|scl*OQ|X>^bIXV4#M6<7+3`Nnoe4^+%1f#D7a1n*jx|B>Puiv9 zqi{6z$+WI0V!2tu75-w!q+&899x5CI38@CurFkWAUqb5;O3Bchhi%w?pHX-B_xt$$9>2%q_s8!qkL@v^&vm`8_jO(G z>w3SQ?{y>Pw2sqn<>yjR-B~$LTetAvEtF#^LCDRV))0k767+z{u5vM%IR27bl+5lx z5tY#dI;#qbpbM)f$;1$a*wFs4{HMBHoz55`6O%A(Dn-sW$n)JkR5I|qnO*o}!#nW@ z{la_Bfby3CWo#V7jf)>qxN^+vV0A-)&{Br3=f0*kn5G_Dgk-4--Wv^o@2Z6N=BtnQ>_GTVoJn`~ ze#V}GyoCxKUg~rr1LbG4Id=?~=%Sd7{qB1`gdjTf+|zjt;X}QU$7MX#(Td}Jgz0#Nin5XCKxituW%`cyrYU&5kY)8~J0_MYXb;n36`TOgrI6U~%Z|EY8sF|-P-U#4 zKjQ3Usa~A>2#?S6qwpOFhX^B@t?>Ap5T=*skM4s^orf1D zjrz<$Yf*toLkC!1V=$1(+h_KgdHgQo;!akGFZ(els(nGCj{l|@2iz5@f!d=P>E))T z?-{9#sc@bhw+$SQ7IjlC&9?nX;vT>PEiOnR)6u@S_-TGq3)?+BJfuEA-gvTl zV6n(!+Jkn{ODT2btP5BGXfMDUCB)zc0J4l=KKrJ9zNAT zH6|9)M1Sc_mt=!|hH_UDV63)Oi1)h-4o)KS}@XfY#F_oD7hT2E<-S+r^2 zMcw|J)i= zcQ|XS+xsWkm@%$*+o(%sk_!@Gw)A_%ubXQ03Db>)fT+n`=B|mslezZATMQwtVV#4E z85V5ZgXO{U8g*Ro$GUx$kIr0Ot9!dr#{1+B@p(5_=b;-Xir2axN{LzC(EUET3$1Rb z$I3xLLoAd+1)C6BRR!*IZ<@h-S+BJCt;6ol;d=Qq{o5wl5`Rqs-NPU?CReFGgH`~m%Yr$S_0ZkPHA18CoobaS}tJ$MdV z#qw-7+|7NRH)^1s(b$g$7a-nBM~2qRJkfk)EW!xu9%+(i%c9$UNz=T4p)&8|-LGvpj$a7ciozZjIDa*g>wVBT36tzQP zVRs`RZyYQ;Z5P)CCGK5hf^A=eK})A@8UshA7aPH93$mhFG;QfAD#0gr^|YJ5DzW#L z0UFca>4pse61|_I&@`Sotqppr%JDZ$l@vxidU>Twz-}X1AqoLa#MzwNX1o@o)Q|+T zpToWSVF%PSzh~@$z5ztR2@NSNNhO`ntT>Qr+@w-M%D*kaE~W~YmYnY>-Rds#BY!E$ z_e)TeA4h@jum0zTx4M}Bi1A9NHKNkDpRrBIY3=jV-q$FZCn%>!Fs1%UD)A5)w_ZD$Z6lsA%8 zum8Hjo$=sptL7Hyo+2sjQ_1Pqk=M_$*jDI3-Cy;d?9_t>Vk^M1xz4>$3&66r->m&N zMOE>_$sVJW{LO-C2`(!GQQ=eU)cViNI}kNYQEiX?{o~(( z9O|V;s@6}&{{sJyZwBz*sC)ikiE=`v;-v0GM;m#4-l`P$Uokj#F(w_5WTPJ<=D5DR zE#QKzC}A7sU|9Y9#HSkfa-itKNY;*=3$Wl_WPbAA>$x+ z(Vi>FRPjN)*5vU?mvU!ppD~HixLJ#Q=;2OB03FQ2&onXvo`34h7ib+9>3(aI9PRS2 zn9kJ%EYRADs4~KW3DLJoJPl@UdtSn_c}tlXM+|}qnZ~2ai`8{GH9CpX>iAOTP}_=0 zynVVl+Egk6SJn|AnoXPIoE?IWmy8l+1<8Jkb;@dOI~Mx$7))+Zs&^+TDd>6L>{0Ud zX5gB^4V=qpVI3ST^ajA>apSBl#uY21bBi^2Y{WO-#bi|k@kS%srtxJTA=WEKX`NiS z|GtU77NI_~5H3eb99%$MZ^CO!#^&D|;+Y6XvhS;`LsArT$4^~WavZgj8|$sE*rvN` zKl8fc%m#Ak>Z}3y9_v?%e^`EF3ccs$Y9ux}zT!K8O?doJ!*$1&LJgtElGI0A+~_UB z4~_pFT^KDHl+nKj#RX=!oAa)WDwaIEMHpmwHRfIOqBGtepcYpe9N^Sy7V>#Yz@+Wq z6Eg0j1X!jZLW~J%6p7o%%%*ghv`BGL^MQC5_tjMzs*&G9v1(EAKdm9D{{<`|ANN>? z&f)pf=IK0IRgs{_PsF*kvhS%oj@`kEKX9p8$%Hfp8UA3!>3{?-;3>vR84Os>4%u(6 z^v>NvVP7vU_UC*pwCisbVwlSt@{Ls|1%B^B>w@hz2goiiK=n(e061O8kGhs8|3PdU z(xHd-E3O_-V5YDIMO@&8LmfxBJ>t;n!HZwLx{7_?JU4_G5dPYrU1=blx-%=-0)_4T z8&r1V1eG%-xCVfaqPIFZ_FawrnL9H{$rcRLV3qDK>ACiz2i5(bE1Wi@l|+gS?jp34 zP!~PqW3u?ohZ^Ko^X2>&lPq3+CXDP^Q>ywM+su7Yp1GWYak7#l-Hw&jfAIkKMHbaH#-hKA#~ z;Zc5Y`cz;`aC7OT&&M=Xc=GN3>>I=!EW5Uo*o_Oy; z9)b*+J+*2n3cufrU;b?5GmVfHK55Sr7{ddFsv#zXIFs>Wnp>k!422yZpxQ5 zWzj1&tT7I*;0iVP#!xLZ+9KOj&`x%^>AWXbug68VzS1Q}%l7nAzjCk1KVR#2R@I!hp5mlEyP<3CpHL2uct+HfOQ1)-l5lU=yqrYxYByumFM^iH+)R{1)tH72w{%>NJG#q zQz9gvyt}w}=wS`QE%DBtSmR@_Jr6j`DYU_rHe>d!TK1j03rPqAn=GA|Oie8HGQ+nh z5xVeH?8NIjE)E#hZwU~$1~(6XRg~7P;%K_Q%y^AHjSC8D&AC@!4O(B-unIc+&Al`1>9dLJ84!s}f-BGt zPL9`+RL!LEzp$bxx7JxBDTO+Zv;^XrZ+V%{E#O_{GA<<&kO>Vs0d} zT@)u~E-W_(Z#0SpQUKFs2azOpTE{o(B64@!o$OT~_@eXl|A;1n;s1!E{{KDz%kN51 zVhoU{J^jX#qOV8=cI@BLTEo_rO&mCfOaA`vA54AI#p*~cSZ3t<{nJ1_@}G{u?W~HA HcwYN2d0Vdq literal 0 HcmV?d00001 diff --git a/img/sf/set-instrumentationkey.PNG b/img/sf/set-instrumentationkey.PNG new file mode 100644 index 0000000000000000000000000000000000000000..1d7105a30a61d09f393ff5583dba5f87085a5a96 GIT binary patch literal 46915 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

    Dk3V|HpOZ~kO=x4Jwps8baaW# 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 literal 0 HcmV?d00001 From 41df28cbb29334d97b7281e6d3abffe4f66b0a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Tue, 17 Oct 2017 13:04:27 +0200 Subject: [PATCH 129/136] Change AccessMethod in load tests to Sequential --- .../Services/LoadTest/Basket.API/AddBasket.webtest | 12 ++++++------ test/Services/LoadTest/Basket.API/Checkout.webtest | 14 +++++++------- .../LoadTest/Basket.API/DeleteBasket.webtest | 12 ++++++------ .../Services/LoadTest/Basket.API/GetBasket.webtest | 12 ++++++------ .../LoadTest/Catalog.API/GetCatalogBrands.webtest | 4 ++-- .../Catalog.API/GetCatalogFiltered.webtest | 4 ++-- .../LoadTest/Catalog.API/GetCatalogTypes.webtest | 4 ++-- test/Services/LoadTest/Catalog.API/GetItem.webtest | 4 ++-- .../LoadTest/Catalog.API/GetItemPic.webtest | 4 ++-- .../Services/LoadTest/Catalog.API/GetItems.webtest | 4 ++-- .../LoadTest/Catalog.API/GetItemsByName.webtest | 4 ++-- test/Services/LoadTest/Identity.API/Login.webtest | 8 ++++---- test/Services/LoadTest/Identity.API/Logout.webtest | 8 ++++---- .../CreateOrUpdateUserLocation.webtest | 12 ++++++------ .../LoadTest/Location.API/GetAllLocations.webtest | 12 ++++++------ .../LoadTest/Location.API/GetLocation.webtest | 12 ++++++------ .../LoadTest/Location.API/GetUserLocation.webtest | 12 ++++++------ .../LoadTest/Marketing.API/GetAllCampaigns.webtest | 12 ++++++------ .../LoadTest/Marketing.API/GetCampaign.webtest | 12 ++++++------ .../Marketing.API/GetUserCampaigns.webtest | 12 ++++++------ .../LoadTest/Ordering.API/CancelOrder.webtest | 14 +++++++------- .../LoadTest/Ordering.API/GetAllOrders.webtest | 12 ++++++------ .../LoadTest/Ordering.API/GetCardTypes.webtest | 12 ++++++------ .../LoadTest/Ordering.API/GetOrder.webtest | 12 ++++++------ .../LoadTest/Ordering.API/ShipOrder.webtest | 14 +++++++------- test/Services/LoadTest/WebMVC/AddProducts.webtest | 6 +++--- .../Services/LoadTest/WebMVC/CatalogFilter.webtest | 8 ++++---- .../LoadTest/WebMVC/CreateNewOrder.webtest | 8 ++++---- 28 files changed, 132 insertions(+), 132 deletions(-) diff --git a/test/Services/LoadTest/Basket.API/AddBasket.webtest b/test/Services/LoadTest/Basket.API/AddBasket.webtest index cb933b141..a56ca94f0 100644 --- a/test/Services/LoadTest/Basket.API/AddBasket.webtest +++ b/test/Services/LoadTest/Basket.API/AddBasket.webtest @@ -84,12 +84,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Basket.API/Checkout.webtest b/test/Services/LoadTest/Basket.API/Checkout.webtest index 168e6e422..0d2a179b8 100644 --- a/test/Services/LoadTest/Basket.API/Checkout.webtest +++ b/test/Services/LoadTest/Basket.API/Checkout.webtest @@ -85,13 +85,13 @@ - - - - - - - + + + + + + + diff --git a/test/Services/LoadTest/Basket.API/DeleteBasket.webtest b/test/Services/LoadTest/Basket.API/DeleteBasket.webtest index 129f6c946..dd38dcc60 100644 --- a/test/Services/LoadTest/Basket.API/DeleteBasket.webtest +++ b/test/Services/LoadTest/Basket.API/DeleteBasket.webtest @@ -83,12 +83,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Basket.API/GetBasket.webtest b/test/Services/LoadTest/Basket.API/GetBasket.webtest index 061f0ecec..4f3f7b8f4 100644 --- a/test/Services/LoadTest/Basket.API/GetBasket.webtest +++ b/test/Services/LoadTest/Basket.API/GetBasket.webtest @@ -83,12 +83,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Catalog.API/GetCatalogBrands.webtest b/test/Services/LoadTest/Catalog.API/GetCatalogBrands.webtest index 8247a72a4..0cb8085e9 100644 --- a/test/Services/LoadTest/Catalog.API/GetCatalogBrands.webtest +++ b/test/Services/LoadTest/Catalog.API/GetCatalogBrands.webtest @@ -6,8 +6,8 @@ - - + + diff --git a/test/Services/LoadTest/Catalog.API/GetCatalogFiltered.webtest b/test/Services/LoadTest/Catalog.API/GetCatalogFiltered.webtest index a3d36923f..24d81ec9b 100644 --- a/test/Services/LoadTest/Catalog.API/GetCatalogFiltered.webtest +++ b/test/Services/LoadTest/Catalog.API/GetCatalogFiltered.webtest @@ -6,8 +6,8 @@ - - + + diff --git a/test/Services/LoadTest/Catalog.API/GetCatalogTypes.webtest b/test/Services/LoadTest/Catalog.API/GetCatalogTypes.webtest index 854d5d78c..1f5bcc6f6 100644 --- a/test/Services/LoadTest/Catalog.API/GetCatalogTypes.webtest +++ b/test/Services/LoadTest/Catalog.API/GetCatalogTypes.webtest @@ -6,8 +6,8 @@ - - + + diff --git a/test/Services/LoadTest/Catalog.API/GetItem.webtest b/test/Services/LoadTest/Catalog.API/GetItem.webtest index 3807cabcf..80cd01d01 100644 --- a/test/Services/LoadTest/Catalog.API/GetItem.webtest +++ b/test/Services/LoadTest/Catalog.API/GetItem.webtest @@ -6,8 +6,8 @@ - - + + diff --git a/test/Services/LoadTest/Catalog.API/GetItemPic.webtest b/test/Services/LoadTest/Catalog.API/GetItemPic.webtest index 9bfd649bb..7c552eac5 100644 --- a/test/Services/LoadTest/Catalog.API/GetItemPic.webtest +++ b/test/Services/LoadTest/Catalog.API/GetItemPic.webtest @@ -6,8 +6,8 @@ - - + + diff --git a/test/Services/LoadTest/Catalog.API/GetItems.webtest b/test/Services/LoadTest/Catalog.API/GetItems.webtest index 8364086d2..f9a99ea56 100644 --- a/test/Services/LoadTest/Catalog.API/GetItems.webtest +++ b/test/Services/LoadTest/Catalog.API/GetItems.webtest @@ -6,8 +6,8 @@ - - + + diff --git a/test/Services/LoadTest/Catalog.API/GetItemsByName.webtest b/test/Services/LoadTest/Catalog.API/GetItemsByName.webtest index bc659d083..5b575eaf5 100644 --- a/test/Services/LoadTest/Catalog.API/GetItemsByName.webtest +++ b/test/Services/LoadTest/Catalog.API/GetItemsByName.webtest @@ -6,8 +6,8 @@ - - + + diff --git a/test/Services/LoadTest/Identity.API/Login.webtest b/test/Services/LoadTest/Identity.API/Login.webtest index 62c93eb66..15bd5d5f1 100644 --- a/test/Services/LoadTest/Identity.API/Login.webtest +++ b/test/Services/LoadTest/Identity.API/Login.webtest @@ -74,10 +74,10 @@ - - - - + + + + diff --git a/test/Services/LoadTest/Identity.API/Logout.webtest b/test/Services/LoadTest/Identity.API/Logout.webtest index 393952ab2..add2ee744 100644 --- a/test/Services/LoadTest/Identity.API/Logout.webtest +++ b/test/Services/LoadTest/Identity.API/Logout.webtest @@ -13,10 +13,10 @@ - - - - + + + + diff --git a/test/Services/LoadTest/Location.API/CreateOrUpdateUserLocation.webtest b/test/Services/LoadTest/Location.API/CreateOrUpdateUserLocation.webtest index d5d1630ac..6d3e0d887 100644 --- a/test/Services/LoadTest/Location.API/CreateOrUpdateUserLocation.webtest +++ b/test/Services/LoadTest/Location.API/CreateOrUpdateUserLocation.webtest @@ -84,12 +84,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Location.API/GetAllLocations.webtest b/test/Services/LoadTest/Location.API/GetAllLocations.webtest index f0171aa26..b210918f4 100644 --- a/test/Services/LoadTest/Location.API/GetAllLocations.webtest +++ b/test/Services/LoadTest/Location.API/GetAllLocations.webtest @@ -83,12 +83,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Location.API/GetLocation.webtest b/test/Services/LoadTest/Location.API/GetLocation.webtest index fb078c9a1..d9fee854c 100644 --- a/test/Services/LoadTest/Location.API/GetLocation.webtest +++ b/test/Services/LoadTest/Location.API/GetLocation.webtest @@ -83,12 +83,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Location.API/GetUserLocation.webtest b/test/Services/LoadTest/Location.API/GetUserLocation.webtest index a60387329..d17d7a7d0 100644 --- a/test/Services/LoadTest/Location.API/GetUserLocation.webtest +++ b/test/Services/LoadTest/Location.API/GetUserLocation.webtest @@ -83,12 +83,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Marketing.API/GetAllCampaigns.webtest b/test/Services/LoadTest/Marketing.API/GetAllCampaigns.webtest index cb5ac96b3..652d9e84b 100644 --- a/test/Services/LoadTest/Marketing.API/GetAllCampaigns.webtest +++ b/test/Services/LoadTest/Marketing.API/GetAllCampaigns.webtest @@ -83,12 +83,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Marketing.API/GetCampaign.webtest b/test/Services/LoadTest/Marketing.API/GetCampaign.webtest index d37f95364..3d8df3f2c 100644 --- a/test/Services/LoadTest/Marketing.API/GetCampaign.webtest +++ b/test/Services/LoadTest/Marketing.API/GetCampaign.webtest @@ -83,12 +83,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Marketing.API/GetUserCampaigns.webtest b/test/Services/LoadTest/Marketing.API/GetUserCampaigns.webtest index 4b81e5de1..28351fcf3 100644 --- a/test/Services/LoadTest/Marketing.API/GetUserCampaigns.webtest +++ b/test/Services/LoadTest/Marketing.API/GetUserCampaigns.webtest @@ -83,12 +83,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Ordering.API/CancelOrder.webtest b/test/Services/LoadTest/Ordering.API/CancelOrder.webtest index efc3a69b0..73eb70993 100644 --- a/test/Services/LoadTest/Ordering.API/CancelOrder.webtest +++ b/test/Services/LoadTest/Ordering.API/CancelOrder.webtest @@ -85,13 +85,13 @@ - - - - - - - + + + + + + + diff --git a/test/Services/LoadTest/Ordering.API/GetAllOrders.webtest b/test/Services/LoadTest/Ordering.API/GetAllOrders.webtest index 64a7c54e7..256c957f0 100644 --- a/test/Services/LoadTest/Ordering.API/GetAllOrders.webtest +++ b/test/Services/LoadTest/Ordering.API/GetAllOrders.webtest @@ -83,12 +83,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Ordering.API/GetCardTypes.webtest b/test/Services/LoadTest/Ordering.API/GetCardTypes.webtest index 9548aef0c..465af4b0e 100644 --- a/test/Services/LoadTest/Ordering.API/GetCardTypes.webtest +++ b/test/Services/LoadTest/Ordering.API/GetCardTypes.webtest @@ -83,12 +83,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Ordering.API/GetOrder.webtest b/test/Services/LoadTest/Ordering.API/GetOrder.webtest index 5a94b203f..b7175a3d2 100644 --- a/test/Services/LoadTest/Ordering.API/GetOrder.webtest +++ b/test/Services/LoadTest/Ordering.API/GetOrder.webtest @@ -83,12 +83,12 @@ - - - - - - + + + + + + diff --git a/test/Services/LoadTest/Ordering.API/ShipOrder.webtest b/test/Services/LoadTest/Ordering.API/ShipOrder.webtest index 812371fc6..73ea953a3 100644 --- a/test/Services/LoadTest/Ordering.API/ShipOrder.webtest +++ b/test/Services/LoadTest/Ordering.API/ShipOrder.webtest @@ -85,13 +85,13 @@ - - - - - - - + + + + + + + diff --git a/test/Services/LoadTest/WebMVC/AddProducts.webtest b/test/Services/LoadTest/WebMVC/AddProducts.webtest index b9217d6ff..3fc66d316 100644 --- a/test/Services/LoadTest/WebMVC/AddProducts.webtest +++ b/test/Services/LoadTest/WebMVC/AddProducts.webtest @@ -107,9 +107,9 @@ - - - + + + diff --git a/test/Services/LoadTest/WebMVC/CatalogFilter.webtest b/test/Services/LoadTest/WebMVC/CatalogFilter.webtest index 9f6583b50..331623abd 100644 --- a/test/Services/LoadTest/WebMVC/CatalogFilter.webtest +++ b/test/Services/LoadTest/WebMVC/CatalogFilter.webtest @@ -163,10 +163,10 @@ - - - - + + + + diff --git a/test/Services/LoadTest/WebMVC/CreateNewOrder.webtest b/test/Services/LoadTest/WebMVC/CreateNewOrder.webtest index 266fd63b4..f749c3b51 100644 --- a/test/Services/LoadTest/WebMVC/CreateNewOrder.webtest +++ b/test/Services/LoadTest/WebMVC/CreateNewOrder.webtest @@ -256,10 +256,10 @@ - - - - + + + + From 8e730f72dd00774a1a8be38934f880a2731c4cce Mon Sep 17 00:00:00 2001 From: Igor Sychev Date: Fri, 13 Oct 2017 16:54:35 +0100 Subject: [PATCH 130/136] last .net core 2.0 part --- .../DataProtection/DataProtection/DataProtection.csproj | 4 ++-- .../Microsoft.Extensions.HealthChecks.SqlServer.csproj | 2 +- .../Microsoft.Extensions.HealthChecks.csproj | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/BuildingBlocks/DataProtection/DataProtection/DataProtection.csproj b/src/BuildingBlocks/DataProtection/DataProtection/DataProtection.csproj index 29e23b4d3..851b75c9b 100644 --- a/src/BuildingBlocks/DataProtection/DataProtection/DataProtection.csproj +++ b/src/BuildingBlocks/DataProtection/DataProtection/DataProtection.csproj @@ -1,12 +1,12 @@  - netstandard1.5 + netstandard2.0 Microsoft.eShopOnContainers.BuildingBlocks - + diff --git a/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.SqlServer/Microsoft.Extensions.HealthChecks.SqlServer.csproj b/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.SqlServer/Microsoft.Extensions.HealthChecks.SqlServer.csproj index a38fa2160..60017a85f 100644 --- a/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.SqlServer/Microsoft.Extensions.HealthChecks.SqlServer.csproj +++ b/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.SqlServer/Microsoft.Extensions.HealthChecks.SqlServer.csproj @@ -1,7 +1,7 @@  - netstandard1.3 + netstandard2.0 diff --git a/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Microsoft.Extensions.HealthChecks.csproj b/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Microsoft.Extensions.HealthChecks.csproj index 228c2d79d..1b642d062 100644 --- a/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Microsoft.Extensions.HealthChecks.csproj +++ b/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Microsoft.Extensions.HealthChecks.csproj @@ -1,7 +1,7 @@  - netstandard1.3 + netstandard2.0 @@ -9,7 +9,7 @@ - + From 3c41a57f6d57040134cdbd3e60f337f98be2a33d Mon Sep 17 00:00:00 2001 From: Igor Sychev Date: Fri, 13 Oct 2017 18:17:45 +0100 Subject: [PATCH 131/136] js file is not exists --- src/Web/WebStatus/Views/Shared/_Layout.cshtml | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Web/WebStatus/Views/Shared/_Layout.cshtml b/src/Web/WebStatus/Views/Shared/_Layout.cshtml index 0a540f8a3..9c531eec8 100644 --- a/src/Web/WebStatus/Views/Shared/_Layout.cshtml +++ b/src/Web/WebStatus/Views/Shared/_Layout.cshtml @@ -53,7 +53,6 @@ -

    -**Note Visual Studio 2017 version required**: This is important as of Oct. 11th 2017. For working with Docker and docker-compose files, do not migrate to VS 2017 15.4 as it has a bug when using TAGs in the docker-compose files. Please, either use VS 2017 15.35 or VS 2017 15.5 Preview 1 or later. Download of Preview here: https://www.visualstudio.com/vs/preview/ +**Note Visual Studio 2017 version required**: This is important as of Oct. 11th 2017. For working with Docker and docker-compose files (needed with eShopOnContainers), do not migrate to VS 2017 15.4 as it has a bug when using TAGs in the docker-compose files. +Please, either use VS 2017 15.35 or VS 2017 15.5 Preview 1 (bug is fixed here) or later. +VS Preview installs next to your stable Visual Studio IDE, allowing you to use either independently. +Download of Preview here: https://www.visualstudio.com/vs/preview/ **Note for Pull Requests**: We accept pull request from the community. When doing it, please do it onto the DEV branch which is the consolidated work-in-progress branch. Do not request it onto Master, if possible. From 9e535930cebfdad35921cd2aa707157e9d6d8746 Mon Sep 17 00:00:00 2001 From: Igor Sychev Date: Mon, 9 Oct 2017 18:45:59 +0100 Subject: [PATCH 076/136] swagge responce types and code https://github.com/dotnet-architecture/eShopOnContainers/issues/305 --- .../Basket.API/Controllers/BasketController.cs | 8 +++++++- .../Catalog.API/Controllers/CatalogController.cs | 12 ++++++++++++ .../Catalog.API/Controllers/PicController.cs | 3 +++ .../Controllers/LocationsController.cs | 8 ++++++++ .../Controllers/CampaignsController.cs | 13 +++++++++++++ .../Controllers/LocationsController.cs | 11 +++++++++++ .../Marketing.API/Properties/launchSettings.json | 4 ++-- .../Ordering.API/Controllers/OrdersController.cs | 7 +++++++ 8 files changed, 63 insertions(+), 3 deletions(-) diff --git a/src/Services/Basket/Basket.API/Controllers/BasketController.cs b/src/Services/Basket/Basket.API/Controllers/BasketController.cs index dff9ba54a..18a3b221d 100644 --- a/src/Services/Basket/Basket.API/Controllers/BasketController.cs +++ b/src/Services/Basket/Basket.API/Controllers/BasketController.cs @@ -6,6 +6,7 @@ using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; using Microsoft.eShopOnContainers.Services.Basket.API.Model; using Microsoft.eShopOnContainers.Services.Basket.API.Services; using System; +using System.Net; using System.Threading.Tasks; namespace Microsoft.eShopOnContainers.Services.Basket.API.Controllers @@ -18,7 +19,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Controllers private readonly IIdentityService _identitySvc; private readonly IEventBus _eventBus; - public BasketController(IBasketRepository repository, + public BasketController(IBasketRepository repository, IIdentityService identityService, IEventBus eventBus) { @@ -26,8 +27,10 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Controllers _identitySvc = identityService; _eventBus = eventBus; } + // GET /id [HttpGet("{id}")] + [ProducesResponseType(typeof(CustomerBasket), (int)HttpStatusCode.OK)] public async Task Get(string id) { var basket = await _repository.GetBasketAsync(id); @@ -37,6 +40,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Controllers // POST /value [HttpPost] + [ProducesResponseType(typeof(CustomerBasket), (int)HttpStatusCode.OK)] public async Task Post([FromBody]CustomerBasket value) { var basket = await _repository.UpdateBasketAsync(value); @@ -46,6 +50,8 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API.Controllers [Route("checkout")] [HttpPost] + [ProducesResponseType((int)HttpStatusCode.Accepted)] + [ProducesResponseType((int)HttpStatusCode.BadRequest)] public async Task Checkout([FromBody]BasketCheckout basketCheckout, [FromHeader(Name = "x-requestid")] string requestId) { var userId = _identitySvc.GetUserIdentity(); diff --git a/src/Services/Catalog/Catalog.API/Controllers/CatalogController.cs b/src/Services/Catalog/Catalog.API/Controllers/CatalogController.cs index fe52b9128..1830fd90a 100644 --- a/src/Services/Catalog/Catalog.API/Controllers/CatalogController.cs +++ b/src/Services/Catalog/Catalog.API/Controllers/CatalogController.cs @@ -9,6 +9,7 @@ using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.Linq; +using System.Net; using System.Threading.Tasks; namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers @@ -32,6 +33,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers // GET api/v1/[controller]/items[?pageSize=3&pageIndex=10] [HttpGet] [Route("[action]")] + [ProducesResponseType(typeof(PaginatedItemsViewModel), (int)HttpStatusCode.OK)] public async Task Items([FromQuery]int pageSize = 10, [FromQuery]int pageIndex = 0) { @@ -54,6 +56,8 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers [HttpGet] [Route("items/{id:int}")] + [ProducesResponseType((int)HttpStatusCode.NotFound)] + [ProducesResponseType(typeof(CatalogItem),(int)HttpStatusCode.OK)] public async Task GetItemById(int id) { if (id <= 0) @@ -73,6 +77,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers // GET api/v1/[controller]/items/withname/samplename[?pageSize=3&pageIndex=10] [HttpGet] [Route("[action]/withname/{name:minlength(1)}")] + [ProducesResponseType(typeof(PaginatedItemsViewModel), (int)HttpStatusCode.OK)] public async Task Items(string name, [FromQuery]int pageSize = 10, [FromQuery]int pageIndex = 0) { @@ -97,6 +102,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers // GET api/v1/[controller]/items/type/1/brand/null[?pageSize=3&pageIndex=10] [HttpGet] [Route("[action]/type/{catalogTypeId}/brand/{catalogBrandId}")] + [ProducesResponseType(typeof(PaginatedItemsViewModel), (int)HttpStatusCode.OK)] public async Task Items(int? catalogTypeId, int? catalogBrandId, [FromQuery]int pageSize = 10, [FromQuery]int pageIndex = 0) { var root = (IQueryable)_catalogContext.CatalogItems; @@ -130,6 +136,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers // GET api/v1/[controller]/CatalogTypes [HttpGet] [Route("[action]")] + [ProducesResponseType(typeof(List), (int)HttpStatusCode.OK)] public async Task CatalogTypes() { var items = await _catalogContext.CatalogTypes @@ -141,6 +148,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers // GET api/v1/[controller]/CatalogBrands [HttpGet] [Route("[action]")] + [ProducesResponseType(typeof(List), (int)HttpStatusCode.OK)] public async Task CatalogBrands() { var items = await _catalogContext.CatalogBrands @@ -152,6 +160,8 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers //PUT api/v1/[controller]/items [Route("items")] [HttpPut] + [ProducesResponseType((int)HttpStatusCode.NotFound)] + [ProducesResponseType((int)HttpStatusCode.Created)] public async Task UpdateProduct([FromBody]CatalogItem productToUpdate) { var catalogItem = await _catalogContext.CatalogItems @@ -192,6 +202,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers //POST api/v1/[controller]/items [Route("items")] [HttpPost] + [ProducesResponseType((int)HttpStatusCode.Created)] public async Task CreateProduct([FromBody]CatalogItem product) { var item = new CatalogItem @@ -213,6 +224,7 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers //DELETE api/v1/[controller]/id [Route("{id}")] [HttpDelete] + [ProducesResponseType((int)HttpStatusCode.NoContent)] public async Task DeleteProduct(int id) { var product = _catalogContext.CatalogItems.SingleOrDefault(x => x.Id == id); diff --git a/src/Services/Catalog/Catalog.API/Controllers/PicController.cs b/src/Services/Catalog/Catalog.API/Controllers/PicController.cs index 7043ce9f7..f8e986e50 100644 --- a/src/Services/Catalog/Catalog.API/Controllers/PicController.cs +++ b/src/Services/Catalog/Catalog.API/Controllers/PicController.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.eShopOnContainers.Services.Catalog.API.Infrastructure; using System.IO; +using System.Net; using System.Threading.Tasks; // For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860 @@ -23,6 +24,8 @@ namespace Microsoft.eShopOnContainers.Services.Catalog.API.Controllers [HttpGet] [Route("api/v1/catalog/items/{catalogItemId:int}/pic")] + [ProducesResponseType((int)HttpStatusCode.NotFound)] + [ProducesResponseType((int)HttpStatusCode.BadRequest)] // GET: // public async Task GetImage(int catalogItemId) { diff --git a/src/Services/Location/Locations.API/Controllers/LocationsController.cs b/src/Services/Location/Locations.API/Controllers/LocationsController.cs index a61c7f2d0..45f4d2ba7 100644 --- a/src/Services/Location/Locations.API/Controllers/LocationsController.cs +++ b/src/Services/Location/Locations.API/Controllers/LocationsController.cs @@ -1,8 +1,11 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.eShopOnContainers.Services.Locations.API.Infrastructure.Services; +using Microsoft.eShopOnContainers.Services.Locations.API.Model; using Microsoft.eShopOnContainers.Services.Locations.API.ViewModel; using System; +using System.Collections.Generic; +using System.Net; using System.Threading.Tasks; namespace Locations.API.Controllers @@ -23,6 +26,7 @@ namespace Locations.API.Controllers //GET api/v1/[controller]/user/1 [Route("user/{userId:guid}")] [HttpGet] + [ProducesResponseType(typeof(UserLocation), (int)HttpStatusCode.OK)] public async Task GetUserLocation(Guid userId) { var userLocation = await _locationsService.GetUserLocation(userId.ToString()); @@ -32,6 +36,7 @@ namespace Locations.API.Controllers //GET api/v1/[controller]/ [Route("")] [HttpGet] + //[ProducesResponseType(typeof(List), (int)HttpStatusCode.OK)] public async Task GetAllLocations() { var locations = await _locationsService.GetAllLocation(); @@ -41,6 +46,7 @@ namespace Locations.API.Controllers //GET api/v1/[controller]/1 [Route("{locationId}")] [HttpGet] + //[ProducesResponseType(typeof(List), (int)HttpStatusCode.OK)] public async Task GetLocation(int locationId) { var location = await _locationsService.GetLocation(locationId); @@ -50,6 +56,8 @@ namespace Locations.API.Controllers //POST api/v1/[controller]/ [Route("")] [HttpPost] + [ProducesResponseType((int)HttpStatusCode.OK)] + [ProducesResponseType((int)HttpStatusCode.BadRequest)] public async Task CreateOrUpdateUserLocation([FromBody]LocationRequest newLocReq) { var userId = _identityService.GetUserIdentity(); diff --git a/src/Services/Marketing/Marketing.API/Controllers/CampaignsController.cs b/src/Services/Marketing/Marketing.API/Controllers/CampaignsController.cs index 146802626..313d4d77b 100644 --- a/src/Services/Marketing/Marketing.API/Controllers/CampaignsController.cs +++ b/src/Services/Marketing/Marketing.API/Controllers/CampaignsController.cs @@ -16,6 +16,7 @@ namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers using Extensions.Options; using Microsoft.eShopOnContainers.Services.Marketing.API.ViewModel; using Microsoft.AspNetCore.Http; + using System.Net; [Route("api/v1/[controller]")] [Authorize] @@ -38,6 +39,7 @@ namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers } [HttpGet] + [ProducesResponseType(typeof(List), (int)HttpStatusCode.OK)] public async Task GetAllCampaigns() { var campaignList = await _context.Campaigns @@ -54,6 +56,8 @@ namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers } [HttpGet("{id:int}")] + [ProducesResponseType(typeof(CampaignDTO), (int)HttpStatusCode.OK)] + [ProducesResponseType((int)HttpStatusCode.NotFound)] public async Task GetCampaignById(int id) { var campaign = await _context.Campaigns @@ -70,6 +74,8 @@ namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers } [HttpPost] + [ProducesResponseType((int)HttpStatusCode.BadRequest)] + [ProducesResponseType((int)HttpStatusCode.Created)] public async Task CreateCampaign([FromBody] CampaignDTO campaignDto) { if (campaignDto is null) @@ -86,6 +92,9 @@ namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers } [HttpPut("{id:int}")] + [ProducesResponseType((int)HttpStatusCode.BadRequest)] + [ProducesResponseType((int)HttpStatusCode.NotFound)] + [ProducesResponseType((int)HttpStatusCode.Created)] public async Task UpdateCampaign(int id, [FromBody] CampaignDTO campaignDto) { if (id < 1 || campaignDto is null) @@ -111,6 +120,9 @@ namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers } [HttpDelete("{id:int}")] + [ProducesResponseType((int)HttpStatusCode.BadRequest)] + [ProducesResponseType((int)HttpStatusCode.NotFound)] + [ProducesResponseType((int)HttpStatusCode.NoContent)] public async Task Delete(int id) { if (id < 1) @@ -131,6 +143,7 @@ namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers } [HttpGet("user")] + [ProducesResponseType(typeof(PaginatedItemsViewModel), (int)HttpStatusCode.OK)] public async Task GetCampaignsByUserId( int pageSize = 10, int pageIndex = 0) { var userId = _identityService.GetUserIdentity(); diff --git a/src/Services/Marketing/Marketing.API/Controllers/LocationsController.cs b/src/Services/Marketing/Marketing.API/Controllers/LocationsController.cs index 57f652d4c..0d47a63a4 100644 --- a/src/Services/Marketing/Marketing.API/Controllers/LocationsController.cs +++ b/src/Services/Marketing/Marketing.API/Controllers/LocationsController.cs @@ -7,6 +7,7 @@ namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers using Microsoft.eShopOnContainers.Services.Marketing.API.Model; using System.Collections.Generic; using System.Linq; + using System.Net; using System.Threading.Tasks; [Authorize] @@ -21,6 +22,9 @@ namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers [HttpGet] [Route("api/v1/campaigns/{campaignId:int}/locations/{userLocationRuleId:int}")] + [ProducesResponseType((int)HttpStatusCode.BadRequest)] + [ProducesResponseType((int)HttpStatusCode.NotFound)] + [ProducesResponseType(typeof(UserLocationRuleDTO),(int)HttpStatusCode.OK)] public IActionResult GetLocationByCampaignAndLocationRuleId(int campaignId, int userLocationRuleId) { @@ -45,6 +49,9 @@ namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers [HttpGet] [Route("api/v1/campaigns/{campaignId:int}/locations")] + [ProducesResponseType((int)HttpStatusCode.BadRequest)] + [ProducesResponseType((int)HttpStatusCode.OK)] + [ProducesResponseType(typeof(List), (int)HttpStatusCode.OK)] public IActionResult GetAllLocationsByCampaignId(int campaignId) { if (campaignId < 1) @@ -69,6 +76,8 @@ namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers [HttpPost] [Route("api/v1/campaigns/{campaignId:int}/locations")] + [ProducesResponseType((int)HttpStatusCode.BadRequest)] + [ProducesResponseType((int)HttpStatusCode.Created)] public async Task CreateLocation(int campaignId, [FromBody] UserLocationRuleDTO locationRuleDto) { @@ -89,6 +98,8 @@ namespace Microsoft.eShopOnContainers.Services.Marketing.API.Controllers [HttpDelete] [Route("api/v1/campaigns/{campaignId:int}/locations/{userLocationRuleId:int}")] + [ProducesResponseType((int)HttpStatusCode.BadRequest)] + [ProducesResponseType((int)HttpStatusCode.NotFound)] public async Task DeleteLocationById(int campaignId, int userLocationRuleId) { if (campaignId < 1 || userLocationRuleId < 1) diff --git a/src/Services/Marketing/Marketing.API/Properties/launchSettings.json b/src/Services/Marketing/Marketing.API/Properties/launchSettings.json index ec47d57ce..e222e065d 100644 --- a/src/Services/Marketing/Marketing.API/Properties/launchSettings.json +++ b/src/Services/Marketing/Marketing.API/Properties/launchSettings.json @@ -11,7 +11,7 @@ "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, - "launchUrl": "api/values", + "launchUrl": "swagger", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } @@ -19,7 +19,7 @@ "Marketing.API": { "commandName": "Project", "launchBrowser": true, - "launchUrl": "api/values", + "launchUrl": "swagger", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, diff --git a/src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs b/src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs index 1e40910be..c43e65d63 100644 --- a/src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs +++ b/src/Services/Ordering/Ordering.API/Controllers/OrdersController.cs @@ -7,6 +7,7 @@ using Microsoft.eShopOnContainers.Services.Ordering.API.Infrastructure.Services; using Ordering.API.Application.Commands; using System; using System.Collections.Generic; +using System.Net; using System.Threading.Tasks; namespace Microsoft.eShopOnContainers.Services.Ordering.API.Controllers @@ -29,6 +30,8 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Controllers [Route("cancel")] [HttpPut] + [ProducesResponseType((int)HttpStatusCode.OK)] + [ProducesResponseType((int)HttpStatusCode.BadRequest)] public async Task CancelOrder([FromBody]CancelOrderCommand command, [FromHeader(Name = "x-requestid")] string requestId) { bool commandResult = false; @@ -44,6 +47,8 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Controllers [Route("ship")] [HttpPut] + [ProducesResponseType((int)HttpStatusCode.OK)] + [ProducesResponseType((int)HttpStatusCode.BadRequest)] public async Task ShipOrder([FromBody]ShipOrderCommand command, [FromHeader(Name = "x-requestid")] string requestId) { bool commandResult = false; @@ -59,6 +64,8 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Controllers [Route("{orderId:int}")] [HttpGet] + [ProducesResponseType((int)HttpStatusCode.OK)] + [ProducesResponseType((int)HttpStatusCode.NotFound)] public async Task GetOrder(int orderId) { try From 1b38589ff0fc9dd567cfcb6a08d7b515aa0ac3fe Mon Sep 17 00:00:00 2001 From: Igor Sychev Date: Thu, 12 Oct 2017 09:25:01 +0100 Subject: [PATCH 077/136] retry policy defined via config --- .../DefaultRabbitMQPersisterConnection.cs | 9 +++--- .../EventBusRabbitMQ/EventBusRabbitMQ.cs | 7 +++-- src/Services/Basket/Basket.API/Startup.cs | 24 ++++++++++++++-- .../Basket/Basket.API/appsettings.json | 3 +- src/Services/Catalog/Catalog.API/Startup.cs | 28 ++++++++++++++++--- .../Catalog/Catalog.API/appsettings.json | 3 +- .../Location/Locations.API/Startup.cs | 24 ++++++++++++++-- .../appsettings.Development.json | 10 ------- .../Location/Locations.API/appsettings.json | 3 +- .../Marketing/Marketing.API/Startup.cs | 25 +++++++++++++++-- .../appsettings.Development.json | 8 ------ .../Marketing/Marketing.API/appsettings.json | 3 +- src/Services/Ordering/Ordering.API/Startup.cs | 24 ++++++++++++++-- .../Ordering/Ordering.API/settings.json | 3 +- src/Services/Payment/Payment.API/Startup.cs | 24 ++++++++++++++-- .../Payment/Payment.API/appsettings.json | 3 +- .../ResilientHttpClientFactory.cs | 21 +++++++++----- src/Web/WebMVC/Startup.cs | 19 ++++++++++++- src/Web/WebMVC/appsettings.json | 4 ++- 19 files changed, 191 insertions(+), 54 deletions(-) delete mode 100644 src/Services/Location/Locations.API/appsettings.Development.json delete mode 100644 src/Services/Marketing/Marketing.API/appsettings.Development.json diff --git a/src/BuildingBlocks/EventBus/EventBusRabbitMQ/DefaultRabbitMQPersisterConnection.cs b/src/BuildingBlocks/EventBus/EventBusRabbitMQ/DefaultRabbitMQPersisterConnection.cs index 0aafaf90a..2e0555e61 100644 --- a/src/BuildingBlocks/EventBus/EventBusRabbitMQ/DefaultRabbitMQPersisterConnection.cs +++ b/src/BuildingBlocks/EventBus/EventBusRabbitMQ/DefaultRabbitMQPersisterConnection.cs @@ -15,16 +15,17 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ { private readonly IConnectionFactory _connectionFactory; private readonly ILogger _logger; - + private readonly int _retryCount; IConnection _connection; bool _disposed; object sync_root = new object(); - public DefaultRabbitMQPersistentConnection(IConnectionFactory connectionFactory,ILogger logger) + public DefaultRabbitMQPersistentConnection(IConnectionFactory connectionFactory, ILogger logger, int retryCount = 5) { _connectionFactory = connectionFactory ?? throw new ArgumentNullException(nameof(connectionFactory)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); + _retryCount = retryCount; } public bool IsConnected @@ -69,7 +70,7 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ { var policy = RetryPolicy.Handle() .Or() - .WaitAndRetry(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (ex, time) => + .WaitAndRetry(_retryCount, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (ex, time) => { _logger.LogWarning(ex.ToString()); } @@ -88,7 +89,7 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ _connection.ConnectionBlocked += OnConnectionBlocked; _logger.LogInformation($"RabbitMQ persistent connection acquired a connection {_connection.Endpoint.HostName} and is subscribed to failure events"); - + return true; } else diff --git a/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs b/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs index f438623a6..2416e1d55 100644 --- a/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs +++ b/src/BuildingBlocks/EventBus/EventBusRabbitMQ/EventBusRabbitMQ.cs @@ -26,19 +26,20 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ private readonly IEventBusSubscriptionsManager _subsManager; private readonly ILifetimeScope _autofac; private readonly string AUTOFAC_SCOPE_NAME = "eshop_event_bus"; + private readonly int _retryCount; private IModel _consumerChannel; private string _queueName; public EventBusRabbitMQ(IRabbitMQPersistentConnection persistentConnection, ILogger logger, - ILifetimeScope autofac, IEventBusSubscriptionsManager subsManager) + ILifetimeScope autofac, IEventBusSubscriptionsManager subsManager, int retryCount = 5) { _persistentConnection = persistentConnection ?? throw new ArgumentNullException(nameof(persistentConnection)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _subsManager = subsManager ?? new InMemoryEventBusSubscriptionsManager(); _consumerChannel = CreateConsumerChannel(); _autofac = autofac; - + _retryCount = retryCount; _subsManager.OnEventRemoved += SubsManager_OnEventRemoved; } @@ -72,7 +73,7 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ var policy = RetryPolicy.Handle() .Or() - .WaitAndRetry(5, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (ex, time) => + .WaitAndRetry(_retryCount, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (ex, time) => { _logger.LogWarning(ex.ToString()); }); diff --git a/src/Services/Basket/Basket.API/Startup.cs b/src/Services/Basket/Basket.API/Startup.cs index ae65a8486..371979419 100644 --- a/src/Services/Basket/Basket.API/Startup.cs +++ b/src/Services/Basket/Basket.API/Startup.cs @@ -120,7 +120,13 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API factory.Password = Configuration["EventBusPassword"]; } - return new DefaultRabbitMQPersistentConnection(factory, logger); + var retryCount = 5; + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + retryCount = int.Parse(Configuration["EventBusRetryCount"]); + } + + return new DefaultRabbitMQPersistentConnection(factory, logger, retryCount); }); } @@ -247,7 +253,21 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API } else { - services.AddSingleton(); + services.AddSingleton(sp => + { + var rabbitMQPersistentConnection = sp.GetRequiredService(); + var iLifetimeScope = sp.GetRequiredService(); + var logger = sp.GetRequiredService>(); + var eventBusSubcriptionsManager = sp.GetRequiredService(); + + var retryCount = 5; + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + retryCount = int.Parse(Configuration["EventBusRetryCount"]); + } + + return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, retryCount); + }); } services.AddSingleton(); diff --git a/src/Services/Basket/Basket.API/appsettings.json b/src/Services/Basket/Basket.API/appsettings.json index 027fe9d23..16d56d94d 100644 --- a/src/Services/Basket/Basket.API/appsettings.json +++ b/src/Services/Basket/Basket.API/appsettings.json @@ -13,5 +13,6 @@ "SubscriptionClientName": "Basket", "ApplicationInsights": { "InstrumentationKey": "" - } + }, + "EventBusRetryCount": 5 } \ No newline at end of file diff --git a/src/Services/Catalog/Catalog.API/Startup.cs b/src/Services/Catalog/Catalog.API/Startup.cs index c04039a73..6dd4f89c5 100644 --- a/src/Services/Catalog/Catalog.API/Startup.cs +++ b/src/Services/Catalog/Catalog.API/Startup.cs @@ -35,7 +35,7 @@ Configuration = configuration; } - public IConfiguration Configuration { get; } + public IConfiguration Configuration { get; } public IServiceProvider ConfigureServices(IServiceCollection services) { @@ -161,7 +161,13 @@ factory.Password = Configuration["EventBusPassword"]; } - return new DefaultRabbitMQPersistentConnection(factory, logger); + var retryCount = 5; + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + retryCount = int.Parse(Configuration["EventBusRetryCount"]); + } + + return new DefaultRabbitMQPersistentConnection(factory, logger, retryCount); }); } @@ -188,7 +194,7 @@ loggerFactory.CreateLogger("init").LogDebug($"Using PATH BASE '{pathBase}'"); app.UsePathBase(pathBase); } - + app.UseCors("CorsPolicy"); app.UseMvcWithDefaultRoute(); @@ -221,7 +227,21 @@ } else { - services.AddSingleton(); + services.AddSingleton(sp => + { + var rabbitMQPersistentConnection = sp.GetRequiredService(); + var iLifetimeScope = sp.GetRequiredService(); + var logger = sp.GetRequiredService>(); + var eventBusSubcriptionsManager = sp.GetRequiredService(); + + var retryCount = 5; + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + retryCount = int.Parse(Configuration["EventBusRetryCount"]); + } + + return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, retryCount); + }); } services.AddSingleton(); diff --git a/src/Services/Catalog/Catalog.API/appsettings.json b/src/Services/Catalog/Catalog.API/appsettings.json index dc4e0aa5c..abaa34316 100644 --- a/src/Services/Catalog/Catalog.API/appsettings.json +++ b/src/Services/Catalog/Catalog.API/appsettings.json @@ -15,5 +15,6 @@ "SubscriptionClientName": "Catalog", "ApplicationInsights": { "InstrumentationKey": "" - } + }, + "EventBusRetryCount": 5 } diff --git a/src/Services/Location/Locations.API/Startup.cs b/src/Services/Location/Locations.API/Startup.cs index 115fa5f32..db878a155 100644 --- a/src/Services/Location/Locations.API/Startup.cs +++ b/src/Services/Location/Locations.API/Startup.cs @@ -87,7 +87,13 @@ namespace Microsoft.eShopOnContainers.Services.Locations.API factory.Password = Configuration["EventBusPassword"]; } - return new DefaultRabbitMQPersistentConnection(factory, logger); + var retryCount = 5; + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + retryCount = int.Parse(Configuration["EventBusRetryCount"]); + } + + return new DefaultRabbitMQPersistentConnection(factory, logger, retryCount); }); } @@ -217,7 +223,21 @@ namespace Microsoft.eShopOnContainers.Services.Locations.API } else { - services.AddSingleton(); + services.AddSingleton(sp => + { + var rabbitMQPersistentConnection = sp.GetRequiredService(); + var iLifetimeScope = sp.GetRequiredService(); + var logger = sp.GetRequiredService>(); + var eventBusSubcriptionsManager = sp.GetRequiredService(); + + var retryCount = 5; + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + retryCount = int.Parse(Configuration["EventBusRetryCount"]); + } + + return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, retryCount); + }); } services.AddSingleton(); diff --git a/src/Services/Location/Locations.API/appsettings.Development.json b/src/Services/Location/Locations.API/appsettings.Development.json deleted file mode 100644 index fa8ce71a9..000000000 --- a/src/Services/Location/Locations.API/appsettings.Development.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "Logging": { - "IncludeScopes": false, - "LogLevel": { - "Default": "Debug", - "System": "Information", - "Microsoft": "Information" - } - } -} diff --git a/src/Services/Location/Locations.API/appsettings.json b/src/Services/Location/Locations.API/appsettings.json index 0064466af..512b55f2a 100644 --- a/src/Services/Location/Locations.API/appsettings.json +++ b/src/Services/Location/Locations.API/appsettings.json @@ -14,5 +14,6 @@ "SubscriptionClientName": "Locations", "ApplicationInsights": { "InstrumentationKey": "" - } + }, + "EventBusRetryCount": 5 } \ No newline at end of file diff --git a/src/Services/Marketing/Marketing.API/Startup.cs b/src/Services/Marketing/Marketing.API/Startup.cs index 45f4974c1..76d43d2e3 100644 --- a/src/Services/Marketing/Marketing.API/Startup.cs +++ b/src/Services/Marketing/Marketing.API/Startup.cs @@ -122,7 +122,14 @@ { factory.Password = Configuration["EventBusPassword"]; } - return new DefaultRabbitMQPersistentConnection(factory, logger); + + var retryCount = 5; + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + retryCount = int.Parse(Configuration["EventBusRetryCount"]); + } + + return new DefaultRabbitMQPersistentConnection(factory, logger, retryCount); }); } @@ -242,7 +249,21 @@ } else { - services.AddSingleton(); + services.AddSingleton(sp => + { + var rabbitMQPersistentConnection = sp.GetRequiredService(); + var iLifetimeScope = sp.GetRequiredService(); + var logger = sp.GetRequiredService>(); + var eventBusSubcriptionsManager = sp.GetRequiredService(); + + var retryCount = 5; + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + retryCount = int.Parse(Configuration["EventBusRetryCount"]); + } + + return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, retryCount); + }); } services.AddSingleton(); diff --git a/src/Services/Marketing/Marketing.API/appsettings.Development.json b/src/Services/Marketing/Marketing.API/appsettings.Development.json deleted file mode 100644 index 5fff67bac..000000000 --- a/src/Services/Marketing/Marketing.API/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "IncludeScopes": false, - "LogLevel": { - "Default": "Warning" - } - } -} diff --git a/src/Services/Marketing/Marketing.API/appsettings.json b/src/Services/Marketing/Marketing.API/appsettings.json index cc55a4052..c4d908c83 100644 --- a/src/Services/Marketing/Marketing.API/appsettings.json +++ b/src/Services/Marketing/Marketing.API/appsettings.json @@ -15,5 +15,6 @@ "AzureStorageEnabled": false, "ApplicationInsights": { "InstrumentationKey": "" - } + }, + "EventBusRetryCount": 5 } \ No newline at end of file diff --git a/src/Services/Ordering/Ordering.API/Startup.cs b/src/Services/Ordering/Ordering.API/Startup.cs index 79de89394..b1dea71b2 100644 --- a/src/Services/Ordering/Ordering.API/Startup.cs +++ b/src/Services/Ordering/Ordering.API/Startup.cs @@ -180,7 +180,13 @@ factory.Password = Configuration["EventBusPassword"]; } - return new DefaultRabbitMQPersistentConnection(factory, logger); + var retryCount = 5; + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + retryCount = int.Parse(Configuration["EventBusRetryCount"]); + } + + return new DefaultRabbitMQPersistentConnection(factory, logger, retryCount); }); } @@ -284,7 +290,21 @@ } else { - services.AddSingleton(); + services.AddSingleton(sp => + { + var rabbitMQPersistentConnection = sp.GetRequiredService(); + var iLifetimeScope = sp.GetRequiredService(); + var logger = sp.GetRequiredService>(); + var eventBusSubcriptionsManager = sp.GetRequiredService(); + + var retryCount = 5; + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + retryCount = int.Parse(Configuration["EventBusRetryCount"]); + } + + return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, retryCount); + }); } services.AddSingleton(); diff --git a/src/Services/Ordering/Ordering.API/settings.json b/src/Services/Ordering/Ordering.API/settings.json index f20261e31..61ebe5325 100644 --- a/src/Services/Ordering/Ordering.API/settings.json +++ b/src/Services/Ordering/Ordering.API/settings.json @@ -16,5 +16,6 @@ "CheckUpdateTime": "30000", "ApplicationInsights": { "InstrumentationKey": "" - } + }, + "EventBusRetryCount": 5 } diff --git a/src/Services/Payment/Payment.API/Startup.cs b/src/Services/Payment/Payment.API/Startup.cs index e20b2fd76..c0ae5b2d5 100644 --- a/src/Services/Payment/Payment.API/Startup.cs +++ b/src/Services/Payment/Payment.API/Startup.cs @@ -74,7 +74,13 @@ namespace Payment.API factory.Password = Configuration["EventBusPassword"]; } - return new DefaultRabbitMQPersistentConnection(factory, logger); + var retryCount = 5; + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + retryCount = int.Parse(Configuration["EventBusRetryCount"]); + } + + return new DefaultRabbitMQPersistentConnection(factory, logger, retryCount); }); } @@ -123,7 +129,21 @@ namespace Payment.API } else { - services.AddSingleton(); + services.AddSingleton(sp => + { + var rabbitMQPersistentConnection = sp.GetRequiredService(); + var iLifetimeScope = sp.GetRequiredService(); + var logger = sp.GetRequiredService>(); + var eventBusSubcriptionsManager = sp.GetRequiredService(); + + var retryCount = 5; + if (!string.IsNullOrEmpty(Configuration["EventBusRetryCount"])) + { + retryCount = int.Parse(Configuration["EventBusRetryCount"]); + } + + return new EventBusRabbitMQ(rabbitMQPersistentConnection, logger, iLifetimeScope, eventBusSubcriptionsManager, retryCount); + }); } services.AddTransient(); diff --git a/src/Services/Payment/Payment.API/appsettings.json b/src/Services/Payment/Payment.API/appsettings.json index ad668a388..acc9a2be0 100644 --- a/src/Services/Payment/Payment.API/appsettings.json +++ b/src/Services/Payment/Payment.API/appsettings.json @@ -10,5 +10,6 @@ "SubscriptionClientName": "Payment", "ApplicationInsights": { "InstrumentationKey": "" - } + }, + "EventBusRetryCount": 5 } diff --git a/src/Web/WebMVC/Infrastructure/ResilientHttpClientFactory.cs b/src/Web/WebMVC/Infrastructure/ResilientHttpClientFactory.cs index b05c6e038..8805bc752 100644 --- a/src/Web/WebMVC/Infrastructure/ResilientHttpClientFactory.cs +++ b/src/Web/WebMVC/Infrastructure/ResilientHttpClientFactory.cs @@ -9,11 +9,18 @@ namespace Microsoft.eShopOnContainers.WebMVC.Infrastructure public class ResilientHttpClientFactory : IResilientHttpClientFactory { private readonly ILogger _logger; + private readonly int _retryCount; + private readonly int _exceptionsAllowedBeforeBreaking; - public ResilientHttpClientFactory(ILogger logger) - =>_logger = logger; + public ResilientHttpClientFactory(ILogger logger, int exceptionsAllowedBeforeBreaking = 5, int retryCount = 6) + { + _logger = logger; + _exceptionsAllowedBeforeBreaking = exceptionsAllowedBeforeBreaking; + _retryCount = retryCount; + } - public ResilientHttpClient CreateResilientHttpClient() + + public ResilientHttpClient CreateResilientHttpClient() => new ResilientHttpClient((origin) => CreatePolicies(), _logger); private Policy[] CreatePolicies() @@ -22,7 +29,7 @@ namespace Microsoft.eShopOnContainers.WebMVC.Infrastructure Policy.Handle() .WaitAndRetryAsync( // number of retries - 6, + _retryCount, // exponential backofff retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), // on retry @@ -36,9 +43,9 @@ namespace Microsoft.eShopOnContainers.WebMVC.Infrastructure _logger.LogDebug(msg); }), Policy.Handle() - .CircuitBreakerAsync( + .CircuitBreakerAsync( // number of exceptions before breaking circuit - 5, + _exceptionsAllowedBeforeBreaking, // time circuit opened before retry TimeSpan.FromMinutes(1), (exception, duration) => @@ -51,6 +58,6 @@ namespace Microsoft.eShopOnContainers.WebMVC.Infrastructure // on circuit closed _logger.LogTrace("Circuit breaker reset"); }) - }; + }; } } diff --git a/src/Web/WebMVC/Startup.cs b/src/Web/WebMVC/Startup.cs index 509a55947..6049aa229 100644 --- a/src/Web/WebMVC/Startup.cs +++ b/src/Web/WebMVC/Startup.cs @@ -79,7 +79,24 @@ namespace Microsoft.eShopOnContainers.WebMVC if (Configuration.GetValue("UseResilientHttp") == bool.TrueString) { - services.AddSingleton(); + services.AddSingleton(sp => + { + var logger = sp.GetRequiredService>(); + + var retryCount = 6; + if (!string.IsNullOrEmpty(Configuration["HttpClientRetryCount"])) + { + retryCount = int.Parse(Configuration["HttpClientRetryCount"]); + } + + var exceptionsAllowedBeforeBreaking = 5; + if (!string.IsNullOrEmpty(Configuration["HttpClientExceptionsAllowedBeforeBreaking"])) + { + exceptionsAllowedBeforeBreaking = int.Parse(Configuration["HttpClientExceptionsAllowedBeforeBreaking"]); + } + + return new ResilientHttpClientFactory(logger, exceptionsAllowedBeforeBreaking, retryCount); + }); services.AddSingleton(sp => sp.GetService().CreateResilientHttpClient()); } else diff --git a/src/Web/WebMVC/appsettings.json b/src/Web/WebMVC/appsettings.json index b68e719dd..d728eeb6f 100644 --- a/src/Web/WebMVC/appsettings.json +++ b/src/Web/WebMVC/appsettings.json @@ -21,5 +21,7 @@ }, "ApplicationInsights": { "InstrumentationKey": "" - } + }, + "HttpClientRetryCount": 6, + "HttpClientExceptionsAllowedBeforeBreaking": 5 } \ No newline at end of file From 94c043e69a6d088f2ee267f716eac7111031c9cd Mon Sep 17 00:00:00 2001 From: Igor Sychev Date: Sun, 8 Oct 2017 18:46:05 +0100 Subject: [PATCH 078/136] identity4 2.0 rtm --- .../Identity/Identity.API/Identity.API.csproj | 4 ++-- ...r.cs => 20170927170433_Config.Designer.cs} | 21 ++++++++++++------- ...52_Initial.cs => 20170927170433_Config.cs} | 13 ++++++------ .../ConfigurationDbContextModelSnapshot.cs | 17 +++++++++------ ...r.cs => 20170927170423_Grants.Designer.cs} | 4 ++-- ...20_Initial.cs => 20170927170423_Grants.cs} | 3 +-- src/Services/Identity/Identity.API/Startup.cs | 3 +-- 7 files changed, 36 insertions(+), 29 deletions(-) rename src/Services/Identity/Identity.API/Migrations/ConfigurationDb/{20170912114152_Initial.Designer.cs => 20170927170433_Config.Designer.cs} (97%) rename src/Services/Identity/Identity.API/Migrations/ConfigurationDb/{20170912114152_Initial.cs => 20170927170433_Config.cs} (98%) rename src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/{20170912114120_Initial.Designer.cs => 20170927170423_Grants.Designer.cs} (96%) rename src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/{20170912114120_Initial.cs => 20170927170423_Grants.cs} (95%) diff --git a/src/Services/Identity/Identity.API/Identity.API.csproj b/src/Services/Identity/Identity.API/Identity.API.csproj index 84b1c280c..69760871e 100644 --- a/src/Services/Identity/Identity.API/Identity.API.csproj +++ b/src/Services/Identity/Identity.API/Identity.API.csproj @@ -20,8 +20,8 @@ - - + + diff --git a/src/Services/Identity/Identity.API/Migrations/ConfigurationDb/20170912114152_Initial.Designer.cs b/src/Services/Identity/Identity.API/Migrations/ConfigurationDb/20170927170433_Config.Designer.cs similarity index 97% rename from src/Services/Identity/Identity.API/Migrations/ConfigurationDb/20170912114152_Initial.Designer.cs rename to src/Services/Identity/Identity.API/Migrations/ConfigurationDb/20170927170433_Config.Designer.cs index a718c0943..327d2fee0 100644 --- a/src/Services/Identity/Identity.API/Migrations/ConfigurationDb/20170912114152_Initial.Designer.cs +++ b/src/Services/Identity/Identity.API/Migrations/ConfigurationDb/20170927170433_Config.Designer.cs @@ -11,8 +11,8 @@ using System; namespace Identity.API.Migrations.ConfigurationDb { [DbContext(typeof(ConfigurationDbContext))] - [Migration("20170912114152_Initial")] - partial class Initial + [Migration("20170927170433_Config")] + partial class Config { protected override void BuildTargetModel(ModelBuilder modelBuilder) { @@ -171,7 +171,11 @@ namespace Identity.API.Migrations.ConfigurationDb b.Property("BackChannelLogoutSessionRequired"); - b.Property("BackChannelLogoutUri"); + b.Property("BackChannelLogoutUri") + .HasMaxLength(2000); + + b.Property("ClientClaimsPrefix") + .HasMaxLength(200); b.Property("ClientId") .IsRequired() @@ -194,17 +198,18 @@ namespace Identity.API.Migrations.ConfigurationDb b.Property("FrontChannelLogoutSessionRequired"); - b.Property("FrontChannelLogoutUri"); + b.Property("FrontChannelLogoutUri") + .HasMaxLength(2000); b.Property("IdentityTokenLifetime"); b.Property("IncludeJwtId"); - b.Property("LogoUri"); - - b.Property("NormalizedClientId"); + b.Property("LogoUri") + .HasMaxLength(2000); - b.Property("PrefixClientClaims"); + b.Property("PairWiseSubjectSalt") + .HasMaxLength(200); b.Property("ProtocolType") .IsRequired() diff --git a/src/Services/Identity/Identity.API/Migrations/ConfigurationDb/20170912114152_Initial.cs b/src/Services/Identity/Identity.API/Migrations/ConfigurationDb/20170927170433_Config.cs similarity index 98% rename from src/Services/Identity/Identity.API/Migrations/ConfigurationDb/20170912114152_Initial.cs rename to src/Services/Identity/Identity.API/Migrations/ConfigurationDb/20170927170433_Config.cs index 257a6adde..754c75486 100644 --- a/src/Services/Identity/Identity.API/Migrations/ConfigurationDb/20170912114152_Initial.cs +++ b/src/Services/Identity/Identity.API/Migrations/ConfigurationDb/20170927170433_Config.cs @@ -1,11 +1,10 @@ using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using System; -using System.Collections.Generic; namespace Identity.API.Migrations.ConfigurationDb { - public partial class Initial : Migration + public partial class Config : Migration { protected override void Up(MigrationBuilder migrationBuilder) { @@ -42,7 +41,8 @@ namespace Identity.API.Migrations.ConfigurationDb AlwaysSendClientClaims = table.Column(type: "bit", nullable: false), AuthorizationCodeLifetime = table.Column(type: "int", nullable: false), BackChannelLogoutSessionRequired = table.Column(type: "bit", nullable: false), - BackChannelLogoutUri = table.Column(type: "nvarchar(max)", nullable: true), + BackChannelLogoutUri = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: true), + ClientClaimsPrefix = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: true), ClientId = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), ClientName = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: true), ClientUri = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: true), @@ -51,12 +51,11 @@ namespace Identity.API.Migrations.ConfigurationDb EnableLocalLogin = table.Column(type: "bit", nullable: false), Enabled = table.Column(type: "bit", nullable: false), FrontChannelLogoutSessionRequired = table.Column(type: "bit", nullable: false), - FrontChannelLogoutUri = table.Column(type: "nvarchar(max)", nullable: true), + FrontChannelLogoutUri = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: true), IdentityTokenLifetime = table.Column(type: "int", nullable: false), IncludeJwtId = table.Column(type: "bit", nullable: false), - LogoUri = table.Column(type: "nvarchar(max)", nullable: true), - NormalizedClientId = table.Column(type: "nvarchar(max)", nullable: true), - PrefixClientClaims = table.Column(type: "bit", nullable: false), + LogoUri = table.Column(type: "nvarchar(2000)", maxLength: 2000, nullable: true), + PairWiseSubjectSalt = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: true), ProtocolType = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), RefreshTokenExpiration = table.Column(type: "int", nullable: false), RefreshTokenUsage = table.Column(type: "int", nullable: false), diff --git a/src/Services/Identity/Identity.API/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs b/src/Services/Identity/Identity.API/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs index 560c5ea89..88d9baba3 100644 --- a/src/Services/Identity/Identity.API/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs +++ b/src/Services/Identity/Identity.API/Migrations/ConfigurationDb/ConfigurationDbContextModelSnapshot.cs @@ -170,7 +170,11 @@ namespace Identity.API.Migrations.ConfigurationDb b.Property("BackChannelLogoutSessionRequired"); - b.Property("BackChannelLogoutUri"); + b.Property("BackChannelLogoutUri") + .HasMaxLength(2000); + + b.Property("ClientClaimsPrefix") + .HasMaxLength(200); b.Property("ClientId") .IsRequired() @@ -193,17 +197,18 @@ namespace Identity.API.Migrations.ConfigurationDb b.Property("FrontChannelLogoutSessionRequired"); - b.Property("FrontChannelLogoutUri"); + b.Property("FrontChannelLogoutUri") + .HasMaxLength(2000); b.Property("IdentityTokenLifetime"); b.Property("IncludeJwtId"); - b.Property("LogoUri"); - - b.Property("NormalizedClientId"); + b.Property("LogoUri") + .HasMaxLength(2000); - b.Property("PrefixClientClaims"); + b.Property("PairWiseSubjectSalt") + .HasMaxLength(200); b.Property("ProtocolType") .IsRequired() diff --git a/src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/20170912114120_Initial.Designer.cs b/src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/20170927170423_Grants.Designer.cs similarity index 96% rename from src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/20170912114120_Initial.Designer.cs rename to src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/20170927170423_Grants.Designer.cs index 72f0df362..aaf24d10c 100644 --- a/src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/20170912114120_Initial.Designer.cs +++ b/src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/20170927170423_Grants.Designer.cs @@ -10,8 +10,8 @@ using System; namespace Identity.API.Migrations.PersistedGrantDb { [DbContext(typeof(PersistedGrantDbContext))] - [Migration("20170912114120_Initial")] - partial class Initial + [Migration("20170927170423_Grants")] + partial class Grants { protected override void BuildTargetModel(ModelBuilder modelBuilder) { diff --git a/src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/20170912114120_Initial.cs b/src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/20170927170423_Grants.cs similarity index 95% rename from src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/20170912114120_Initial.cs rename to src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/20170927170423_Grants.cs index 44bd9fed1..4017f8bf0 100644 --- a/src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/20170912114120_Initial.cs +++ b/src/Services/Identity/Identity.API/Migrations/PersistedGrantDb/20170927170423_Grants.cs @@ -1,10 +1,9 @@ using Microsoft.EntityFrameworkCore.Migrations; using System; -using System.Collections.Generic; namespace Identity.API.Migrations.PersistedGrantDb { - public partial class Initial : Migration + public partial class Grants : Migration { protected override void Up(MigrationBuilder migrationBuilder) { diff --git a/src/Services/Identity/Identity.API/Startup.cs b/src/Services/Identity/Identity.API/Startup.cs index da93e1a51..8447d3213 100644 --- a/src/Services/Identity/Identity.API/Startup.cs +++ b/src/Services/Identity/Identity.API/Startup.cs @@ -51,8 +51,7 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API services.AddIdentity() .AddEntityFrameworkStores() - .AddDefaultTokenProviders() - .AddIdentityServer(); + .AddDefaultTokenProviders(); services.Configure(Configuration); From 9827483b7bee31b2ee9ff422782ff70bea5bd7ee Mon Sep 17 00:00:00 2001 From: Igor Sychev Date: Thu, 12 Oct 2017 21:33:00 +0100 Subject: [PATCH 079/136] Payment API orchestrator fix --- docker-compose.override.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 81a6ba959..f3bf0ede9 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -174,6 +174,7 @@ services: - EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD} - AzureServiceBusEnabled=False - ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY} + - OrchestratorType=${ORCHESTRATOR_TYPE} ports: - "5108:80" From ace61123e307406c5cfa5651217df6ee53d2706a Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Thu, 12 Oct 2017 18:27:13 -0700 Subject: [PATCH 080/136] Increased number of retries with exponential backoff and Circuir-Breaker so minimizes the risk of open circuit when spinning up the containers for the first time in Docker. --- src/Web/WebMVC/appsettings.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Web/WebMVC/appsettings.json b/src/Web/WebMVC/appsettings.json index d728eeb6f..161e247a6 100644 --- a/src/Web/WebMVC/appsettings.json +++ b/src/Web/WebMVC/appsettings.json @@ -22,6 +22,6 @@ "ApplicationInsights": { "InstrumentationKey": "" }, - "HttpClientRetryCount": 6, - "HttpClientExceptionsAllowedBeforeBreaking": 5 + "HttpClientRetryCount": 8, + "HttpClientExceptionsAllowedBeforeBreaking": 7 } \ No newline at end of file From dc98e6a4c65aae0bc70d9273106c72f19174ce79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Fri, 13 Oct 2017 11:35:26 +0200 Subject: [PATCH 081/136] Added Appinsights Linux SF telemetry initializer --- .../ApplicationManifest.xml | 10 ++++- .../BasketApiPkg/ServiceManifest.xml | 3 ++ .../CatalogApiPkg/ServiceManifest.xml | 2 + .../LocationsApiPkg/ServiceManifest.xml | 4 +- .../MarketingApiPkg/ServiceManifest.xml | 2 + .../OrderingApiPkg/ServiceManifest.xml | 2 + .../PaymentApiPkg/ServiceManifest.xml | 4 +- .../ApplicationParameters/Cloud.xml | 1 + .../ApplicationManifest.xml | 2 + .../IdentityApiPkg/ServiceManifest.xml | 2 + .../ApplicationParameters/Cloud.xml | 1 + .../ApplicationManifest.xml | 4 +- .../WebMVCPkg/ServiceManifest.xml | 2 + .../ApplicationParameters/Cloud.xml | 1 + .../ApplicationManifest.xml | 2 + .../WebSPAPkg/ServiceManifest.xml | 2 + .../ApplicationParameters/Cloud.xml | 1 + .../ApplicationManifest.xml | 5 ++- .../WebStatusPkg/ServiceManifest.xml | 2 + .../ApplicationParameters/Cloud.xml | 1 + .../Basket/Basket.API/Basket.API.csproj | 1 + src/Services/Basket/Basket.API/Startup.cs | 39 ++++++++++++------- .../Catalog/Catalog.API/Catalog.API.csproj | 1 + src/Services/Catalog/Catalog.API/Startup.cs | 27 +++++++++---- .../Identity/Identity.API/Identity.API.csproj | 1 + src/Services/Identity/Identity.API/Startup.cs | 27 +++++++++---- .../Locations.API/Locations.API.csproj | 1 + .../Location/Locations.API/Startup.cs | 27 +++++++++---- .../Marketing.API/Marketing.API.csproj | 1 + .../Marketing/Marketing.API/Startup.cs | 27 +++++++++---- .../Ordering/Ordering.API/Ordering.API.csproj | 1 + src/Services/Ordering/Ordering.API/Startup.cs | 27 +++++++++---- .../Payment/Payment.API/Payment.API.csproj | 1 + src/Services/Payment/Payment.API/Startup.cs | 29 ++++++++++---- src/Web/WebMVC/Startup.cs | 29 ++++++++++---- src/Web/WebMVC/WebMVC.csproj | 1 + src/Web/WebSPA/Startup.cs | 29 ++++++++++---- src/Web/WebSPA/WebSPA.csproj | 1 + src/Web/WebStatus/Startup.cs | 27 +++++++++---- src/Web/WebStatus/WebStatus.csproj | 1 + 40 files changed, 267 insertions(+), 84 deletions(-) diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml index 4d5b1fd92..608fd7a25 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -13,6 +13,7 @@ + + @@ -34,6 +36,7 @@ + @@ -43,7 +46,9 @@ - + + + @@ -54,6 +59,7 @@ + @@ -65,6 +71,7 @@ + @@ -76,6 +83,7 @@ + diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml index 1dc7320b1..b73e3d5f7 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml @@ -27,6 +27,8 @@ + + @@ -43,3 +45,4 @@ + diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml index 08fd727ac..f46e22fc7 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml @@ -30,6 +30,8 @@ + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml index b576b011d..b67bb16ee 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml @@ -27,7 +27,9 @@ - + + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml index 286341b5b..61d6b097f 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -34,6 +34,8 @@ + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml index 209f54483..b6820aa70 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml @@ -30,6 +30,8 @@ + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml index 1450012ff..2a9a4dfd6 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml @@ -23,7 +23,9 @@ - + + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml index eb4b31a63..68931e6f4 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabric/ApplicationParameters/Cloud.xml @@ -9,5 +9,6 @@ + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml index 21990aa56..638b70194 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml @@ -13,6 +13,7 @@ + - + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml index bb7b033df..d09893cb4 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml @@ -28,6 +28,8 @@ + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml index 6bdcbe2e1..01f86972a 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml @@ -3,5 +3,6 @@ + \ No newline at end of file diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml index 1631563e9..7fca0294e 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml @@ -11,6 +11,7 @@ + - + + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml index 78dd420e4..1c32dd6b0 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml @@ -30,6 +30,8 @@ + + diff --git a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml index 25352d134..f77d4b08e 100644 --- a/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Linux/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/src/Services/Basket/Basket.API/Basket.API.csproj b/src/Services/Basket/Basket.API/Basket.API.csproj index 5e07fbddb..abbbb83e8 100644 --- a/src/Services/Basket/Basket.API/Basket.API.csproj +++ b/src/Services/Basket/Basket.API/Basket.API.csproj @@ -19,6 +19,7 @@ + diff --git a/src/Services/Basket/Basket.API/Startup.cs b/src/Services/Basket/Basket.API/Startup.cs index 371979419..190af72ee 100644 --- a/src/Services/Basket/Basket.API/Startup.cs +++ b/src/Services/Basket/Basket.API/Startup.cs @@ -3,6 +3,8 @@ using Autofac.Extensions.DependencyInjection; using Basket.API.Infrastructure.Filters; using Basket.API.IntegrationEvents.EventHandling; using Basket.API.IntegrationEvents.Events; +using Microsoft.ApplicationInsights.Extensibility; +using Microsoft.ApplicationInsights.ServiceFabric; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -44,7 +46,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API // This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { - services.AddApplicationInsightsTelemetry(Configuration); + RegisterAppInsights(services); // Add framework services. services.AddMvc(options => @@ -63,13 +65,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API ); }); - services.Configure(Configuration); - - if(Configuration.GetValue("OrchestratorType").Equals("K8S")) - { - // Enable K8s telemetry initializer - services.EnableKubernetes(); - } + services.Configure(Configuration); //By connecting here we are making sure that our service //cannot start until redis is ready. This might slow down startup, @@ -80,7 +76,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API services.AddSingleton(sp => { var settings = sp.GetRequiredService>().Value; - var configuration = ConfigurationOptions.Parse(settings.ConnectionString, true); + var configuration = ConfigurationOptions.Parse(settings.ConnectionString, true); configuration.ResolveDns = true; @@ -111,7 +107,8 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API HostName = Configuration["EventBusConnection"] }; - if (!string.IsNullOrEmpty(Configuration["EventBusUserName"])) { + if (!string.IsNullOrEmpty(Configuration["EventBusUserName"])) + { factory.UserName = Configuration["EventBusUserName"]; } @@ -169,7 +166,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API services.AddSingleton(); services.AddTransient(); services.AddTransient(); - + services.AddOptions(); var container = new ContainerBuilder(); @@ -177,8 +174,7 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API return new AutofacServiceProvider(container.Build()); } - - + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) @@ -210,6 +206,23 @@ namespace Microsoft.eShopOnContainers.Services.Basket.API } + private void RegisterAppInsights(IServiceCollection services) + { + services.AddApplicationInsightsTelemetry(Configuration); + + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + if (Configuration.GetValue("OrchestratorType").Equals("SF")) + { + // Enable SF telemetry initializer + services.AddSingleton((serviceProvider) => + new FabricTelemetryInitializer()); + } + } + private void ConfigureAuthService(IServiceCollection services) { // prevent from mapping "sub" claim to nameidentifier. diff --git a/src/Services/Catalog/Catalog.API/Catalog.API.csproj b/src/Services/Catalog/Catalog.API/Catalog.API.csproj index 5d5812953..4c3640edc 100644 --- a/src/Services/Catalog/Catalog.API/Catalog.API.csproj +++ b/src/Services/Catalog/Catalog.API/Catalog.API.csproj @@ -38,6 +38,7 @@ + diff --git a/src/Services/Catalog/Catalog.API/Startup.cs b/src/Services/Catalog/Catalog.API/Startup.cs index 6dd4f89c5..34738cd58 100644 --- a/src/Services/Catalog/Catalog.API/Startup.cs +++ b/src/Services/Catalog/Catalog.API/Startup.cs @@ -4,6 +4,8 @@ using Autofac.Extensions.DependencyInjection; using global::Catalog.API.Infrastructure.Filters; using global::Catalog.API.IntegrationEvents; + using Microsoft.ApplicationInsights.Extensibility; + using Microsoft.ApplicationInsights.ServiceFabric; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Azure.ServiceBus; @@ -41,13 +43,7 @@ { // Add framework services. - services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) - { - // Enable K8s telemetry initializer - services.EnableKubernetes(); - } + RegisterAppInsights(services); services.AddHealthChecks(checks => { @@ -208,6 +204,23 @@ ConfigureEventBus(app); } + private void RegisterAppInsights(IServiceCollection services) + { + services.AddApplicationInsightsTelemetry(Configuration); + + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + if (Configuration.GetValue("OrchestratorType").Equals("SF")) + { + // Enable SF telemetry initializer + services.AddSingleton((serviceProvider) => + new FabricTelemetryInitializer()); + } + } + private void RegisterEventBus(IServiceCollection services) { if (Configuration.GetValue("AzureServiceBusEnabled")) diff --git a/src/Services/Identity/Identity.API/Identity.API.csproj b/src/Services/Identity/Identity.API/Identity.API.csproj index 69760871e..3f0b4c307 100644 --- a/src/Services/Identity/Identity.API/Identity.API.csproj +++ b/src/Services/Identity/Identity.API/Identity.API.csproj @@ -19,6 +19,7 @@ + diff --git a/src/Services/Identity/Identity.API/Startup.cs b/src/Services/Identity/Identity.API/Startup.cs index 8447d3213..dfb368fae 100644 --- a/src/Services/Identity/Identity.API/Startup.cs +++ b/src/Services/Identity/Identity.API/Startup.cs @@ -1,6 +1,8 @@ using Autofac; using Autofac.Extensions.DependencyInjection; using IdentityServer4.Services; +using Microsoft.ApplicationInsights.Extensibility; +using Microsoft.ApplicationInsights.ServiceFabric; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Identity; @@ -31,13 +33,7 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API // This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { - services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) - { - // Enable K8s telemetry initializer - services.EnableKubernetes(); - } + RegisterAppInsights(services); // Add framework services. services.AddDbContext(options => @@ -163,5 +159,22 @@ namespace Microsoft.eShopOnContainers.Services.Identity.API template: "{controller=Home}/{action=Index}/{id?}"); }); } + + private void RegisterAppInsights(IServiceCollection services) + { + services.AddApplicationInsightsTelemetry(Configuration); + + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + if (Configuration.GetValue("OrchestratorType").Equals("SF")) + { + // Enable SF telemetry initializer + services.AddSingleton((serviceProvider) => + new FabricTelemetryInitializer()); + } + } } } diff --git a/src/Services/Location/Locations.API/Locations.API.csproj b/src/Services/Location/Locations.API/Locations.API.csproj index f6a2b0e98..6be9083e3 100644 --- a/src/Services/Location/Locations.API/Locations.API.csproj +++ b/src/Services/Location/Locations.API/Locations.API.csproj @@ -14,6 +14,7 @@ + diff --git a/src/Services/Location/Locations.API/Startup.cs b/src/Services/Location/Locations.API/Startup.cs index db878a155..d2045e70a 100644 --- a/src/Services/Location/Locations.API/Startup.cs +++ b/src/Services/Location/Locations.API/Startup.cs @@ -1,5 +1,7 @@ using Autofac; using Autofac.Extensions.DependencyInjection; +using Microsoft.ApplicationInsights.Extensibility; +using Microsoft.ApplicationInsights.ServiceFabric; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -37,13 +39,7 @@ namespace Microsoft.eShopOnContainers.Services.Locations.API public IServiceProvider ConfigureServices(IServiceCollection services) { - services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) - { - // Enable K8s telemetry initializer - services.EnableKubernetes(); - } + RegisterAppInsights(services); services.AddMvc(options => { @@ -182,6 +178,23 @@ namespace Microsoft.eShopOnContainers.Services.Locations.API .Wait(); } + private void RegisterAppInsights(IServiceCollection services) + { + services.AddApplicationInsightsTelemetry(Configuration); + + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + if (Configuration.GetValue("OrchestratorType").Equals("SF")) + { + // Enable SF telemetry initializer + services.AddSingleton((serviceProvider) => + new FabricTelemetryInitializer()); + } + } + private void ConfigureAuthService(IServiceCollection services) { // prevent from mapping "sub" claim to nameidentifier. diff --git a/src/Services/Marketing/Marketing.API/Marketing.API.csproj b/src/Services/Marketing/Marketing.API/Marketing.API.csproj index a462eb04e..2056a0b70 100644 --- a/src/Services/Marketing/Marketing.API/Marketing.API.csproj +++ b/src/Services/Marketing/Marketing.API/Marketing.API.csproj @@ -24,6 +24,7 @@ + diff --git a/src/Services/Marketing/Marketing.API/Startup.cs b/src/Services/Marketing/Marketing.API/Startup.cs index 76d43d2e3..92bb95aad 100644 --- a/src/Services/Marketing/Marketing.API/Startup.cs +++ b/src/Services/Marketing/Marketing.API/Startup.cs @@ -21,6 +21,8 @@ using Infrastructure.Services; using IntegrationEvents.Events; using Marketing.API.IntegrationEvents.Handlers; + using Microsoft.ApplicationInsights.Extensibility; + using Microsoft.ApplicationInsights.ServiceFabric; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.EntityFrameworkCore.Diagnostics; using RabbitMQ.Client; @@ -44,13 +46,7 @@ // This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { - services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) - { - // Enable K8s telemetry initializer - services.EnableKubernetes(); - } + RegisterAppInsights(services); // Add framework services. services.AddMvc(options => @@ -213,6 +209,23 @@ ConfigureEventBus(app); } + private void RegisterAppInsights(IServiceCollection services) + { + services.AddApplicationInsightsTelemetry(Configuration); + + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + if (Configuration.GetValue("OrchestratorType").Equals("SF")) + { + // Enable SF telemetry initializer + services.AddSingleton((serviceProvider) => + new FabricTelemetryInitializer()); + } + } + private void ConfigureAuthService(IServiceCollection services) { // prevent from mapping "sub" claim to nameidentifier. diff --git a/src/Services/Ordering/Ordering.API/Ordering.API.csproj b/src/Services/Ordering/Ordering.API/Ordering.API.csproj index 89a3b81a6..f5c1c5be8 100644 --- a/src/Services/Ordering/Ordering.API/Ordering.API.csproj +++ b/src/Services/Ordering/Ordering.API/Ordering.API.csproj @@ -40,6 +40,7 @@ + diff --git a/src/Services/Ordering/Ordering.API/Startup.cs b/src/Services/Ordering/Ordering.API/Startup.cs index b1dea71b2..b5e2e1729 100644 --- a/src/Services/Ordering/Ordering.API/Startup.cs +++ b/src/Services/Ordering/Ordering.API/Startup.cs @@ -10,6 +10,8 @@ using Infrastructure.AutofacModules; using Infrastructure.Filters; using Infrastructure.Services; + using Microsoft.ApplicationInsights.Extensibility; + using Microsoft.ApplicationInsights.ServiceFabric; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -46,13 +48,7 @@ public IServiceProvider ConfigureServices(IServiceCollection services) { - services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) - { - // Enable K8s telemetry initializer - services.EnableKubernetes(); - } + RegisterAppInsights(services); // Add framework services. services.AddMvc(options => @@ -235,6 +231,23 @@ ConfigureEventBus(app); } + private void RegisterAppInsights(IServiceCollection services) + { + services.AddApplicationInsightsTelemetry(Configuration); + + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + if (Configuration.GetValue("OrchestratorType").Equals("SF")) + { + // Enable SF telemetry initializer + services.AddSingleton((serviceProvider) => + new FabricTelemetryInitializer()); + } + } + private void ConfigureEventBus(IApplicationBuilder app) { var eventBus = app.ApplicationServices.GetRequiredService(); diff --git a/src/Services/Payment/Payment.API/Payment.API.csproj b/src/Services/Payment/Payment.API/Payment.API.csproj index 465acae4c..ba82c4215 100644 --- a/src/Services/Payment/Payment.API/Payment.API.csproj +++ b/src/Services/Payment/Payment.API/Payment.API.csproj @@ -11,6 +11,7 @@ + diff --git a/src/Services/Payment/Payment.API/Startup.cs b/src/Services/Payment/Payment.API/Startup.cs index c0ae5b2d5..d3729a6f5 100644 --- a/src/Services/Payment/Payment.API/Startup.cs +++ b/src/Services/Payment/Payment.API/Startup.cs @@ -17,6 +17,8 @@ using RabbitMQ.Client; using System; using System.Threading.Tasks; using Swashbuckle.AspNetCore.Swagger; +using Microsoft.ApplicationInsights.Extensibility; +using Microsoft.ApplicationInsights.ServiceFabric; namespace Payment.API { @@ -31,16 +33,10 @@ namespace Payment.API // This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) - { - services.AddApplicationInsightsTelemetry(Configuration); - + { services.Configure(Configuration); - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) - { - // Enable K8s telemetry initializer - services.EnableKubernetes(); - } + RegisterAppInsights(services); if (Configuration.GetValue("AzureServiceBusEnabled")) { @@ -111,6 +107,23 @@ namespace Payment.API ConfigureEventBus(app); } + private void RegisterAppInsights(IServiceCollection services) + { + services.AddApplicationInsightsTelemetry(Configuration); + + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + if (Configuration.GetValue("OrchestratorType").Equals("SF")) + { + // Enable SF telemetry initializer + services.AddSingleton((serviceProvider) => + new FabricTelemetryInitializer()); + } + } + private void RegisterEventBus(IServiceCollection services) { if (Configuration.GetValue("AzureServiceBusEnabled")) diff --git a/src/Web/WebMVC/Startup.cs b/src/Web/WebMVC/Startup.cs index 6049aa229..d90cb82c9 100644 --- a/src/Web/WebMVC/Startup.cs +++ b/src/Web/WebMVC/Startup.cs @@ -1,4 +1,6 @@ -using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.ApplicationInsights.Extensibility; +using Microsoft.ApplicationInsights.ServiceFabric; +using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -31,13 +33,7 @@ namespace Microsoft.eShopOnContainers.WebMVC // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { - services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) - { - // Enable K8s telemetry initializer - services.EnableKubernetes(); - } + RegisterAppInsights(services); services.AddMvc(); services.AddSession(); @@ -180,5 +176,22 @@ namespace Microsoft.eShopOnContainers.WebMVC template: "{controller=Error}/{action=Error}"); }); } + + private void RegisterAppInsights(IServiceCollection services) + { + services.AddApplicationInsightsTelemetry(Configuration); + + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + if (Configuration.GetValue("OrchestratorType").Equals("SF")) + { + // Enable SF telemetry initializer + services.AddSingleton((serviceProvider) => + new FabricTelemetryInitializer()); + } + } } } diff --git a/src/Web/WebMVC/WebMVC.csproj b/src/Web/WebMVC/WebMVC.csproj index d1a957b27..7bf96b5db 100644 --- a/src/Web/WebMVC/WebMVC.csproj +++ b/src/Web/WebMVC/WebMVC.csproj @@ -39,6 +39,7 @@ + diff --git a/src/Web/WebSPA/Startup.cs b/src/Web/WebSPA/Startup.cs index 9315088cf..8750d4974 100644 --- a/src/Web/WebSPA/Startup.cs +++ b/src/Web/WebSPA/Startup.cs @@ -1,4 +1,6 @@ using eShopOnContainers.WebSPA; +using Microsoft.ApplicationInsights.Extensibility; +using Microsoft.ApplicationInsights.ServiceFabric; using Microsoft.AspNetCore.Antiforgery; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -36,13 +38,7 @@ namespace eShopConContainers.WebSPA // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { - services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) - { - // Enable K8s telemetry initializer - services.EnableKubernetes(); - } + RegisterAppInsights(services); services.AddHealthChecks(checks => { @@ -128,11 +124,28 @@ namespace eShopConContainers.WebSPA await next(); } }); - + app.UseDefaultFiles(); app.UseStaticFiles(); app.UseMvcWithDefaultRoute(); } + + private void RegisterAppInsights(IServiceCollection services) + { + services.AddApplicationInsightsTelemetry(Configuration); + + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + if (Configuration.GetValue("OrchestratorType").Equals("SF")) + { + // Enable SF telemetry initializer + services.AddSingleton((serviceProvider) => + new FabricTelemetryInitializer()); + } + } } } diff --git a/src/Web/WebSPA/WebSPA.csproj b/src/Web/WebSPA/WebSPA.csproj index f3fa64cdc..308dc5324 100644 --- a/src/Web/WebSPA/WebSPA.csproj +++ b/src/Web/WebSPA/WebSPA.csproj @@ -30,6 +30,7 @@ + diff --git a/src/Web/WebStatus/Startup.cs b/src/Web/WebStatus/Startup.cs index f869fbb9b..443c660e7 100644 --- a/src/Web/WebStatus/Startup.cs +++ b/src/Web/WebStatus/Startup.cs @@ -8,6 +8,8 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using WebStatus.Extensions; +using Microsoft.ApplicationInsights.Extensibility; +using Microsoft.ApplicationInsights.ServiceFabric; namespace WebStatus { @@ -23,13 +25,7 @@ namespace WebStatus // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { - services.AddApplicationInsightsTelemetry(Configuration); - - if (Configuration.GetValue("OrchestratorType").Equals("K8S")) - { - // Enable K8s telemetry initializer - services.EnableKubernetes(); - } + RegisterAppInsights(services); services.AddOptions(); @@ -87,5 +83,22 @@ namespace WebStatus template: "{controller=Home}/{action=Index}/{id?}"); }); } + + private void RegisterAppInsights(IServiceCollection services) + { + services.AddApplicationInsightsTelemetry(Configuration); + + if (Configuration.GetValue("OrchestratorType").Equals("K8S")) + { + // Enable K8s telemetry initializer + services.EnableKubernetes(); + } + if (Configuration.GetValue("OrchestratorType").Equals("SF")) + { + // Enable SF telemetry initializer + services.AddSingleton((serviceProvider) => + new FabricTelemetryInitializer()); + } + } } } diff --git a/src/Web/WebStatus/WebStatus.csproj b/src/Web/WebStatus/WebStatus.csproj index 9a547e3fc..7a463fe66 100644 --- a/src/Web/WebStatus/WebStatus.csproj +++ b/src/Web/WebStatus/WebStatus.csproj @@ -8,6 +8,7 @@ + From abea3e4242817684b82be52a3ba49d2402bdcaf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C3=B3n=20Tom=C3=A1s?= Date: Fri, 13 Oct 2017 12:03:26 +0200 Subject: [PATCH 082/136] Added Appinsights Windows SF telemetry initializer --- .../eShopOnServiceFabricBus/Bus/Bus.sfproj | 8 ++++---- .../eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj | 8 ++++---- .../eShopOnServiceFabricRedis/Redis/Redis.sfproj | 8 ++++---- .../eShopOnServiceFabricSql/Sql/Sql.sfproj | 8 ++++---- .../ApplicationPackageRoot/ApplicationManifest.xml | 10 +++++++++- .../BasketApiPkg/ServiceManifest.xml | 2 ++ .../CatalogApiPkg/ServiceManifest.xml | 2 ++ .../LocationsApiPkg/ServiceManifest.xml | 2 ++ .../MarketingApiPkg/ServiceManifest.xml | 2 ++ .../OrderingApiPkg/ServiceManifest.xml | 2 ++ .../PaymentApiPkg/ServiceManifest.xml | 2 ++ .../ApplicationParameters/Cloud.xml | 1 + .../ApplicationPackageRoot/ApplicationManifest.xml | 2 ++ .../IdentityApiPkg/ServiceManifest.xml | 2 ++ .../ApplicationParameters/Cloud.xml | 1 + .../ApplicationPackageRoot/ApplicationManifest.xml | 4 +++- .../WebMVCPkg/ServiceManifest.xml | 2 ++ .../ApplicationParameters/Cloud.xml | 1 + .../ApplicationPackageRoot/ApplicationManifest.xml | 2 ++ .../WebSPAPkg/ServiceManifest.xml | 2 ++ .../ApplicationParameters/Cloud.xml | 1 + .../ApplicationPackageRoot/ApplicationManifest.xml | 5 ++++- .../WebStatusPkg/ServiceManifest.xml | 2 ++ .../ApplicationParameters/Cloud.xml | 1 + 24 files changed, 61 insertions(+), 19 deletions(-) diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/Bus.sfproj b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/Bus.sfproj index aa0cc517e..0a56c800e 100644 --- a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/Bus.sfproj +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricBus/Bus/Bus.sfproj @@ -1,6 +1,6 @@  - + f29e27c9-0d5e-4a57-adbf-dd651649d2a1 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj index 94da67b78..f07ff03a9 100644 --- a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricNoSql/NoSQL/NoSQL.sfproj @@ -1,6 +1,6 @@  - + eb070036-ec60-49a6-88e1-562a2043c3d7 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj index 2d8b7a2ab..5b28bfdba 100644 --- a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricRedis/Redis/Redis.sfproj @@ -1,6 +1,6 @@  - + 17acd9ea-8f16-4091-aa29-c67002971eee 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/Sql.sfproj b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/Sql.sfproj index c403b42ce..48447811e 100644 --- a/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/Sql.sfproj +++ b/ServiceFabric/Windows/Infrastructure/eShopOnServiceFabricSql/Sql/Sql.sfproj @@ -1,6 +1,6 @@  - + 65a83188-79c1-47ad-931d-8e8a87247408 1.7 @@ -38,9 +38,9 @@ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Service Fabric Tools\Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets - + - - + + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml index 4d5b1fd92..1f7e89dab 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/ApplicationManifest.xml @@ -13,6 +13,7 @@ + + @@ -34,6 +36,7 @@ + @@ -43,7 +46,9 @@ - + + + @@ -54,6 +59,7 @@ + @@ -65,6 +71,7 @@ + @@ -76,6 +83,7 @@ + diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml index 1eef781cb..4a5574fd6 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/BasketApiPkg/ServiceManifest.xml @@ -29,6 +29,8 @@ + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml index a0717fc23..0c3155363 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/CatalogApiPkg/ServiceManifest.xml @@ -32,6 +32,8 @@ + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml index 90fd0e918..47dbb5a12 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/LocationsApiPkg/ServiceManifest.xml @@ -30,6 +30,8 @@ + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml index c6a464914..33fd44d83 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/MarketingApiPkg/ServiceManifest.xml @@ -36,6 +36,8 @@ + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml index 9c3c1831f..d014b3ee8 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/OrderingApiPkg/ServiceManifest.xml @@ -32,6 +32,8 @@ + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml index f67eacff4..fe787521f 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationPackageRoot/PaymentApiPkg/ServiceManifest.xml @@ -26,6 +26,8 @@ + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml index eb4b31a63..68931e6f4 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabric/ApplicationParameters/Cloud.xml @@ -9,5 +9,6 @@ + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml index 21990aa56..b39aef66a 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricIdSrv/eShopOnServiceFabricIdSrv/ApplicationPackageRoot/ApplicationManifest.xml @@ -13,6 +13,7 @@ + - + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml index dbb6d3475..f054246d0 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationPackageRoot/WebMVCPkg/ServiceManifest.xml @@ -28,6 +28,8 @@ + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml index 6bdcbe2e1..01f86972a 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebMVC/eShopOnServiceFabricWebMVC/ApplicationParameters/Cloud.xml @@ -3,5 +3,6 @@ + \ No newline at end of file diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml index 1631563e9..e7479f239 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebSPA/eShopOnServiceFabricWebSPA/ApplicationPackageRoot/ApplicationManifest.xml @@ -11,6 +11,7 @@ + - + + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml index 64d2e335f..ee821045d 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationPackageRoot/WebStatusPkg/ServiceManifest.xml @@ -30,6 +30,8 @@ + + diff --git a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml index 25352d134..f77d4b08e 100644 --- a/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml +++ b/ServiceFabric/Windows/eShopOnServiceFabricWebStatus/eShopOnServiceFabricWebStatus/ApplicationParameters/Cloud.xml @@ -2,5 +2,6 @@ + \ No newline at end of file From 7dfb2db7c387c3755dd3fc127c77beb4f25ecd48 Mon Sep 17 00:00:00 2001 From: Igor Sychev Date: Sun, 8 Oct 2017 20:25:51 +0100 Subject: [PATCH 083/136] packages update and clean up *.csproj files from useless content --- .../DataProtection/DataProtection.csproj | 2 +- .../EventBus.Tests/EventBus.Tests.csproj | 4 ++-- .../EventBus/EventBus/EventBus.csproj | 4 ---- ...xtensions.HealthChecks.AzureStorage.csproj | 2 +- ...t.Extensions.HealthChecks.SqlServer.csproj | 2 +- .../Microsoft.Extensions.HealthChecks.csproj | 2 +- .../Basket/Basket.API/Basket.API.csproj | 2 +- .../Catalog/Catalog.API/Catalog.API.csproj | 2 +- .../Identity/Identity.API/Identity.API.csproj | 3 +-- .../Locations.API/Locations.API.csproj | 5 +--- .../Marketing.API/Marketing.API.csproj | 2 +- .../Ordering/Ordering.API/Ordering.API.csproj | 12 ++-------- .../Ordering.Domain/Ordering.Domain.csproj | 2 +- .../Payment/Payment.API/Payment.API.csproj | 2 +- src/Web/WebMVC/WebMVC.csproj | 23 +------------------ .../FunctionalTests/FunctionalTests.csproj | 4 ++-- .../IntegrationTests/IntegrationTests.csproj | 6 ++--- test/Services/UnitTest/UnitTest.csproj | 6 ++--- 18 files changed, 24 insertions(+), 61 deletions(-) diff --git a/src/BuildingBlocks/DataProtection/DataProtection/DataProtection.csproj b/src/BuildingBlocks/DataProtection/DataProtection/DataProtection.csproj index c5266d0a9..29e23b4d3 100644 --- a/src/BuildingBlocks/DataProtection/DataProtection/DataProtection.csproj +++ b/src/BuildingBlocks/DataProtection/DataProtection/DataProtection.csproj @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/src/BuildingBlocks/EventBus/EventBus.Tests/EventBus.Tests.csproj b/src/BuildingBlocks/EventBus/EventBus.Tests/EventBus.Tests.csproj index 48f96ab59..ce65f7da8 100644 --- a/src/BuildingBlocks/EventBus/EventBus.Tests/EventBus.Tests.csproj +++ b/src/BuildingBlocks/EventBus/EventBus.Tests/EventBus.Tests.csproj @@ -6,8 +6,8 @@ - - + + diff --git a/src/BuildingBlocks/EventBus/EventBus/EventBus.csproj b/src/BuildingBlocks/EventBus/EventBus/EventBus.csproj index 22a2d3091..ac2d3783e 100644 --- a/src/BuildingBlocks/EventBus/EventBus/EventBus.csproj +++ b/src/BuildingBlocks/EventBus/EventBus/EventBus.csproj @@ -5,10 +5,6 @@ Microsoft.eShopOnContainers.BuildingBlocks.EventBus - - - - diff --git a/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.AzureStorage/Microsoft.Extensions.HealthChecks.AzureStorage.csproj b/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.AzureStorage/Microsoft.Extensions.HealthChecks.AzureStorage.csproj index 0007d0be6..40db99802 100644 --- a/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.AzureStorage/Microsoft.Extensions.HealthChecks.AzureStorage.csproj +++ b/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.AzureStorage/Microsoft.Extensions.HealthChecks.AzureStorage.csproj @@ -20,7 +20,7 @@ - + diff --git a/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.SqlServer/Microsoft.Extensions.HealthChecks.SqlServer.csproj b/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.SqlServer/Microsoft.Extensions.HealthChecks.SqlServer.csproj index 35aacef13..a38fa2160 100644 --- a/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.SqlServer/Microsoft.Extensions.HealthChecks.SqlServer.csproj +++ b/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks.SqlServer/Microsoft.Extensions.HealthChecks.SqlServer.csproj @@ -9,7 +9,7 @@ - + diff --git a/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Microsoft.Extensions.HealthChecks.csproj b/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Microsoft.Extensions.HealthChecks.csproj index 8ef22e156..228c2d79d 100644 --- a/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Microsoft.Extensions.HealthChecks.csproj +++ b/src/BuildingBlocks/HealthChecks/src/Microsoft.Extensions.HealthChecks/Microsoft.Extensions.HealthChecks.csproj @@ -14,7 +14,7 @@ - + diff --git a/src/Services/Basket/Basket.API/Basket.API.csproj b/src/Services/Basket/Basket.API/Basket.API.csproj index abbbb83e8..48d32de2a 100644 --- a/src/Services/Basket/Basket.API/Basket.API.csproj +++ b/src/Services/Basket/Basket.API/Basket.API.csproj @@ -21,7 +21,7 @@ - + diff --git a/src/Services/Catalog/Catalog.API/Catalog.API.csproj b/src/Services/Catalog/Catalog.API/Catalog.API.csproj index 4c3640edc..f5aec67ad 100644 --- a/src/Services/Catalog/Catalog.API/Catalog.API.csproj +++ b/src/Services/Catalog/Catalog.API/Catalog.API.csproj @@ -34,7 +34,7 @@ - + diff --git a/src/Services/Identity/Identity.API/Identity.API.csproj b/src/Services/Identity/Identity.API/Identity.API.csproj index 3f0b4c307..8d761b9ed 100644 --- a/src/Services/Identity/Identity.API/Identity.API.csproj +++ b/src/Services/Identity/Identity.API/Identity.API.csproj @@ -15,7 +15,7 @@ - + @@ -61,7 +61,6 @@ - diff --git a/src/Services/Location/Locations.API/Locations.API.csproj b/src/Services/Location/Locations.API/Locations.API.csproj index 6be9083e3..9ccf4337c 100644 --- a/src/Services/Location/Locations.API/Locations.API.csproj +++ b/src/Services/Location/Locations.API/Locations.API.csproj @@ -7,10 +7,7 @@ aspnet-Locations.API-20161122013619 - - - - + diff --git a/src/Services/Marketing/Marketing.API/Marketing.API.csproj b/src/Services/Marketing/Marketing.API/Marketing.API.csproj index 2056a0b70..373bda483 100644 --- a/src/Services/Marketing/Marketing.API/Marketing.API.csproj +++ b/src/Services/Marketing/Marketing.API/Marketing.API.csproj @@ -20,7 +20,7 @@ - + diff --git a/src/Services/Ordering/Ordering.API/Ordering.API.csproj b/src/Services/Ordering/Ordering.API/Ordering.API.csproj index f5c1c5be8..fe03368af 100644 --- a/src/Services/Ordering/Ordering.API/Ordering.API.csproj +++ b/src/Services/Ordering/Ordering.API/Ordering.API.csproj @@ -33,10 +33,10 @@ - + - + @@ -54,10 +54,6 @@ - - - - Always @@ -67,8 +63,4 @@ - - - - diff --git a/src/Services/Ordering/Ordering.Domain/Ordering.Domain.csproj b/src/Services/Ordering/Ordering.Domain/Ordering.Domain.csproj index 2673abf84..c2b682f6c 100644 --- a/src/Services/Ordering/Ordering.Domain/Ordering.Domain.csproj +++ b/src/Services/Ordering/Ordering.Domain/Ordering.Domain.csproj @@ -14,7 +14,7 @@ - + diff --git a/src/Services/Payment/Payment.API/Payment.API.csproj b/src/Services/Payment/Payment.API/Payment.API.csproj index ba82c4215..1d5493776 100644 --- a/src/Services/Payment/Payment.API/Payment.API.csproj +++ b/src/Services/Payment/Payment.API/Payment.API.csproj @@ -7,7 +7,7 @@ - + diff --git a/src/Web/WebMVC/WebMVC.csproj b/src/Web/WebMVC/WebMVC.csproj index 7bf96b5db..47603f10f 100644 --- a/src/Web/WebMVC/WebMVC.csproj +++ b/src/Web/WebMVC/WebMVC.csproj @@ -7,16 +7,6 @@ ..\..\..\docker-compose.dcproj - - - - - - - - - - PreserveNewest @@ -28,20 +18,13 @@ - - - + @@ -68,10 +51,6 @@ - - - - diff --git a/test/Services/FunctionalTests/FunctionalTests.csproj b/test/Services/FunctionalTests/FunctionalTests.csproj index 99cf123a2..87014aa36 100644 --- a/test/Services/FunctionalTests/FunctionalTests.csproj +++ b/test/Services/FunctionalTests/FunctionalTests.csproj @@ -47,8 +47,8 @@ - - + + diff --git a/test/Services/IntegrationTests/IntegrationTests.csproj b/test/Services/IntegrationTests/IntegrationTests.csproj index d4de27425..04883732e 100644 --- a/test/Services/IntegrationTests/IntegrationTests.csproj +++ b/test/Services/IntegrationTests/IntegrationTests.csproj @@ -46,11 +46,11 @@ - - + + - + diff --git a/test/Services/UnitTest/UnitTest.csproj b/test/Services/UnitTest/UnitTest.csproj index 22a6fedcc..f7ead5a49 100644 --- a/test/Services/UnitTest/UnitTest.csproj +++ b/test/Services/UnitTest/UnitTest.csproj @@ -22,10 +22,10 @@ - + - - + + From e1c93bd05afbcb7f6a456ed65c2763a5dc736b63 Mon Sep 17 00:00:00 2001 From: Igor Sychev Date: Thu, 12 Oct 2017 21:09:18 +0100 Subject: [PATCH 084/136] update to latest packages --- .../Ordering/Ordering.API/Ordering.API.csproj | 1 - .../Ordering.Domain/Ordering.Domain.csproj | 15 ++++++--------- .../Properties/AssemblyInfo.cs | 19 ------------------- .../Ordering.Infrastructure.csproj | 10 ++++------ .../Properties/AssemblyInfo.cs | 19 ------------------- .../IntegrationTests/IntegrationTests.csproj | 2 +- test/Services/UnitTest/UnitTest.csproj | 2 +- 7 files changed, 12 insertions(+), 56 deletions(-) delete mode 100644 src/Services/Ordering/Ordering.Domain/Properties/AssemblyInfo.cs delete mode 100644 src/Services/Ordering/Ordering.Infrastructure/Properties/AssemblyInfo.cs diff --git a/src/Services/Ordering/Ordering.API/Ordering.API.csproj b/src/Services/Ordering/Ordering.API/Ordering.API.csproj index fe03368af..9dee34091 100644 --- a/src/Services/Ordering/Ordering.API/Ordering.API.csproj +++ b/src/Services/Ordering/Ordering.API/Ordering.API.csproj @@ -34,7 +34,6 @@ - diff --git a/src/Services/Ordering/Ordering.Domain/Ordering.Domain.csproj b/src/Services/Ordering/Ordering.Domain/Ordering.Domain.csproj index c2b682f6c..e8f232b76 100644 --- a/src/Services/Ordering/Ordering.Domain/Ordering.Domain.csproj +++ b/src/Services/Ordering/Ordering.Domain/Ordering.Domain.csproj @@ -1,20 +1,17 @@  - netstandard1.4 - Ordering.Domain - 2.0.0-preview1-25301-01 - Ordering.Domain - $(AssetTargetFallback);dnxcore50; - false - false - false + netstandard2.0 - + + + + + diff --git a/src/Services/Ordering/Ordering.Domain/Properties/AssemblyInfo.cs b/src/Services/Ordering/Ordering.Domain/Properties/AssemblyInfo.cs deleted file mode 100644 index a16c5b744..000000000 --- a/src/Services/Ordering/Ordering.Domain/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Microsoft.eShopOnContainers.Services.Ordering.Domain")] -[assembly: AssemblyTrademark("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("f5598dcb-6dde-4661-ad9d-a55612da7e76")] diff --git a/src/Services/Ordering/Ordering.Infrastructure/Ordering.Infrastructure.csproj b/src/Services/Ordering/Ordering.Infrastructure/Ordering.Infrastructure.csproj index fdd0bfa53..c13f431e0 100644 --- a/src/Services/Ordering/Ordering.Infrastructure/Ordering.Infrastructure.csproj +++ b/src/Services/Ordering/Ordering.Infrastructure/Ordering.Infrastructure.csproj @@ -2,12 +2,6 @@ netstandard2.0 - Ordering.Infrastructure - Ordering.Infrastructure - $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; - false - false - false @@ -20,4 +14,8 @@ + + + + diff --git a/src/Services/Ordering/Ordering.Infrastructure/Properties/AssemblyInfo.cs b/src/Services/Ordering/Ordering.Infrastructure/Properties/AssemblyInfo.cs deleted file mode 100644 index 00732b2ad..000000000 --- a/src/Services/Ordering/Ordering.Infrastructure/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Ordering.Infrastructure")] -[assembly: AssemblyTrademark("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("95f1f07c-4d92-4742-bd07-e5b805aab651")] diff --git a/test/Services/IntegrationTests/IntegrationTests.csproj b/test/Services/IntegrationTests/IntegrationTests.csproj index 04883732e..f9deab348 100644 --- a/test/Services/IntegrationTests/IntegrationTests.csproj +++ b/test/Services/IntegrationTests/IntegrationTests.csproj @@ -46,7 +46,7 @@ - + diff --git a/test/Services/UnitTest/UnitTest.csproj b/test/Services/UnitTest/UnitTest.csproj index f7ead5a49..0add4317a 100644 --- a/test/Services/UnitTest/UnitTest.csproj +++ b/test/Services/UnitTest/UnitTest.csproj @@ -24,7 +24,7 @@ - + From eb80502bcbf8ad8f5299a8f877c589137f438949 Mon Sep 17 00:00:00 2001 From: EthanR Date: Fri, 13 Oct 2017 15:15:50 -0400 Subject: [PATCH 085/136] Update README.md Fixed small typos. --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ebb9164b8..a0d988099 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ NOTE: During August/September 2017 we'll be moving the solution to .NET Core "wa >**PLEASE** Read our [branch guide](./branch-guide.md) to know about our branching policy > ### DISCLAIMER -> **IMPORTANT:** The current state of this sample application is **BETA**, consider it version a 0.1 foundational version, therefore, many areas could be improved and change significantly while refactoring current code and implementing new features. Feedback with improvements and pull requests from the community will be highly appreciated and accepted. +> **IMPORTANT:** The current state of this sample application is **BETA**, consider it version 0.1, a foundational version. Therefore, many areas could be improved and change significantly while refactoring current code and implementing new features. Feedback with improvements and pull requests from the community will be highly appreciated and accepted. > > This reference application proposes a simplified microservice oriented architecture implementation to introduce technologies like .NET Core with Docker containers through a comprehensive application. The chosen domain is an eShop/eCommerce but simply because it is a well-know domain by most people/developers. However, this sample application should not be considered as an "eCommerce reference model", at all. The implemented business domain might not be ideal from an eCommerce business point of view. It is neither trying to solve all the problems in a large, scalable and mission-critical distributed system. It is just a bootstrap for developers to easily get started in the world of Docker containers and microservices with .NET Core. @@ -23,7 +23,7 @@ However, this sample application should not be considered as an "eCommerce refer > > Read the planned Roadmap and Milestones for future releases of eShopOnContainers within the Wiki for further info about possible new implementations and provide feedback at the ISSUES section if you'd like to see any specific scenario implemented or improved. Also, feel free to discuss on any current issue. -**Architecture overview**: This reference application is cross-platform either at the server and client side, thanks to .NET Core services capable of running on Linux or Windows containers depending on your Docker host, and to Xamarin for mobile apps running on Android, iOS or Windows/UWP plus any browser for the client web apps. +**Architecture overview**: This reference application is cross-platform at the server and client side, thanks to .NET Core services capable of running on Linux or Windows containers depending on your Docker host, and to Xamarin for mobile apps running on Android, iOS or Windows/UWP plus any browser for the client web apps. The architecture proposes a simplified microservice oriented architecture implementation with multiple autonomous microservices (each one owning its own data/db) and implementing different approaches within each microservice (simple CRUD vs. DDD/CQRS patterns) using Http as the communication protocol between the client apps and the microservices and supports asynchronous communication for data updates propagation across multiple services based on Integration Events and an Event Bus (a light message broker, to choose between RabbitMQ or Azure Service Bus, underneath) plus other features defined at the roadmap.

    %{x+V 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åoKGcd6GvA1ueYGR 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%0A>iyn-41nYOxz#F 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