Skip to content

Commit 80fac39

Browse files
committed
Moving to prerelease SDK version with function status logging support
1 parent 45a4a3e commit 80fac39

12 files changed

+95
-37
lines changed

src/WebJobs.Script.Host/WebJobs.Script.Host.csproj

+6-6
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@
6666
<HintPath>..\..\packages\Microsoft.AspNet.WebHooks.Receivers.1.2.0-beta4\lib\net45\Microsoft.AspNet.WebHooks.Receivers.dll</HintPath>
6767
<Private>True</Private>
6868
</Reference>
69-
<Reference Include="Microsoft.Azure.WebJobs, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
70-
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.Core.1.1.0\lib\net45\Microsoft.Azure.WebJobs.dll</HintPath>
69+
<Reference Include="Microsoft.Azure.WebJobs, Version=1.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
70+
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.Core.1.1.1-alpha-10193\lib\net45\Microsoft.Azure.WebJobs.dll</HintPath>
7171
<Private>True</Private>
7272
</Reference>
7373
<Reference Include="Microsoft.Azure.WebJobs.Extensions, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
@@ -82,12 +82,12 @@
8282
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.Extensions.WebHooks.1.0.0-beta3\lib\net45\Microsoft.Azure.WebJobs.Extensions.WebHooks.dll</HintPath>
8383
<Private>True</Private>
8484
</Reference>
85-
<Reference Include="Microsoft.Azure.WebJobs.Host, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
86-
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.1.1.0\lib\net45\Microsoft.Azure.WebJobs.Host.dll</HintPath>
85+
<Reference Include="Microsoft.Azure.WebJobs.Host, Version=1.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
86+
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.1.1.1-alpha-10193\lib\net45\Microsoft.Azure.WebJobs.Host.dll</HintPath>
8787
<Private>True</Private>
8888
</Reference>
89-
<Reference Include="Microsoft.Azure.WebJobs.ServiceBus, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
90-
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.ServiceBus.1.1.0\lib\net45\Microsoft.Azure.WebJobs.ServiceBus.dll</HintPath>
89+
<Reference Include="Microsoft.Azure.WebJobs.ServiceBus, Version=1.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
90+
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.ServiceBus.1.1.1-alpha-10193\lib\net45\Microsoft.Azure.WebJobs.ServiceBus.dll</HintPath>
9191
<Private>True</Private>
9292
</Reference>
9393
<Reference Include="Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

src/WebJobs.Script.Host/packages.config

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
99
<package id="Microsoft.AspNet.WebHooks.Common" version="1.2.0-beta4" targetFramework="net45" />
1010
<package id="Microsoft.AspNet.WebHooks.Receivers" version="1.2.0-beta4" targetFramework="net45" />
11-
<package id="Microsoft.Azure.WebJobs" version="1.1.0" targetFramework="net45" />
12-
<package id="Microsoft.Azure.WebJobs.Core" version="1.1.0" targetFramework="net45" />
11+
<package id="Microsoft.Azure.WebJobs" version="1.1.1-alpha-10193" targetFramework="net45" />
12+
<package id="Microsoft.Azure.WebJobs.Core" version="1.1.1-alpha-10193" targetFramework="net45" />
1313
<package id="Microsoft.Azure.WebJobs.Extensions" version="1.0.0" targetFramework="net45" />
1414
<package id="Microsoft.Azure.WebJobs.Extensions.SendGrid" version="1.0.0" targetFramework="net45" />
1515
<package id="Microsoft.Azure.WebJobs.Extensions.WebHooks" version="1.0.0-beta3" targetFramework="net45" />
16-
<package id="Microsoft.Azure.WebJobs.ServiceBus" version="1.1.0" targetFramework="net45" />
16+
<package id="Microsoft.Azure.WebJobs.ServiceBus" version="1.1.1-alpha-10193" targetFramework="net45" />
1717
<package id="Microsoft.Data.Edm" version="5.6.2" targetFramework="net45" />
1818
<package id="Microsoft.Data.OData" version="5.6.2" targetFramework="net45" />
1919
<package id="Microsoft.Data.Services.Client" version="5.6.2" targetFramework="net45" />

src/WebJobs.Script.NuGet/WebJobs.Script.nuspec

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
<requireLicenseAcceptance>true</requireLicenseAcceptance>
1515
<tags>Microsoft Azure WebJobs Jobs Script Node.js</tags>
1616
<dependencies>
17-
<dependency id="Microsoft.Azure.WebJobs" version="1.1.0" />
18-
<dependency id="Microsoft.Azure.WebJobs.ServiceBus" version="1.1.0" />
17+
<dependency id="Microsoft.Azure.WebJobs" version="1.1.0-alpha" />
18+
<dependency id="Microsoft.Azure.WebJobs.ServiceBus" version="1.1.0-alpha" />
1919
<dependency id="Microsoft.Azure.WebJobs.Extensions" version="1.0.0" />
2020
<dependency id="Microsoft.Azure.WebJobs.Extensions.SendGrid" version="1.0.0" />
2121
<dependency id="Microsoft.Azure.WebJobs.Extensions.WebHooks" version="1.0.0-beta3" />

src/WebJobs.Script/Description/FunctionDescriptorProvider.cs

+31
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,37 @@ public abstract class FunctionDescriptorProvider
1414
{
1515
public abstract bool TryCreate(FunctionFolderInfo functionFolderInfo, out FunctionDescriptor functionDescriptor);
1616

17+
protected bool IsDisabled(string functionName, JObject trigger)
18+
{
19+
bool isDisabled = false;
20+
JToken isDisabledValue = trigger["disabled"];
21+
if (isDisabledValue != null)
22+
{
23+
if (isDisabledValue.Type == JTokenType.Boolean && (bool)isDisabledValue)
24+
{
25+
isDisabled = true;
26+
}
27+
else
28+
{
29+
string settingName = (string)isDisabledValue;
30+
string value = Environment.GetEnvironmentVariable(settingName);
31+
if (!string.IsNullOrEmpty(value) &&
32+
(string.Compare(value, "1", StringComparison.OrdinalIgnoreCase) == 0 ||
33+
string.Compare(value, "true", StringComparison.OrdinalIgnoreCase) == 0))
34+
{
35+
isDisabled = true;
36+
}
37+
}
38+
}
39+
40+
if (isDisabled)
41+
{
42+
Console.WriteLine(string.Format("Function '{0}' is disabled", functionName));
43+
}
44+
45+
return isDisabled;
46+
}
47+
1748
protected ParameterDescriptor ParseQueueTrigger(JObject trigger, Type triggerParameterType = null)
1849
{
1950
if (triggerParameterType == null)

src/WebJobs.Script/Description/NodeFunctionDescriptorProvider.cs

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright (c) .NET Foundation. All rights reserved.
22
// Licensed under the MIT License. See License.txt in the project root for license information.
33

4+
using System;
45
using System.Collections.ObjectModel;
56
using System.IO;
67
using System.Linq;
@@ -40,8 +41,13 @@ public override bool TryCreate(FunctionFolderInfo functionFolderInfo, out Functi
4041
Collection<Binding> outputBindings = Binding.GetBindings(_config, outputs, FileAccess.Write);
4142

4243
JObject trigger = (JObject)inputs.FirstOrDefault(p => ((string)p["type"]).ToLowerInvariant().EndsWith("trigger"));
43-
string triggerType = (string)trigger["type"];
4444

45+
if (IsDisabled(functionFolderInfo.Name, trigger))
46+
{
47+
return false;
48+
}
49+
50+
string triggerType = (string)trigger["type"];
4551
string triggerParameterName = (string)trigger["name"];
4652
if (string.IsNullOrEmpty(triggerParameterName))
4753
{

src/WebJobs.Script/Description/ScriptFunctionDescriptionProvider.cs

+6-1
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,13 @@ public override bool TryCreate(FunctionFolderInfo functionFolderInfo, out Functi
4242
ScriptFunctionInvoker invoker = new ScriptFunctionInvoker(scriptFilePath, inputBindings, outputBindings);
4343

4444
JObject trigger = (JObject)inputs.FirstOrDefault(p => ((string)p["type"]).ToLowerInvariant().EndsWith("trigger"));
45-
string triggerType = (string)trigger["type"];
4645

46+
if (IsDisabled(functionFolderInfo.Name, trigger))
47+
{
48+
return false;
49+
}
50+
51+
string triggerType = (string)trigger["type"];
4752
string parameterName = (string)trigger["name"];
4853
if (string.IsNullOrEmpty(parameterName))
4954
{

src/WebJobs.Script/WebJobs.Script.csproj

+12-12
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,18 @@
5555
<HintPath>..\..\packages\FsPickler.1.2.5\lib\net45\FsPickler.dll</HintPath>
5656
<Private>True</Private>
5757
</Reference>
58+
<Reference Include="Microsoft.Azure.WebJobs, Version=1.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
59+
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.Core.1.1.1-alpha-10193\lib\net45\Microsoft.Azure.WebJobs.dll</HintPath>
60+
<Private>True</Private>
61+
</Reference>
62+
<Reference Include="Microsoft.Azure.WebJobs.Host, Version=1.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
63+
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.1.1.1-alpha-10193\lib\net45\Microsoft.Azure.WebJobs.Host.dll</HintPath>
64+
<Private>True</Private>
65+
</Reference>
66+
<Reference Include="Microsoft.Azure.WebJobs.ServiceBus, Version=1.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
67+
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.ServiceBus.1.1.1-alpha-10193\lib\net45\Microsoft.Azure.WebJobs.ServiceBus.dll</HintPath>
68+
<Private>True</Private>
69+
</Reference>
5870
<Reference Include="Microsoft.WindowsAzure.Storage, Version=4.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
5971
<HintPath>..\..\packages\WindowsAzure.Storage.4.3.0\lib\net40\Microsoft.WindowsAzure.Storage.dll</HintPath>
6072
<Private>True</Private>
@@ -67,10 +79,6 @@
6779
<HintPath>..\..\packages\Microsoft.AspNet.WebHooks.Receivers.1.2.0-beta3a\lib\net45\Microsoft.AspNet.WebHooks.Receivers.dll</HintPath>
6880
<Private>True</Private>
6981
</Reference>
70-
<Reference Include="Microsoft.Azure.WebJobs, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
71-
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.Core.1.1.0\lib\net45\Microsoft.Azure.WebJobs.dll</HintPath>
72-
<Private>True</Private>
73-
</Reference>
7482
<Reference Include="Microsoft.Azure.WebJobs.Extensions, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
7583
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.Extensions.1.0.0-rc1\lib\net45\Microsoft.Azure.WebJobs.Extensions.dll</HintPath>
7684
<Private>True</Private>
@@ -83,14 +91,6 @@
8391
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.Extensions.WebHooks.1.0.0-beta2\lib\net45\Microsoft.Azure.WebJobs.Extensions.WebHooks.dll</HintPath>
8492
<Private>True</Private>
8593
</Reference>
86-
<Reference Include="Microsoft.Azure.WebJobs.Host, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
87-
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.1.1.0\lib\net45\Microsoft.Azure.WebJobs.Host.dll</HintPath>
88-
<Private>True</Private>
89-
</Reference>
90-
<Reference Include="Microsoft.Azure.WebJobs.ServiceBus, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
91-
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.ServiceBus.1.1.0\lib\net45\Microsoft.Azure.WebJobs.ServiceBus.dll</HintPath>
92-
<Private>True</Private>
93-
</Reference>
9494
<Reference Include="Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
9595
<HintPath>..\..\packages\Microsoft.Data.Edm.5.6.2\lib\net40\Microsoft.Data.Edm.dll</HintPath>
9696
<Private>True</Private>

src/WebJobs.Script/app.config

+8
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@
2222
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
2323
<bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
2424
</dependentAssembly>
25+
<dependentAssembly>
26+
<assemblyIdentity name="Microsoft.Azure.WebJobs.Host" publicKeyToken="31bf3856ad364e35" culture="neutral" />
27+
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
28+
</dependentAssembly>
29+
<dependentAssembly>
30+
<assemblyIdentity name="Microsoft.Azure.WebJobs" publicKeyToken="31bf3856ad364e35" culture="neutral" />
31+
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
32+
</dependentAssembly>
2533
</assemblyBinding>
2634
</runtime>
2735
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup>

src/WebJobs.Script/packages.config

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
1010
<package id="Microsoft.AspNet.WebHooks.Common" version="1.2.0-beta3a" targetFramework="net45" />
1111
<package id="Microsoft.AspNet.WebHooks.Receivers" version="1.2.0-beta3a" targetFramework="net45" />
12-
<package id="Microsoft.Azure.WebJobs" version="1.1.0" targetFramework="net45" />
13-
<package id="Microsoft.Azure.WebJobs.Core" version="1.1.0" targetFramework="net45" />
12+
<package id="Microsoft.Azure.WebJobs" version="1.1.1-alpha-10193" targetFramework="net45" />
13+
<package id="Microsoft.Azure.WebJobs.Core" version="1.1.1-alpha-10193" targetFramework="net45" />
1414
<package id="Microsoft.Azure.WebJobs.Extensions" version="1.0.0-rc1" targetFramework="net45" />
1515
<package id="Microsoft.Azure.WebJobs.Extensions.SendGrid" version="1.0.0-rc1" targetFramework="net45" />
1616
<package id="Microsoft.Azure.WebJobs.Extensions.WebHooks" version="1.0.0-beta2" targetFramework="net45" />
17-
<package id="Microsoft.Azure.WebJobs.ServiceBus" version="1.1.0" targetFramework="net45" />
17+
<package id="Microsoft.Azure.WebJobs.ServiceBus" version="1.1.1-alpha-10193" targetFramework="net45" />
1818
<package id="Microsoft.Data.Edm" version="5.6.2" targetFramework="net45" />
1919
<package id="Microsoft.Data.OData" version="5.6.2" targetFramework="net45" />
2020
<package id="Microsoft.Data.Services.Client" version="5.6.2" targetFramework="net45" />

test/WebJobs.Script.Tests/WebJobs.Script.Tests.csproj

+6-6
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@
5959
<HintPath>..\..\packages\Microsoft.AspNet.WebHooks.Receivers.1.2.0-beta4\lib\net45\Microsoft.AspNet.WebHooks.Receivers.dll</HintPath>
6060
<Private>True</Private>
6161
</Reference>
62-
<Reference Include="Microsoft.Azure.WebJobs, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
63-
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.Core.1.1.0\lib\net45\Microsoft.Azure.WebJobs.dll</HintPath>
62+
<Reference Include="Microsoft.Azure.WebJobs, Version=1.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
63+
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.Core.1.1.1-alpha-10193\lib\net45\Microsoft.Azure.WebJobs.dll</HintPath>
6464
<Private>True</Private>
6565
</Reference>
6666
<Reference Include="Microsoft.Azure.WebJobs.Extensions, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
@@ -75,12 +75,12 @@
7575
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.Extensions.WebHooks.1.0.0-beta3\lib\net45\Microsoft.Azure.WebJobs.Extensions.WebHooks.dll</HintPath>
7676
<Private>True</Private>
7777
</Reference>
78-
<Reference Include="Microsoft.Azure.WebJobs.Host, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
79-
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.1.1.0\lib\net45\Microsoft.Azure.WebJobs.Host.dll</HintPath>
78+
<Reference Include="Microsoft.Azure.WebJobs.Host, Version=1.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
79+
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.1.1.1-alpha-10193\lib\net45\Microsoft.Azure.WebJobs.Host.dll</HintPath>
8080
<Private>True</Private>
8181
</Reference>
82-
<Reference Include="Microsoft.Azure.WebJobs.ServiceBus, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
83-
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.ServiceBus.1.1.0\lib\net45\Microsoft.Azure.WebJobs.ServiceBus.dll</HintPath>
82+
<Reference Include="Microsoft.Azure.WebJobs.ServiceBus, Version=1.1.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
83+
<HintPath>..\..\packages\Microsoft.Azure.WebJobs.ServiceBus.1.1.1-alpha-10193\lib\net45\Microsoft.Azure.WebJobs.ServiceBus.dll</HintPath>
8484
<Private>True</Private>
8585
</Reference>
8686
<Reference Include="Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">

test/WebJobs.Script.Tests/app.config

+8
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@
2222
<assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
2323
<bindingRedirect oldVersion="0.0.0.0-4.3.1.0" newVersion="4.3.1.0" />
2424
</dependentAssembly>
25+
<dependentAssembly>
26+
<assemblyIdentity name="Microsoft.Azure.WebJobs.Host" publicKeyToken="31bf3856ad364e35" culture="neutral" />
27+
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
28+
</dependentAssembly>
29+
<dependentAssembly>
30+
<assemblyIdentity name="Microsoft.Azure.WebJobs" publicKeyToken="31bf3856ad364e35" culture="neutral" />
31+
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.1.0" />
32+
</dependentAssembly>
2533
</assemblyBinding>
2634
</runtime>
2735
</configuration>

test/WebJobs.Script.Tests/packages.config

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@
88
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net45" />
99
<package id="Microsoft.AspNet.WebHooks.Common" version="1.2.0-beta4" targetFramework="net45" />
1010
<package id="Microsoft.AspNet.WebHooks.Receivers" version="1.2.0-beta4" targetFramework="net45" />
11-
<package id="Microsoft.Azure.WebJobs" version="1.1.0" targetFramework="net45" />
12-
<package id="Microsoft.Azure.WebJobs.Core" version="1.1.0" targetFramework="net45" />
11+
<package id="Microsoft.Azure.WebJobs" version="1.1.1-alpha-10193" targetFramework="net45" />
12+
<package id="Microsoft.Azure.WebJobs.Core" version="1.1.1-alpha-10193" targetFramework="net45" />
1313
<package id="Microsoft.Azure.WebJobs.Extensions" version="1.0.0" targetFramework="net45" />
1414
<package id="Microsoft.Azure.WebJobs.Extensions.SendGrid" version="1.0.0" targetFramework="net45" />
1515
<package id="Microsoft.Azure.WebJobs.Extensions.WebHooks" version="1.0.0-beta3" targetFramework="net45" />
16-
<package id="Microsoft.Azure.WebJobs.ServiceBus" version="1.1.0" targetFramework="net45" />
16+
<package id="Microsoft.Azure.WebJobs.ServiceBus" version="1.1.1-alpha-10193" targetFramework="net45" />
1717
<package id="Microsoft.Data.Edm" version="5.6.2" targetFramework="net45" />
1818
<package id="Microsoft.Data.OData" version="5.6.2" targetFramework="net45" />
1919
<package id="Microsoft.Data.Services.Client" version="5.6.2" targetFramework="net45" />

0 commit comments

Comments
 (0)