Skip to content

Commit 2b50322

Browse files
author
Hao Chen
committed
Merge branch 'dev' of github.com:Azure/azure-powershell into bugfix
2 parents 93c9156 + dfc4cf3 commit 2b50322

File tree

234 files changed

+3442
-924
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

234 files changed

+3442
-924
lines changed

setup/azurecmdfiles.wxi

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -799,6 +799,9 @@
799799
<Component Id="cmp5835D87A5A94F44EAAAE61BCA33C1D80" Guid="*">
800800
<File Id="filEC64A002E6CBA598F7148F816DB05F11" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.DataLakeAnalytics\Microsoft.Azure.Commands.DataLakeAnalytics.dll" />
801801
</Component>
802+
<Component Id="cmp96C621A371FF4A410548AAB167869D94" Guid="*">
803+
<File Id="filC7912B6B895CF7DF00A7C7F821AE40BF" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.DataLakeAnalytics\Microsoft.Azure.Commands.DataLakeAnalytics.dll-help.xml" />
804+
</Component>
802805
<Component Id="cmpBFBF6E4B62912618B79304EFC6838BAB" Guid="*">
803806
<File Id="fil1586EDDA4666EACB2EE64AE9033B0F99" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.DataLakeAnalytics\Microsoft.Azure.Commands.DataLakeAnalytics.format.ps1xml" />
804807
</Component>
@@ -879,6 +882,9 @@
879882
<Component Id="cmp5014A98086549EE22F2F2DF9C7C1B1F2" Guid="*">
880883
<File Id="filECB31473DDB8F3F534163169ABBEC69D" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.DataLakeStore\Microsoft.Azure.Commands.DataLakeStore.dll" />
881884
</Component>
885+
<Component Id="cmp23342B840C2625BED919B4FA66BA0BA6" Guid="*">
886+
<File Id="filB052F432D77A8BCDFF1ADC6CF9AEFFD1" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.DataLakeStore\Microsoft.Azure.Commands.DataLakeStore.dll-help.xml" />
887+
</Component>
882888
<Component Id="cmp001FEDC74DD7D918EFE88F2EB8E4285C" Guid="*">
883889
<File Id="filD526EC15D32C92FEC01E82BA47DA5848" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.DataLakeStore\Microsoft.Azure.Commands.DataLakeStoreFileSystem.format.ps1xml" />
884890
</Component>
@@ -983,6 +989,9 @@
983989
<Component Id="cmpA0007735AC9E1F08D542DFB279E586D8" Guid="*">
984990
<File Id="fil01D736AF28D556A08BEC46052977A312" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.Dns\Microsoft.Azure.Common.dll" />
985991
</Component>
992+
<Component Id="cmpA57D9B2B1FA9DFC84A81E3854A2CB87C" Guid="*">
993+
<File Id="fil032AAADDE56C235AAB8CBEC6D7A16884" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.Dns\Microsoft.Azure.Common.NetFramework.dll" />
994+
</Component>
986995
<Component Id="cmpB3134BB8ADC109CD66C73AB4AC43FF8A" Guid="*">
987996
<File Id="filA97E787A98E4BD2B9966B260AEA3DB26" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.Dns\Microsoft.Azure.Management.Authorization.dll" />
988997
</Component>
@@ -992,12 +1001,6 @@
9921001
<Component Id="cmp2F8A21B67A574848E46161AF4DBAEAB7" Guid="*">
9931002
<File Id="filF14443EF28F6FBDB30559A1428F6CE5A" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.Dns\Microsoft.Azure.ResourceManager.dll" />
9941003
</Component>
995-
<Component Id="cmp44B0766E3627CFEBD6119DBD995E3945" Guid="*">
996-
<File Id="fil38A0F441D7A5352F776C3E75794E10A9" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.Dns\Microsoft.Data.Edm.dll" />
997-
</Component>
998-
<Component Id="cmpC6787B66E3657598F34EB40B7D4A39D9" Guid="*">
999-
<File Id="fil3BF2E8D1B0E9325D347210C1E69DBA32" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.Dns\Microsoft.Data.OData.dll" />
1000-
</Component>
10011004
<Component Id="cmpFD0DE325B243453297C251C92C98245D" Guid="*">
10021005
<File Id="fil4FFFA196C05E15050769FA034FB3EE9E" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.Dns\Microsoft.Data.Services.Client.dll" />
10031006
</Component>
@@ -1841,12 +1844,6 @@
18411844
<Component Id="cmpB77BD825E0EE360848A0E312174B8E79" Guid="*">
18421845
<File Id="filC946540561EFB51E32A9A78C9A4C4E4E" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.RedisCache\Microsoft.Azure.ResourceManager.dll" />
18431846
</Component>
1844-
<Component Id="cmpB1AB5620182396F5055594CB5B71DFF5" Guid="*">
1845-
<File Id="fil927418DCA437A44F331156F1B181B0CB" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.RedisCache\Microsoft.Data.Edm.dll" />
1846-
</Component>
1847-
<Component Id="cmpF3A6E2A588E2828B1141B2B4F2DEE2CA" Guid="*">
1848-
<File Id="fil6885A1C5198BBE4BE218B29F4AF8CD4F" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.RedisCache\Microsoft.Data.OData.dll" />
1849-
</Component>
18501847
<Component Id="cmpDFF1A711321C50653141E2AE4BB76806" Guid="*">
18511848
<File Id="filF25C5E7B600CD1857B7B71EF4B86B617" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.RedisCache\Microsoft.Data.Services.Client.dll" />
18521849
</Component>
@@ -2560,6 +2557,9 @@
25602557
<Component Id="cmp12BBC947AD240DEE262EA093791B4CFD" Guid="*">
25612558
<File Id="fil278854BEDEA8FF5856C0538AEF2C651A" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.TrafficManager\Microsoft.Azure.Common.dll" />
25622559
</Component>
2560+
<Component Id="cmp4082D5B2D1FF8772A47657154A994C1B" Guid="*">
2561+
<File Id="fil3A8FA25253954FC962A3D35C634BC4A1" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.TrafficManager\Microsoft.Azure.Common.NetFramework.dll" />
2562+
</Component>
25632563
<Component Id="cmp754B6BD77C6EC782EB88981DAFD35510" Guid="*">
25642564
<File Id="fil9C8B0B0929FDD1386F40C7E26D5A8620" KeyPath="yes" Source="$(var.sourceDir)\ResourceManager\AzureResourceManager\AzureRM.TrafficManager\Microsoft.Azure.Management.TrafficManager.dll" />
25652565
</Component>
@@ -5080,6 +5080,7 @@
50805080
<ComponentRef Id="cmp70A49156E2EDA72CDD86623D5D7012CA" />
50815081
<ComponentRef Id="cmp2FEEAA23FF0F261C6E47AB598DBBF8A6" />
50825082
<ComponentRef Id="cmp5835D87A5A94F44EAAAE61BCA33C1D80" />
5083+
<ComponentRef Id="cmp96C621A371FF4A410548AAB167869D94" />
50835084
<ComponentRef Id="cmpBFBF6E4B62912618B79304EFC6838BAB" />
50845085
<ComponentRef Id="cmpF9A737C5D10D7520DABFD5A7B1CA19AF" />
50855086
<ComponentRef Id="cmpCD37CD8F92CDF2D1325CCF4EDCB62243" />
@@ -5106,6 +5107,7 @@
51065107
<ComponentRef Id="cmpDB37FD2F23B17651F12F7CBA5E841363" />
51075108
<ComponentRef Id="cmpFA06C9BD3FF76E0DAA7ACE5C9435F394" />
51085109
<ComponentRef Id="cmp5014A98086549EE22F2F2DF9C7C1B1F2" />
5110+
<ComponentRef Id="cmp23342B840C2625BED919B4FA66BA0BA6" />
51095111
<ComponentRef Id="cmp001FEDC74DD7D918EFE88F2EB8E4285C" />
51105112
<ComponentRef Id="cmpBE1007C3B5920359FED93D232612FA3D" />
51115113
<ComponentRef Id="cmpA9CADA5F5DC40E8AD15DF60107CC92D1" />
@@ -5140,11 +5142,10 @@
51405142
<ComponentRef Id="cmpC239A907B911A2FE5AC4C3DFF236F154" />
51415143
<ComponentRef Id="cmp4B300B78CE6E09D004B7EF084792169B" />
51425144
<ComponentRef Id="cmpA0007735AC9E1F08D542DFB279E586D8" />
5145+
<ComponentRef Id="cmpA57D9B2B1FA9DFC84A81E3854A2CB87C" />
51435146
<ComponentRef Id="cmpB3134BB8ADC109CD66C73AB4AC43FF8A" />
51445147
<ComponentRef Id="cmp23A4C42E03D6ADC61C13AED7A3C5C43D" />
51455148
<ComponentRef Id="cmp2F8A21B67A574848E46161AF4DBAEAB7" />
5146-
<ComponentRef Id="cmp44B0766E3627CFEBD6119DBD995E3945" />
5147-
<ComponentRef Id="cmpC6787B66E3657598F34EB40B7D4A39D9" />
51485149
<ComponentRef Id="cmpFD0DE325B243453297C251C92C98245D" />
51495150
<ComponentRef Id="cmp5B16E8141BC633DB9DEB2A9361AF4C71" />
51505151
<ComponentRef Id="cmp24741C738CAC6E0595C4035CF8FE190A" />
@@ -5420,8 +5421,6 @@
54205421
<ComponentRef Id="cmpE542A66FF253AB7ECF153BC7F8617497" />
54215422
<ComponentRef Id="cmp3A5E7F3EA44ACFDD84B8CE1D36DA80C7" />
54225423
<ComponentRef Id="cmpB77BD825E0EE360848A0E312174B8E79" />
5423-
<ComponentRef Id="cmpB1AB5620182396F5055594CB5B71DFF5" />
5424-
<ComponentRef Id="cmpF3A6E2A588E2828B1141B2B4F2DEE2CA" />
54255424
<ComponentRef Id="cmpDFF1A711321C50653141E2AE4BB76806" />
54265425
<ComponentRef Id="cmpD5D6E28B9232D19A4D3FC543B56214DB" />
54275426
<ComponentRef Id="cmp6DCD11F46E1DCE998C423CD0BC09CD15" />
@@ -5655,6 +5654,7 @@
56555654
<ComponentRef Id="cmp0B156F82D73453E7932C459CED906BC3" />
56565655
<ComponentRef Id="cmp79A47006BA0B7E3D64E4815604275F77" />
56575656
<ComponentRef Id="cmp12BBC947AD240DEE262EA093791B4CFD" />
5657+
<ComponentRef Id="cmp4082D5B2D1FF8772A47657154A994C1B" />
56585658
<ComponentRef Id="cmp754B6BD77C6EC782EB88981DAFD35510" />
56595659
<ComponentRef Id="cmp32DFA22F02C3F2327513E517FC7A3BC9" />
56605660
<ComponentRef Id="cmpB86658F355E269A5F3E9B9220D5CAC57" />

src/Common/Commands.Common.Storage/Commands.Common.Storage.csproj

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<ItemGroup>
5050
<Reference Include="Hyak.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
5151
<SpecificVersion>False</SpecificVersion>
52-
<HintPath>..\..\packages\Hyak.Common.1.0.2\lib\portable-net403+win+wpa81\Hyak.Common.dll</HintPath>
52+
<HintPath>..\..\packages\Hyak.Common.1.0.3\lib\portable-net403+win+wpa81\Hyak.Common.dll</HintPath>
5353
</Reference>
5454
<Reference Include="Microsoft.Azure.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
5555
<SpecificVersion>False</SpecificVersion>
@@ -73,17 +73,17 @@
7373
</Reference>
7474
<Reference Include="Microsoft.Azure.ResourceManager, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
7575
<SpecificVersion>False</SpecificVersion>
76-
<HintPath>..\..\packages\Microsoft.Azure.Management.Resources.2.18.7-preview\lib\net40\Microsoft.Azure.ResourceManager.dll</HintPath>
76+
<HintPath>..\..\packages\Microsoft.Azure.Management.Resources.2.18.11-preview\lib\net40\Microsoft.Azure.ResourceManager.dll</HintPath>
7777
</Reference>
78-
<Reference Include="Microsoft.Data.Edm, Version=5.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
78+
<Reference Include="Microsoft.Data.Edm">
7979
<SpecificVersion>False</SpecificVersion>
8080
<HintPath>..\..\packages\Microsoft.Data.Edm.5.6.4\lib\net40\Microsoft.Data.Edm.dll</HintPath>
8181
</Reference>
82-
<Reference Include="Microsoft.Data.OData, Version=5.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
82+
<Reference Include="Microsoft.Data.OData">
8383
<SpecificVersion>False</SpecificVersion>
8484
<HintPath>..\..\packages\Microsoft.Data.OData.5.6.4\lib\net40\Microsoft.Data.OData.dll</HintPath>
8585
</Reference>
86-
<Reference Include="Microsoft.Data.Services.Client, Version=5.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
86+
<Reference Include="Microsoft.Data.Services.Client">
8787
<SpecificVersion>False</SpecificVersion>
8888
<HintPath>..\..\packages\Microsoft.Data.Services.Client.5.6.4\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
8989
</Reference>
@@ -111,9 +111,9 @@
111111
<SpecificVersion>False</SpecificVersion>
112112
<HintPath>..\..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>
113113
</Reference>
114-
<Reference Include="Microsoft.WindowsAzure.Configuration, Version=2.0.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
114+
<Reference Include="Microsoft.WindowsAzure.Configuration">
115115
<SpecificVersion>False</SpecificVersion>
116-
<HintPath>..\..\..\packages\Microsoft.WindowsAzure.ConfigurationManager.2.0.3\lib\net40\Microsoft.WindowsAzure.Configuration.dll</HintPath>
116+
<HintPath>..\..\..\packages\Microsoft.WindowsAzure.ConfigurationManager.3.2.0\lib\net40\Microsoft.WindowsAzure.Configuration.dll</HintPath>
117117
</Reference>
118118
<Reference Include="Microsoft.WindowsAzure.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
119119
<SpecificVersion>False</SpecificVersion>
@@ -151,7 +151,7 @@
151151
<Reference Include="System.Runtime.Serialization" />
152152
<Reference Include="System.ServiceModel" />
153153
<Reference Include="System.ServiceModel.Channels" />
154-
<Reference Include="System.Spatial, Version=5.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
154+
<Reference Include="System.Spatial">
155155
<SpecificVersion>False</SpecificVersion>
156156
<HintPath>..\..\packages\System.Spatial.5.6.4\lib\net40\System.Spatial.dll</HintPath>
157157
</Reference>

src/Common/Commands.Common.Storage/packages.config

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="Hyak.Common" version="1.0.2" targetFramework="net45" />
3+
<package id="Hyak.Common" version="1.0.3" targetFramework="net45" />
44
<package id="Microsoft.Azure.Common" version="2.1.0" targetFramework="net45" />
55
<package id="Microsoft.Azure.Common.Authentication" version="1.5.2-preview" targetFramework="net45" />
66
<package id="Microsoft.Azure.Common.Dependencies" version="1.0.0" targetFramework="net45" />
77
<package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net45" />
8-
<package id="Microsoft.Azure.Management.Resources" version="2.18.7-preview" targetFramework="net45" />
8+
<package id="Microsoft.Azure.Management.Resources" version="2.18.11-preview" targetFramework="net45" />
99
<package id="Microsoft.Azure.Management.Storage" version="3.0.0" targetFramework="net45" />
1010
<package id="Microsoft.Bcl" version="1.1.9" targetFramework="net45" />
1111
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net45" />
@@ -17,7 +17,7 @@
1717
<package id="Microsoft.Net.Http" version="2.2.28" targetFramework="net45" />
1818
<package id="Microsoft.Rest.ClientRuntime" version="1.8.2" targetFramework="net45" />
1919
<package id="Microsoft.Rest.ClientRuntime.Azure.Authentication" version="0.11.0" targetFramework="net45" />
20-
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="2.0.3" targetFramework="net45" />
20+
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="3.2.0" targetFramework="net45" />
2121
<package id="Microsoft.WindowsAzure.Management" version="4.1.1" targetFramework="net45" />
2222
<package id="Microsoft.WindowsAzure.Management.Storage" version="5.1.1" targetFramework="net45" />
2323
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" />

src/Common/Commands.Common/AzurePSCmdlet.cs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
using System.Linq;
2929
using System.Threading;
3030
using Microsoft.Rest;
31+
using Microsoft.ApplicationInsights;
3132

3233
namespace Microsoft.WindowsAzure.Commands.Utilities.Common
3334
{
@@ -46,12 +47,15 @@ public abstract class AzurePSCmdlet : PSCmdlet, IDisposable
4647

4748
protected static AzurePSDataCollectionProfile _dataCollectionProfile = null;
4849
protected static string _errorRecordFolderPath = null;
49-
protected const string _fileTimeStampSuffixFormat = "yyyy-MM-dd-THH-mm-ss-fff";
50+
protected static string _sessionId = Guid.NewGuid().ToString();
51+
protected const string _fileTimeStampSuffixFormat = "yyyy-MM-dd-THH-mm-ss-fff";
52+
protected string _clientRequestId = Guid.NewGuid().ToString();
53+
protected MetricHelper _metricHelper;
5054

5155
protected AzurePSQoSEvent QosEvent;
5256

5357
protected virtual bool IsUsageMetricEnabled {
54-
get { return false; }
58+
get { return true; }
5559
}
5660

5761
protected virtual bool IsErrorMetricEnabled
@@ -61,7 +65,7 @@ protected virtual bool IsErrorMetricEnabled
6165

6266
/// <summary>
6367
/// Gets the PowerShell module name used for user agent header.
64-
/// By default uses "Azurepowershell"
68+
/// By default uses "Azure PowerShell"
6569
/// </summary>
6670
protected virtual string ModuleName { get { return "AzurePowershell"; } }
6771

@@ -81,6 +85,13 @@ protected virtual bool IsErrorMetricEnabled
8185
public AzurePSCmdlet()
8286
{
8387
_debugMessages = new ConcurrentQueue<string>();
88+
89+
//TODO: Inject from CI server
90+
_metricHelper = new MetricHelper();
91+
_metricHelper.AddTelemetryClient(new TelemetryClient
92+
{
93+
InstrumentationKey = "7df6ff70-8353-4672-80d6-568517fed090"
94+
});
8495
}
8596

8697
/// <summary>
@@ -228,7 +239,7 @@ protected override void BeginProcessing()
228239
ProductInfoHeaderValue userAgentValue = new ProductInfoHeaderValue(
229240
ModuleName, string.Format("v{0}", ModuleVersion));
230241
AzureSession.ClientFactory.UserAgents.Add(userAgentValue);
231-
AzureSession.ClientFactory.AddHandler(new CmdletInfoHandler(this.CommandRuntime.ToString(), this.ParameterSetName));
242+
AzureSession.ClientFactory.AddHandler(new CmdletInfoHandler(this.CommandRuntime.ToString(), this.ParameterSetName, this._clientRequestId));
232243
base.BeginProcessing();
233244
}
234245

@@ -253,7 +264,7 @@ protected override void EndProcessing()
253264

254265
protected string CurrentPath()
255266
{
256-
// SessionState is only available within Powershell so default to
267+
// SessionState is only available within PowerShell so default to
257268
// the CurrentDirectory when being run from tests.
258269
return (SessionState != null) ?
259270
SessionState.Path.CurrentLocation.Path :
@@ -273,7 +284,6 @@ protected bool IsVerbose()
273284
{
274285
QosEvent.Exception = errorRecord.Exception;
275286
QosEvent.IsSuccess = false;
276-
LogQosEvent(true);
277287
}
278288

279289
base.WriteError(errorRecord);
@@ -438,7 +448,7 @@ private void RecordDebugMessages()
438448
/// <summary>
439449
/// Invoke this method when the cmdlet is completed or terminated.
440450
/// </summary>
441-
protected void LogQosEvent(bool waitForMetricSending = false)
451+
protected void LogQosEvent()
442452
{
443453
if (QosEvent == null)
444454
{
@@ -461,8 +471,8 @@ protected void LogQosEvent(bool waitForMetricSending = false)
461471

462472
try
463473
{
464-
MetricHelper.LogQoSEvent(QosEvent, IsUsageMetricEnabled, IsErrorMetricEnabled);
465-
MetricHelper.FlushMetric(waitForMetricSending);
474+
_metricHelper.LogQoSEvent(QosEvent, IsUsageMetricEnabled, IsErrorMetricEnabled);
475+
_metricHelper.FlushMetric();
466476
WriteDebug("Finish sending metric.");
467477
}
468478
catch (Exception e)

0 commit comments

Comments
 (0)