From 7e7c310fa64601c15daddbf445a006699b2c6950 Mon Sep 17 00:00:00 2001 From: "Liangying.Wei" Date: Wed, 12 Jun 2024 13:35:25 +0800 Subject: [PATCH] Create build-samples.yml (#279) * Create build-samples.yml --- .github/workflows/build-samples.yml | 39 + README.md | 2 +- .../AdvancedChatRoom/AdvancedChatRoom.csproj | 421 + .../AdvancedChatRoom/AdvancedChatRoom.sln | 25 - .../AdvancedChatRoom/ChatSample.AspNet.csproj | 274 - .../AdvancedChatRoom/Owin.1.0/.signature.p7s | Bin 0 -> 9462 bytes .../AdvancedChatRoom/Owin.1.0/Owin.1.0.nupkg | Bin 0 -> 14137 bytes .../Owin.1.0/lib/net40/Owin.dll | Bin 0 -> 4608 bytes .../Scripts/jquery-1.6.4.min.js | 4 - .../Scripts/jquery-3.7.1.js} | 6217 ++++++--- .../Scripts/jquery.signalR-2.4.1.min.js | 9 - .../Scripts/jquery.signalR-2.4.3.js} | 60 +- .../Scripts/jquery.signalR-2.4.3.min.js | 9 + aspnet-samples/AdvancedChatRoom/Startup.cs | 4 +- aspnet-samples/AdvancedChatRoom/Web.config | 506 +- aspnet-samples/AdvancedChatRoom/index.html | 4 +- .../AdvancedChatRoom/packages.config | 142 +- aspnet-samples/AspNetForm/AspNetForm.csproj | 324 +- aspnet-samples/AspNetForm/AspNetForm.sln | 25 - .../AspNetForm/Content/bootstrap-grid.css | 249 +- .../AspNetForm/Content/bootstrap-grid.css.map | 2 +- .../AspNetForm/Content/bootstrap-grid.min.css | 7 +- .../Content/bootstrap-grid.min.css.map | 2 +- .../AspNetForm/Content/bootstrap-grid.rtl.css | 249 +- .../Content/bootstrap-grid.rtl.css.map | 2 +- .../Content/bootstrap-grid.rtl.min.css | 7 +- .../Content/bootstrap-grid.rtl.min.css.map | 2 +- .../AspNetForm/Content/bootstrap-reboot.css | 141 +- .../Content/bootstrap-reboot.css.map | 2 +- .../Content/bootstrap-reboot.min.css | 7 +- .../Content/bootstrap-reboot.min.css.map | 2 +- .../Content/bootstrap-reboot.rtl.css | 141 +- .../Content/bootstrap-reboot.rtl.css.map | 2 +- .../Content/bootstrap-reboot.rtl.min.css | 7 +- .../Content/bootstrap-reboot.rtl.min.css.map | 2 +- .../Content/bootstrap-utilities.css | 1242 +- .../Content/bootstrap-utilities.css.map | 2 +- .../Content/bootstrap-utilities.min.css | 7 +- .../Content/bootstrap-utilities.min.css.map | 2 +- .../Content/bootstrap-utilities.rtl.css | 1242 +- .../Content/bootstrap-utilities.rtl.css.map | 2 +- .../Content/bootstrap-utilities.rtl.min.css | 7 +- .../bootstrap-utilities.rtl.min.css.map | 2 +- .../AspNetForm/Content/bootstrap.css | 2497 +++- .../AspNetForm/Content/bootstrap.css.map | 2 +- .../AspNetForm/Content/bootstrap.min.css | 7 +- .../AspNetForm/Content/bootstrap.min.css.map | 2 +- .../AspNetForm/Content/bootstrap.rtl.css | 2496 +++- .../AspNetForm/Content/bootstrap.rtl.css.map | 2 +- .../AspNetForm/Content/bootstrap.rtl.min.css | 7 +- .../Content/bootstrap.rtl.min.css.map | 2 +- aspnet-samples/AspNetForm/Default.aspx | 7 +- aspnet-samples/AspNetForm/GroupOne.aspx | 5 +- .../AspNetForm/Scripts/bootstrap.bundle.js | 2215 ++-- .../Scripts/bootstrap.bundle.js.map | 2 +- .../Scripts/bootstrap.bundle.min.js | 6 +- .../Scripts/bootstrap.bundle.min.js.map | 2 +- .../AspNetForm/Scripts/bootstrap.esm.js | 2139 +-- .../AspNetForm/Scripts/bootstrap.esm.js.map | 2 +- .../AspNetForm/Scripts/bootstrap.esm.min.js | 6 +- .../Scripts/bootstrap.esm.min.js.map | 2 +- .../AspNetForm/Scripts/bootstrap.js | 2139 +-- .../AspNetForm/Scripts/bootstrap.js.map | 2 +- .../AspNetForm/Scripts/bootstrap.min.js | 6 +- .../AspNetForm/Scripts/bootstrap.min.js.map | 2 +- .../Scripts/jquery-3.4.1.intellisense.js | 2670 ---- .../AspNetForm/Scripts/jquery-3.4.1.min.js | 2 - .../AspNetForm/Scripts/jquery-3.4.1.min.map | 1 - .../Scripts/jquery-3.4.1.slim.min.js | 2 - .../Scripts/jquery-3.4.1.slim.min.map | 1 - .../{jquery-3.4.1.js => jquery-3.7.0.js} | 2900 +++-- .../Scripts/jquery.signalR-2.4.1.min.js | 9 - .../Scripts/jquery.signalR-2.4.3.js} | 60 +- .../Scripts/jquery.signalR-2.4.3.min.js | 9 + aspnet-samples/AspNetForm/Site.Master | 2 +- aspnet-samples/AspNetForm/Web.config | 128 +- aspnet-samples/AspNetForm/packages.config | 116 +- aspnet-samples/ChatRoom/ChatRoom.csproj | 273 +- aspnet-samples/ChatRoom/ChatRoom.sln | 25 - aspnet-samples/ChatRoom/README.md | 62 +- .../ChatRoom/Scripts/jquery-1.6.4.min.js | 4 - .../ChatRoom/Scripts/jquery-3.7.1.js | 10716 ++++++++++++++++ aspnet-samples/ChatRoom/Web.config | 324 +- aspnet-samples/ChatRoom/index.html | 2 +- aspnet-samples/ChatRoom/packages.config | 154 +- aspnet-samples/ChatRoomLocal/ChatRoom.sln | 25 - .../{ChatRoom.csproj => ChatRoomLocal.csproj} | 49 +- aspnet-samples/ChatRoomLocal/README.md | 8 +- .../ChatRoomLocal/Scripts/jquery-1.6.4.min.js | 4 - .../ChatRoomLocal/Scripts/jquery-3.7.1.js | 10716 ++++++++++++++++ aspnet-samples/ChatRoomLocal/Web.config | 44 +- aspnet-samples/ChatRoomLocal/index.html | 2 +- aspnet-samples/ChatRoomLocal/packages.config | 26 +- aspnet-samples/aspnet-samples.sln | 43 + aspnet-samples/images/1-1.create.png | Bin 82064 -> 100890 bytes aspnet-samples/images/1-2.select.template.png | Bin 47509 -> 79726 bytes aspnet-samples/images/1-4.new.hub.png | Bin 45870 -> 42153 bytes aspnet-samples/images/1-6.new.startup.png | Bin 44824 -> 79914 bytes .../ChatRoom.NetCore21/ChatRoom/.gitignore | 4 - .../ChatRoom/ChatRoom.NetCore21.csproj | 16 - .../ChatRoom.NetCore21/ChatRoom/Dockerfile | 20 - .../ChatRoom/Hub/ChatSampleHub.cs | 20 - .../ChatRoom.NetCore21/ChatRoom/Program.cs | 20 - .../ChatRoom/Properties/launchSettings.json | 27 - samples/ChatRoom.NetCore21/ChatRoom/README.md | 82 - .../ChatRoom.NetCore21/ChatRoom/Startup.cs | 36 - .../ChatRoom/appsettings.json | 15 - .../ChatRoom/wwwroot/css/site.css | 82 - .../ChatRoom/wwwroot/favicon.ico | Bin 32038 -> 0 bytes .../ChatRoom/wwwroot/index.html | 156 - .../ChatRoomLocal/ChatRoomLocal.csproj | 15 - .../ChatRoomLocal/Hub/Chat.cs | 20 - .../ChatRoomLocal/Program.cs | 20 - .../Properties/launchSettings.json | 27 - .../ChatRoomLocal/README.md | 139 - .../ChatRoomLocal/Startup.cs | 35 - .../ChatRoomLocal/appsettings.json | 15 - .../ChatRoomLocal/package-lock.json | 12 - .../ChatRoomLocal/package.json | 7 - .../ChatRoomLocal/wwwroot/css/site.css | 82 - .../ChatRoomLocal/wwwroot/favicon.ico | Bin 32038 -> 0 bytes .../ChatRoomLocal/wwwroot/index.html | 156 - samples/samples.sln | 6 - 123 files changed, 37899 insertions(+), 14435 deletions(-) create mode 100644 .github/workflows/build-samples.yml create mode 100644 aspnet-samples/AdvancedChatRoom/AdvancedChatRoom.csproj delete mode 100644 aspnet-samples/AdvancedChatRoom/AdvancedChatRoom.sln delete mode 100644 aspnet-samples/AdvancedChatRoom/ChatSample.AspNet.csproj create mode 100644 aspnet-samples/AdvancedChatRoom/Owin.1.0/.signature.p7s create mode 100644 aspnet-samples/AdvancedChatRoom/Owin.1.0/Owin.1.0.nupkg create mode 100644 aspnet-samples/AdvancedChatRoom/Owin.1.0/lib/net40/Owin.dll delete mode 100644 aspnet-samples/AdvancedChatRoom/Scripts/jquery-1.6.4.min.js rename aspnet-samples/{AspNetForm/Scripts/jquery-3.4.1.slim.js => AdvancedChatRoom/Scripts/jquery-3.7.1.js} (63%) delete mode 100644 aspnet-samples/AdvancedChatRoom/Scripts/jquery.signalR-2.4.1.min.js rename aspnet-samples/{AspNetForm/Scripts/jquery.signalR-2.4.1.js => AdvancedChatRoom/Scripts/jquery.signalR-2.4.3.js} (98%) create mode 100644 aspnet-samples/AdvancedChatRoom/Scripts/jquery.signalR-2.4.3.min.js delete mode 100644 aspnet-samples/AspNetForm/AspNetForm.sln delete mode 100644 aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.intellisense.js delete mode 100644 aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.min.js delete mode 100644 aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.min.map delete mode 100644 aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.slim.min.js delete mode 100644 aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.slim.min.map rename aspnet-samples/AspNetForm/Scripts/{jquery-3.4.1.js => jquery-3.7.0.js} (82%) delete mode 100644 aspnet-samples/AspNetForm/Scripts/jquery.signalR-2.4.1.min.js rename aspnet-samples/{AdvancedChatRoom/Scripts/jquery.signalR-2.4.1.js => AspNetForm/Scripts/jquery.signalR-2.4.3.js} (98%) create mode 100644 aspnet-samples/AspNetForm/Scripts/jquery.signalR-2.4.3.min.js delete mode 100644 aspnet-samples/ChatRoom/ChatRoom.sln delete mode 100644 aspnet-samples/ChatRoom/Scripts/jquery-1.6.4.min.js create mode 100644 aspnet-samples/ChatRoom/Scripts/jquery-3.7.1.js delete mode 100644 aspnet-samples/ChatRoomLocal/ChatRoom.sln rename aspnet-samples/ChatRoomLocal/{ChatRoom.csproj => ChatRoomLocal.csproj} (69%) delete mode 100644 aspnet-samples/ChatRoomLocal/Scripts/jquery-1.6.4.min.js create mode 100644 aspnet-samples/ChatRoomLocal/Scripts/jquery-3.7.1.js create mode 100644 aspnet-samples/aspnet-samples.sln delete mode 100644 samples/ChatRoom.NetCore21/ChatRoom/.gitignore delete mode 100644 samples/ChatRoom.NetCore21/ChatRoom/ChatRoom.NetCore21.csproj delete mode 100644 samples/ChatRoom.NetCore21/ChatRoom/Dockerfile delete mode 100644 samples/ChatRoom.NetCore21/ChatRoom/Hub/ChatSampleHub.cs delete mode 100644 samples/ChatRoom.NetCore21/ChatRoom/Program.cs delete mode 100644 samples/ChatRoom.NetCore21/ChatRoom/Properties/launchSettings.json delete mode 100644 samples/ChatRoom.NetCore21/ChatRoom/README.md delete mode 100644 samples/ChatRoom.NetCore21/ChatRoom/Startup.cs delete mode 100644 samples/ChatRoom.NetCore21/ChatRoom/appsettings.json delete mode 100644 samples/ChatRoom.NetCore21/ChatRoom/wwwroot/css/site.css delete mode 100644 samples/ChatRoom.NetCore21/ChatRoom/wwwroot/favicon.ico delete mode 100644 samples/ChatRoom.NetCore21/ChatRoom/wwwroot/index.html delete mode 100644 samples/ChatRoom.NetCore21/ChatRoomLocal/ChatRoomLocal.csproj delete mode 100644 samples/ChatRoom.NetCore21/ChatRoomLocal/Hub/Chat.cs delete mode 100644 samples/ChatRoom.NetCore21/ChatRoomLocal/Program.cs delete mode 100644 samples/ChatRoom.NetCore21/ChatRoomLocal/Properties/launchSettings.json delete mode 100644 samples/ChatRoom.NetCore21/ChatRoomLocal/README.md delete mode 100644 samples/ChatRoom.NetCore21/ChatRoomLocal/Startup.cs delete mode 100644 samples/ChatRoom.NetCore21/ChatRoomLocal/appsettings.json delete mode 100644 samples/ChatRoom.NetCore21/ChatRoomLocal/package-lock.json delete mode 100644 samples/ChatRoom.NetCore21/ChatRoomLocal/package.json delete mode 100644 samples/ChatRoom.NetCore21/ChatRoomLocal/wwwroot/css/site.css delete mode 100644 samples/ChatRoom.NetCore21/ChatRoomLocal/wwwroot/favicon.ico delete mode 100644 samples/ChatRoom.NetCore21/ChatRoomLocal/wwwroot/index.html diff --git a/.github/workflows/build-samples.yml b/.github/workflows/build-samples.yml new file mode 100644 index 00000000..45bb2410 --- /dev/null +++ b/.github/workflows/build-samples.yml @@ -0,0 +1,39 @@ +name: build samples + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build-aspnetcore-samples: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 8.0.x + - name: Build netcore projects + run: | + pushd samples + dotnet build + popd + + build-aspnet-samples: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + - name: Install .NET Framework 4.6.1 Developer Pack + run: choco install netfx-4.6.1-devpack -y + - name: Setup MSBuild.exe + uses: microsoft/setup-msbuild@v2 + - name: Build aspnet projects + run: | + pushd aspnet-samples + nuget restore + msbuild aspnet-samples.sln + popd diff --git a/README.md b/README.md index 82c8dbc2..e6284561 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ More advanced samples are listed as below: * [Flight Map: Realtime Monitoring Dashboard using Azure SignalR Service](samples/FlightMap) ***Archived*** Chat Room Example under AspNetCore 2.1 version: -* [Chat Room Example under AspNetCore 2.1.0](samples/ChatRoom.NetCore21/ChatRoom/README.md) +* [Chat Room Example under AspNetCore 2.1.0](https://github.com/aspnet/AzureSignalR-samples/tree/archived/netcore21/samples/ChatRoom.NetCore21/ChatRoom/README.md) ## ASP.NET SignalR samples diff --git a/aspnet-samples/AdvancedChatRoom/AdvancedChatRoom.csproj b/aspnet-samples/AdvancedChatRoom/AdvancedChatRoom.csproj new file mode 100644 index 00000000..2a631ede --- /dev/null +++ b/aspnet-samples/AdvancedChatRoom/AdvancedChatRoom.csproj @@ -0,0 +1,421 @@ + + + + + + Debug + AnyCPU + + + 2.0 + {1C995B5D-D0FA-42C6-BF36-55894E18C629} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + SimpleChat + SimpleChat + v4.7.2 + true + + + + + + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + true + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + ..\packages\Azure.Core.1.38.0\lib\net472\Azure.Core.dll + + + ..\packages\Azure.Identity.1.11.4\lib\netstandard2.0\Azure.Identity.dll + + + ..\packages\Microsoft.AspNet.Identity.Core.2.2.4\lib\net45\Microsoft.AspNet.Identity.Core.dll + + + ..\packages\Microsoft.AspNet.Identity.Owin.2.2.4\lib\net45\Microsoft.AspNet.Identity.Owin.dll + + + ..\packages\Microsoft.AspNet.SignalR.Core.2.4.3\lib\net45\Microsoft.AspNet.SignalR.Core.dll + + + ..\packages\Microsoft.AspNet.SignalR.SystemWeb.2.4.3\lib\net45\Microsoft.AspNet.SignalR.SystemWeb.dll + + + ..\packages\Microsoft.AspNetCore.Authentication.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Authentication.Abstractions.dll + + + ..\packages\Microsoft.AspNetCore.Authorization.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Authorization.dll + + + ..\packages\Microsoft.AspNetCore.Authorization.Policy.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Authorization.Policy.dll + + + ..\packages\Microsoft.AspNetCore.Connections.Abstractions.2.1.2\lib\netstandard2.0\Microsoft.AspNetCore.Connections.Abstractions.dll + + + ..\packages\Microsoft.AspNetCore.Hosting.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Abstractions.dll + + + ..\packages\Microsoft.AspNetCore.Hosting.Server.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Server.Abstractions.dll + + + ..\packages\Microsoft.AspNetCore.Http.2.1.22\lib\netstandard2.0\Microsoft.AspNetCore.Http.dll + + + ..\packages\Microsoft.AspNetCore.Http.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Http.Abstractions.dll + + + ..\packages\Microsoft.AspNetCore.Http.Connections.1.0.15\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.dll + + + ..\packages\Microsoft.AspNetCore.Http.Connections.Client.1.0.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.Client.dll + + + ..\packages\Microsoft.AspNetCore.Http.Connections.Common.1.0.4\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.Common.dll + + + ..\packages\Microsoft.AspNetCore.Http.Extensions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Http.Extensions.dll + + + ..\packages\Microsoft.AspNetCore.Http.Features.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Http.Features.dll + + + ..\packages\Microsoft.AspNetCore.Routing.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Routing.dll + + + ..\packages\Microsoft.AspNetCore.Routing.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Routing.Abstractions.dll + + + ..\packages\Microsoft.AspNetCore.WebSockets.2.1.7\lib\netstandard2.0\Microsoft.AspNetCore.WebSockets.dll + + + ..\packages\Microsoft.AspNetCore.WebUtilities.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.WebUtilities.dll + + + ..\packages\Microsoft.Azure.SignalR.AspNet.1.25.2\lib\net461\Microsoft.Azure.SignalR.AspNet.dll + + + ..\packages\Microsoft.Azure.SignalR.AspNet.1.25.2\lib\net461\Microsoft.Azure.SignalR.Common.dll + + + ..\packages\Microsoft.Azure.SignalR.Protocols.1.25.2\lib\netstandard2.0\Microsoft.Azure.SignalR.Protocols.dll + + + ..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll + + + ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll + + + + ..\packages\Microsoft.Extensions.Configuration.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll + + + ..\packages\Microsoft.Extensions.Configuration.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll + + + ..\packages\Microsoft.Extensions.Configuration.Binder.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll + + + ..\packages\Microsoft.Extensions.DependencyInjection.2.1.0\lib\net461\Microsoft.Extensions.DependencyInjection.dll + + + ..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + + ..\packages\Microsoft.Extensions.FileProviders.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Abstractions.dll + + + ..\packages\Microsoft.Extensions.Hosting.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Hosting.Abstractions.dll + + + ..\packages\Microsoft.Extensions.Http.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Http.dll + + + ..\packages\Microsoft.Extensions.Logging.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll + + + ..\packages\Microsoft.Extensions.Logging.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll + + + ..\packages\Microsoft.Extensions.Logging.EventSource.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.EventSource.dll + + + ..\packages\Microsoft.Extensions.Logging.TraceSource.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.TraceSource.dll + + + ..\packages\Microsoft.Extensions.ObjectPool.2.1.1\lib\netstandard2.0\Microsoft.Extensions.ObjectPool.dll + + + ..\packages\Microsoft.Extensions.Options.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Options.dll + + + ..\packages\Microsoft.Extensions.Primitives.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll + + + ..\packages\Microsoft.Identity.Client.4.61.3\lib\net462\Microsoft.Identity.Client.dll + + + ..\packages\Microsoft.Identity.Client.Extensions.Msal.4.61.3\lib\netstandard2.0\Microsoft.Identity.Client.Extensions.Msal.dll + + + ..\packages\Microsoft.IdentityModel.Abstractions.7.6.0\lib\net472\Microsoft.IdentityModel.Abstractions.dll + + + ..\packages\Microsoft.IdentityModel.JsonWebTokens.7.6.0\lib\net472\Microsoft.IdentityModel.JsonWebTokens.dll + + + ..\packages\Microsoft.IdentityModel.Logging.7.6.0\lib\net472\Microsoft.IdentityModel.Logging.dll + + + ..\packages\Microsoft.IdentityModel.Tokens.7.6.0\lib\net472\Microsoft.IdentityModel.Tokens.dll + + + ..\packages\Microsoft.Net.Http.Headers.2.1.1\lib\netstandard2.0\Microsoft.Net.Http.Headers.dll + + + ..\packages\Microsoft.Owin.4.2.2\lib\net45\Microsoft.Owin.dll + + + ..\packages\Microsoft.Owin.Host.SystemWeb.4.2.2\lib\net45\Microsoft.Owin.Host.SystemWeb.dll + + + ..\packages\Microsoft.Owin.Security.4.2.2\lib\net45\Microsoft.Owin.Security.dll + + + ..\packages\Microsoft.Owin.Security.Cookies.4.2.2\lib\net45\Microsoft.Owin.Security.Cookies.dll + True + + + ..\packages\Microsoft.Owin.Security.OAuth.4.2.2\lib\net45\Microsoft.Owin.Security.OAuth.dll + + + ..\packages\Microsoft.Web.Infrastructure.2.0.1\lib\net40\Microsoft.Web.Infrastructure.dll + + + ..\packages\Newtonsoft.Json.13.0.2\lib\net45\Newtonsoft.Json.dll + + + ..\packages\Owin.1.0\lib\net40\Owin.dll + + + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + + + ..\packages\System.ClientModel.1.0.0\lib\netstandard2.0\System.ClientModel.dll + + + + + ..\packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll + + + + ..\packages\System.IdentityModel.Tokens.Jwt.7.6.0\lib\net472\System.IdentityModel.Tokens.Jwt.dll + + + ..\packages\System.IO.4.3.0\lib\net462\System.IO.dll + True + True + + + ..\packages\System.IO.FileSystem.AccessControl.5.0.0\lib\net461\System.IO.FileSystem.AccessControl.dll + + + ..\packages\System.IO.Pipelines.4.6.0\lib\netstandard2.0\System.IO.Pipelines.dll + + + ..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll + + + ..\packages\System.Memory.Data.1.0.2\lib\net461\System.Memory.Data.dll + + + ..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll + True + True + + + ..\packages\Microsoft.AspNet.WebApi.Client.5.2.6\lib\net45\System.Net.Http.Formatting.dll + + + ..\packages\System.Net.WebSockets.WebSocketProtocol.4.5.3\lib\netstandard2.0\System.Net.WebSockets.WebSocketProtocol.dll + + + + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll + True + True + + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + + + ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + True + True + + + + + ..\packages\System.Security.AccessControl.5.0.0\lib\net461\System.Security.AccessControl.dll + + + ..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll + True + True + + + ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll + True + True + + + ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll + True + True + + + ..\packages\System.Security.Cryptography.ProtectedData.8.0.0\lib\net462\System.Security.Cryptography.ProtectedData.dll + + + ..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll + True + True + + + ..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll + + + ..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll + + + ..\packages\System.Text.Json.8.0.3\lib\net462\System.Text.Json.dll + + + ..\packages\System.Threading.Channels.4.6.0\lib\netstandard2.0\System.Threading.Channels.dll + + + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + + + ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll + + + + + + + + + + ..\packages\Microsoft.AspNet.WebApi.Core.5.2.6\lib\net45\System.Web.Http.dll + + + ..\packages\Microsoft.AspNet.WebApi.Owin.5.2.6\lib\net45\System.Web.Http.Owin.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Web.config + + + Web.config + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + True + True + 54639 + / + http://localhost:54639/ + False + False + + + False + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + \ No newline at end of file diff --git a/aspnet-samples/AdvancedChatRoom/AdvancedChatRoom.sln b/aspnet-samples/AdvancedChatRoom/AdvancedChatRoom.sln deleted file mode 100644 index 85944496..00000000 --- a/aspnet-samples/AdvancedChatRoom/AdvancedChatRoom.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27703.2042 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChatSample.AspNet", "ChatSample.AspNet.csproj", "{1C995B5D-D0FA-42C6-BF36-55894E18C629}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1C995B5D-D0FA-42C6-BF36-55894E18C629}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1C995B5D-D0FA-42C6-BF36-55894E18C629}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1C995B5D-D0FA-42C6-BF36-55894E18C629}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1C995B5D-D0FA-42C6-BF36-55894E18C629}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {30781DC9-152B-46F4-882E-F649FAB35668} - EndGlobalSection -EndGlobal diff --git a/aspnet-samples/AdvancedChatRoom/ChatSample.AspNet.csproj b/aspnet-samples/AdvancedChatRoom/ChatSample.AspNet.csproj deleted file mode 100644 index 4a16a96e..00000000 --- a/aspnet-samples/AdvancedChatRoom/ChatSample.AspNet.csproj +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - Debug - AnyCPU - - - 2.0 - {1C995B5D-D0FA-42C6-BF36-55894E18C629} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - SimpleChat - SimpleChat - v4.6.1 - true - - - - - - - - - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - - - true - pdbonly - true - bin\ - TRACE - prompt - 4 - - - - packages\Microsoft.AspNet.Identity.Core.2.2.2\lib\net45\Microsoft.AspNet.Identity.Core.dll - - - packages\Microsoft.AspNet.Identity.Owin.2.2.2\lib\net45\Microsoft.AspNet.Identity.Owin.dll - - - packages\Microsoft.AspNet.SignalR.Core.2.4.1\lib\net45\Microsoft.AspNet.SignalR.Core.dll - - - packages\Microsoft.AspNet.SignalR.SystemWeb.2.4.1\lib\net45\Microsoft.AspNet.SignalR.SystemWeb.dll - - - packages\Microsoft.AspNetCore.Connections.Abstractions.2.1.0\lib\netstandard2.0\Microsoft.AspNetCore.Connections.Abstractions.dll - - - packages\Microsoft.AspNetCore.Http.Connections.Client.1.0.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.Client.dll - - - packages\Microsoft.AspNetCore.Http.Connections.Common.1.0.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.Common.dll - - - packages\Microsoft.AspNetCore.Http.Features.2.1.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Features.dll - - - packages\Microsoft.Azure.SignalR.AspNet.1.4.1\lib\net461\Microsoft.Azure.SignalR.AspNet.dll - - - packages\Microsoft.Azure.SignalR.AspNet.1.4.1\lib\net461\Microsoft.Azure.SignalR.Common.dll - - - packages\Microsoft.Azure.SignalR.Protocols.1.4.1\lib\netstandard2.0\Microsoft.Azure.SignalR.Protocols.dll - - - - packages\Microsoft.Extensions.Configuration.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll - - - packages\Microsoft.Extensions.Configuration.Abstractions.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll - - - packages\Microsoft.Extensions.Configuration.Binder.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll - - - packages\Microsoft.Extensions.DependencyInjection.2.1.0\lib\net461\Microsoft.Extensions.DependencyInjection.dll - - - packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - - packages\Microsoft.Extensions.Logging.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll - - - packages\Microsoft.Extensions.Logging.Abstractions.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - - - packages\Microsoft.Extensions.Logging.EventSource.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.EventSource.dll - - - packages\Microsoft.Extensions.Logging.TraceSource.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.TraceSource.dll - - - packages\Microsoft.Extensions.Options.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Options.dll - - - packages\Microsoft.Extensions.Primitives.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll - - - packages\Microsoft.IdentityModel.JsonWebTokens.5.5.0\lib\net461\Microsoft.IdentityModel.JsonWebTokens.dll - - - packages\Microsoft.IdentityModel.Logging.5.5.0\lib\net461\Microsoft.IdentityModel.Logging.dll - - - packages\Microsoft.IdentityModel.Tokens.5.5.0\lib\net461\Microsoft.IdentityModel.Tokens.dll - - - packages\Microsoft.Owin.4.0.0\lib\net451\Microsoft.Owin.dll - - - packages\Microsoft.Owin.Host.SystemWeb.4.0.0\lib\net451\Microsoft.Owin.Host.SystemWeb.dll - - - packages\Microsoft.Owin.Security.4.0.0\lib\net451\Microsoft.Owin.Security.dll - - - packages\Microsoft.Owin.Security.Cookies.3.0.1\lib\net45\Microsoft.Owin.Security.Cookies.dll - - - packages\Microsoft.Owin.Security.OAuth.4.0.0\lib\net451\Microsoft.Owin.Security.OAuth.dll - - - packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll - - - packages\Newtonsoft.Json.11.0.2\lib\net45\Newtonsoft.Json.dll - - - packages\Owin.1.0\lib\net40\Owin.dll - - - packages\System.Buffers.4.5.0\lib\netstandard2.0\System.Buffers.dll - - - packages\System.IdentityModel.Tokens.Jwt.5.5.0\lib\net461\System.IdentityModel.Tokens.Jwt.dll - - - packages\System.IO.Pipelines.4.6.0\lib\netstandard2.0\System.IO.Pipelines.dll - - - packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll - - - - packages\Microsoft.AspNet.WebApi.Client.5.2.6\lib\net45\System.Net.Http.Formatting.dll - - - - packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll - - - packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - - packages\System.Threading.Channels.4.6.0\lib\netstandard2.0\System.Threading.Channels.dll - - - packages\System.Threading.Tasks.Extensions.4.5.2\lib\netstandard2.0\System.Threading.Tasks.Extensions.dll - - - packages\System.ValueTuple.4.3.0\lib\netstandard1.0\System.ValueTuple.dll - True - True - - - - - - - - - - - - packages\Microsoft.AspNet.WebApi.Core.5.2.6\lib\net45\System.Web.Http.dll - - - packages\Microsoft.AspNet.WebApi.Owin.5.2.6\lib\net45\System.Web.Http.Owin.dll - - - - - - - - - - - - packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll - - - - - - - - - - - - - - - - - - - - - Web.config - - - Web.config - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - - - - - - True - True - 54639 - / - http://localhost:54639/ - False - False - - - False - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file diff --git a/aspnet-samples/AdvancedChatRoom/Owin.1.0/.signature.p7s b/aspnet-samples/AdvancedChatRoom/Owin.1.0/.signature.p7s new file mode 100644 index 0000000000000000000000000000000000000000..8f587032240e64dafcffe91b57a9a6a04bdaa008 GIT binary patch literal 9462 zcmds-c|4SB|HsW3W68en##VOs%vgqG3E4tOmK0;37{koi3p2KoA`vNBN<~SwE8T&eh`0aF7L*gUQVP0f|z`fR9 z2I@h!wrYw*EguZtlZ@GAvx9{tkIHTcQ0c1yDl|8b9twd%Ia%NTIxNt$Ybj;e?KhE0 zK#R7nwG~4cz;$^cw*bs=dV3h02WoGJU~8lK-&zJ0BK6}2fDeYA3gMsws1Oz?6#}6vVdr}?WEkU8mN;GQwh+W!c;off z^rOWyPrf3wx*OT6d+qod)6lOWHP#Pg^ zZ{O%#Etoj;O>)W>+n@ltP>05bSS{1K@edXQZSvvT1rWqm^q0*z6k z>^CdZF7KnQB<6VzIZkg@Rg)p4EwnMhQ?N;=IFNB2VMNi*x zigNn+&g#Wv@i*>Y?(OlZ_P;y*MZ%9&gONX4^Kj9Ae8d;-U2d`6+hF%Bo@Cx@@KNyP z>W_KPiuSJKVdD*$j+XG?6kj|cB8&G=DXhjq%AQ}`n$H=OQ!>!7&~VnKT9J|IiOR^H z@+*rh#;OIAQvj6#0H`p*wa|qz3yQdQ)p`fp8CDT8_Avc;a<}|fLl=og0w@#`MGIaq zbWxZengH=XB?uBw1rG~I5V;M4*qIuj5It%jL(*7zcTt7J$yCi6{GYvf(q~dbsSEjW(%#&A(R;{ca$9R5WfC@2n2=)`~aEtHULQw z^d*x6wN+IK9;Coc838cd=mkyCT(~U zQ}-jAvrNUbR0m&+(qUQokgH+`M3uFL8z%s4chnZQ?+rUR8cUCVpHS#W*lXT=H`|dG z%wba*P^v4F-L6LA(;B?+q`C9EtX!5;%S0I2Pw{>GrL@ZC z!3migGR+USDdfw`32O(*L3LD4UA!;LHE^ESBtOE}xAfc<7lcc1P#J4V?bZ1vZr|Le z`mOp#g*=lZo~*J=J5l8tNixtSRbrHAx0&&o4^CpEi)2r~@^Np&zKWa4U88JoW+8|t zXOSK|n1lr@DCex3PjkY5W27t|?^~dn&AA8U+bwdZ3&yLYof`A?H$s(r=f4-cl87Y&R@$w)2u}3FGrq&`GjjWUd2jSXOgT#;?Axr)lNq!g#J7AbJDYn|?YS^xfq6IYqrmcuQT+# zpOzDRqxz;Rb88+T`@92W?!!(-V{0)!oIO5Oy_1g+cMfi^=h5{$lVW>O+$bVv>D`=j zb**EeV1(>pc+cG^4%z2!(~U7|uNt0kF}Mnhud}rY+^PCaG5e=M{ku+jQ(#u5;OFA@ z;f+qu#nz7;)VF=@n>oxFvm(F$z~RtU76t+VfO;M}51F9)I}3l}8OaxmQpT`g zpIEJr0-y;y*T48*9D38)=~>A?MtnsLnuJ^6ChTYI#u7`3spA@i$n|8 zizJw6502hAb=GjVB*UX;UVGUHba9utuZYz83|iifK64#iW)6=zFK2(|CBEr~rNe&7 z*r$EVSv~RxKbJgCusr27>u)=@hcmJ@%rMQSOHS#ooN*Ex#j4*bsDC-|)ew)Hg5Mx& z-ekhcaa)mg4(7pbiE7Hu$>*hk2LmneJwb$4PJ>duM1r!@cb|$HB9ec9Q)8Mse3XzX-ELAxlThB3 z>hoPLC1r>6BZLx{`1m#N_rJyW2rFN~Vz;ZEN28Z^1L~WW0zu01ORpzyY#>f0AlPRWq^cokRa}6l zSD4Bn5+MMfbp5yxRV1YepgaI5bpYiK0DjetIv<8$cg1`?Qh%of-eYEMo%-#`o2=uz zLKvA_KR3@vW?$wz0#K5GkW1u$LNr4;|0+3xr7(;Np}Ra#mR|1X+%Q-B^q1_YW9{Si z0X34`o{j{mc%NtJUyO@j_YAWSmttLt81<-%SKQJJBaf%{?&H-ztlN~?Zk@k9ef~cG z;AdQ<6ouc-K)tbGyT02U?jY$tyL;Pi$-4S`S{hc*ldyj6cPm_=%1ZsI*DiWn?AccN zPSSd!d#rJ1J&O(EI)9quY+&96367`IlIby`lQv_mDV@p_tX5vz7vB!vyxb3&Yp`)D z&K=;ySG0tQ_@BlPdW%H~EiGF%#bv;cr%{}Ce9t}_VU_dXn28;`Wc#)}M^5S<2i+HE z(r^^luQxM@C6ARydhNV-6xn7gFOv3{=z5-cZ=Q6=RVAOwBLPr(M1FkU>_{pP3wRN} zaoT8J5BD5E<({T_J#3rK0GJifKa7UJ!03_?8tpIByJL6rcwW`sPrA zA@-g_#vH>jk$8mFfcy2eQMxq>T`uXJN3|Y(>uwjn2!ryPNk=qU&fXL~(WXKA9)2Ye zZ{nmN$bkZWh#hrj0Ib@@p$J?wclVdEI^6bEJ4HokyUNMYZs2k29Uix5QYR|Ac2S_gQgWyVnxYp74QOBGuW31b z;YLr%3LZ&%_SzwC;U=-4Pz_M-ZeFwiz_+?+cFpfSe0GGInKty1J$-V?4E&}wnf=ONoLV$lbsO&UoW9fNR*M}hN z18^ary@&N*v%kQ~2j`9RSlK&-!Rj33@D)!C)P=xGS-nzNqcuTIh(w{)wbZqo|IdHF ze^sPE#A+TagQ&f7@8&zV?C6{Kd>)anm0=J%VSeeQdnwJqC`OQVOM^HjZsISwZqt;=wMs; zXU87)2NlMr?<>8}7Ep|&(~K}chrL4&OmhlHCo0{W{W`aEV7M;P{g^AAMSs(qp|psD4_A2Hr-OTE)pD62)10z!0rS2uViDec zS#I8!dMBQ%P`^x0Fpn8M;yW}zAAo*wJ=dP@;Vjdk^cvUKzoNgyxh?G9##Q+n|5WY1 zLou=^R)r*`9H5l`(O%o^zrg|gx(I@>!mxmA{(-#xfD_;V*z+^v@K_%&RUe!;APGnS zjBo};c6z8Vj5lTYg>b_46DR!|p2i&NG!;~e6jA}!G9Fm1`V)KzD&RTAk-$iyS-Gkq zq?K#5nSNKTw?Y?jrY5;|++7dG7*QdN9hr~#H$ zN9*m~Vos^%6RG@i63#a`zftyJSpD0+>}dGvF<3Du`A9}<^gEyTt{D-oXO^UkM|Lgj z_;l6Pz4MFS{I6sOMZp|OWushQdS+qZ_;s;+j9imluigwNPj;bh#*R1)q}1KZFRt4m zR@I3a>%QrtZGA{D<-WJSNAYOyCH@&oM+PtZk@gI=-sdTSBueD@sJmI%9^=HU)TZ$S zpjo|ca=F3&XspEqLmE72>UP%Y>W}SI>=(?4b!L`=^9isJ#ee`qtidaip{&!)*T!h> z(Xr>}g>wE-i2gr-7g7U2uGX-t@B)<^*j|HI=w>$mrwK(4*t$wtiN8!Jf5RHAb;@zF zx6Vl>9uTG!jN4D&gp}w6T}P!b_$6d-qeEpLvV7#pYaw6zpjW;|<)cT%yQg|v_NC6d zi$slIW*m4MeGspY={yC0Z*VwVw6(QFq^>99)b!+M|M`+LS}M`?+ir(xHN_Qv`c#^D z^2v#Z__60%RoW8bS~(3f*;i-c-Zgd{4r+$WSLzMLvTbdMWYV=e(Mf1Mwe;D)X)aRu;X%58Dnf9w~OUz$SYu?K^dZ_93OqoUJlMl?NT&v>3 z)sw=m3!ze^>rnSZ?|y^bZ&2NPJA(w-`$aJ+~63R64+Nr3D| zCnz8!{HNWBfmlFgy&G5^N&yH^{jWKZpxem3R`-!sruL*wy^?o9hfozz1{Cw;^R^|( zZtAr9`N8YCSeXc#iz~J8pIDttD_)8i7YromCGf1Szwn~x;oJ}`$|yh$qm2Fmjinwh zA78YJC;ocnj={8i0VX;o*nN{B@ORl6Ja$vLOHIfHWxT}xuG9K*SUsV8?9FTI>HHST z(YY%rd?WhuB_juB3VQc>#svWiZ^W?z-iUqhETIzzf~Mv(?=XKCJ!SG};KK>}Z*8fn zFIoJp&>vq`o^IKl>S3y-FWLC!Wx%m4ovN(N4@K~5=0_=Z4hE^J@5C*wUO(mx^WPaT zd8=t2>tg%WYS!<>oO#5(>GtpR-MzE)S2+gl=2(J1HV3N|d&k4hR?ov7-Zit&ekkqx zcur8FxMonBuI@=vdMo7Bg@>404%=%TgX#2cES7mo+wi=o-}Ex|-_@Nx_G(Cr_io?N zi-s{p=ZXwRd)SeO*&n6pPsA%cU%pX^vgEJ9|7HFUkYWDs~@;f+}AsNObnv=yE|Y3PLh38~_HSGI^eXS}6TB`hO1 zFG950(ZYOmE0gxZqM>xKNg!*5>;4obF`}u1mt`qbM}KbS4GMEwZ&>N_w3Bpe%v&DI z1_Sci@;P^HGIYg7Kx&vV&0g#1h5-ErTo;_H)ak=OS3JR;i;I`~V~*+&x| z!>{R?S4)L>ef+2~btZ$dRq1!LfK#1IfhUx0NrpmPhK_ zIfkFKMZzu9>5Uto=+J+xrkm21YN{j*Puxs8w~oJu;7&CFo2{V#7U=Y8K$U=L0h&Mg za%7S+Xx6EOu262J>{?+c&74!$P$rYW+t?L^@zZ9IrM->)@r4c3W}Jg=V(2E!JK*MhUAPp@vXkZdonxl9c7P#v_FkJQ>_ z^*+iA?s)u;LsA+WQxE4a8ZwJ4k>9qzaIZ5@=NqBEO4^HGmRs_98l*RZX6`L;;+zpT zU-D{u+vzuGD<4c}u2|UCdhSD!cj2~nNgjC@ z;}hk6z1m8JFMIgBbm@Msv7jP@1-5WZQ9j$#%CbJ)?1+a_P2~1|6Xt}*-%iPvi<}va zXZrAFjO-TRR=6*Mt;NXk^~i!L?}g#Iw{&+y%d&WhyfXa{xs)X6^cpO9n|(yv#NiiH zU0wDb*BwOfr*bq^CqS)&a!0+5^+J$Ts5AHzkbR)r08owt{}e8voRL3+{717ak8%mL z1~&{m&_~&1oBWkE2-+JzTYu*Q%6r)hhUGX-l@WX5ck7@EInOV@y5CS2e8C(cdDIj1 zuYb1=p{htwPy*mjS73-n@{p8|QGu zA(4=|AA{;|$&jz}Pu4PLnCrgnm?+dhJx#8vHF6yEODmD)VUQf%J*9Q{U14#*(T#hz zosOqEAOu^EG)8YPlQuFo$2Gb_AIjkAKcP)4O8vjR$LO-Wj#4hsZM~ExF~zcj;aQ`_ zML~;CkE&!jdE)wip4r(fiK1|ma{@F6>6@uOVj7(5?7p6Vf^eW@Tyk)Q} J%kt38{{iw1E?fWr literal 0 HcmV?d00001 diff --git a/aspnet-samples/AdvancedChatRoom/Owin.1.0/Owin.1.0.nupkg b/aspnet-samples/AdvancedChatRoom/Owin.1.0/Owin.1.0.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..4bc042176d1c04228cf28cf4ad9601fd0fb9e95d GIT binary patch literal 14137 zcmdse2V7Ij-Yp3orB^{9H0iKI=+cYQJ5m)w5+Is{kc6(3fS?Fc1W~X6ie2fV2kBr# z!~#-OP?~}TDbhT`+d)9^lzZ;`?(e(5_kuxY@A=Q3*?VTqT5D!ISkp7G(a}D^et6@V z@ha#jgpQ8(-9)#Q&WD7-kyTY_zhQ+!baMH8%UOT@HC|n(XBdvh!9p=4GB${yF9}xx zBw-i=DhQ1w1n5hKQ2dp(B@GSqoG>^f1|MuLI|0NK}o_a(fX23YTDX< zfTllOT^s4Au8#1NgsJ|MYyVrVQN?2@NHmgyR7C}mFv>&{7)_#JG30eMTfG-#3@H?g z!jS(mMir@{jZoLo(n2H9>gs5uA5tBS!T@khq&f4GcQpaq+XeFWb#3!`Z|PNT z=jL&Sko;2Q?fHdtjcpK(3Of=1Sr(%!4R%g1u*1qdh=7NoKyc;dw+24L>4veR4+)oAY zZ;3k09RKjeajvcCX=1nG_)*pBlwu`cN8l#0ulC$POchs&!(C4?!>CUafJTqP!J|cv z?x!%;a&O%9#uTN8D+iG>=XQU)PPVThC{7!`!16|i99QV@ntaFqFn5HV<88P=$*oP? z<19ylHa-QkX!*buW^hRI(Ee?u!(shY2^fkx@S_i-ak#&G7@q|3xUFu%Gy6k7X~U0V zuUsho5c0{%E44W6Yeshn@BW#d$L2TNCw6}{QEiTj8h@Pk`4ge<^H;yZ3Kh9aaVET3 zi5FrQ%o*9#_ohoYnz3X!C0NDtaGPbC@LzJs5Oy@ObTz(wayE2asy2SI_)3S)_#G|r zpuR_UiYMN`n=xUeyEWnEPN&VJIo-hAv^6@U?cN99+7X*pIC99wnz93K9zQ0pP-O1$ zO#L;_pxOB?wl3;$p`(Ye`o?;#$Ca^UTnZ;Ng@yl1@lg4oPIXR0r;}m_RLQvT;Yex- zjA!a-=TvR$j7a_y(#7<;U|wJE1Jx%LzA0ABCpLA4#>&gSsk{AkF$yw|n&d=J?LIKA)i%&0TNgoDEDd{nes7r1{QmEw z*6-{@doO!Oe(&T*c+J!ZxYt~rt>?^Z7mr#9A4}b|=p}yiULEDr#995P(F?;C_d1o| z^|4-!Ia^mZs`mZ4lxp3&+X=`GGIur z-}>oZv4)?cx%Ek#!QE9ggzI@yHm5I^goKmj?ms&`J>JtD?V7fIVt|MYZ$UuYy9|TI zsd=&OwXZy&H@!dZ@6=gj!5G|}3-vnq;mP4{I>rg-tv(6I4!v$PW#>T$B6A}MBdtjNh%Q0)t(7{)f5~%$TbjBa(LFTwY0gk zasDOuY?IU>t$Hy+8+}bai`euC{$nwuQr3IiJKw+tAWyhkzZ_`h z^i8BXY})-^=Ew+gj&IyGHi~0%qBJz?om9+4BEc)}R+x)D+NDga(ZhU7+J)Z)()7Mv zZZFm0aYBXs2N%}?u9F(dnKPT;U$H`4Kh=1Suu(VR-(q5XkSwjc{eaf_LzN+?#+V9@ zo7i;YcmkBn0@$IibW<{v_~eVS%}iuG4)dhT5#9u|s`k+pJ;T*E>Wj9!Gw78SIp;S& zbV&6g>E+%JJf6AjjHQV!1MO2H3N*fod3R|C4p3i*fFj{vAp|D_O6%e+S11r$LXU1~CAp_1z9~tQc&kipYZ`vZ` zxVMM3(giqw>AaaXz+?P8@rp&R>wt|zhEp!VGZ|-+-i)}MMLA8c$$2cPJqcsy zd=A;(nD*(5SACM4XyvwhkiGC~!EdFPOP%z&c!cV3FMU&I z!te+8s>shc&TryKOEE3rPw!iC~WD{d7AydDxY z6y+CQ?tr*3Q2T1zQ?t#*$ME5o+D;su2z^|lf4#`hJ*4?rW?{=5zhLQL>gWU>{_3om z+F@mY=XTN;DTY+hgNqB^yFHlhhz{TKVx|bYbUMn1wemKerDNJub?*8C>70QujQB1{ zMgHr@hxJ~G?XjIlXTSDTx^T=?|9(hzg1;|0oNHT&AQecF5H- zQn$!1r5yhdK4oaw?7>lThhT27OCbHOxbcBa?h`_Hm!#csk^^)vh)laww-7YqJo)Cg z?NuvQ9ul!o+^=*@CPOv;K=!xNFMN}W3=;^)yT7a7I3l&#gAixD{jRqV;sHL_{5OMZ zId@)#vX32{oZ72hoNQpNmr1qdT)0LZ>-Kkj#`4hFJI|a@uQV&ih^Svo=7N!!0SS}cp z3~*IE4fN0`T@(p}qy&)+?Ap9BgC>lXs%A?vBG3!nv~F=P}8OQgx89|c$%6Nx4vSR5KdS}P1o09);k zL}8Z0*N4!Gz@ov+VEwTeunM4nS0+JF!0_CR`8K6o}GO;Qo zS|rZ0LztoYROvzRP(Ktx59b8fnOJ=jEg%?r1}KD)4nY6R2+4P2aNYI8Y|w?Xv8k!R zHC43L0TmEB0JsW5MO_6vq-=pC2kKfYVjWD>%>&&-_nCOA!|{=ba16zm=wgpC)(CcT zQdcDD1Zd;Y6zv_3`fP0ZR1Q;sN?!#~p=a~yp%5sPYxBD|!-CyA7So1(e;4@z=+Nr5 zQey}sST78G6Tr$u@5;c$3w3pd^8>uJ1RL*WGi(6X6x8o9O9BeM1rVei-o(pA11B_i z3I(2`84_@5K$3Qfo>yco!kA13?+_YhX$Er&3ZlSFjR7%1c0dyjhXX%8o`UQMFtwKa z->L=`BDwwsfDeYA3gM&!s1P=*FvUS%MYylc)`fD^lQoQBAmV92?{fuC)6}UAN9S~yHq&7 z_nX9|6SDs-tV?{Lv}aKW{fx)UXWm^%IB98K zTAC4{2mb>^X$LqM1Q__tKNJ>EXSPz|%8o}aUX(aJg}=`Uh|^9>F$e(yv45UnV?P8R z1B9-S<4*s;r!RvfawIydZkFWVtu|y5;&&tI!(?Yq->&krj~?^M-Dc16_2#j0A9}7I zZ)xtHqk$E^v~z6N-H59^-2rh4{V}Y1StGZ$DZy&=%jFKw`YcHf9MkacMIfK{>8lN;c`B&q3?s@sv7!K~@fH3Cg zo8XpP+Mj$gKUu2#((G%@@TJo))w+VmLQgZQRHZFsn${Q1AMViF(slF7ms5#F-7?oW zBIIRPWkhii*BVXH(PU2_AF8xFe|c;#+tq}rYXNqZ&9f;_VKP!5SkMMe#~UU&d8S*A zayAscS8|*s->ErR>K9KorZNv{AK6QWJ>f)?_0F8VfVlj9OTWyqr$5Fq719RYsRsZL zZ7eR2T^4`|9J^2m-5aHMyhYB}piC~#ij$r3uKl9@3Uh%-|w^DlTObUqjDI1XZ_ z1BjX0E11d5UGDETKnw|Xc&O#~bUV+lnEBrTE0FuZwE^`tvI7Dr989XO;3*K7vJpXf z0dBD4F|hEmxq%cAL_A6m0nW8NVi}lunVm3bd=LQ*r*%Rw8yl~LUC2%hg{Bu_P8ebk z84C)u2$)|4%yxCR5VT(&?}$;lrd^B7yG${A~bgQ+9lS zdj4ypPz$c>k*<&IPEi+O2EF9b^0p7lmq49Iy@8X`J#me1` zT*k$OKHR0;1}+R}HZjWFbdMU6ye?2No@USfIq6llp?`Z>P+)ZL zRK?lbjqqN7f^^q+3bWY4H^7P`{SueWU@4l~Ct)9*jvaM%wlBmx9LBOj3uPgMPhg}>k#IS{F)jQl~sl~H8n05}Mz zxIc#d0-=8qX7d99%>h$D>xZ5J5s)78Zvh|+6H`FkW(WfWh)Y;SO>jO52SWehd}6m6 z1wa!`RvZ3z^9hYTtj#Gj>afBbR;HHCv_>sYhfsj-7l2sC)X9dXK&XagcoagoK_qdf z?%?Q+jFYA|5{wU?U|iUP=n^jQTokDe7__|=bNm{j)QTzgl$`7F7xnRu;xnxVXeWMHqFkS!!}t@3)%t)oe$l+iZ2jw zoa$mfh!y8K{MOWUnn(5s=bn=l&f1F>IX$g8OA(T`8Dm;{{Bfa`23_Q*EnD(0R-Nkf zzFxY&AaYC6BENuEeSaUmTUhy`c7b2Ak{OFinI>RceLrREJvdcB7@!IWfI>Ew?@xQ} zMsb@@g;W4SYr2w^9=>TU!3+U}nKpxrf&oI+a)Cl1P&gaFvY811~SOZ+y)>c>d1jLv&t!PzNE-2TssQ!6?2@3MYRV~ZP0GDKdDSgzDGP^d{x93WG zk`+5j3Gsse$_2uQ6?-bf-ATrvmO&zFt2P=qR$fX0NY z>?H>gfVj@}6;Xx9wE%IAKwKRVcLxBQx~B6PU>rW$Uk^0gxzE&XX>XtY?eXgqM|OlV zv$lS|J1voWf&TyymkflSr~EfaGnDJ^CPz>TGf*LP7Y0hR%Jz9S%~rSnmK%Mz?Sm`f zwgeB_JxKCkz!Su8=9d|2O>_4bBfT#(8&VZ7`evF&9ZB!m#b>nNpe3ixzF>RST)n{H zXKa*YoPe*fMswkIBi}nb!BV}>wX!#5d~j%6)2cZ#a$j3bxi?fh{4?U5?NSn1v0J}5jA{Y^aVRms zT=L+thp{YVUSV~hzM(qW;I=}icUH$Cod@5#+QiN=K=~}CB3o={O17px(j7gLR32q1ZId(KW0Z_GzL1EY!o~{SGTa)frj|FY{{kNQxPi}9!(lLJ~`;hz65IkEV zKQ8fnTs#mLyODy30wO=S1)p;SxW9ygL4i&pi5Ns$HU{D1%S;xug9O%2yO2W26qp@` z0-CY=Kx1cB(ye8nfwG1s%ms_bI8%^#B2CHBa2d3Rm0>#(`BY8|kjLEy?W=+nE@vd% zjFu?pm7wRS9^w&h5&Z?Kfw-EDl@z4>1m;S> zhJyAU61QT1(RRW3uNbc|;~!;EB9=WdkQV~WvU*uqBeXzH2v7kDv94G! z0o%GMWCzRBhtCwVpR|9wZL|-a;%56hFLy-3r#&t+>StLXQ(Q7kf>yl~qLKdlPWbwt z?-_rlLY??B&N^oHfPe1*Jpu9j+F4h+dowJ1vu^vmdV`oq@SXRP<*xW$V6uAG-dLH` zA4D>)42UcKqrJA#e`5mht0V}rnE?s-6ztCT0z3dWz*T@1i>K`_3&8pV5`Z|s%*3e3 zK@SyX;7c2RE}VER_2|B)_Sn507D7r2y?-dh$*UOq-E z=_hNw8Mc76*m>5Or?YX4SuK?LX%6$2Uq<3GX|kG|E1@4z3WyrY3PU|2*vuc`V1IT0 zw#IFuJ!(OE0T-XL^YnJqRPKDJT6RWh*qv*+wWULFiMw&xyF58c8#_ubcwC!6wcfH3 z^+>lGPZy9A_q@UNEzUuEGw#uZe$!XfVELfL18JSn@BIEdrbW1)*pkm3*fFpF>5`9M z$AsbB8;YBv(CN5}X1U(1oFd|fYofKx++R9hz8+5b(y3MwKjJo!R##harA}Y8vO{~U ztHfK^ey?F#y+00hWwhtKz;xWxY(9LR_zw;H1H3@y2BufQD{Lb+|4%0rIbhollokKm3FRMHgVi3VJzVWi zr;v6F#}$5XohpG`*9*R;md3a*F;|vOEoZOo12mtte05`w{B4zwsPeb%hMRV!&-sZ& zf4IOr&=<1@Z=~Ik!Sv2}f5g_-*6Sj5-PsvaUq0jJt{>M?iD{6%6|U2gQ1t0janjMp zsrT?>&rVe8ii_!-Zko=$G@bCa`RV@PyG-&GhC}h}+nSqu3VF~oX1XrmvT7?{eNBJ#d3W`VuWY#i4 zfi1#+nvFz60xGN7Ky@eyz(DrD;zWXOBhQNNBQFEol_zrEUuLReeURqtW}L42R?OD!)kCguoC)E} z&6YW&x6@aV^aSl4qvW0xS8=`W>{~*K3syQaNw|6;a-WT_N z%o7s7a(hshuI_PiRx9M?nS0vRoK9Dt4rbB&vf1V@%HsLdemBf9dRuq$@XH|`zM9^l z=S^dZp5@u@t_%n6<$jc+Pd%vcZ0W{jWE_Z{)*yBwRcrUfdjo zKP({q)b~C+=o#zKnPE)>Os6yq56r(7jUP3XwL;k81(JtSjZ!7A)Lz^q@{IYWUZt?K z+?)u>QU5;cp=~U>^9!a@Av=ki%YD4kSVTz{ZW!BQsGia6^lLTkV}`>@7p6Rxl7{;#o^LCQ zGIDm0IO+svvdyA5Z+@&t|FMd0QdhF2B4~KLBsp&t{_cTy3f#v{gSIs*=zk07jA&OC zXV3w(e(~ifWM$B-Qwdu}xn8PeC3w;0HJo3r3T$7?3tjUY!MsQ;@?TXDL;A;Xs<{qMi+CZI z&mMdvLJ$!1*$%%Fp-C4dx&coA6mQq9Bd@NB>^M{WKXR@<&bN!|%y}%arZToY-I;$-H5$eli7yOdkVnBPa;Ru4Y zr_h6ITFhz@^Qf<5-=LFx2%VK;(WBP9_m^#FD+E0~O>F)> zL#9mR_~=2F_piq&z69T*U6Jhf&D>v&%vrgP~&-Y!QB1`%FV&X%e~s9o^cQGav8P&gIp32p(|1-cDD+!5fv1(#5+s9%A6 zy;+tYcOJ9`*9<(+N7-PT{GBxj+8e)Ge|dzm9*)9cIW7xjn8QIEJ+&gPQ%f)Fo9aT& zSivL?p+W!pr*#Nbg@c3=0Jp9%z?vzKL+K7cb?n%ShWhsN-Hn|ephEN(XPn1(SBdu{ z=V<26>V_Ez%_7seeJj@2T2hPOKpk=!$$l=bv_VVy#-X{dpC+ZIb&tALX$4k^DRrM) zjMnC0t|@cG>-#mt=3mXd`z2nu|5+05RTHxO3CdNbpue!AW0v@Wzy6}bcEBLCc>u34 zm6D5fJK&ZSl;fqX)_*@+z7Ch7W5qbzb;~_zOB3}NrLx-0eQ;mqbtzs(iBX$Lo&9f% zuJoJTsJ-QJB;5@rbpJqe%=S_#Gjl6!vk&y1G@kww!lJww_wAjw0o$u++1b87u(-AhpV c7U9hG>mD@+Yepv8c_#4Z2Dqg$M1z+4KNWa*UH||9 literal 0 HcmV?d00001 diff --git a/aspnet-samples/AdvancedChatRoom/Owin.1.0/lib/net40/Owin.dll b/aspnet-samples/AdvancedChatRoom/Owin.1.0/lib/net40/Owin.dll new file mode 100644 index 0000000000000000000000000000000000000000..ba6e21eda71d055d039e42c9d0902349b3d073f7 GIT binary patch literal 4608 zcmeHKeQaA-6+h2$vSevP8rErDljUW}SfVvi?*^3(7u>Jg;gsGw5lkjQa7QoqE-~qb}$ttG^AAwP&-X97Jm0W zJ9d+9e*@Ze-tV1z&bjBFbMD7G8T|ZSDj^~_p1C=qqj>Y?7x>XI194UTu_~IaINfkm z8aUk$nN%$~V;U(_Ny~9X*9}{aG1<)OvZ~9$;jo-G63nx7>5WY}(<8k^15ye7EBWk5 zezr^GYN(VdiEad^%;65T;4S0v;~}aRw9E0EGr0ev%>cpQxQP&#e>YdEzWG7$K)FLj%@6NACesWk3eg0F+?I$N?_Bc}b?52)yN%}+jr-=JQaU3OT}IBi zTg7ceCYmW`d9FxaG>0v+oXTf1kat?vnYZhhO~CFCOh#(jDH| zEs-R=-|KTjS<1R~IR4 z?B5&;f>(|H@A=qn&4_VjGz^#emp>zkeEsu|cDfl1@RvC<~CE@G&VPmC^G84-3w#0^gFjg=*Kor7miMlVuck zwY$p50`i%h`FN(DMembTFL(}@=#`~o^FEz2ekCJ%LyDtX|| zJD^w6TF{LY0Ny3|_tA5pEjk7a(*a-)8NfLG0C+zgmV#7C?eLOE^ALSXP$lG^$!ElQ z4~l&7qn2+HHRVa7&kP!gtj5;U@RX{15}HP#Kqk|jRkZ{&1(VWN+%PpYM&W78W@%54 zp=m5`tA=iQ`kBs5HBO0CC%rnMJ3vS^6 zPy|Mp-3J?N$}sOQ*vJoI$y^W=uq>92Y10wa)>uI?&kiyxZmJm`?_yz(p(oW;)>J-3 zoYmlKkP*!2q z++y)@5XDqYwTqUR@5~Ze?9bZ1(UT|Hrr~|7nj+8Defvc!Kk~)s*b3jJJ>@bjuPJp^ z)!rbxYRYTtYD;CQwx+@@Q%!k!b4~^;lAE6mw=79j99&S7maXGt`OGu?6u4(_Z9=7t zUnJ;{h67%H1MtgayX$yq<=b^uYV^WS{u+P(gNj!Fj`D+-_w6|`K6BUJ0|y6&zx%_z zSEGk--~H5YfA{MH%ck14pSWS>s;~0!+1|SIq13iRZ;eK`{3^Eo`_F&#)urDkdAlXn z@#E6(B+j|^|1=f8IB{C~-V2|2bE@n})x<3m=FZoip6$DJO~{OGIMuiE$>cr9`z5;7 zGt?WI-@~hN%esz#2qcPB-83%>s#Zo*riZZGtN9ptULyM{By#h^O?0P3w-1kphUB6n zE?c%@+Sv?>8f?X+5@+~Ui2Jbx_k`Ei8E^M0pKe{V#@pHIOL$|gO47HsHQ`HiD0i<- zvd+!~J~9%Ocs*@mAcmqV?qyCmb;E5upApy1WHQlRga1*F6_h`HDcSM*q=Ng_v(8-WKi^SK z?Rc->sig!1@VLtd9K%<5E3lVFL4|0ThR_cI`#|${-2Ki6&NtVw<}u%n`;W3Z`Hk_@5LBC6y>NnBwkri8b5~7HfAA2G%jM3fdSNT8B{M>;a>t;CdtsUh1WLt8T9$g zwvZ*kkAvdPhr&~u_a_Lh1sV4<1MNZ_!!#u<@G;GZxiDr-*tCjty{MPC?>&tcM~Z;W0QiJ(K{SSIgWsua^d3GbOZn").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
t
",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.slim.js b/aspnet-samples/AdvancedChatRoom/Scripts/jquery-3.7.1.js similarity index 63% rename from aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.slim.js rename to aspnet-samples/AdvancedChatRoom/Scripts/jquery-3.7.1.js index aaabce83..1a86433c 100644 --- a/aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.slim.js +++ b/aspnet-samples/AdvancedChatRoom/Scripts/jquery-3.7.1.js @@ -1,15 +1,12 @@ /*! - * jQuery JavaScript Library v3.4.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector + * jQuery JavaScript Library v3.7.1 * https://jquery.com/ * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors + * Copyright OpenJS Foundation and other contributors * Released under the MIT license * https://jquery.org/license * - * Date: 2019-05-01T21:04Z + * Date: 2023-08-28T13:37Z */ ( function( global, factory ) { @@ -23,7 +20,7 @@ // (such as Node.js), expose a factory as module.exports. // This accentuates the need for the creation of a real `window`. // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. + // See ticket trac-14549 for more info. module.exports = global.document ? factory( global, true ) : function( w ) { @@ -47,13 +44,16 @@ var arr = []; -var document = window.document; - var getProto = Object.getPrototypeOf; var slice = arr.slice; -var concat = arr.concat; +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + var push = arr.push; @@ -73,12 +73,16 @@ var support = {}; var isFunction = function isFunction( obj ) { - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; var isWindow = function isWindow( obj ) { @@ -86,6 +90,8 @@ var isWindow = function isWindow( obj ) { }; +var document = window.document; + var preservedScriptAttributes = { @@ -141,8 +147,9 @@ function toType( obj ) { -var - version = "3.4.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector", +var version = "3.7.1", + + rhtmlSuffix = /HTML$/i, // Define a local copy of jQuery jQuery = function( selector, context ) { @@ -150,11 +157,7 @@ var // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + }; jQuery.fn = jQuery.prototype = { @@ -220,6 +223,18 @@ jQuery.fn = jQuery.prototype = { return this.eq( -1 ); }, + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); @@ -353,9 +368,10 @@ jQuery.extend( { return true; }, - // Evaluates a script in a global context - globalEval: function( code, options ) { - DOMEval( code, { nonce: options && options.nonce } ); + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); }, each: function( obj, callback ) { @@ -379,11 +395,36 @@ jQuery.extend( { return obj; }, - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); + + // Retrieve the text value of an array of DOM nodes + text: function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += jQuery.text( node ); + } + } + if ( nodeType === 1 || nodeType === 11 ) { + return elem.textContent; + } + if ( nodeType === 9 ) { + return elem.documentElement.textContent; + } + if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; }, // results is for internal usage only @@ -394,7 +435,7 @@ jQuery.extend( { if ( isArrayLike( Object( arr ) ) ) { jQuery.merge( ret, typeof arr === "string" ? - [ arr ] : arr + [ arr ] : arr ); } else { push.call( ret, arr ); @@ -408,6 +449,15 @@ jQuery.extend( { return arr == null ? -1 : indexOf.call( arr, elem, i ); }, + isXMLDoc: function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Assume HTML when documentElement doesn't yet exist, such as inside + // document fragments. + return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); + }, + // Support: Android <=4.0 only, PhantomJS 1 only // push.apply(_, arraylike) throws on ancient WebKit merge: function( first, second ) { @@ -472,7 +522,7 @@ jQuery.extend( { } // Flatten any nested arrays - return concat.apply( [], ret ); + return flat( ret ); }, // A global GUID counter for objects @@ -489,9 +539,9 @@ if ( typeof Symbol === "function" ) { // Populate the class2type map jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); function isArrayLike( obj ) { @@ -509,44 +559,98 @@ function isArrayLike( obj ) { return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj; } -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.4 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2019-04-08 - */ -(function( window ) { + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var pop = arr.pop; + + +var sort = arr.sort; + + +var splice = arr.splice; + + +var whitespace = "[\\x20\\t\\r\\n\\f]"; + + +var rtrimCSS = new RegExp( + "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", + "g" +); + + + + +// Note: an element does not contain itself +jQuery.contains = function( a, b ) { + var bup = b && b.parentNode; + + return a === bup || !!( bup && bup.nodeType === 1 && ( + + // Support: IE 9 - 11+ + // IE doesn't have `contains` on SVG. + a.contains ? + a.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); +}; + + + + +// CSS string/identifier serialization +// https://drafts.csswg.org/cssom/#common-serializing-idioms +var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; + +function fcssescape( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; +} + +jQuery.escapeSelector = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + + + + +var preferredDoc = document, + pushNative = push; + +( function() { var i, - support, Expr, - getText, - isXML, - tokenize, - compile, - select, outermostContext, sortInput, hasDuplicate, + push = pushNative, // Local document vars - setDocument, document, - docElem, + documentElement, documentIsHTML, rbuggyQSA, - rbuggyMatches, matches, - contains, // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, + expando = jQuery.expando, dirruns = 0, done = 0, classCache = createCache(), @@ -560,173 +664,145 @@ var i, return 0; }, - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + + "loop|multiple|open|readonly|required|scoped", // Regular expressions - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: // 1. quoted (capture 3; capture 4 or capture 5) "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) ".*" + ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + + whitespace + "*" ), rdescend = new RegExp( whitespace + "|>" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + ID: new RegExp( "^#(" + identifier + ")" ), + CLASS: new RegExp( "^\\.(" + identifier + ")" ), + TAG: new RegExp( "^(" + identifier + "|[*])" ), + ATTR: new RegExp( "^" + attributes ), + PSEUDO: new RegExp( "^" + pseudos ), + CHILD: new RegExp( + "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + bool: new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + needsContext: new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, - rhtml = /HTML$/i, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, - rnative = /^[^{]+\{\s*\[native \w/, - // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { + // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } + if ( nonHex ) { - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + // Strip the backslash prefix from a non-hex escape sequence + return nonHex; } - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + return high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }, - // Used for iframes - // See setDocument() + // Used for iframes; see `setDocument`. + // Support: IE 9 - 11+, Edge 12 - 18+ // Removing the function wrapper causes a "Permission Denied" - // error in IE + // error in IE/Edge. unloadHandler = function() { setDocument(); }, inDisabledFieldset = addCombinator( function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + return elem.disabled === true && nodeName( elem, "fieldset" ); }, { dir: "parentNode", next: "legend" } ); +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + // Optimize for push.apply( _, NodeList ) try { push.apply( - (arr = slice.call( preferredDoc.childNodes )), + ( arr = slice.call( preferredDoc.childNodes ) ), preferredDoc.childNodes ); - // Support: Android<4.0 + + // Support: Android <=4.0 // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; + push = { + apply: function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + }, + call: function( target ) { + pushNative.apply( target, slice.call( arguments, 1 ) ); } }; } -function Sizzle( selector, context, results, seed ) { +function find( selector, context, results, seed ) { var m, i, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, @@ -744,30 +820,26 @@ function Sizzle( selector, context, results, seed ) { // Try to shortcut find operations (as opposed to filters) in HTML documents if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } + setDocument( context ); context = context || document; if ( documentIsHTML ) { // If the selector is sufficiently simple, try using a "get*By*" DOM method // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { // ID selector - if ( (m = match[1]) ) { + if ( ( m = match[ 1 ] ) ) { // Document context if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { + if ( ( elem = context.getElementById( m ) ) ) { - // Support: IE, Opera, Webkit - // TODO: identify versions + // Support: IE 9 only // getElementById can match elements by name instead of ID if ( elem.id === m ) { - results.push( elem ); + push.call( results, elem ); return results; } } else { @@ -777,40 +849,32 @@ function Sizzle( selector, context, results, seed ) { // Element context } else { - // Support: IE, Opera, Webkit - // TODO: identify versions + // Support: IE 9 only // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && + if ( newContext && ( elem = newContext.getElementById( m ) ) && + find.contains( context, elem ) && elem.id === m ) { - results.push( elem ); + push.call( results, elem ); return results; } } // Type selector - } else if ( match[2] ) { + } else if ( match[ 2 ] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - + } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); return results; } } // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) && - - // Support: IE 8 only - // Exclude object elements - (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { + if ( !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { newSelector = selector; newContext = context; @@ -819,27 +883,40 @@ function Sizzle( selector, context, results, seed ) { // descendant combinators, which is not what we want. // In such cases, we work around the behavior by prefixing every selector in the // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && rdescend.test( selector ) ) { + if ( nodeType === 1 && + ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when + // strict-comparing two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( newContext != context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = jQuery.escapeSelector( nid ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } } // Prefix every selector in the list groups = tokenize( selector ); i = groups.length; while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); } newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; } try { @@ -859,7 +936,7 @@ function Sizzle( selector, context, results, seed ) { } // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); + return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); } /** @@ -872,18 +949,21 @@ function createCache() { var keys = []; function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + + // Use (key + " ") to avoid collision with native prototype properties + // (see https://github.com/jquery/sizzle/issues/157) if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries delete cache[ keys.shift() ]; } - return (cache[ key + " " ] = value); + return ( cache[ key + " " ] = value ); } return cache; } /** - * Mark a function for special use by Sizzle + * Mark a function for special use by jQuery selector module * @param {Function} fn The function to mark */ function markFunction( fn ) { @@ -896,72 +976,31 @@ function markFunction( fn ) { * @param {Function} fn Passed the created element and returns a boolean result */ function assert( fn ) { - var el = document.createElement("fieldset"); + var el = document.createElement( "fieldset" ); try { return !!fn( el ); - } catch (e) { + } catch ( e ) { return false; } finally { + // Remove from its parent by default if ( el.parentNode ) { el.parentNode.removeChild( el ); } + // release memory in IE el = null; } } -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - /** * Returns a function to use in pseudos for input types * @param {String} type */ function createInputPseudo( type ) { return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; + return nodeName( elem, "input" ) && elem.type === type; }; } @@ -971,8 +1010,8 @@ function createInputPseudo( type ) { */ function createButtonPseudo( type ) { return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; + return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && + elem.type === type; }; } @@ -1008,12 +1047,11 @@ function createDisabledPseudo( disabled ) { } } - // Support: IE 6 - 11 + // Support: IE 6 - 11+ // Use the isDisabled shortcut property to check for disabled fieldset ancestors return elem.isDisabled === disabled || // Where there is no isDisabled, check manually - /* jshint -W018 */ elem.isDisabled !== !disabled && inDisabledFieldset( elem ) === disabled; } @@ -1037,25 +1075,25 @@ function createDisabledPseudo( disabled ) { * @param {Function} fn */ function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { + return markFunction( function( argument ) { argument = +argument; - return markFunction(function( seed, matches ) { + return markFunction( function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); } } - }); - }); + } ); + } ); } /** - * Checks a node for validity as a Sizzle context + * Checks a node for validity as a jQuery selector context * @param {Element|Object=} context * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */ @@ -1063,117 +1101,121 @@ function testContext( context ) { return context && typeof context.getElementsByTagName !== "undefined" && context; } -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = (elem.ownerDocument || elem).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - /** * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document + * @param {Element|Object} [node] An element or document object to use to set the document * @returns {Object} Returns the current document */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, +function setDocument( node ) { + var subWindow, doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } // Update global variables document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); + documentElement = document.documentElement; + documentIsHTML = !jQuery.isXMLDoc( document ); + + // Support: iOS 7 only, IE 9 - 11+ + // Older browsers didn't support unprefixed `matches`. + matches = documentElement.matches || + documentElement.webkitMatchesSelector || + documentElement.msMatchesSelector; + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors + // (see trac-13936). + // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, + // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. + if ( documentElement.msMatchesSelector && + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 9 - 11+, Edge 12 - 18+ + subWindow.addEventListener( "unload", unloadHandler ); + } + + // Support: IE <10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + documentElement.appendChild( el ).id = jQuery.expando; + return !document.getElementsByName || + !document.getElementsByName( jQuery.expando ).length; + } ); - // Support: IE 9-11, Edge - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - if ( preferredDoc !== document && - (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + // Support: IE 9 only + // Check to see if it's possible to do matchesSelector + // on a disconnected node. + support.disconnectedMatch = assert( function( el ) { + return matches.call( el, "*" ); + } ); - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); + // Support: IE 9 - 11+, Edge 12 - 18+ + // IE/Edge don't support the :scope pseudo-class. + support.scope = assert( function() { + return document.querySelectorAll( ":scope" ); + } ); - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); + // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only + // Make sure the `:has()` argument is parsed unforgivingly. + // We include `*` in the test to detect buggy implementations that are + // _selectively_ forgiving (specifically when the list includes at least + // one valid selector). + // Note that we treat complete lack of support for `:has()` as if it were + // spec-compliant support, which is fine because use of `:has()` in such + // environments will fail in the qSA path and fall back to jQuery traversal + // anyway. + support.cssHas = assert( function() { + try { + document.querySelector( ":has(*,:jqfake)" ); + return false; + } catch ( e ) { + return true; } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( el ) { - el.className = "i"; - return !el.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( el ) { - el.appendChild( document.createComment("") ); - return !el.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); + } ); // ID filter and find if ( support.getById ) { - Expr.filter["ID"] = function( id ) { + Expr.filter.ID = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { - return elem.getAttribute("id") === attrId; + return elem.getAttribute( "id" ) === attrId; }; }; - Expr.find["ID"] = function( id, context ) { + Expr.find.ID = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var elem = context.getElementById( id ); return elem ? [ elem ] : []; } }; } else { - Expr.filter["ID"] = function( id ) { + Expr.filter.ID = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode("id"); + elem.getAttributeNode( "id" ); return node && node.value === attrId; }; }; // Support: IE 6 - 7 only // getElementById is not reliable as a find shortcut - Expr.find["ID"] = function( id, context ) { + Expr.find.ID = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var node, i, elems, elem = context.getElementById( id ); @@ -1181,7 +1223,7 @@ setDocument = Sizzle.setDocument = function( node ) { if ( elem ) { // Verify the id attribute - node = elem.getAttributeNode("id"); + node = elem.getAttributeNode( "id" ); if ( node && node.value === id ) { return [ elem ]; } @@ -1189,8 +1231,8 @@ setDocument = Sizzle.setDocument = function( node ) { // Fall back on getElementsByName elems = context.getElementsByName( id ); i = 0; - while ( (elem = elems[i++]) ) { - node = elem.getAttributeNode("id"); + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); if ( node && node.value === id ) { return [ elem ]; } @@ -1203,39 +1245,18 @@ setDocument = Sizzle.setDocument = function( node ) { } // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } + Expr.find.TAG = function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); - return tmp; - } - return results; - }; + // DocumentFragment nodes don't have gEBTN + } else { + return context.querySelectorAll( tag ); + } + }; // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + Expr.find.CLASS = function( className, context ) { if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { return context.getElementsByClassName( className ); } @@ -1246,153 +1267,94 @@ setDocument = Sizzle.setDocument = function( node ) { // QSA and matchesSelector support - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 rbuggyQSA = []; - if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( el ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { - assert(function( el ) { - el.innerHTML = "" + - ""; + var input; - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement("input"); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); + documentElement.appendChild( el ).innerHTML = + "" + + ""; - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } + // Support: iOS <=7 - 8 only + // Boolean attributes and "value" are not treated correctly in some XML documents + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll(":enabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } + // Support: iOS <=7 - 8 only + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll(":disabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } + // Support: iOS 8 only + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } + // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ + // In some of the document kinds, these selectors wouldn't work natively. + // This is probably OK but for backwards compatibility we want to maintain + // handling them through jQuery traversal in jQuery 3.x. + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE 9 - 11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ + // In some of the document kinds, these selectors wouldn't work natively. + // This is probably OK but for backwards compatibility we want to maintain + // handling them through jQuery traversal in jQuery 3.x. + documentElement.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + } ); - assert(function( el ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); + if ( !support.cssHas ) { - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); + // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ + // Our regular `try-catch` mechanism fails to detect natively-unsupported + // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) + // in browsers that parse the `:has()` argument as a forgiving selector list. + // https://drafts.csswg.org/selectors/#relational now requires the argument + // to be parsed unforgivingly, but browsers have not yet fully adjusted. + rbuggyQSA.push( ":has" ); } - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); /* Sorting ---------------------------------------------------------------------- */ // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { + sortOrder = function( a, b ) { // Flag for duplicate removal if ( a === b ) { @@ -1407,7 +1369,11 @@ setDocument = Sizzle.setDocument = function( node ) { } // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? a.compareDocumentPosition( b ) : // Otherwise we know they are disconnected @@ -1415,148 +1381,109 @@ setDocument = Sizzle.setDocument = function( node ) { // Disconnected nodes if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { // Choose the first element that is related to our preferred document - if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a === document || a.ownerDocument == preferredDoc && + find.contains( preferredDoc, a ) ) { return -1; } - if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b === document || b.ownerDocument == preferredDoc && + find.contains( preferredDoc, b ) ) { return 1; } // Maintain original order return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 0; } return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === document ? -1 : - b === document ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; }; return document; -}; +} -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); +find.matches = function( expr, elements ) { + return find( expr, null, null, elements ); }; -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } +find.matchesSelector = function( elem, expr ) { + setDocument( elem ); - if ( support.matchesSelector && documentIsHTML && + if ( documentIsHTML && !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } - } catch (e) { + } catch ( e ) { nonnativeSelectorCache( expr, true ); } } - return Sizzle( expr, document, null, [ elem ] ).length > 0; + return find( expr, document, null, [ elem ] ).length > 0; }; -Sizzle.contains = function( context, elem ) { +find.contains = function( context, elem ) { + // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { setDocument( context ); } - return contains( context, elem ); + return jQuery.contains( context, elem ); }; -Sizzle.attr = function( elem, name ) { + +find.attr = function( elem, name ) { + // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) + + // Don't get fooled by Object.prototype properties (see trac-13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : undefined; - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; + if ( val !== undefined ) { + return val; + } -Sizzle.escape = function( sel ) { - return (sel + "").replace( rcssescape, fcssescape ); + return elem.getAttribute( name ); }; -Sizzle.error = function( msg ) { +find.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; @@ -1564,25 +1491,29 @@ Sizzle.error = function( msg ) { * Document sorting and removing duplicates * @param {ArrayLike} results */ -Sizzle.uniqueSort = function( results ) { +jQuery.uniqueSort = function( results ) { var elem, duplicates = [], j = 0, i = 0; // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); + // + // Support: Android <=4.0+ + // Testing for detecting duplicates is unpredictable so instead assume we can't + // depend on duplicate detection in all browsers without a stable sort. + hasDuplicate = !support.sortStable; + sortInput = !support.sortStable && slice.call( results, 0 ); + sort.call( results, sortOrder ); if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { + while ( ( elem = results[ i++ ] ) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } } while ( j-- ) { - results.splice( duplicates[ j ], 1 ); + splice.call( results, duplicates[ j ], 1 ); } } @@ -1593,42 +1524,11 @@ Sizzle.uniqueSort = function( results ) { return results; }; -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; +jQuery.fn.uniqueSort = function() { + return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); }; -Expr = Sizzle.selectors = { +Expr = jQuery.expr = { // Can be adjusted by the user cacheLength: 50, @@ -1649,20 +1549,22 @@ Expr = Sizzle.selectors = { }, preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); + ATTR: function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) + .replace( runescape, funescape ); - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; } return match.slice( 0, 4 ); }, - "CHILD": function( match ) { + CHILD: function( match ) { + /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) @@ -1673,49 +1575,55 @@ Expr = Sizzle.selectors = { 7 sign of y-component 8 y of y-component */ - match[1] = match[1].toLowerCase(); + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); + if ( !match[ 3 ] ) { + find.error( match[ 0 ] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) + ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); + } else if ( match[ 3 ] ) { + find.error( match[ 0 ] ); } return match; }, - "PSEUDO": function( match ) { + PSEUDO: function( match ) { var excess, - unquoted = !match[6] && match[2]; + unquoted = !match[ 6 ] && match[ 2 ]; - if ( matchExpr["CHILD"].test( match[0] ) ) { + if ( matchExpr.CHILD.test( match[ 0 ] ) ) { return null; } // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && + ( excess = tokenize( unquoted, true ) ) && + // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) @@ -1725,28 +1633,36 @@ Expr = Sizzle.selectors = { filter: { - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + TAG: function( nodeNameSelector ) { + var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? - function() { return true; } : + function() { + return true; + } : function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + return nodeName( elem, expectedNodeName ); }; }, - "CLASS": function( className ) { + CLASS: function( className ) { var pattern = classCache[ className + " " ]; return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + ( pattern = new RegExp( "(^|" + whitespace + ")" + className + + "(" + whitespace + "|$)" ) ) && classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); }, - "ATTR": function( name, operator, check ) { + ATTR: function( name, operator, check ) { return function( elem ) { - var result = Sizzle.attr( elem, name ); + var result = find.attr( elem, name ); if ( result == null ) { return operator === "!="; @@ -1757,18 +1673,34 @@ Expr = Sizzle.selectors = { result += ""; - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; + if ( operator === "=" ) { + return result === check; + } + if ( operator === "!=" ) { + return result !== check; + } + if ( operator === "^=" ) { + return check && result.indexOf( check ) === 0; + } + if ( operator === "*=" ) { + return check && result.indexOf( check ) > -1; + } + if ( operator === "$=" ) { + return check && result.slice( -check.length ) === check; + } + if ( operator === "~=" ) { + return ( " " + result.replace( rwhitespace, " " ) + " " ) + .indexOf( check ) > -1; + } + if ( operator === "|=" ) { + return result === check || result.slice( 0, check.length + 1 ) === check + "-"; + } + + return false; }; }, - "CHILD": function( type, what, argument, first, last ) { + CHILD: function( type, what, _argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; @@ -1780,8 +1712,8 @@ Expr = Sizzle.selectors = { return !!elem.parentNode; } : - function( elem, context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, + function( elem, _context, xml ) { + var cache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), @@ -1794,14 +1726,15 @@ Expr = Sizzle.selectors = { if ( simple ) { while ( dir ) { node = elem; - while ( (node = node[ dir ]) ) { + while ( ( node = node[ dir ] ) ) { if ( ofType ? - node.nodeName.toLowerCase() === name : + nodeName( node, name ) : node.nodeType === 1 ) { return false; } } + // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } @@ -1814,46 +1747,30 @@ Expr = Sizzle.selectors = { if ( forward && useCache ) { // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; + outerCache = parent[ expando ] || ( parent[ expando ] = {} ); + cache = outerCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex && cache[ 2 ]; node = nodeIndex && parent.childNodes[ nodeIndex ]; - while ( (node = ++nodeIndex && node && node[ dir ] || + while ( ( node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { + ( diff = nodeIndex = 0 ) || start.pop() ) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } } else { + // Use previously-cached element index if available if ( useCache ) { - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + cache = outerCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex; } @@ -1861,25 +1778,21 @@ Expr = Sizzle.selectors = { // xml :nth-child(...) // or :nth-last-child(...) or :nth(-last)?-of-type(...) if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { if ( ( ofType ? - node.nodeName.toLowerCase() === name : + nodeName( node, name ) : node.nodeType === 1 ) && ++diff ) { // Cache the index of each encountered element if ( useCache ) { - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - uniqueCache[ type ] = [ dirruns, diff ]; + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + outerCache[ type ] = [ dirruns, diff ]; } if ( node === elem ) { @@ -1897,18 +1810,19 @@ Expr = Sizzle.selectors = { }; }, - "PSEUDO": function( pseudo, argument ) { + PSEUDO: function( pseudo, argument ) { + // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes + // https://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); + find.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function - // just as Sizzle does + // just as jQuery does if ( fn[ expando ] ) { return fn( argument ); } @@ -1917,15 +1831,15 @@ Expr = Sizzle.selectors = { if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { + markFunction( function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); + idx = indexOf.call( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); } - }) : + } ) : function( elem ) { return fn( elem, 0, args ); }; @@ -1936,49 +1850,53 @@ Expr = Sizzle.selectors = { }, pseudos: { + // Potentially complex pseudos - "not": markFunction(function( selector ) { + not: markFunction( function( selector ) { + // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); + matcher = compile( selector.replace( rtrimCSS, "$1" ) ); return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { + markFunction( function( seed, matches, _context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); } } - }) : - function( elem, context, xml ) { - input[0] = elem; + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; matcher( input, null, xml, results ); - // Don't keep the element (issue #299) - input[0] = null; + + // Don't keep the element + // (see https://github.com/jquery/sizzle/issues/299) + input[ 0 ] = null; return !results.pop(); }; - }), + } ), - "has": markFunction(function( selector ) { + has: markFunction( function( selector ) { return function( elem ) { - return Sizzle( selector, elem ).length > 0; + return find( selector, elem ).length > 0; }; - }), + } ), - "contains": markFunction(function( text ) { + contains: markFunction( function( text ) { text = text.replace( runescape, funescape ); return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; }; - }), + } ), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value @@ -1986,57 +1904,65 @@ Expr = Sizzle.selectors = { // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { + // https://www.w3.org/TR/selectors/#lang-pseudo + lang: markFunction( function( lang ) { + // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); + if ( !ridentifier.test( lang || "" ) ) { + find.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { - if ( (elemLang = documentIsHTML ? + if ( ( elemLang = documentIsHTML ? elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); return false; }; - }), + } ), // Miscellaneous - "target": function( elem ) { + target: function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, - "root": function( elem ) { - return elem === docElem; + root: function( elem ) { + return elem === documentElement; }, - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + focus: function( elem ) { + return elem === safeActiveElement() && + document.hasFocus() && + !!( elem.type || elem.href || ~elem.tabIndex ); }, // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), + enabled: createDisabledPseudo( false ), + disabled: createDisabledPseudo( true ), + + checked: function( elem ) { - "checked": function( elem ) { // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + return ( nodeName( elem, "input" ) && !!elem.checked ) || + ( nodeName( elem, "option" ) && !!elem.selected ); }, - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly + selected: function( elem ) { + + // Support: IE <=11+ + // Accessing the selectedIndex property + // forces the browser to treat the default option as + // selected when in an optgroup. if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions elem.parentNode.selectedIndex; } @@ -2044,8 +1970,9 @@ Expr = Sizzle.selectors = { }, // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo + empty: function( elem ) { + + // https://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) // nodeType < 6 works because attributes (2) do not appear as children @@ -2057,86 +1984,92 @@ Expr = Sizzle.selectors = { return true; }, - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); + parent: function( elem ) { + return !Expr.pseudos.empty( elem ); }, // Element/input types - "header": function( elem ) { + header: function( elem ) { return rheader.test( elem.nodeName ); }, - "input": function( elem ) { + input: function( elem ) { return rinputs.test( elem.nodeName ); }, - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; + button: function( elem ) { + return nodeName( elem, "input" ) && elem.type === "button" || + nodeName( elem, "button" ); }, - "text": function( elem ) { + text: function( elem ) { var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && + return nodeName( elem, "input" ) && elem.type === "text" && - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + // Support: IE <10 only + // New HTML5 attribute values (e.g., "search") appear + // with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); }, // Position-in-collection - "first": createPositionalPseudo(function() { + first: createPositionalPseudo( function() { return [ 0 ]; - }), + } ), - "last": createPositionalPseudo(function( matchIndexes, length ) { + last: createPositionalPseudo( function( _matchIndexes, length ) { return [ length - 1 ]; - }), + } ), - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; - }), + } ), - "even": createPositionalPseudo(function( matchIndexes, length ) { + even: createPositionalPseudo( function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; - }), + } ), - "odd": createPositionalPseudo(function( matchIndexes, length ) { + odd: createPositionalPseudo( function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; + } ), + + lt: createPositionalPseudo( function( matchIndexes, length, argument ) { + var i; + + if ( argument < 0 ) { + i = argument + length; + } else if ( argument > length ) { + i = length; + } else { + i = argument; + } + for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; - }), + } ), - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + gt: createPositionalPseudo( function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; - }) + } ) } }; -Expr.pseudos["nth"] = Expr.pseudos["eq"]; +Expr.pseudos.nth = Expr.pseudos.eq; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { @@ -2151,7 +2084,7 @@ function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { +function tokenize( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; @@ -2167,37 +2100,39 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) { while ( soFar ) { // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { if ( match ) { + // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; + soFar = soFar.slice( match[ 0 ].length ) || soFar; } - groups.push( (tokens = []) ); + groups.push( ( tokens = [] ) ); } matched = false; // Combinators - if ( (match = rcombinators.exec( soFar )) ) { + if ( ( match = rleadingCombinator.exec( soFar ) ) ) { matched = match.shift(); - tokens.push({ + tokens.push( { value: matched, + // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); + type: match[ 0 ].replace( rtrimCSS, " " ) + } ); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { matched = match.shift(); - tokens.push({ + tokens.push( { value: matched, type: type, matches: match - }); + } ); soFar = soFar.slice( matched.length ); } } @@ -2210,20 +2145,23 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) { // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; + if ( parseOnly ) { + return soFar.length; + } + + return soFar ? + find.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} function toSelector( tokens ) { var i = 0, len = tokens.length, selector = ""; for ( ; i < len; i++ ) { - selector += tokens[i].value; + selector += tokens[ i ].value; } return selector; } @@ -2236,9 +2174,10 @@ function addCombinator( matcher, combinator, base ) { doneName = done++; return combinator.first ? + // Check against closest ancestor/preceding element function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { + while ( ( elem = elem[ dir ] ) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } @@ -2248,12 +2187,12 @@ function addCombinator( matcher, combinator, base ) { // Check against all ancestor/preceding elements function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, + var oldCache, outerCache, newCache = [ dirruns, doneName ]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching if ( xml ) { - while ( (elem = elem[ dir ]) ) { + while ( ( elem = elem[ dir ] ) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; @@ -2261,27 +2200,24 @@ function addCombinator( matcher, combinator, base ) { } } } else { - while ( (elem = elem[ dir ]) ) { + while ( ( elem = elem[ dir ] ) ) { if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { + if ( skip && nodeName( elem, skip ) ) { elem = elem[ dir ] || elem; - } else if ( (oldCache = uniqueCache[ key ]) && + } else if ( ( oldCache = outerCache[ key ] ) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); + return ( newCache[ 2 ] = oldCache[ 2 ] ); } else { + // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; + outerCache[ key ] = newCache; // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { return true; } } @@ -2297,20 +2233,20 @@ function elementMatcher( matchers ) { function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { + if ( !matchers[ i ]( elem, context, xml ) ) { return false; } } return true; } : - matchers[0]; + matchers[ 0 ]; } function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); + find( selector, contexts[ i ], results ); } return results; } @@ -2323,7 +2259,7 @@ function condense( unmatched, map, filter, context, xml ) { mapped = map != null; for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { + if ( ( elem = unmatched[ i ] ) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { @@ -2343,34 +2279,38 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, matcherOut, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + elems = seed || + multipleContexts( selector || "*", + context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : - elems, + elems; - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + if ( matcher ) { - // ...intermediate processing is necessary - [] : + // If we have a postFinder, or filtered seed, or non-seed postFilter + // or preexisting results, + matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - // ...otherwise use results directly - results : - matcherIn; + // ...intermediate processing is necessary + [] : - // Find primary matches - if ( matcher ) { + // ...otherwise use results directly + results; + + // Find primary matches matcher( matcherIn, matcherOut, context, xml ); + } else { + matcherOut = matcherIn; } // Apply postFilter @@ -2381,8 +2321,8 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); } } } @@ -2390,25 +2330,27 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { - if ( (elem = matcherOut[i]) ) { + if ( ( elem = matcherOut[ i ] ) ) { + // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); + temp.push( ( matcherIn[ i ] = elem ) ); } } - postFinder( null, (matcherOut = []), temp, xml ); + postFinder( null, ( matcherOut = [] ), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { - seed[temp] = !(results[temp] = elem); + seed[ temp ] = !( results[ temp ] = elem ); } } } @@ -2426,14 +2368,14 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS push.apply( results, matcherOut ); } } - }); + } ); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) @@ -2441,42 +2383,52 @@ function matcherFromTokens( tokens ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; + return indexOf.call( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( + ( checkContext = context ).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) + + // Avoid hanging onto element + // (see https://github.com/jquery/sizzle/issues/299) checkContext = null; return ret; } ]; for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { + if ( Expr.relative[ tokens[ j ].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), + tokens.slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrimCSS, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), j < len && toSelector( tokens ) ); } @@ -2497,29 +2449,42 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { unmatched = seed && [], setMatched = [], contextBackup = outermostContext, + // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + elems = seed || byElement && Expr.find.TAG( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), len = elems.length; if ( outermost ) { - outermostContext = context === document || context || outermost; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; } // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + // Support: iOS <=7 - 9 only + // Tolerate NodeList properties (IE: "length"; Safari: ) matching + // elements by id. (see trac-14142) + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { if ( byElement && elem ) { j = 0; - if ( !context && elem.ownerDocument !== document ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { setDocument( elem ); xml = !documentIsHTML; } - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context || document, xml) ) { - results.push( elem ); + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + push.call( results, elem ); break; } } @@ -2530,8 +2495,9 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { // Track unmatched elements for set filters if ( bySet ) { + // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { + if ( ( elem = !matcher && elem ) ) { matchedCount--; } @@ -2555,16 +2521,17 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { // numerically zero. if ( bySet && i !== matchedCount ) { j = 0; - while ( (matcher = setMatchers[j++]) ) { + while ( ( matcher = setMatchers[ j++ ] ) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); } } } @@ -2580,7 +2547,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { - Sizzle.uniqueSort( results ); + jQuery.uniqueSort( results ); } } @@ -2598,20 +2565,21 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { superMatcher; } -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { +function compile( selector, match /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ selector + " " ]; if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element if ( !match ) { match = tokenize( selector ); } i = match.length; while ( i-- ) { - cached = matcherFromTokens( match[i] ); + cached = matcherFromTokens( match[ i ] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { @@ -2620,27 +2588,28 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { } // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + cached = compilerCache( selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) ); // Save selector and tokenization cached.selector = selector; } return cached; -}; +} /** - * A low-level selection function that works with Sizzle's compiled + * A low-level selection function that works with jQuery's compiled * selector functions * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile + * selector function built with jQuery selector compile * @param {Element} context * @param {Array} [results] * @param {Array} [seed] A set of elements to match against */ -select = Sizzle.select = function( selector, context, results, seed ) { +function select( selector, context, results, seed ) { var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); results = results || []; @@ -2649,11 +2618,14 @@ select = Sizzle.select = function( selector, context, results, seed ) { if ( match.length === 1 ) { // Reduce context if the leading compound selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find.ID( + token.matches[ 0 ].replace( runescape, funescape ), + context + ) || [] )[ 0 ]; if ( !context ) { return results; @@ -2666,20 +2638,22 @@ select = Sizzle.select = function( selector, context, results, seed ) { } // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; while ( i-- ) { - token = tokens[i]; + token = tokens[ i ]; // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { + if ( Expr.relative[ ( type = token.type ) ] ) { break; } - if ( (find = Expr.find[ type ]) ) { + if ( ( find = Expr.find[ type ] ) ) { + // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && + testContext( context.parentNode ) || context + ) ) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); @@ -2705,89 +2679,48 @@ select = Sizzle.select = function( selector, context, results, seed ) { !context || rsibling.test( selector ) && testContext( context.parentNode ) || context ); return results; -}; +} // One-time assignments +// Support: Android <=4.0 - 4.1+ // Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; // Initialize against the default document setDocument(); -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Support: Android <=4.0 - 4.1+ // Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( el ) { - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( el ) { - return el.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - +support.sortDetached = assert( function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; +jQuery.find = find; // Deprecated jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; +jQuery.unique = jQuery.uniqueSort; + +// These have always been private, but they used to be documented as part of +// Sizzle so let's maintain them for now for backwards compatibility purposes. +find.compile = compile; +find.select = select; +find.setDocument = setDocument; +find.tokenize = tokenize; + +find.escape = jQuery.escapeSelector; +find.getText = jQuery.text; +find.isXML = jQuery.isXMLDoc; +find.selectors = jQuery.expr; +find.support = jQuery.support; +find.uniqueSort = jQuery.uniqueSort; + /* eslint-enable */ +} )(); var dir = function( elem, dir, until ) { @@ -2821,13 +2754,6 @@ var siblings = function( n, elem ) { var rneedsContext = jQuery.expr.match.needsContext; - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); @@ -2926,8 +2852,8 @@ jQuery.fn.extend( { var rootjQuery, // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) + // Prioritize #id over to avoid XSS via location.hash (trac-9521) + // Strict HTML recognition (trac-11290: must start with <) // Shortcut simple #id case for speed rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, @@ -3078,7 +3004,7 @@ jQuery.fn.extend( { if ( cur.nodeType < 11 && ( targets ? targets.index( cur ) > -1 : - // Don't pass non-elements to Sizzle + // Don't pass non-elements to jQuery#find cur.nodeType === 1 && jQuery.find.matchesSelector( cur, selectors ) ) ) { @@ -3141,7 +3067,7 @@ jQuery.each( { parents: function( elem ) { return dir( elem, "parentNode" ); }, - parentsUntil: function( elem, i, until ) { + parentsUntil: function( elem, _i, until ) { return dir( elem, "parentNode", until ); }, next: function( elem ) { @@ -3156,10 +3082,10 @@ jQuery.each( { prevAll: function( elem ) { return dir( elem, "previousSibling" ); }, - nextUntil: function( elem, i, until ) { + nextUntil: function( elem, _i, until ) { return dir( elem, "nextSibling", until ); }, - prevUntil: function( elem, i, until ) { + prevUntil: function( elem, _i, until ) { return dir( elem, "previousSibling", until ); }, siblings: function( elem ) { @@ -3169,7 +3095,13 @@ jQuery.each( { return siblings( elem.firstChild ); }, contents: function( elem ) { - if ( typeof elem.contentDocument !== "undefined" ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + return elem.contentDocument; } @@ -3512,7 +3444,7 @@ jQuery.extend( { var fns = arguments; return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { + jQuery.each( tuples, function( _i, tuple ) { // Map tuples (progress, done, fail) to arguments (done, fail, progress) var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; @@ -3627,7 +3559,7 @@ jQuery.extend( { if ( jQuery.Deferred.exceptionHook ) { jQuery.Deferred.exceptionHook( e, - process.stackTrace ); + process.error ); } // Support: Promises/A+ section 2.3.3.3.4.1 @@ -3655,10 +3587,17 @@ jQuery.extend( { process(); } else { - // Call an optional hook to record the stack, in case of exception + // Call an optional hook to record the error, in case of exception // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); + if ( jQuery.Deferred.getErrorHook ) { + process.error = jQuery.Deferred.getErrorHook(); + + // The deprecated alias of the above. While the name suggests + // returning the stack, not an error instance, jQuery just passes + // it directly to `console.warn` so both will work; an instance + // just better cooperates with source maps. + } else if ( jQuery.Deferred.getStackHook ) { + process.error = jQuery.Deferred.getStackHook(); } window.setTimeout( process ); } @@ -3792,8 +3731,8 @@ jQuery.extend( { resolveContexts = Array( i ), resolveValues = slice.call( arguments ), - // the master Deferred - master = jQuery.Deferred(), + // the primary Deferred + primary = jQuery.Deferred(), // subordinate callback factory updateFunc = function( i ) { @@ -3801,30 +3740,30 @@ jQuery.extend( { resolveContexts[ i ] = this; resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); + primary.resolveWith( resolveContexts, resolveValues ); } }; }; // Single- and empty arguments are adopted like Promise.resolve if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, !remaining ); // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || + if ( primary.state() === "pending" || isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - return master.then(); + return primary.then(); } } // Multiple arguments are aggregated like Promise.all array elements while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); } - return master.promise(); + return primary.promise(); } } ); @@ -3833,12 +3772,16 @@ jQuery.extend( { // warn about them ASAP rather than swallowing them by default. var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; -jQuery.Deferred.exceptionHook = function( error, stack ) { +// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error +// captured before the async barrier to get the original error cause +// which may otherwise be hidden. +jQuery.Deferred.exceptionHook = function( error, asyncError ) { // Support: IE 8 - 9 only // Console exists when dev tools are open, which can happen at any time if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + window.console.warn( "jQuery.Deferred exception: " + error.message, + error.stack, asyncError ); } }; @@ -3878,7 +3821,7 @@ jQuery.extend( { isReady: false, // A counter to track how many items to wait for before - // the ready event fires. See #6781 + // the ready event fires. See trac-6781 readyWait: 1, // Handle when the DOM is ready @@ -3965,7 +3908,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { // ...except when executing function values } else { bulk = fn; - fn = function( elem, key, value ) { + fn = function( elem, _key, value ) { return bulk.call( jQuery( elem ), value ); }; } @@ -3975,8 +3918,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { for ( ; i < len; i++ ) { fn( elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) ); } } @@ -4000,13 +3943,13 @@ var rmsPrefix = /^-ms-/, rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace() -function fcamelCase( all, letter ) { +function fcamelCase( _all, letter ) { return letter.toUpperCase(); } // Convert dashed to camelCase; used by the css and data modules // Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) +// Microsoft forgot to hump their vendor prefix (trac-9572) function camelCase( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); } @@ -4042,7 +3985,7 @@ Data.prototype = { value = {}; // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. + // but we should not, see trac-8335. // Always return an empty object. if ( acceptData( owner ) ) { @@ -4281,7 +4224,7 @@ jQuery.fn.extend( { while ( i-- ) { // Support: IE 11 only - // The attrs elements can be null (#14894) + // The attrs elements can be null (trac-14894) if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { @@ -4528,27 +4471,6 @@ var isHiddenWithinTree = function( elem, el ) { jQuery.css( elem, "display" ) === "none"; }; -var swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - function adjustCSS( elem, prop, valueParts, tween ) { @@ -4719,11 +4641,40 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); -// We have to close these tags to support XHTML (#13200) -var wrapMap = { +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (trac-11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (trac-14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; // Support: IE <=9 only - option: [ 1, "" ], + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (trac-13200) +var wrapMap = { // XHTML parsers do not magically insert elements in the // same way that tag soup parsers do. So we cannot shorten @@ -4736,17 +4687,19 @@ var wrapMap = { _default: [ 0, "", "" ] }; -// Support: IE <=9 only -wrapMap.optgroup = wrapMap.option; - wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + function getAll( context, tag ) { // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) + // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) var ret; if ( typeof context.getElementsByTagName !== "undefined" ) { @@ -4829,7 +4782,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) { // Remember the top-level container tmp = fragment.firstChild; - // Ensure the created nodes are orphaned (#12392) + // Ensure the created nodes are orphaned (trac-12392) tmp.textContent = ""; } } @@ -4874,36 +4827,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) { } -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; function returnTrue() { return true; @@ -4913,25 +4837,6 @@ function returnFalse() { return false; } -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - function on( elem, types, selector, data, fn, one ) { var origFn, type; @@ -5008,8 +4913,8 @@ jQuery.event = { special, handlers, type, namespaces, origType, elemData = dataPriv.get( elem ); - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { return; } @@ -5033,7 +4938,7 @@ jQuery.event = { // Init the element's event structure and main handler, if this is the first if ( !( events = elemData.events ) ) { - events = elemData.events = {}; + events = elemData.events = Object.create( null ); } if ( !( eventHandle = elemData.handle ) ) { eventHandle = elemData.handle = function( e ) { @@ -5191,12 +5096,15 @@ jQuery.event = { dispatch: function( nativeEvent ) { - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - var i, j, ret, matched, handleObj, handlerQueue, args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event @@ -5276,15 +5184,15 @@ jQuery.event = { for ( ; cur !== this; cur = cur.parentNode || this ) { - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + // Don't check non-elements (trac-13208) + // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { matchedHandlers = []; matchedSelectors = {}; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; - // Don't conflict with Object.prototype properties (#13203) + // Don't conflict with Object.prototype properties (trac-13203) sel = handleObj.selector + " "; if ( matchedSelectors[ sel ] === undefined ) { @@ -5320,12 +5228,12 @@ jQuery.event = { get: isFunction( hook ) ? function() { if ( this.originalEvent ) { - return hook( this.originalEvent ); + return hook( this.originalEvent ); } } : function() { if ( this.originalEvent ) { - return this.originalEvent[ name ]; + return this.originalEvent[ name ]; } }, @@ -5366,7 +5274,7 @@ jQuery.event = { el.click && nodeName( el, "input" ) ) { // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); + leverageNative( el, "click", true ); } // Return false to allow normal processing in the caller @@ -5417,10 +5325,10 @@ jQuery.event = { // synthetic events by interrupting progress until reinvoked in response to // *native* events that it fires directly, ensuring that state changes have // already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { +function leverageNative( el, type, isSetup ) { - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { + // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add + if ( !isSetup ) { if ( dataPriv.get( el, type ) === undefined ) { jQuery.event.add( el, type, returnTrue ); } @@ -5432,15 +5340,13 @@ function leverageNative( el, type, expectSync ) { jQuery.event.add( el, type, { namespace: false, handler: function( event ) { - var notAsync, result, + var result, saved = dataPriv.get( this, type ); if ( ( event.isTrigger & 1 ) && this[ type ] ) { // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { + if ( !saved ) { // Store arguments for use when handling the inner native event // There will always be at least one argument (an event object), so this array @@ -5449,27 +5355,22 @@ function leverageNative( el, type, expectSync ) { dataPriv.set( this, type, saved ); // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); this[ type ](); result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } + dataPriv.set( this, type, false ); + if ( saved !== result ) { // Cancel the outer synthetic event event.stopImmediatePropagation(); event.preventDefault(); - return result.value; + + return result; } // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. + // (focus or blur), assume that the surrogate already propagated from triggering + // the native event and prevent that from happening again here. // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the // bubbling surrogate propagates *after* the non-bubbling base), but that seems // less bad than duplication. @@ -5479,22 +5380,25 @@ function leverageNative( el, type, expectSync ) { // If this is a native event triggered above, everything is now in order // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { + } else if ( saved ) { // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); + dataPriv.set( this, type, jQuery.event.trigger( + saved[ 0 ], + saved.slice( 1 ), + this + ) ); + + // Abort handling of the native event by all jQuery handlers while allowing + // native handlers on the same element to run. On target, this is achieved + // by stopping immediate propagation just on the jQuery event. However, + // the native event is re-wrapped by a jQuery one on each level of the + // propagation so the only way to stop it for jQuery is to stop it for + // everyone via native `stopPropagation()`. This is not a problem for + // focus/blur which don't bubble, but it does also stop click on checkboxes + // and radios. We accept this limitation. + event.stopPropagation(); + event.isImmediatePropagationStopped = returnTrue; } } } ); @@ -5532,7 +5436,7 @@ jQuery.Event = function( src, props ) { // Create target properties // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) + // Target should not be a text node (trac-504, trac-13143) this.target = ( src.target && src.target.nodeType === 3 ) ? src.target.parentNode : src.target; @@ -5629,49 +5533,77 @@ jQuery.each( { targetTouches: true, toElement: true, touches: true, + which: true +}, jQuery.event.addProp ); - which: function( event ) { - var button = event.button; +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } + function focusMappedHandler( nativeEvent ) { + if ( document.documentMode ) { - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } + // Support: IE 11+ + // Attach a single focusin/focusout handler on the document while someone wants + // focus/blur. This is because the former are synchronous in IE while the latter + // are async. In other browsers, all those handlers are invoked synchronously. - if ( button & 2 ) { - return 3; - } + // `handle` from private data would already wrap the event, but we need + // to change the `type` here. + var handle = dataPriv.get( this, "handle" ), + event = jQuery.event.fix( nativeEvent ); + event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; + event.isSimulated = true; - if ( button & 4 ) { - return 2; + // First, handle focusin/focusout + handle( nativeEvent ); + + // ...then, handle focus/blur + // + // focus/blur don't bubble while focusin/focusout do; simulate the former by only + // invoking the handler at the lower level. + if ( event.target === event.currentTarget ) { + + // The setup part calls `leverageNative`, which, in turn, calls + // `jQuery.event.add`, so event handle will already have been set + // by this point. + handle( event ); } + } else { - return 0; + // For non-IE browsers, attach a single capturing handler on the document + // while someone wants focusin/focusout. + jQuery.event.simulate( delegateType, nativeEvent.target, + jQuery.event.fix( nativeEvent ) ); } - - return event.which; } -}, jQuery.event.addProp ); -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { jQuery.event.special[ type ] = { // Utilize native event if possible so blur/focus sequence is correct setup: function() { + var attaches; + // Claim the first handler // dataPriv.set( this, "focus", ... ) // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); + leverageNative( this, type, true ); - // Return false to allow normal processing in the caller - return false; + if ( document.documentMode ) { + + // Support: IE 9 - 11+ + // We use the same native handler for focusin & focus (and focusout & blur) + // so we need to coordinate setup & teardown parts between those events. + // Use `delegateType` as the key as `type` is already used by `leverageNative`. + attaches = dataPriv.get( this, delegateType ); + if ( !attaches ) { + this.addEventListener( delegateType, focusMappedHandler ); + } + dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); + } else { + + // Return false to allow normal processing in the caller + return false; + } }, trigger: function() { @@ -5682,12 +5614,88 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp return true; }, + teardown: function() { + var attaches; + + if ( document.documentMode ) { + attaches = dataPriv.get( this, delegateType ) - 1; + if ( !attaches ) { + this.removeEventListener( delegateType, focusMappedHandler ); + dataPriv.remove( this, delegateType ); + } else { + dataPriv.set( this, delegateType, attaches ); + } + } else { + + // Return false to indicate standard teardown should be applied + return false; + } + }, + + // Suppress native focus or blur if we're currently inside + // a leveraged native-event stack + _default: function( event ) { + return dataPriv.get( event.target, type ); + }, + delegateType: delegateType }; -} ); -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. + // Support: Firefox <=44 + // Firefox doesn't have focus(in | out) events + // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 + // + // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 + // focus(in | out) events fire after focus & blur events, + // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order + // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 + // + // Support: IE 9 - 11+ + // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, + // attach a single handler for both events in IE. + jQuery.event.special[ delegateType ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + dataHolder = document.documentMode ? this : doc, + attaches = dataPriv.get( dataHolder, delegateType ); + + // Support: IE 9 - 11+ + // We use the same native handler for focusin & focus (and focusout & blur) + // so we need to coordinate setup & teardown parts between those events. + // Use `delegateType` as the key as `type` is already used by `leverageNative`. + if ( !attaches ) { + if ( document.documentMode ) { + this.addEventListener( delegateType, focusMappedHandler ); + } else { + doc.addEventListener( type, focusMappedHandler, true ); + } + } + dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + dataHolder = document.documentMode ? this : doc, + attaches = dataPriv.get( dataHolder, delegateType ) - 1; + + if ( !attaches ) { + if ( document.documentMode ) { + this.removeEventListener( delegateType, focusMappedHandler ); + } else { + doc.removeEventListener( type, focusMappedHandler, true ); + } + dataPriv.remove( dataHolder, delegateType ); + } else { + dataPriv.set( dataHolder, delegateType, attaches ); + } + } + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. // Do the same for pointerenter/pointerleave and pointerover/pointerout // // Support: Safari 7 only @@ -5771,13 +5779,6 @@ jQuery.fn.extend( { var - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - // Support: IE <=10 - 11, Edge 12 - 13 only // In IE/Edge using regex groups here causes severe slowdowns. // See https://connect.microsoft.com/IE/feedback/details/1736512/ @@ -5785,7 +5786,8 @@ var // checked="checked" or checked rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rcleanScript = /^\s*\s*$/g; + + rcleanScript = /^\s*\s*$/g; // Prefer a tbody over its parent table for containing new rows function manipulationTarget( elem, content ) { @@ -5814,7 +5816,7 @@ function restoreScript( elem ) { } function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + var i, l, type, pdataOld, udataOld, udataCur, events; if ( dest.nodeType !== 1 ) { return; @@ -5822,13 +5824,11 @@ function cloneCopyEvent( src, dest ) { // 1. Copy private data: events, handlers, etc. if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); + pdataOld = dataPriv.get( src ); events = pdataOld.events; if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; + dataPriv.remove( dest, "handle events" ); for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { @@ -5864,7 +5864,7 @@ function fixInput( src, dest ) { function domManip( collection, args, callback, ignored ) { // Flatten any nested arrays - args = concat.apply( [], args ); + args = flat( args ); var fragment, first, scripts, hasScripts, node, doc, i = 0, @@ -5901,7 +5901,7 @@ function domManip( collection, args, callback, ignored ) { // Use the original fragment for the last item // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). + // being emptied incorrectly in certain situations (trac-8070). for ( ; i < l; i++ ) { node = fragment; @@ -5923,7 +5923,7 @@ function domManip( collection, args, callback, ignored ) { if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; - // Reenable scripts + // Re-enable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion @@ -5939,9 +5939,15 @@ function domManip( collection, args, callback, ignored ) { if ( jQuery._evalUrl && !node.noModule ) { jQuery._evalUrl( node.src, { nonce: node.nonce || node.getAttribute( "nonce" ) - } ); + }, doc ); } } else { + + // Unwrap a CDATA section containing script contents. This shouldn't be + // needed as in XML documents they're already not visible when + // inspecting element contents and in HTML documents they have no + // meaning but we're preserving that logic for backwards compatibility. + // This will be removed completely in 4.0. See gh-4904. DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); } } @@ -5976,7 +5982,7 @@ function remove( elem, selector, keepData ) { jQuery.extend( { htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1>" ); + return html; }, clone: function( elem, dataAndEvents, deepDataAndEvents ) { @@ -5988,7 +5994,8 @@ jQuery.extend( { if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + // We eschew jQuery#find here for performance reasons: + // https://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); @@ -6224,9 +6231,12 @@ jQuery.each( { } ); var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); +var rcustomProp = /^--/; + + var getStyles = function( elem ) { - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) // IE throws on elements created in popups // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" var view = elem.ownerDocument.defaultView; @@ -6238,6 +6248,27 @@ var getStyles = function( elem ) { return view.getComputedStyle( elem ); }; +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); @@ -6295,7 +6326,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); } var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableMarginLeftVal, + reliableTrDimensionsVal, reliableMarginLeftVal, container = document.createElement( "div" ), div = document.createElement( "div" ); @@ -6305,7 +6336,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); } // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) + // Style of cloned element affects source element cloned (trac-8908) div.style.backgroundClip = "content-box"; div.cloneNode( true ).style.backgroundClip = ""; support.clearCloneStyle = div.style.backgroundClip === "content-box"; @@ -6330,6 +6361,54 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); scrollboxSize: function() { computeStyleTests(); return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "box-sizing:content-box;border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is `display: block` + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; } } ); } )(); @@ -6337,6 +6416,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); function curCSS( elem, name, computed ) { var width, minWidth, maxWidth, ret, + isCustomProp = rcustomProp.test( name ), // Support: Firefox 51+ // Retrieving style before computed somehow @@ -6347,11 +6427,42 @@ function curCSS( elem, name, computed ) { computed = computed || getStyles( elem ); // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) + // .css('filter') (IE 9 only, trac-12537) + // .css('--customProperty) (gh-3144) if ( computed ) { + + // Support: IE <=9 - 11+ + // IE only supports `"float"` in `getPropertyValue`; in computed styles + // it's only available as `"cssFloat"`. We no longer modify properties + // sent to `.css()` apart from camelCasing, so we need to check both. + // Normally, this would create difference in behavior: if + // `getPropertyValue` returns an empty string, the value returned + // by `.css()` would be `undefined`. This is usually the case for + // disconnected elements. However, in IE even disconnected elements + // with no styles return `"none"` for `getPropertyValue( "float" )` ret = computed.getPropertyValue( name ) || computed[ name ]; + if ( isCustomProp && ret ) { + + // Support: Firefox 105+, Chrome <=105+ + // Spec requires trimming whitespace for custom properties (gh-4926). + // Firefox only trims leading whitespace. Chrome just collapses + // both leading & trailing whitespace to a single space. + // + // Fall back to `undefined` if empty string returned. + // This collapses a missing definition with property defined + // and set to an empty string but there's no standard API + // allowing us to differentiate them without a performance penalty + // and returning `undefined` aligns with older jQuery. + // + // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED + // as whitespace while CSS does not, but this is not a problem + // because CSS preprocessing replaces them with U+000A LINE FEED + // (which *is* CSS whitespace) + // https://www.w3.org/TR/css-syntax-3/#input-preprocessing + ret = ret.replace( rtrimCSS, "$1" ) || undefined; + } + if ( ret === "" && !isAttached( elem ) ) { ret = jQuery.style( elem, name ); } @@ -6447,14 +6558,13 @@ var // except "table", "table-cell", or "table-caption" // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssNormalTransform = { letterSpacing: "0", fontWeight: "400" }; -function setPositiveNumber( elem, value, subtract ) { +function setPositiveNumber( _elem, value, subtract ) { // Any relative (+/-) values have already been // normalized at this point @@ -6469,7 +6579,8 @@ function setPositiveNumber( elem, value, subtract ) { function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { var i = dimension === "width" ? 1 : 0, extra = 0, - delta = 0; + delta = 0, + marginDelta = 0; // Adjustment may not be necessary if ( box === ( isBorderBox ? "border" : "content" ) ) { @@ -6479,8 +6590,10 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed for ( ; i < 4; i += 2 ) { // Both box models exclude margin + // Count margin delta separately to only add it after scroll gutter adjustment. + // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); } // If we get here with a content-box, we're seeking "padding" or "border" or "margin" @@ -6531,7 +6644,7 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed ) ) || 0; } - return delta; + return delta + marginDelta; } function getWidthOrHeight( elem, dimension, extra ) { @@ -6559,17 +6672,26 @@ function getWidthOrHeight( elem, dimension, extra ) { } - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - // Support: IE 9-11 only - // Also use offsetWidth/offsetHeight for when box sizing is unreliable - // We use getClientRects() to check for hidden/disconnected. - // In those cases, the computed value can be trusted to be border-box + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected elem.getClientRects().length ) { isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; @@ -6620,26 +6742,35 @@ jQuery.extend( { // Don't automatically add "px" to these possibly-unitless properties cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true + animationIterationCount: true, + aspectRatio: true, + borderImageSlice: true, + columnCount: true, + flexGrow: true, + flexShrink: true, + fontWeight: true, + gridArea: true, + gridColumn: true, + gridColumnEnd: true, + gridColumnStart: true, + gridRow: true, + gridRowEnd: true, + gridRowStart: true, + lineHeight: true, + opacity: true, + order: true, + orphans: true, + scale: true, + widows: true, + zIndex: true, + zoom: true, + + // SVG-related + fillOpacity: true, + floodOpacity: true, + stopOpacity: true, + strokeMiterlimit: true, + strokeOpacity: true }, // Add in properties whose names you wish to fix before @@ -6674,15 +6805,15 @@ jQuery.extend( { if ( value !== undefined ) { type = typeof value; - // Convert "+=" or "-=" to relative numbers (#7345) + // Convert "+=" or "-=" to relative numbers (trac-7345) if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { value = adjustCSS( elem, name, ret ); - // Fixes bug #9237 + // Fixes bug trac-9237 type = "number"; } - // Make sure that null and NaN values aren't set (#7116) + // Make sure that null and NaN values aren't set (trac-7116) if ( value == null || value !== value ) { return; } @@ -6764,7 +6895,7 @@ jQuery.extend( { } } ); -jQuery.each( [ "height", "width" ], function( i, dimension ) { +jQuery.each( [ "height", "width" ], function( _i, dimension ) { jQuery.cssHooks[ dimension ] = { get: function( elem, computed, extra ) { if ( computed ) { @@ -6780,10 +6911,10 @@ jQuery.each( [ "height", "width" ], function( i, dimension ) { // Running getBoundingClientRect on a disconnected node // in IE throws an error. ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); } }, @@ -6842,7 +6973,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, swap( elem, { marginLeft: 0 }, function() { return elem.getBoundingClientRect().left; } ) - ) + "px"; + ) + "px"; } } ); @@ -6901,1036 +7032,2692 @@ jQuery.fn.extend( { } ); -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } - input.type = "checkbox"; + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; +Tween.prototype.init.prototype = Tween.prototype; - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); -var boolHook, - attrHandle = jQuery.expr.attrHandle; + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; }, + _default: "swing" +}; - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); +jQuery.fx = Tween.prototype.init; -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; +// Back compat <1.8 extension point +jQuery.fx.step = {}; - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); } - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } + jQuery.fx.tick(); + } +} - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} - elem.setAttribute( name, value + "" ); - return value; +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; } + } +} - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; } + hooks.unqueued++; - ret = jQuery.find.attr( elem, name ); + anim.always( function() { - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; } } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); } - }, + } - removeAttr: function( elem, value ) { - var name, - i = 0, + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); } } - } -} ); -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } } - return name; } -}; -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { - if ( !isXML ) { + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + /* eslint-disable no-loop-func */ + anim.done( function() { -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; + /* eslint-enable no-loop-func */ -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } } -} ); +} -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; } - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; } + } +} - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - return ( elem[ name ] = value ); - } + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } - return elem[ name ]; - }, + deferred.notifyWith( elem, [ animation, percent, remaining ] ); - propHooks: { - tabIndex: { - get: function( elem ) { + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } - if ( tabindex ) { - return parseInt( tabindex, 10 ); + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); } - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); } + return this; + } + } ), + props = animation.props; - return -1; + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); } + return result; } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] }, - propFix: { - "for": "htmlFor", - "class": "className" + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } } } ); -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; - /* eslint no-unused-expressions: "off" */ + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; } - return null; - }, - set: function( elem ) { + } + } - /* eslint no-unused-expressions: "off" */ + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; + // Queueing + opt.old = opt.complete; - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); }; -} +} ); -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; } ); +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + fxNow = Date.now(); + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; } + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // Use proper attribute retrieval (trac-12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classNames, cur, curValue, className, i, finalValue; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classNames = classesToArray( value ); + + if ( classNames.length ) { + return this.each( function() { + curValue = getClass( this ); + cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + if ( cur.indexOf( " " + className + " " ) < 0 ) { + cur += className + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + this.setAttribute( "class", finalValue ); + } + } + } ); + } + + return this; + }, + + removeClass: function( value ) { + var classNames, cur, curValue, className, i, finalValue; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classNames = classesToArray( value ); + + if ( classNames.length ) { + return this.each( function() { + curValue = getClass( this ); + + // This expression is here for better compressibility (see addClass) + cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + + // Remove *all* instances + while ( cur.indexOf( " " + className + " " ) > -1 ) { + cur = cur.replace( " " + className + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + this.setAttribute( "class", finalValue ); + } + } + } ); + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var classNames, className, i, self, + type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + classNames = classesToArray( value ); + + return this.each( function() { + if ( isValidValue ) { + + // Toggle individual class names + self = jQuery( this ); + + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (trac-14686, trac-14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (trac-2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (trac-9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (trac-6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // trac-7653, trac-8125, trac-8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; } - return []; + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); } -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes trac-9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } - classes = classesToArray( value ); + return target; +} - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); } + } - return this; - }, + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } } - if ( !arguments.length ) { - return this.attr( "class", "" ); + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); } + return responses[ finalDataType ]; + } +} - classes = classesToArray( value ); +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { + current = dataTypes.shift(); - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } + // Convert to each sequential dataType + while ( current ) { - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; } - return this; - }, + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); + prev = current; + current = dataTypes.shift(); - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } + if ( current ) { - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { - return this.each( function() { - var className, i, self, classNames; + current = prev; - if ( isValidValue ) { + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - while ( ( className = classNames[ i++ ] ) ) { + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { - // Store className if set - dataPriv.set( this, "__className__", className ); - } + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } } - } - } ); - }, - hasClass: function( selector ) { - var className, elem, - i = 0; + // Apply converter (if not an equivalence) + if ( conv !== true ) { - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } } } - - return false; } -} ); + return { state: "success", data: response }; +} +jQuery.extend( { + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, -var rreturn = /\r/g; + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } + // Convert anything to text + "* text": String, - ret = elem.value; + // Text to html (true = no transformation) + "text html": true, - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } + // Evaluate text as a json expression + "text json": JSON.parse, - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } + // Parse text as xml + "text xml": jQuery.parseXML + }, - return; + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true } + }, - valueIsFunction = isFunction( value ); + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? - return this.each( function( i ) { - var val; + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - if ( this.nodeType !== 1 ) { - return; - } + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; + // Main method + ajax: function( url, options ) { - } else if ( typeof val === "number" ) { - val += ""; + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } + // Force options to be an object + options = options || {}; - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + var transport, - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); + // URL without anti-cache param + cacheURL, -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { + // Response headers + responseHeadersString, + responseHeaders, - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : + // timeout handle + timeoutTimer, - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; + // Url cleanup var + urlAnchor, - if ( index < 0 ) { - i = max; + // Request state (becomes false upon send and true upon completion) + completed, - } else { - i = one ? index : 0; - } + // To know if global events are to be dispatched + fireGlobals, - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; + // Loop variable + i, - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && + // uncached part of the url + uncached, - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), - // Get the specific value for the option - value = jQuery( option ).val(); + // Callbacks context + callbackContext = s.context || s, - // We don't need an array for one selects - if ( one ) { - return value; - } + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, - // Multi-Selects return an array - values.push( value ); - } - } + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), - return values; - }, + // Status-dependent callbacks + statusCode = s.statusCode || {}, - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, - while ( i-- ) { - option = options[ i ]; + // Default abort message + strAbort = "canceled", - /* eslint-disable no-cond-assign */ + // Fake xhr + jqXHR = { + readyState: 0, - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; } + return match == null ? null : match.join( ", " ); + }, - /* eslint-enable no-cond-assign */ - } + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, -// Return jQuery for attributes-only inclusion + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + // Attach deferreds + deferred.promise( jqXHR ); -support.focusin = "onfocusin" in window; + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (trac-10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + // Alias method option to type as per ticket trac-12004 + s.type = options.method || options.type || s.method || s.type; -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; -jQuery.extend( jQuery.event, { + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); - trigger: function( event, data, elem, onlyHandlers ) { + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { - cur = lastElement = tmp = elem = elem || document; + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); } - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; } - if ( type.indexOf( "." ) > -1 ) { + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) + fireGlobals = jQuery.event && s.global; - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); + // Uppercase the type + s.type = s.type.toUpperCase(); - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); + // More options handling for requests with no content + if ( !s.hasContent ) { - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; + // trac-9682: remove data so that it's not used in an eventual retry + delete s.data; } - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; } - } - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; - // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); } } - event.type = type; - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } - if ( tmp ) { - elem[ ontype ] = null; - } + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; + // Abort if not done already and return + return jqXHR.abort(); + } - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } + // Aborting is no longer a cancellation + strAbort = "abort"; - elem[ type ](); + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - jQuery.event.triggered = undefined; + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; - if ( tmp ) { - elem[ ontype ] = tmp; - } - } + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); } - } - - return event.result; - }, - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; } - ); - jQuery.event.trigger( e, null, elem ); - } + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } -} ); + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { -jQuery.fn.extend( { + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); + // Propagate others as results + done( -1, e ); + } } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ); + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ) - 1; + // Ignore repeat invocations + if ( completed ) { + return; + } - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); + completed = true; - } else { - dataPriv.access( doc, fix, attaches ); - } + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); } - }; - } ); -} + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; + // Cache response headers + responseHeadersString = headers || ""; -function buildParams( prefix, obj, traditional, add ) { - var name; + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; - if ( Array.isArray( obj ) ) { + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } - // Treat each array item as a scalar. - add( prefix, v ); + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } - } else { + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); + // If successful, handle type chaining + if ( isSuccess ) { - } else if ( !traditional && toType( obj ) === "object" ) { + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; - } else { + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; - // Serialize scalar item. - add( prefix, obj ); - } -} + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } - if ( a == null ) { - return ""; - } + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - } else { + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } } - } - // Return the resulting serialization - return s.join( "&" ); -}; + return jqXHR; + }, -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); }, - serializeArray: function() { - return this.map( function() { - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( i, elem ) { - var val = jQuery( this ).val(); +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { - if ( val == null ) { - return null; - } + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } } } ); +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (trac-11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + jQuery.fn.extend( { wrapAll: function( html ) { var wrap; @@ -8008,6 +9795,333 @@ jQuery.expr.pseudos.visible = function( elem ) { +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // trac-1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see trac-8605, trac-14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // trac-14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + - + diff --git a/aspnet-samples/AdvancedChatRoom/packages.config b/aspnet-samples/AdvancedChatRoom/packages.config index 869b2a6a..f02194c6 100644 --- a/aspnet-samples/AdvancedChatRoom/packages.config +++ b/aspnet-samples/AdvancedChatRoom/packages.config @@ -1,52 +1,94 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/aspnet-samples/AspNetForm/AspNetForm.csproj b/aspnet-samples/AspNetForm/AspNetForm.csproj index 425f011d..2c794e4d 100644 --- a/aspnet-samples/AspNetForm/AspNetForm.csproj +++ b/aspnet-samples/AspNetForm/AspNetForm.csproj @@ -1,6 +1,6 @@  - + Debug @@ -14,7 +14,7 @@ Properties AspNetForm AspNetForm - v4.7.2 + v4.8 true @@ -24,6 +24,7 @@ + true @@ -44,269 +45,250 @@ 4 - - packages\AspNet.ScriptManager.jQuery.3.7.0\lib\net45\AspNet.ScriptManager.jQuery.dll - True + + ..\packages\AspNet.ScriptManager.jQuery.3.7.0\lib\net45\AspNet.ScriptManager.jQuery.dll - - packages\Azure.Core.1.39.0\lib\net472\Azure.Core.dll - True + + ..\packages\Azure.Core.1.40.0\lib\net472\Azure.Core.dll - - packages\Azure.Identity.1.4.0\lib\netstandard2.0\Azure.Identity.dll + + ..\packages\Azure.Identity.1.11.4\lib\netstandard2.0\Azure.Identity.dll - - packages\Microsoft.AspNet.SignalR.Core.2.4.1\lib\net45\Microsoft.AspNet.SignalR.Core.dll + + ..\packages\Microsoft.AspNet.SignalR.Core.2.4.3\lib\net45\Microsoft.AspNet.SignalR.Core.dll - - packages\Microsoft.AspNet.SignalR.SystemWeb.2.4.1\lib\net45\Microsoft.AspNet.SignalR.SystemWeb.dll + + ..\packages\Microsoft.AspNet.SignalR.SystemWeb.2.4.3\lib\net45\Microsoft.AspNet.SignalR.SystemWeb.dll - - packages\Microsoft.AspNetCore.Authentication.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Authentication.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Authentication.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Authentication.Abstractions.dll - - packages\Microsoft.AspNetCore.Authorization.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Authorization.dll + + ..\packages\Microsoft.AspNetCore.Authorization.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Authorization.dll - - packages\Microsoft.AspNetCore.Authorization.Policy.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Authorization.Policy.dll + + ..\packages\Microsoft.AspNetCore.Authorization.Policy.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Authorization.Policy.dll - - packages\Microsoft.AspNetCore.Connections.Abstractions.2.1.2\lib\netstandard2.0\Microsoft.AspNetCore.Connections.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Connections.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Connections.Abstractions.dll - - packages\Microsoft.AspNetCore.Hosting.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Hosting.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Abstractions.dll - - packages\Microsoft.AspNetCore.Hosting.Server.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Server.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Hosting.Server.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Server.Abstractions.dll - - packages\Microsoft.AspNetCore.Http.2.1.22\lib\netstandard2.0\Microsoft.AspNetCore.Http.dll + + ..\packages\Microsoft.AspNetCore.Http.2.2.2\lib\netstandard2.0\Microsoft.AspNetCore.Http.dll - - packages\Microsoft.AspNetCore.Http.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Http.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Http.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Abstractions.dll - - packages\Microsoft.AspNetCore.Http.Connections.1.0.15\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.dll + + ..\packages\Microsoft.AspNetCore.Http.Connections.1.1.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.dll - - packages\Microsoft.AspNetCore.Http.Connections.Common.1.0.4\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.Common.dll + + ..\packages\Microsoft.AspNetCore.Http.Connections.Common.1.1.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.Common.dll - - packages\Microsoft.AspNetCore.Http.Extensions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Http.Extensions.dll + + ..\packages\Microsoft.AspNetCore.Http.Extensions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Extensions.dll - - packages\Microsoft.AspNetCore.Http.Features.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Http.Features.dll + + ..\packages\Microsoft.AspNetCore.Http.Features.5.0.17\lib\net461\Microsoft.AspNetCore.Http.Features.dll - - packages\Microsoft.AspNetCore.Routing.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Routing.dll + + ..\packages\Microsoft.AspNetCore.Routing.2.2.2\lib\netstandard2.0\Microsoft.AspNetCore.Routing.dll - - packages\Microsoft.AspNetCore.Routing.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Routing.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Routing.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Routing.Abstractions.dll - - packages\Microsoft.AspNetCore.WebSockets.2.1.7\lib\netstandard2.0\Microsoft.AspNetCore.WebSockets.dll + + ..\packages\Microsoft.AspNetCore.WebSockets.2.2.1\lib\netstandard2.0\Microsoft.AspNetCore.WebSockets.dll - - packages\Microsoft.AspNetCore.WebUtilities.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.WebUtilities.dll + + ..\packages\Microsoft.AspNetCore.WebUtilities.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.WebUtilities.dll - - packages\Microsoft.Azure.SignalR.AspNet.1.21.5\lib\net461\Microsoft.Azure.SignalR.AspNet.dll + + ..\packages\Microsoft.Azure.SignalR.AspNet.1.25.2\lib\net461\Microsoft.Azure.SignalR.AspNet.dll - - packages\Microsoft.Azure.SignalR.AspNet.1.21.5\lib\net461\Microsoft.Azure.SignalR.Common.dll + + ..\packages\Microsoft.Azure.SignalR.AspNet.1.25.2\lib\net461\Microsoft.Azure.SignalR.Common.dll - - packages\Microsoft.Azure.SignalR.Protocols.1.21.5\lib\netstandard2.0\Microsoft.Azure.SignalR.Protocols.dll + + ..\packages\Microsoft.Azure.SignalR.Protocols.1.25.2\lib\netstandard2.0\Microsoft.Azure.SignalR.Protocols.dll - - packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll - True + + ..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll - packages\Microsoft.Extensions.Configuration.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll + ..\packages\Microsoft.Extensions.Configuration.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll - - packages\Microsoft.Extensions.Configuration.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll + + ..\packages\Microsoft.Extensions.Configuration.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll - packages\Microsoft.Extensions.Configuration.Binder.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll + ..\packages\Microsoft.Extensions.Configuration.Binder.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll - packages\Microsoft.Extensions.DependencyInjection.2.1.0\lib\net461\Microsoft.Extensions.DependencyInjection.dll + ..\packages\Microsoft.Extensions.DependencyInjection.2.1.0\lib\net461\Microsoft.Extensions.DependencyInjection.dll - - packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + ..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - packages\Microsoft.Extensions.FileProviders.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Abstractions.dll + + ..\packages\Microsoft.Extensions.FileProviders.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Abstractions.dll - - packages\Microsoft.Extensions.Hosting.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Hosting.Abstractions.dll + + ..\packages\Microsoft.Extensions.Hosting.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Hosting.Abstractions.dll - packages\Microsoft.Extensions.Http.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Http.dll + ..\packages\Microsoft.Extensions.Http.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Http.dll - packages\Microsoft.Extensions.Logging.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll + ..\packages\Microsoft.Extensions.Logging.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll - - packages\Microsoft.Extensions.Logging.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll + + ..\packages\Microsoft.Extensions.Logging.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - packages\Microsoft.Extensions.Logging.EventSource.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.EventSource.dll + ..\packages\Microsoft.Extensions.Logging.EventSource.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.EventSource.dll - - packages\Microsoft.Extensions.ObjectPool.2.1.1\lib\netstandard2.0\Microsoft.Extensions.ObjectPool.dll + + ..\packages\Microsoft.Extensions.ObjectPool.2.2.0\lib\netstandard2.0\Microsoft.Extensions.ObjectPool.dll - - packages\Microsoft.Extensions.Options.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Options.dll + + ..\packages\Microsoft.Extensions.Options.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Options.dll - - packages\Microsoft.Extensions.Primitives.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll + + ..\packages\Microsoft.Extensions.Primitives.5.0.1\lib\net461\Microsoft.Extensions.Primitives.dll - - packages\Microsoft.Identity.Client.4.61.0\lib\net462\Microsoft.Identity.Client.dll - True + + ..\packages\Microsoft.Identity.Client.4.61.3\lib\net462\Microsoft.Identity.Client.dll - - packages\Microsoft.Identity.Client.Extensions.Msal.4.61.0\lib\netstandard2.0\Microsoft.Identity.Client.Extensions.Msal.dll - True + + ..\packages\Microsoft.Identity.Client.Extensions.Msal.4.61.3\lib\netstandard2.0\Microsoft.Identity.Client.Extensions.Msal.dll - - packages\Microsoft.IdentityModel.Abstractions.7.5.1\lib\net472\Microsoft.IdentityModel.Abstractions.dll - True + + ..\packages\Microsoft.IdentityModel.Abstractions.7.6.0\lib\net472\Microsoft.IdentityModel.Abstractions.dll - - packages\Microsoft.IdentityModel.JsonWebTokens.7.5.1\lib\net472\Microsoft.IdentityModel.JsonWebTokens.dll - True + + ..\packages\Microsoft.IdentityModel.JsonWebTokens.7.6.0\lib\net472\Microsoft.IdentityModel.JsonWebTokens.dll - - packages\Microsoft.IdentityModel.Logging.7.5.1\lib\net472\Microsoft.IdentityModel.Logging.dll - True + + ..\packages\Microsoft.IdentityModel.Logging.7.6.0\lib\net472\Microsoft.IdentityModel.Logging.dll - - packages\Microsoft.IdentityModel.Tokens.7.5.1\lib\net472\Microsoft.IdentityModel.Tokens.dll - True + + ..\packages\Microsoft.IdentityModel.Tokens.7.6.0\lib\net472\Microsoft.IdentityModel.Tokens.dll - - packages\Microsoft.Net.Http.Headers.2.1.1\lib\netstandard2.0\Microsoft.Net.Http.Headers.dll + + ..\packages\Microsoft.Net.Http.Headers.2.2.0\lib\netstandard2.0\Microsoft.Net.Http.Headers.dll - packages\Microsoft.Owin.4.2.2\lib\net45\Microsoft.Owin.dll + ..\packages\Microsoft.Owin.4.2.2\lib\net45\Microsoft.Owin.dll - packages\Microsoft.Owin.Cors.4.2.2\lib\net45\Microsoft.Owin.Cors.dll + ..\packages\Microsoft.Owin.Cors.4.2.2\lib\net45\Microsoft.Owin.Cors.dll - packages\Microsoft.Owin.Host.HttpListener.4.2.2\lib\net45\Microsoft.Owin.Host.HttpListener.dll + ..\packages\Microsoft.Owin.Host.HttpListener.4.2.2\lib\net45\Microsoft.Owin.Host.HttpListener.dll - - packages\Microsoft.Owin.Host.SystemWeb.2.1.0\lib\net45\Microsoft.Owin.Host.SystemWeb.dll + + ..\packages\Microsoft.Owin.Host.SystemWeb.4.2.2\lib\net45\Microsoft.Owin.Host.SystemWeb.dll - packages\Microsoft.Owin.Hosting.4.2.2\lib\net45\Microsoft.Owin.Hosting.dll - - - packages\Microsoft.Owin.Security.2.1.0\lib\net45\Microsoft.Owin.Security.dll + ..\packages\Microsoft.Owin.Hosting.4.2.2\lib\net45\Microsoft.Owin.Hosting.dll - - packages\Microsoft.Rest.ClientRuntime.2.3.21\lib\net461\Microsoft.Rest.ClientRuntime.dll + + ..\packages\Microsoft.Owin.Security.4.2.2\lib\net45\Microsoft.Owin.Security.dll - packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll - packages\Owin.1.0\lib\net40\Owin.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll - packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - packages\System.ClientModel.1.0.0\lib\netstandard2.0\System.ClientModel.dll - True + + ..\packages\System.ClientModel.1.0.0\lib\netstandard2.0\System.ClientModel.dll + + + ..\packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll - - - packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll - True + + ..\packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll - - packages\System.IdentityModel.Tokens.Jwt.5.7.0\lib\net461\System.IdentityModel.Tokens.Jwt.dll - True + + ..\packages\System.IdentityModel.Tokens.Jwt.7.6.0\lib\net472\System.IdentityModel.Tokens.Jwt.dll - packages\System.IO.FileSystem.AccessControl.5.0.0\lib\net461\System.IO.FileSystem.AccessControl.dll + ..\packages\System.IO.FileSystem.AccessControl.5.0.0\lib\net461\System.IO.FileSystem.AccessControl.dll True - - packages\System.IO.Pipelines.4.6.0\lib\netstandard2.0\System.IO.Pipelines.dll + + ..\packages\System.IO.Pipelines.5.0.2\lib\net461\System.IO.Pipelines.dll - - packages\System.Memory.4.5.5\lib\net461\System.Memory.dll - True + + ..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll - packages\System.Memory.Data.1.0.2\lib\net461\System.Memory.Data.dll + ..\packages\System.Memory.Data.1.0.2\lib\net461\System.Memory.Data.dll - packages\System.Net.WebSockets.WebSocketProtocol.4.5.3\lib\netstandard2.0\System.Net.WebSockets.WebSocketProtocol.dll + ..\packages\System.Net.WebSockets.WebSocketProtocol.4.5.3\lib\netstandard2.0\System.Net.WebSockets.WebSocketProtocol.dll - packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll - - packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - True + + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - packages\System.Security.AccessControl.6.0.1\lib\net461\System.Security.AccessControl.dll + ..\packages\System.Security.AccessControl.6.0.1\lib\net461\System.Security.AccessControl.dll True - packages\System.Security.Cryptography.ProtectedData.8.0.0\lib\net462\System.Security.Cryptography.ProtectedData.dll + ..\packages\System.Security.Cryptography.ProtectedData.8.0.0\lib\net462\System.Security.Cryptography.ProtectedData.dll True - packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll + ..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll True - - packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll - True + + ..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll - - packages\System.Text.Json.8.0.3\lib\net462\System.Text.Json.dll - True + + ..\packages\System.Text.Json.8.0.3\lib\net462\System.Text.Json.dll - packages\System.Threading.Channels.4.6.0\lib\netstandard2.0\System.Threading.Channels.dll + ..\packages\System.Threading.Channels.4.6.0\lib\netstandard2.0\System.Threading.Channels.dll - - packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll - True + + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll - packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll + ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll - - packages\Microsoft.AspNet.Cors.5.0.0\lib\net45\System.Web.Cors.dll + + ..\packages\Microsoft.AspNet.Cors.5.3.0\lib\net45\System.Web.Cors.dll - @@ -318,36 +300,37 @@ True - packages\Microsoft.Web.Infrastructure.2.0.1\lib\net40\Microsoft.Web.Infrastructure.dll + ..\packages\Microsoft.Web.Infrastructure.2.0.1\lib\net40\Microsoft.Web.Infrastructure.dll - packages\Microsoft.AspNet.ScriptManager.MSAjax.5.0.0\lib\net45\Microsoft.ScriptManager.MSAjax.dll + ..\packages\Microsoft.AspNet.ScriptManager.MSAjax.5.0.0\lib\net45\Microsoft.ScriptManager.MSAjax.dll - packages\Microsoft.AspNet.ScriptManager.WebForms.5.0.0\lib\net45\Microsoft.ScriptManager.WebForms.dll + ..\packages\Microsoft.AspNet.ScriptManager.WebForms.5.0.0\lib\net45\Microsoft.ScriptManager.WebForms.dll - packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll + ..\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll + True - packages\WebGrease.1.6.0\lib\WebGrease.dll + ..\packages\WebGrease.1.6.0\lib\WebGrease.dll True - packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll + ..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll True - packages\Microsoft.AspNet.Web.Optimization.WebForms.1.1.3\lib\net45\Microsoft.AspNet.Web.Optimization.WebForms.dll + ..\packages\Microsoft.AspNet.Web.Optimization.WebForms.1.1.3\lib\net45\Microsoft.AspNet.Web.Optimization.WebForms.dll - packages\Microsoft.AspNet.FriendlyUrls.Core.1.0.2\lib\net45\Microsoft.AspNet.FriendlyUrls.dll + ..\packages\Microsoft.AspNet.FriendlyUrls.Core.1.0.2\lib\net45\Microsoft.AspNet.FriendlyUrls.dll - packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll + ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll @@ -373,12 +356,14 @@ + + @@ -401,14 +386,13 @@ - - - - - - - - + + + + + + + @@ -490,8 +474,8 @@ - - + + Web.config @@ -527,7 +511,7 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + - + - + @@ -17,7 +16,7 @@
Message: - +
diff --git a/aspnet-samples/AspNetForm/GroupOne.aspx b/aspnet-samples/AspNetForm/GroupOne.aspx index db1cc2df..13c9f776 100644 --- a/aspnet-samples/AspNetForm/GroupOne.aspx +++ b/aspnet-samples/AspNetForm/GroupOne.aspx @@ -2,10 +2,9 @@ - - + - + diff --git a/aspnet-samples/AspNetForm/Scripts/bootstrap.bundle.js b/aspnet-samples/AspNetForm/Scripts/bootstrap.bundle.js index 67ab0569..6294dff3 100644 --- a/aspnet-samples/AspNetForm/Scripts/bootstrap.bundle.js +++ b/aspnet-samples/AspNetForm/Scripts/bootstrap.bundle.js @@ -1,6 +1,6 @@ /*! - * Bootstrap v5.2.3 (https://getbootstrap.com/) - * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap v5.3.3 (https://getbootstrap.com/) + * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { @@ -11,193 +11,194 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): util/index.js + * Bootstrap dom/data.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** + * Constants + */ + + const elementMap = new Map(); + const Data = { + set(element, key, instance) { + if (!elementMap.has(element)) { + elementMap.set(element, new Map()); + } + const instanceMap = elementMap.get(element); + + // make it clear we only want one instance per element + // can be removed later when multiple key/instances are fine to be used + if (!instanceMap.has(key) && instanceMap.size !== 0) { + // eslint-disable-next-line no-console + console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); + return; + } + instanceMap.set(key, instance); + }, + get(element, key) { + if (elementMap.has(element)) { + return elementMap.get(element).get(key) || null; + } + return null; + }, + remove(element, key) { + if (!elementMap.has(element)) { + return; + } + const instanceMap = elementMap.get(element); + instanceMap.delete(key); + + // free up element references if there are no instances left for an element + if (instanceMap.size === 0) { + elementMap.delete(element); + } + } + }; + + /** + * -------------------------------------------------------------------------- + * Bootstrap util/index.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + * -------------------------------------------------------------------------- + */ + const MAX_UID = 1000000; const MILLISECONDS_MULTIPLIER = 1000; - const TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp) + const TRANSITION_END = 'transitionend'; + + /** + * Properly escape IDs selectors to handle weird IDs + * @param {string} selector + * @returns {string} + */ + const parseSelector = selector => { + if (selector && window.CSS && window.CSS.escape) { + // document.querySelector needs escaping to handle IDs (html5+) containing for instance / + selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`); + } + return selector; + }; + // Shout-out Angus Croll (https://goo.gl/pxwQGp) const toType = object => { if (object === null || object === undefined) { return `${object}`; } - return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase(); }; + /** * Public Util API */ - const getUID = prefix => { do { prefix += Math.floor(Math.random() * MAX_UID); } while (document.getElementById(prefix)); - return prefix; }; - - const getSelector = element => { - let selector = element.getAttribute('data-bs-target'); - - if (!selector || selector === '#') { - let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes, - // so everything starting with `#` or `.`. If a "real" URL is used as the selector, - // `document.querySelector` will rightfully complain it is invalid. - // See https://github.com/twbs/bootstrap/issues/32273 - - if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) { - return null; - } // Just in case some CMS puts out a full URL with the anchor appended - - - if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) { - hrefAttribute = `#${hrefAttribute.split('#')[1]}`; - } - - selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null; - } - - return selector; - }; - - const getSelectorFromElement = element => { - const selector = getSelector(element); - - if (selector) { - return document.querySelector(selector) ? selector : null; - } - - return null; - }; - - const getElementFromSelector = element => { - const selector = getSelector(element); - return selector ? document.querySelector(selector) : null; - }; - const getTransitionDurationFromElement = element => { if (!element) { return 0; - } // Get transition-duration of the element - + } + // Get transition-duration of the element let { transitionDuration, transitionDelay } = window.getComputedStyle(element); const floatTransitionDuration = Number.parseFloat(transitionDuration); - const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found + const floatTransitionDelay = Number.parseFloat(transitionDelay); + // Return 0 if element or transition duration is not found if (!floatTransitionDuration && !floatTransitionDelay) { return 0; - } // If multiple durations are defined, take the first - + } + // If multiple durations are defined, take the first transitionDuration = transitionDuration.split(',')[0]; transitionDelay = transitionDelay.split(',')[0]; return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; }; - const triggerTransitionEnd = element => { element.dispatchEvent(new Event(TRANSITION_END)); }; - const isElement$1 = object => { if (!object || typeof object !== 'object') { return false; } - if (typeof object.jquery !== 'undefined') { object = object[0]; } - return typeof object.nodeType !== 'undefined'; }; - const getElement = object => { // it's a jQuery object or a node element if (isElement$1(object)) { return object.jquery ? object[0] : object; } - if (typeof object === 'string' && object.length > 0) { - return document.querySelector(object); + return document.querySelector(parseSelector(object)); } - return null; }; - const isVisible = element => { if (!isElement$1(element) || element.getClientRects().length === 0) { return false; } - - const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed - + const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; + // Handle `details` element as its content may falsie appear visible when it is closed const closedDetails = element.closest('details:not([open])'); - if (!closedDetails) { return elementIsVisible; } - if (closedDetails !== element) { const summary = element.closest('summary'); - if (summary && summary.parentNode !== closedDetails) { return false; } - if (summary === null) { return false; } } - return elementIsVisible; }; - const isDisabled = element => { if (!element || element.nodeType !== Node.ELEMENT_NODE) { return true; } - if (element.classList.contains('disabled')) { return true; } - if (typeof element.disabled !== 'undefined') { return element.disabled; } - return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'; }; - const findShadowRoot = element => { if (!document.documentElement.attachShadow) { return null; - } // Can find the shadow root otherwise it'll return the document - + } + // Can find the shadow root otherwise it'll return the document if (typeof element.getRootNode === 'function') { const root = element.getRootNode(); return root instanceof ShadowRoot ? root : null; } - if (element instanceof ShadowRoot) { return element; - } // when we don't find a shadow root - + } + // when we don't find a shadow root if (!element.parentNode) { return null; } - return findShadowRoot(element.parentNode); }; - const noop = () => {}; + /** * Trick to restart an element's animation * @@ -206,22 +207,16 @@ * * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation */ - - const reflow = element => { element.offsetHeight; // eslint-disable-line no-unused-expressions }; - const getjQuery = () => { if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { return window.jQuery; } - return null; }; - const DOMContentLoadedCallbacks = []; - const onDOMContentLoaded = callback => { if (document.readyState === 'loading') { // add listener on the first call when the document is in loading state @@ -232,26 +227,21 @@ } }); } - DOMContentLoadedCallbacks.push(callback); } else { callback(); } }; - const isRTL = () => document.documentElement.dir === 'rtl'; - const defineJQueryPlugin = plugin => { onDOMContentLoaded(() => { const $ = getjQuery(); /* istanbul ignore if */ - if ($) { const name = plugin.NAME; const JQUERY_NO_CONFLICT = $.fn[name]; $.fn[name] = plugin.jQueryInterface; $.fn[name].Constructor = plugin; - $.fn[name].noConflict = () => { $.fn[name] = JQUERY_NO_CONFLICT; return plugin.jQueryInterface; @@ -259,35 +249,27 @@ } }); }; - - const execute = callback => { - if (typeof callback === 'function') { - callback(); - } + const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => { + return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue; }; - const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { if (!waitForTransition) { execute(callback); return; } - const durationPadding = 5; const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding; let called = false; - const handler = ({ target }) => { if (target !== transitionElement) { return; } - called = true; transitionElement.removeEventListener(TRANSITION_END, handler); execute(callback); }; - transitionElement.addEventListener(TRANSITION_END, handler); setTimeout(() => { if (!called) { @@ -295,6 +277,7 @@ } }, emulatedDuration); }; + /** * Return the previous/next element of a list. * @@ -304,32 +287,30 @@ * @param isCycleAllowed * @return {Element|elem} The proper element */ - - const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { const listLength = list.length; - let index = list.indexOf(activeElement); // if the element does not exist in the list return an element - // depending on the direction and if cycle is allowed + let index = list.indexOf(activeElement); + // if the element does not exist in the list return an element + // depending on the direction and if cycle is allowed if (index === -1) { return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]; } - index += shouldGetNext ? 1 : -1; - if (isCycleAllowed) { index = (index + listLength) % listLength; } - return list[Math.max(0, Math.min(index, listLength - 1))]; }; /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): dom/event-handler.js + * Bootstrap dom/event-handler.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -338,13 +319,13 @@ const stripNameRegex = /\..*/; const stripUidRegex = /::\d+$/; const eventRegistry = {}; // Events storage - let uidEvent = 1; const customEvents = { mouseenter: 'mouseover', mouseleave: 'mouseout' }; const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']); + /** * Private methods */ @@ -352,32 +333,26 @@ function makeEventUid(element, uid) { return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; } - function getElementEvents(element) { const uid = makeEventUid(element); element.uidEvent = uid; eventRegistry[uid] = eventRegistry[uid] || {}; return eventRegistry[uid]; } - function bootstrapHandler(element, fn) { return function handler(event) { hydrateObj(event, { delegateTarget: element }); - if (handler.oneOff) { EventHandler.off(element, event.type, fn); } - return fn.apply(element, [event]); }; } - function bootstrapDelegationHandler(element, selector, fn) { return function handler(event) { const domElements = element.querySelectorAll(selector); - for (let { target } = event; target && target !== this; target = target.parentNode) { @@ -385,46 +360,38 @@ if (domElement !== target) { continue; } - hydrateObj(event, { delegateTarget: target }); - if (handler.oneOff) { EventHandler.off(element, event.type, selector, fn); } - return fn.apply(target, [event]); } } }; } - function findHandler(events, callable, delegationSelector = null) { return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector); } - function normalizeParameters(originalTypeEvent, handler, delegationFunction) { - const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check - + const isDelegated = typeof handler === 'string'; + // TODO: tooltip passes `false` instead of selector, so we need to check const callable = isDelegated ? delegationFunction : handler || delegationFunction; let typeEvent = getTypeEvent(originalTypeEvent); - if (!nativeEvents.has(typeEvent)) { typeEvent = originalTypeEvent; } - return [isDelegated, callable, typeEvent]; } - function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) { if (typeof originalTypeEvent !== 'string' || !element) { return; } + let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); - let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position + // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position // this prevents the handler from being dispatched the same way as mouseover or mouseout does - if (originalTypeEvent in customEvents) { const wrapFunction = fn => { return function (event) { @@ -433,19 +400,15 @@ } }; }; - callable = wrapFunction(callable); } - const events = getElementEvents(element); const handlers = events[typeEvent] || (events[typeEvent] = {}); const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null); - if (previousFunction) { previousFunction.oneOff = previousFunction.oneOff && oneOff; return; } - const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, '')); const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable); fn.delegationSelector = isDelegated ? handler : null; @@ -455,86 +418,67 @@ handlers[uid] = fn; element.addEventListener(typeEvent, fn, isDelegated); } - function removeHandler(element, events, typeEvent, handler, delegationSelector) { const fn = findHandler(events[typeEvent], handler, delegationSelector); - if (!fn) { return; } - element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); delete events[typeEvent][fn.uidEvent]; } - function removeNamespacedHandlers(element, events, typeEvent, namespace) { const storeElementEvent = events[typeEvent] || {}; - - for (const handlerKey of Object.keys(storeElementEvent)) { + for (const [handlerKey, event] of Object.entries(storeElementEvent)) { if (handlerKey.includes(namespace)) { - const event = storeElementEvent[handlerKey]; removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); } } } - function getTypeEvent(event) { // allow to get the native events from namespaced events ('click.bs.button' --> 'click') event = event.replace(stripNameRegex, ''); return customEvents[event] || event; } - const EventHandler = { on(element, event, handler, delegationFunction) { addHandler(element, event, handler, delegationFunction, false); }, - one(element, event, handler, delegationFunction) { addHandler(element, event, handler, delegationFunction, true); }, - off(element, originalTypeEvent, handler, delegationFunction) { if (typeof originalTypeEvent !== 'string' || !element) { return; } - const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); const inNamespace = typeEvent !== originalTypeEvent; const events = getElementEvents(element); const storeElementEvent = events[typeEvent] || {}; const isNamespace = originalTypeEvent.startsWith('.'); - if (typeof callable !== 'undefined') { // Simplest case: handler is passed, remove that listener ONLY. if (!Object.keys(storeElementEvent).length) { return; } - removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null); return; } - if (isNamespace) { for (const elementEvent of Object.keys(events)) { removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); } } - - for (const keyHandlers of Object.keys(storeElementEvent)) { + for (const [keyHandlers, event] of Object.entries(storeElementEvent)) { const handlerKey = keyHandlers.replace(stripUidRegex, ''); - if (!inNamespace || originalTypeEvent.includes(handlerKey)) { - const event = storeElementEvent[keyHandlers]; removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); } } }, - trigger(element, event, args) { if (typeof event !== 'string' || !element) { return null; } - const $ = getjQuery(); const typeEvent = getTypeEvent(event); const inNamespace = event !== typeEvent; @@ -542,7 +486,6 @@ let bubbles = true; let nativeDispatch = true; let defaultPrevented = false; - if (inNamespace && $) { jQueryEvent = $.Event(event, args); $(element).trigger(jQueryEvent); @@ -550,177 +493,103 @@ nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); defaultPrevented = jQueryEvent.isDefaultPrevented(); } - - let evt = new Event(event, { + const evt = hydrateObj(new Event(event, { bubbles, cancelable: true - }); - evt = hydrateObj(evt, args); - + }), args); if (defaultPrevented) { evt.preventDefault(); } - if (nativeDispatch) { element.dispatchEvent(evt); } - if (evt.defaultPrevented && jQueryEvent) { jQueryEvent.preventDefault(); } - return evt; } - }; - - function hydrateObj(obj, meta) { - for (const [key, value] of Object.entries(meta || {})) { + function hydrateObj(obj, meta = {}) { + for (const [key, value] of Object.entries(meta)) { try { obj[key] = value; } catch (_unused) { Object.defineProperty(obj, key, { configurable: true, - get() { return value; } - }); } } - return obj; } /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): dom/data.js + * Bootstrap dom/manipulator.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ - /** - * Constants - */ - const elementMap = new Map(); - const Data = { - set(element, key, instance) { - if (!elementMap.has(element)) { - elementMap.set(element, new Map()); - } - - const instanceMap = elementMap.get(element); // make it clear we only want one instance per element - // can be removed later when multiple key/instances are fine to be used - - if (!instanceMap.has(key) && instanceMap.size !== 0) { - // eslint-disable-next-line no-console - console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); - return; - } - - instanceMap.set(key, instance); - }, - - get(element, key) { - if (elementMap.has(element)) { - return elementMap.get(element).get(key) || null; - } - - return null; - }, - - remove(element, key) { - if (!elementMap.has(element)) { - return; - } - - const instanceMap = elementMap.get(element); - instanceMap.delete(key); // free up element references if there are no instances left for an element - - if (instanceMap.size === 0) { - elementMap.delete(element); - } - } - - }; - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): dom/manipulator.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ function normalizeData(value) { if (value === 'true') { return true; } - if (value === 'false') { return false; } - if (value === Number(value).toString()) { return Number(value); } - if (value === '' || value === 'null') { return null; } - if (typeof value !== 'string') { return value; } - try { return JSON.parse(decodeURIComponent(value)); } catch (_unused) { return value; } } - function normalizeDataKey(key) { return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`); } - const Manipulator = { setDataAttribute(element, key, value) { element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); }, - removeDataAttribute(element, key) { element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); }, - getDataAttributes(element) { if (!element) { return {}; } - const attributes = {}; const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig')); - for (const key of bsKeys) { let pureKey = key.replace(/^bs/, ''); pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); attributes[pureKey] = normalizeData(element.dataset[key]); } - return attributes; }, - getDataAttribute(element, key) { return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); } - }; /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): util/config.js + * Bootstrap util/config.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Class definition */ @@ -730,63 +599,56 @@ static get Default() { return {}; } - static get DefaultType() { return {}; } - static get NAME() { throw new Error('You have to implement the static method "NAME", for each component!'); } - _getConfig(config) { config = this._mergeConfigObj(config); config = this._configAfterMerge(config); - this._typeCheckConfig(config); - return config; } - _configAfterMerge(config) { return config; } - _mergeConfigObj(config, element) { const jsonConfig = isElement$1(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse - return { ...this.constructor.Default, + return { + ...this.constructor.Default, ...(typeof jsonConfig === 'object' ? jsonConfig : {}), ...(isElement$1(element) ? Manipulator.getDataAttributes(element) : {}), ...(typeof config === 'object' ? config : {}) }; } - _typeCheckConfig(config, configTypes = this.constructor.DefaultType) { - for (const property of Object.keys(configTypes)) { - const expectedTypes = configTypes[property]; + for (const [property, expectedTypes] of Object.entries(configTypes)) { const value = config[property]; const valueType = isElement$1(value) ? 'element' : toType(value); - if (!new RegExp(expectedTypes).test(valueType)) { throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); } } } - } /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): base-component.js + * Bootstrap base-component.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ - const VERSION = '5.2.3'; + const VERSION = '5.3.3'; + /** * Class definition */ @@ -795,69 +657,145 @@ constructor(element, config) { super(); element = getElement(element); - if (!element) { return; } - this._element = element; this._config = this._getConfig(config); Data.set(this._element, this.constructor.DATA_KEY, this); - } // Public - + } + // Public dispose() { Data.remove(this._element, this.constructor.DATA_KEY); EventHandler.off(this._element, this.constructor.EVENT_KEY); - for (const propertyName of Object.getOwnPropertyNames(this)) { this[propertyName] = null; } } - _queueCallback(callback, element, isAnimated = true) { executeAfterTransition(callback, element, isAnimated); } - _getConfig(config) { config = this._mergeConfigObj(config, this._element); config = this._configAfterMerge(config); - this._typeCheckConfig(config); - return config; - } // Static - + } + // Static static getInstance(element) { return Data.get(getElement(element), this.DATA_KEY); } - static getOrCreateInstance(element, config = {}) { return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null); } - static get VERSION() { return VERSION; } - static get DATA_KEY() { return `bs.${this.NAME}`; } - static get EVENT_KEY() { return `.${this.DATA_KEY}`; } - static eventName(name) { return `${name}${this.EVENT_KEY}`; } - } /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): util/component-functions.js + * Bootstrap dom/selector-engine.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + * -------------------------------------------------------------------------- + */ + + const getSelector = element => { + let selector = element.getAttribute('data-bs-target'); + if (!selector || selector === '#') { + let hrefAttribute = element.getAttribute('href'); + + // The only valid content that could double as a selector are IDs or classes, + // so everything starting with `#` or `.`. If a "real" URL is used as the selector, + // `document.querySelector` will rightfully complain it is invalid. + // See https://github.com/twbs/bootstrap/issues/32273 + if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) { + return null; + } + + // Just in case some CMS puts out a full URL with the anchor appended + if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) { + hrefAttribute = `#${hrefAttribute.split('#')[1]}`; + } + selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null; + } + return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null; + }; + const SelectorEngine = { + find(selector, element = document.documentElement) { + return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); + }, + findOne(selector, element = document.documentElement) { + return Element.prototype.querySelector.call(element, selector); + }, + children(element, selector) { + return [].concat(...element.children).filter(child => child.matches(selector)); + }, + parents(element, selector) { + const parents = []; + let ancestor = element.parentNode.closest(selector); + while (ancestor) { + parents.push(ancestor); + ancestor = ancestor.parentNode.closest(selector); + } + return parents; + }, + prev(element, selector) { + let previous = element.previousElementSibling; + while (previous) { + if (previous.matches(selector)) { + return [previous]; + } + previous = previous.previousElementSibling; + } + return []; + }, + // TODO: this is now unused; remove later along with prev() + next(element, selector) { + let next = element.nextElementSibling; + while (next) { + if (next.matches(selector)) { + return [next]; + } + next = next.nextElementSibling; + } + return []; + }, + focusableChildren(element) { + const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(','); + return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el)); + }, + getSelectorFromElement(element) { + const selector = getSelector(element); + if (selector) { + return SelectorEngine.findOne(selector) ? selector : null; + } + return null; + }, + getElementFromSelector(element) { + const selector = getSelector(element); + return selector ? SelectorEngine.findOne(selector) : null; + }, + getMultipleElementsFromSelector(element) { + const selector = getSelector(element); + return selector ? SelectorEngine.find(selector) : []; + } + }; + + /** + * -------------------------------------------------------------------------- + * Bootstrap util/component-functions.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -869,24 +807,25 @@ if (['A', 'AREA'].includes(this.tagName)) { event.preventDefault(); } - if (isDisabled(this)) { return; } + const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`); + const instance = component.getOrCreateInstance(target); - const target = getElementFromSelector(this) || this.closest(`.${name}`); - const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method - + // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method instance[method](); }); }; /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): alert.js + * Bootstrap alert.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -898,6 +837,7 @@ const EVENT_CLOSED = `closed${EVENT_KEY$b}`; const CLASS_NAME_FADE$5 = 'fade'; const CLASS_NAME_SHOW$8 = 'show'; + /** * Class definition */ @@ -906,55 +846,47 @@ // Getters static get NAME() { return NAME$f; - } // Public - + } + // Public close() { const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); - if (closeEvent.defaultPrevented) { return; } - this._element.classList.remove(CLASS_NAME_SHOW$8); - const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5); - this._queueCallback(() => this._destroyElement(), this._element, isAnimated); - } // Private - + } + // Private _destroyElement() { this._element.remove(); - EventHandler.trigger(this._element, EVENT_CLOSED); this.dispose(); - } // Static - + } + // Static static jQueryInterface(config) { return this.each(function () { const data = Alert.getOrCreateInstance(this); - if (typeof config !== 'string') { return; } - if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { throw new TypeError(`No method named "${config}"`); } - data[config](this); }); } - } + /** * Data API implementation */ - enableDismissTrigger(Alert, 'close'); + /** * jQuery */ @@ -963,10 +895,12 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): button.js + * Bootstrap button.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -978,6 +912,7 @@ const CLASS_NAME_ACTIVE$3 = 'active'; const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]'; const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`; + /** * Class definition */ @@ -986,37 +921,36 @@ // Getters static get NAME() { return NAME$e; - } // Public - + } + // Public toggle() { // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3)); - } // Static - + } + // Static static jQueryInterface(config) { return this.each(function () { const data = Button.getOrCreateInstance(this); - if (config === 'toggle') { data[config](); } }); } - } + /** * Data API implementation */ - EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => { event.preventDefault(); const button = event.target.closest(SELECTOR_DATA_TOGGLE$5); const data = Button.getOrCreateInstance(button); data.toggle(); }); + /** * jQuery */ @@ -1025,81 +959,12 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): dom/selector-engine.js + * Bootstrap util/swipe.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ - /** - * Constants - */ - - const SelectorEngine = { - find(selector, element = document.documentElement) { - return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); - }, - - findOne(selector, element = document.documentElement) { - return Element.prototype.querySelector.call(element, selector); - }, - - children(element, selector) { - return [].concat(...element.children).filter(child => child.matches(selector)); - }, - - parents(element, selector) { - const parents = []; - let ancestor = element.parentNode.closest(selector); - - while (ancestor) { - parents.push(ancestor); - ancestor = ancestor.parentNode.closest(selector); - } - - return parents; - }, - - prev(element, selector) { - let previous = element.previousElementSibling; - - while (previous) { - if (previous.matches(selector)) { - return [previous]; - } - - previous = previous.previousElementSibling; - } - - return []; - }, - - // TODO: this is now unused; remove later along with prev() - next(element, selector) { - let next = element.nextElementSibling; - while (next) { - if (next.matches(selector)) { - return [next]; - } - - next = next.nextElementSibling; - } - - return []; - }, - - focusableChildren(element) { - const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(','); - return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el)); - } - - }; - /** - * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): util/swipe.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ /** * Constants */ @@ -1125,6 +990,7 @@ leftCallback: '(function|null)', rightCallback: '(function|null)' }; + /** * Class definition */ @@ -1133,84 +999,67 @@ constructor(element, config) { super(); this._element = element; - if (!element || !Swipe.isSupported()) { return; } - this._config = this._getConfig(config); this._deltaX = 0; this._supportPointerEvents = Boolean(window.PointerEvent); - this._initEvents(); - } // Getters - + } + // Getters static get Default() { return Default$c; } - static get DefaultType() { return DefaultType$c; } - static get NAME() { return NAME$d; - } // Public - + } + // Public dispose() { EventHandler.off(this._element, EVENT_KEY$9); - } // Private - + } + // Private _start(event) { if (!this._supportPointerEvents) { this._deltaX = event.touches[0].clientX; return; } - if (this._eventIsPointerPenTouch(event)) { this._deltaX = event.clientX; } } - _end(event) { if (this._eventIsPointerPenTouch(event)) { this._deltaX = event.clientX - this._deltaX; } - this._handleSwipe(); - execute(this._config.endCallback); } - _move(event) { this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX; } - _handleSwipe() { const absDeltaX = Math.abs(this._deltaX); - if (absDeltaX <= SWIPE_THRESHOLD) { return; } - const direction = absDeltaX / this._deltaX; this._deltaX = 0; - if (!direction) { return; } - execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback); } - _initEvents() { if (this._supportPointerEvents) { EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event)); EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event)); - this._element.classList.add(CLASS_NAME_POINTER_EVENT); } else { EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event)); @@ -1218,24 +1067,24 @@ EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event)); } } - _eventIsPointerPenTouch(event) { return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); - } // Static - + } + // Static static isSupported() { return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; } - } /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): carousel.js + * Bootstrap carousel.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -1295,6 +1144,7 @@ touch: 'boolean', wrap: 'boolean' }; + /** * Class definition */ @@ -1308,32 +1158,27 @@ this.touchTimeout = null; this._swipeHelper = null; this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element); - this._addEventListeners(); - if (this._config.ride === CLASS_NAME_CAROUSEL) { this.cycle(); } - } // Getters - + } + // Getters static get Default() { return Default$b; } - static get DefaultType() { return DefaultType$b; } - static get NAME() { return NAME$c; - } // Public - + } + // Public next() { this._slide(ORDER_NEXT); } - nextWhenVisible() { // FIXME TODO use `document.visibilityState` // Don't call next when the page isn't visible @@ -1342,101 +1187,80 @@ this.next(); } } - prev() { this._slide(ORDER_PREV); } - pause() { if (this._isSliding) { triggerTransitionEnd(this._element); } - this._clearInterval(); } - cycle() { this._clearInterval(); - this._updateInterval(); - this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval); } - _maybeEnableCycle() { if (!this._config.ride) { return; } - if (this._isSliding) { EventHandler.one(this._element, EVENT_SLID, () => this.cycle()); return; } - this.cycle(); } - to(index) { const items = this._getItems(); - if (index > items.length - 1 || index < 0) { return; } - if (this._isSliding) { EventHandler.one(this._element, EVENT_SLID, () => this.to(index)); return; } - const activeIndex = this._getItemIndex(this._getActive()); - if (activeIndex === index) { return; } - const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV; - this._slide(order, items[index]); } - dispose() { if (this._swipeHelper) { this._swipeHelper.dispose(); } - super.dispose(); - } // Private - + } + // Private _configAfterMerge(config) { config.defaultInterval = config.interval; return config; } - _addEventListeners() { if (this._config.keyboard) { EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event)); } - if (this._config.pause === 'hover') { EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause()); EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle()); } - if (this._config.touch && Swipe.isSupported()) { this._addTouchEventListeners(); } } - _addTouchEventListeners() { for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) { EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault()); } - const endCallBack = () => { if (this._config.pause !== 'hover') { return; - } // If it's a touch-enabled device, mouseenter/leave are fired as + } + + // If it's a touch-enabled device, mouseenter/leave are fired as // part of the mouse compatibility events on first tap - the carousel // would stop cycling until user tapped out of it; // here, we listen for touchend, explicitly pause the carousel @@ -1444,16 +1268,12 @@ // is NOT fired) and after a timeout (to allow for mouse compatibility // events to fire) we explicitly restart cycling - this.pause(); - if (this.touchTimeout) { clearTimeout(this.touchTimeout); } - this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval); }; - const swipeConfig = { leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)), rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)), @@ -1461,68 +1281,51 @@ }; this._swipeHelper = new Swipe(this._element, swipeConfig); } - _keydown(event) { if (/input|textarea/i.test(event.target.tagName)) { return; } - const direction = KEY_TO_DIRECTION[event.key]; - if (direction) { event.preventDefault(); - this._slide(this._directionToOrder(direction)); } } - _getItemIndex(element) { return this._getItems().indexOf(element); } - _setActiveIndicatorElement(index) { if (!this._indicatorsElement) { return; } - const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement); activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2); activeIndicator.removeAttribute('aria-current'); const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement); - if (newActiveIndicator) { newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2); newActiveIndicator.setAttribute('aria-current', 'true'); } } - _updateInterval() { const element = this._activeElement || this._getActive(); - if (!element) { return; } - const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10); this._config.interval = elementInterval || this._config.defaultInterval; } - _slide(order, element = null) { if (this._isSliding) { return; } - const activeElement = this._getActive(); - const isNext = order === ORDER_NEXT; const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap); - if (nextElement === activeElement) { return; } - const nextElementIndex = this._getItemIndex(nextElement); - const triggerEvent = eventName => { return EventHandler.trigger(this._element, eventName, { relatedTarget: nextElement, @@ -1531,25 +1334,19 @@ to: nextElementIndex }); }; - const slideEvent = triggerEvent(EVENT_SLIDE); - if (slideEvent.defaultPrevented) { return; } - if (!activeElement || !nextElement) { // Some weirdness is happening, so we bail - // todo: change tests that use empty divs to avoid this check + // TODO: change tests that use empty divs to avoid this check return; } - const isCycling = Boolean(this._interval); this.pause(); this._isSliding = true; - this._setActiveIndicatorElement(nextElementIndex); - this._activeElement = nextElement; const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END; const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV; @@ -1557,7 +1354,6 @@ reflow(nextElement); activeElement.classList.add(directionalClassName); nextElement.classList.add(directionalClassName); - const completeCallBack = () => { nextElement.classList.remove(directionalClassName, orderClassName); nextElement.classList.add(CLASS_NAME_ACTIVE$2); @@ -1565,113 +1361,89 @@ this._isSliding = false; triggerEvent(EVENT_SLID); }; - this._queueCallback(completeCallBack, activeElement, this._isAnimated()); - if (isCycling) { this.cycle(); } } - _isAnimated() { return this._element.classList.contains(CLASS_NAME_SLIDE); } - _getActive() { return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); } - _getItems() { return SelectorEngine.find(SELECTOR_ITEM, this._element); } - _clearInterval() { if (this._interval) { clearInterval(this._interval); this._interval = null; } } - _directionToOrder(direction) { if (isRTL()) { return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT; } - return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV; } - _orderToDirection(order) { if (isRTL()) { return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT; } - return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT; - } // Static - + } + // Static static jQueryInterface(config) { return this.each(function () { const data = Carousel.getOrCreateInstance(this, config); - if (typeof config === 'number') { data.to(config); return; } - if (typeof config === 'string') { if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { throw new TypeError(`No method named "${config}"`); } - data[config](); } }); } - } + /** * Data API implementation */ - EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) { - const target = getElementFromSelector(this); - + const target = SelectorEngine.getElementFromSelector(this); if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { return; } - event.preventDefault(); const carousel = Carousel.getOrCreateInstance(target); const slideIndex = this.getAttribute('data-bs-slide-to'); - if (slideIndex) { carousel.to(slideIndex); - carousel._maybeEnableCycle(); - return; } - if (Manipulator.getDataAttribute(this, 'slide') === 'next') { carousel.next(); - carousel._maybeEnableCycle(); - return; } - carousel.prev(); - carousel._maybeEnableCycle(); }); EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => { const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE); - for (const carousel of carousels) { Carousel.getOrCreateInstance(carousel); } }); + /** * jQuery */ @@ -1680,10 +1452,12 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): collapse.js + * Bootstrap collapse.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -1715,6 +1489,7 @@ parent: '(null|element)', toggle: 'boolean' }; + /** * Class definition */ @@ -1725,41 +1500,34 @@ this._isTransitioning = false; this._triggerArray = []; const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4); - for (const elem of toggleList) { - const selector = getSelectorFromElement(elem); + const selector = SelectorEngine.getSelectorFromElement(elem); const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element); - if (selector !== null && filterElement.length) { this._triggerArray.push(elem); } } - this._initializeChildren(); - if (!this._config.parent) { this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); } - if (this._config.toggle) { this.toggle(); } - } // Getters - + } + // Getters static get Default() { return Default$a; } - static get DefaultType() { return DefaultType$a; } - static get NAME() { return NAME$b; - } // Public - + } + // Public toggle() { if (this._isShown()) { this.hide(); @@ -1767,201 +1535,149 @@ this.show(); } } - show() { if (this._isTransitioning || this._isShown()) { return; } + let activeChildren = []; - let activeChildren = []; // find active children - + // find active children if (this._config.parent) { activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, { toggle: false })); } - if (activeChildren.length && activeChildren[0]._isTransitioning) { return; } - const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6); - if (startEvent.defaultPrevented) { return; } - for (const activeInstance of activeChildren) { activeInstance.hide(); } - const dimension = this._getDimension(); - this._element.classList.remove(CLASS_NAME_COLLAPSE); - this._element.classList.add(CLASS_NAME_COLLAPSING); - this._element.style[dimension] = 0; - this._addAriaAndCollapsedClass(this._triggerArray, true); - this._isTransitioning = true; - const complete = () => { this._isTransitioning = false; - this._element.classList.remove(CLASS_NAME_COLLAPSING); - this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); - this._element.style[dimension] = ''; EventHandler.trigger(this._element, EVENT_SHOWN$6); }; - const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); const scrollSize = `scroll${capitalizedDimension}`; - this._queueCallback(complete, this._element, true); - this._element.style[dimension] = `${this._element[scrollSize]}px`; } - hide() { if (this._isTransitioning || !this._isShown()) { return; } - const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6); - if (startEvent.defaultPrevented) { return; } - const dimension = this._getDimension(); - this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; reflow(this._element); - this._element.classList.add(CLASS_NAME_COLLAPSING); - this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); - for (const trigger of this._triggerArray) { - const element = getElementFromSelector(trigger); - + const element = SelectorEngine.getElementFromSelector(trigger); if (element && !this._isShown(element)) { this._addAriaAndCollapsedClass([trigger], false); } } - this._isTransitioning = true; - const complete = () => { this._isTransitioning = false; - this._element.classList.remove(CLASS_NAME_COLLAPSING); - this._element.classList.add(CLASS_NAME_COLLAPSE); - EventHandler.trigger(this._element, EVENT_HIDDEN$6); }; - this._element.style[dimension] = ''; - this._queueCallback(complete, this._element, true); } - _isShown(element = this._element) { return element.classList.contains(CLASS_NAME_SHOW$7); - } // Private - + } + // Private _configAfterMerge(config) { config.toggle = Boolean(config.toggle); // Coerce string values - config.parent = getElement(config.parent); return config; } - _getDimension() { return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; } - _initializeChildren() { if (!this._config.parent) { return; } - const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4); - for (const element of children) { - const selected = getElementFromSelector(element); - + const selected = SelectorEngine.getElementFromSelector(element); if (selected) { this._addAriaAndCollapsedClass([element], this._isShown(selected)); } } } - _getFirstLevelChildren(selector) { - const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth - + const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); + // remove children if greater depth return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element)); } - _addAriaAndCollapsedClass(triggerArray, isOpen) { if (!triggerArray.length) { return; } - for (const element of triggerArray) { element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen); element.setAttribute('aria-expanded', isOpen); } - } // Static - + } + // Static static jQueryInterface(config) { const _config = {}; - if (typeof config === 'string' && /show|hide/.test(config)) { _config.toggle = false; } - return this.each(function () { const data = Collapse.getOrCreateInstance(this, _config); - if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`); } - data[config](); } }); } - } + /** * Data API implementation */ - EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) { // preventDefault only for elements (which change the URL) not inside the collapsible element if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') { event.preventDefault(); } - - const selector = getSelectorFromElement(this); - const selectorElements = SelectorEngine.find(selector); - - for (const element of selectorElements) { + for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) { Collapse.getOrCreateInstance(element, { toggle: false }).toggle(); } }); + /** * jQuery */ @@ -2131,7 +1847,7 @@ function getUAString() { var uaData = navigator.userAgentData; - if (uaData != null && uaData.brands) { + if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) { return uaData.brands.map(function (item) { return item.brand + "/" + item.version; }).join(' '); @@ -2419,7 +2135,6 @@ } if (!contains(state.elements.popper, arrowElement)) { - return; } @@ -2450,10 +2165,9 @@ // Zooming can change the DPR, but it seems to report a value that will // cleanly divide the values into the appropriate subpixels. - function roundOffsetsByDPR(_ref) { + function roundOffsetsByDPR(_ref, win) { var x = _ref.x, y = _ref.y; - var win = window; var dpr = win.devicePixelRatio || 1; return { x: round(x * dpr) / dpr || 0, @@ -2536,7 +2250,7 @@ var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ x: x, y: y - }) : { + }, getWindow(popper)) : { x: x, y: y }; @@ -2562,7 +2276,6 @@ adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; - var commonStyles = { placement: getBasePlacement(state.placement), variation: getVariation(state.placement), @@ -3630,8 +3343,7 @@ state.orderedModifiers = orderedModifiers.filter(function (m) { return m.enabled; - }); // Validate the provided modifiers so that the consumer will get warned - + }); runModifierEffects(); return instance.update(); }, @@ -3651,7 +3363,6 @@ // anymore if (!areValidElements(reference, popper)) { - return; } // Store the reference and popper rects to be read by modifiers @@ -3676,7 +3387,6 @@ }); for (var index = 0; index < state.orderedModifiers.length; index++) { - if (state.reset === true) { state.reset = false; index = -1; @@ -3714,7 +3424,6 @@ }; if (!areValidElements(reference, popper)) { - return instance; } @@ -3729,11 +3438,11 @@ // one. function runModifierEffects() { - state.orderedModifiers.forEach(function (_ref3) { - var name = _ref3.name, - _ref3$options = _ref3.options, - options = _ref3$options === void 0 ? {} : _ref3$options, - effect = _ref3.effect; + state.orderedModifiers.forEach(function (_ref) { + var name = _ref.name, + _ref$options = _ref.options, + options = _ref$options === void 0 ? {} : _ref$options, + effect = _ref.effect; if (typeof effect === 'function') { var cleanupFn = effect({ @@ -3774,52 +3483,54 @@ const Popper = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({ __proto__: null, - popperGenerator, - detectOverflow, - createPopperBase: createPopper$2, - createPopper, - createPopperLite: createPopper$1, - top, - bottom, - right, - left, - auto, - basePlacements, - start, - end, - clippingParents, - viewport, - popper, - reference, - variationPlacements, - placements, - beforeRead, - read, - afterRead, - beforeMain, - main, afterMain, - beforeWrite, - write, + afterRead, afterWrite, - modifierPhases, applyStyles: applyStyles$1, arrow: arrow$1, + auto, + basePlacements, + beforeMain, + beforeRead, + beforeWrite, + bottom, + clippingParents, computeStyles: computeStyles$1, + createPopper, + createPopperBase: createPopper$2, + createPopperLite: createPopper$1, + detectOverflow, + end, eventListeners, flip: flip$1, hide: hide$1, + left, + main, + modifierPhases, offset: offset$1, + placements, + popper, + popperGenerator, popperOffsets: popperOffsets$1, - preventOverflow: preventOverflow$1 + preventOverflow: preventOverflow$1, + read, + reference, + right, + start, + top, + variationPlacements, + viewport, + write }, Symbol.toStringTag, { value: 'Module' })); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): dropdown.js + * Bootstrap dropdown.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -3877,6 +3588,7 @@ popperConfig: '(null|object|function)', reference: '(string|element|object)' }; + /** * Class definition */ @@ -3886,143 +3598,112 @@ super(element, config); this._popper = null; this._parent = this._element.parentNode; // dropdown wrapper - // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/ - + // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/ this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent); this._inNavbar = this._detectNavbar(); - } // Getters - + } + // Getters static get Default() { return Default$9; } - static get DefaultType() { return DefaultType$9; } - static get NAME() { return NAME$a; - } // Public - + } + // Public toggle() { return this._isShown() ? this.hide() : this.show(); } - show() { if (isDisabled(this._element) || this._isShown()) { return; } - const relatedTarget = { relatedTarget: this._element }; const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget); - if (showEvent.defaultPrevented) { return; } + this._createPopper(); - this._createPopper(); // If this is a touch-enabled device we add extra + // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - - if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) { for (const element of [].concat(...document.body.children)) { EventHandler.on(element, 'mouseover', noop); } } - this._element.focus(); - this._element.setAttribute('aria-expanded', true); - this._menu.classList.add(CLASS_NAME_SHOW$6); - this._element.classList.add(CLASS_NAME_SHOW$6); - EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget); } - hide() { if (isDisabled(this._element) || !this._isShown()) { return; } - const relatedTarget = { relatedTarget: this._element }; - this._completeHide(relatedTarget); } - dispose() { if (this._popper) { this._popper.destroy(); } - super.dispose(); } - update() { this._inNavbar = this._detectNavbar(); - if (this._popper) { this._popper.update(); } - } // Private - + } + // Private _completeHide(relatedTarget) { const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget); - if (hideEvent.defaultPrevented) { return; - } // If this is a touch-enabled device we remove the extra - // empty mouseover listeners we added for iOS support - + } + // If this is a touch-enabled device we remove the extra + // empty mouseover listeners we added for iOS support if ('ontouchstart' in document.documentElement) { for (const element of [].concat(...document.body.children)) { EventHandler.off(element, 'mouseover', noop); } } - if (this._popper) { this._popper.destroy(); } - this._menu.classList.remove(CLASS_NAME_SHOW$6); - this._element.classList.remove(CLASS_NAME_SHOW$6); - this._element.setAttribute('aria-expanded', 'false'); - Manipulator.removeDataAttribute(this._menu, 'popper'); EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget); } - _getConfig(config) { config = super._getConfig(config); - if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') { // Popper virtual elements require a getBoundingClientRect method throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); } - return config; } - _createPopper() { if (typeof Popper === 'undefined') { throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); } - let referenceElement = this._element; - if (this._config.reference === 'parent') { referenceElement = this._parent; } else if (isElement$1(this._config.reference)) { @@ -4030,65 +3711,49 @@ } else if (typeof this._config.reference === 'object') { referenceElement = this._config.reference; } - const popperConfig = this._getPopperConfig(); - this._popper = createPopper(referenceElement, this._menu, popperConfig); } - _isShown() { return this._menu.classList.contains(CLASS_NAME_SHOW$6); } - _getPlacement() { const parentDropdown = this._parent; - if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { return PLACEMENT_RIGHT; } - if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { return PLACEMENT_LEFT; } - if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) { return PLACEMENT_TOPCENTER; } - if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) { return PLACEMENT_BOTTOMCENTER; - } // We need to trim the value because custom properties can also include spaces - + } + // We need to trim the value because custom properties can also include spaces const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'; - if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; } - return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; } - _detectNavbar() { return this._element.closest(SELECTOR_NAVBAR) !== null; } - _getOffset() { const { offset } = this._config; - if (typeof offset === 'string') { return offset.split(',').map(value => Number.parseInt(value, 10)); } - if (typeof offset === 'function') { return popperData => offset(popperData, this._element); } - return offset; } - _getPopperConfig() { const defaultBsPopperConfig = { placement: this._getPlacement(), @@ -4103,121 +3768,101 @@ offset: this._getOffset() } }] - }; // Disable Popper if we have a static display or Dropdown is in Navbar + }; + // Disable Popper if we have a static display or Dropdown is in Navbar if (this._inNavbar || this._config.display === 'static') { - Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove - + Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove defaultBsPopperConfig.modifiers = [{ name: 'applyStyles', enabled: false }]; } - - return { ...defaultBsPopperConfig, - ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) + return { + ...defaultBsPopperConfig, + ...execute(this._config.popperConfig, [defaultBsPopperConfig]) }; } - _selectMenuItem({ key, target }) { const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element)); - if (!items.length) { return; - } // if target isn't included in items (e.g. when expanding the dropdown) - // allow cycling to get the last item in case key equals ARROW_UP_KEY - + } + // if target isn't included in items (e.g. when expanding the dropdown) + // allow cycling to get the last item in case key equals ARROW_UP_KEY getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus(); - } // Static - + } + // Static static jQueryInterface(config) { return this.each(function () { const data = Dropdown.getOrCreateInstance(this, config); - if (typeof config !== 'string') { return; } - if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`); } - data[config](); }); } - static clearMenus(event) { if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) { return; } - const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN); - for (const toggle of openToggles) { const context = Dropdown.getInstance(toggle); - if (!context || context._config.autoClose === false) { continue; } - const composedPath = event.composedPath(); const isMenuTarget = composedPath.includes(context._menu); - if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) { continue; - } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu - + } + // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) { continue; } - const relatedTarget = { relatedTarget: context._element }; - if (event.type === 'click') { relatedTarget.clickEvent = event; } - context._completeHide(relatedTarget); } } - static dataApiKeydownHandler(event) { // If not an UP | DOWN | ESCAPE key => not a dropdown command // If input/textarea && if key is other than ESCAPE => not a dropdown command + const isInput = /input|textarea/i.test(event.target.tagName); const isEscapeEvent = event.key === ESCAPE_KEY$2; const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key); - if (!isUpOrDownEvent && !isEscapeEvent) { return; } - if (isInput && !isEscapeEvent) { return; } + event.preventDefault(); - event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/ - + // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/ const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode); const instance = Dropdown.getOrCreateInstance(getToggleButton); - if (isUpOrDownEvent) { event.stopPropagation(); instance.show(); - instance._selectMenuItem(event); - return; } - if (instance._isShown()) { // else is escape and we check if it is shown event.stopPropagation(); @@ -4225,152 +3870,35 @@ getToggleButton.focus(); } } - } - /** - * Data API implementation - */ - - - EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler); - EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); - EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus); - EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); - EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { - event.preventDefault(); - Dropdown.getOrCreateInstance(this).toggle(); - }); - /** - * jQuery - */ - - defineJQueryPlugin(Dropdown); - - /** - * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): util/scrollBar.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - * -------------------------------------------------------------------------- - */ - /** - * Constants - */ - const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; - const SELECTOR_STICKY_CONTENT = '.sticky-top'; - const PROPERTY_PADDING = 'padding-right'; - const PROPERTY_MARGIN = 'margin-right'; /** - * Class definition - */ - - class ScrollBarHelper { - constructor() { - this._element = document.body; - } // Public - - - getWidth() { - // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes - const documentWidth = document.documentElement.clientWidth; - return Math.abs(window.innerWidth - documentWidth); - } - - hide() { - const width = this.getWidth(); - - this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width - - - this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth - - - this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width); - - this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width); - } - - reset() { - this._resetElementAttributes(this._element, 'overflow'); - - this._resetElementAttributes(this._element, PROPERTY_PADDING); - - this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING); - - this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN); - } - - isOverflowing() { - return this.getWidth() > 0; - } // Private - - - _disableOverFlow() { - this._saveInitialAttribute(this._element, 'overflow'); - - this._element.style.overflow = 'hidden'; - } - - _setElementAttributes(selector, styleProperty, callback) { - const scrollbarWidth = this.getWidth(); - - const manipulationCallBack = element => { - if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { - return; - } - - this._saveInitialAttribute(element, styleProperty); - - const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty); - element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`); - }; - - this._applyManipulationCallback(selector, manipulationCallBack); - } - - _saveInitialAttribute(element, styleProperty) { - const actualValue = element.style.getPropertyValue(styleProperty); - - if (actualValue) { - Manipulator.setDataAttribute(element, styleProperty, actualValue); - } - } - - _resetElementAttributes(selector, styleProperty) { - const manipulationCallBack = element => { - const value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero - - if (value === null) { - element.style.removeProperty(styleProperty); - return; - } - - Manipulator.removeDataAttribute(element, styleProperty); - element.style.setProperty(styleProperty, value); - }; - - this._applyManipulationCallback(selector, manipulationCallBack); - } - - _applyManipulationCallback(selector, callBack) { - if (isElement$1(selector)) { - callBack(selector); - return; - } + * Data API implementation + */ - for (const sel of SelectorEngine.find(selector, this._element)) { - callBack(sel); - } - } + EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler); + EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); + EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus); + EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); + EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { + event.preventDefault(); + Dropdown.getOrCreateInstance(this).toggle(); + }); - } + /** + * jQuery + */ + + defineJQueryPlugin(Dropdown); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): util/backdrop.js + * Bootstrap util/backdrop.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -4386,7 +3914,6 @@ isVisible: true, // if false, we use the backdrop helper without adding any element to the dom rootElement: 'body' // give the choice to place backdrop under different elements - }; const DefaultType$8 = { className: 'string', @@ -4395,6 +3922,7 @@ isVisible: 'boolean', rootElement: '(element|string)' }; + /** * Class definition */ @@ -4405,118 +3933,96 @@ this._config = this._getConfig(config); this._isAppended = false; this._element = null; - } // Getters - + } + // Getters static get Default() { return Default$8; } - static get DefaultType() { return DefaultType$8; } - static get NAME() { return NAME$9; - } // Public - + } + // Public show(callback) { if (!this._config.isVisible) { execute(callback); return; } - this._append(); - const element = this._getElement(); - if (this._config.isAnimated) { reflow(element); } - element.classList.add(CLASS_NAME_SHOW$5); - this._emulateAnimation(() => { execute(callback); }); } - hide(callback) { if (!this._config.isVisible) { execute(callback); return; } - this._getElement().classList.remove(CLASS_NAME_SHOW$5); - this._emulateAnimation(() => { this.dispose(); execute(callback); }); } - dispose() { if (!this._isAppended) { return; } - EventHandler.off(this._element, EVENT_MOUSEDOWN); - this._element.remove(); - this._isAppended = false; - } // Private - + } + // Private _getElement() { if (!this._element) { const backdrop = document.createElement('div'); backdrop.className = this._config.className; - if (this._config.isAnimated) { backdrop.classList.add(CLASS_NAME_FADE$4); } - this._element = backdrop; } - return this._element; } - _configAfterMerge(config) { // use getElement() with the default "body" to get a fresh Element on each instantiation config.rootElement = getElement(config.rootElement); return config; } - _append() { if (this._isAppended) { return; } - const element = this._getElement(); - this._config.rootElement.append(element); - EventHandler.on(element, EVENT_MOUSEDOWN, () => { execute(this._config.clickCallback); }); this._isAppended = true; } - _emulateAnimation(callback) { executeAfterTransition(callback, this._getElement(), this._config.isAnimated); } - } /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): util/focustrap.js + * Bootstrap util/focustrap.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -4532,12 +4038,12 @@ const Default$7 = { autofocus: true, trapElement: null // The element to trap focus inside of - }; const DefaultType$7 = { autofocus: 'boolean', trapElement: 'element' }; + /** * Class definition */ @@ -4548,59 +4054,49 @@ this._config = this._getConfig(config); this._isActive = false; this._lastTabNavDirection = null; - } // Getters - + } + // Getters static get Default() { return Default$7; } - static get DefaultType() { return DefaultType$7; } - static get NAME() { return NAME$8; - } // Public - + } + // Public activate() { if (this._isActive) { return; } - if (this._config.autofocus) { this._config.trapElement.focus(); } - EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop - EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event)); EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event)); this._isActive = true; } - deactivate() { if (!this._isActive) { return; } - this._isActive = false; EventHandler.off(document, EVENT_KEY$5); - } // Private - + } + // Private _handleFocusin(event) { const { trapElement } = this._config; - if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) { return; } - const elements = SelectorEngine.focusableChildren(trapElement); - if (elements.length === 0) { trapElement.focus(); } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { @@ -4609,23 +4105,120 @@ elements[0].focus(); } } - _handleKeydown(event) { if (event.key !== TAB_KEY) { return; } - this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; } + } + + /** + * -------------------------------------------------------------------------- + * Bootstrap util/scrollBar.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + * -------------------------------------------------------------------------- + */ + + + /** + * Constants + */ + + const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; + const SELECTOR_STICKY_CONTENT = '.sticky-top'; + const PROPERTY_PADDING = 'padding-right'; + const PROPERTY_MARGIN = 'margin-right'; + + /** + * Class definition + */ + + class ScrollBarHelper { + constructor() { + this._element = document.body; + } + + // Public + getWidth() { + // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes + const documentWidth = document.documentElement.clientWidth; + return Math.abs(window.innerWidth - documentWidth); + } + hide() { + const width = this.getWidth(); + this._disableOverFlow(); + // give padding to element to balance the hidden scrollbar width + this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); + // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth + this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width); + this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width); + } + reset() { + this._resetElementAttributes(this._element, 'overflow'); + this._resetElementAttributes(this._element, PROPERTY_PADDING); + this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING); + this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN); + } + isOverflowing() { + return this.getWidth() > 0; + } + // Private + _disableOverFlow() { + this._saveInitialAttribute(this._element, 'overflow'); + this._element.style.overflow = 'hidden'; + } + _setElementAttributes(selector, styleProperty, callback) { + const scrollbarWidth = this.getWidth(); + const manipulationCallBack = element => { + if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { + return; + } + this._saveInitialAttribute(element, styleProperty); + const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty); + element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`); + }; + this._applyManipulationCallback(selector, manipulationCallBack); + } + _saveInitialAttribute(element, styleProperty) { + const actualValue = element.style.getPropertyValue(styleProperty); + if (actualValue) { + Manipulator.setDataAttribute(element, styleProperty, actualValue); + } + } + _resetElementAttributes(selector, styleProperty) { + const manipulationCallBack = element => { + const value = Manipulator.getDataAttribute(element, styleProperty); + // We only want to remove the property if the value is `null`; the value can also be zero + if (value === null) { + element.style.removeProperty(styleProperty); + return; + } + Manipulator.removeDataAttribute(element, styleProperty); + element.style.setProperty(styleProperty, value); + }; + this._applyManipulationCallback(selector, manipulationCallBack); + } + _applyManipulationCallback(selector, callBack) { + if (isElement$1(selector)) { + callBack(selector); + return; + } + for (const sel of SelectorEngine.find(selector, this._element)) { + callBack(sel); + } + } } /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): modal.js + * Bootstrap modal.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -4663,6 +4256,7 @@ focus: 'boolean', keyboard: 'boolean' }; + /** * Class definition */ @@ -4676,91 +4270,67 @@ this._isShown = false; this._isTransitioning = false; this._scrollBar = new ScrollBarHelper(); - this._addEventListeners(); - } // Getters - + } + // Getters static get Default() { return Default$6; } - static get DefaultType() { return DefaultType$6; } - static get NAME() { return NAME$7; - } // Public - + } + // Public toggle(relatedTarget) { return this._isShown ? this.hide() : this.show(relatedTarget); } - show(relatedTarget) { if (this._isShown || this._isTransitioning) { return; } - const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, { relatedTarget }); - if (showEvent.defaultPrevented) { return; } - this._isShown = true; this._isTransitioning = true; - this._scrollBar.hide(); - document.body.classList.add(CLASS_NAME_OPEN); - this._adjustDialog(); - this._backdrop.show(() => this._showElement(relatedTarget)); } - hide() { if (!this._isShown || this._isTransitioning) { return; } - const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4); - if (hideEvent.defaultPrevented) { return; } - this._isShown = false; this._isTransitioning = true; - this._focustrap.deactivate(); - this._element.classList.remove(CLASS_NAME_SHOW$4); - this._queueCallback(() => this._hideModal(), this._element, this._isAnimated()); } - dispose() { - for (const htmlElement of [window, this._dialog]) { - EventHandler.off(htmlElement, EVENT_KEY$4); - } - + EventHandler.off(window, EVENT_KEY$4); + EventHandler.off(this._dialog, EVENT_KEY$4); this._backdrop.dispose(); - this._focustrap.deactivate(); - super.dispose(); } - handleUpdate() { this._adjustDialog(); - } // Private - + } + // Private _initializeBackDrop() { return new Backdrop({ isVisible: Boolean(this._config.backdrop), @@ -4768,64 +4338,47 @@ isAnimated: this._isAnimated() }); } - _initializeFocusTrap() { return new FocusTrap({ trapElement: this._element }); } - _showElement(relatedTarget) { // try to append dynamic modal if (!document.body.contains(this._element)) { document.body.append(this._element); } - this._element.style.display = 'block'; - this._element.removeAttribute('aria-hidden'); - this._element.setAttribute('aria-modal', true); - this._element.setAttribute('role', 'dialog'); - this._element.scrollTop = 0; const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog); - if (modalBody) { modalBody.scrollTop = 0; } - reflow(this._element); - this._element.classList.add(CLASS_NAME_SHOW$4); - const transitionComplete = () => { if (this._config.focus) { this._focustrap.activate(); } - this._isTransitioning = false; EventHandler.trigger(this._element, EVENT_SHOWN$4, { relatedTarget }); }; - this._queueCallback(transitionComplete, this._dialog, this._isAnimated()); } - _addEventListeners() { EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => { if (event.key !== ESCAPE_KEY$1) { return; } - if (this._config.keyboard) { - event.preventDefault(); this.hide(); return; } - this._triggerBackdropTransition(); }); EventHandler.on(window, EVENT_RESIZE$1, () => { @@ -4839,157 +4392,124 @@ if (this._element !== event.target || this._element !== event2.target) { return; } - if (this._config.backdrop === 'static') { this._triggerBackdropTransition(); - return; } - if (this._config.backdrop) { this.hide(); } }); }); } - _hideModal() { this._element.style.display = 'none'; - this._element.setAttribute('aria-hidden', true); - this._element.removeAttribute('aria-modal'); - this._element.removeAttribute('role'); - this._isTransitioning = false; - this._backdrop.hide(() => { document.body.classList.remove(CLASS_NAME_OPEN); - this._resetAdjustments(); - this._scrollBar.reset(); - EventHandler.trigger(this._element, EVENT_HIDDEN$4); }); } - _isAnimated() { return this._element.classList.contains(CLASS_NAME_FADE$3); } - _triggerBackdropTransition() { const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1); - if (hideEvent.defaultPrevented) { return; } - const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; - const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed - + const initialOverflowY = this._element.style.overflowY; + // return if the following background transition hasn't yet completed if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) { return; } - if (!isModalOverflowing) { this._element.style.overflowY = 'hidden'; } - this._element.classList.add(CLASS_NAME_STATIC); - this._queueCallback(() => { this._element.classList.remove(CLASS_NAME_STATIC); - this._queueCallback(() => { this._element.style.overflowY = initialOverflowY; }, this._dialog); }, this._dialog); - this._element.focus(); } + /** * The following methods are used to handle overflowing modals */ - _adjustDialog() { const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; - const scrollbarWidth = this._scrollBar.getWidth(); - const isBodyOverflowing = scrollbarWidth > 0; - if (isBodyOverflowing && !isModalOverflowing) { const property = isRTL() ? 'paddingLeft' : 'paddingRight'; this._element.style[property] = `${scrollbarWidth}px`; } - if (!isBodyOverflowing && isModalOverflowing) { const property = isRTL() ? 'paddingRight' : 'paddingLeft'; this._element.style[property] = `${scrollbarWidth}px`; } } - _resetAdjustments() { this._element.style.paddingLeft = ''; this._element.style.paddingRight = ''; - } // Static - + } + // Static static jQueryInterface(config, relatedTarget) { return this.each(function () { const data = Modal.getOrCreateInstance(this, config); - if (typeof config !== 'string') { return; } - if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`); } - data[config](relatedTarget); }); } - } + /** * Data API implementation */ - EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { - const target = getElementFromSelector(this); - + const target = SelectorEngine.getElementFromSelector(this); if (['A', 'AREA'].includes(this.tagName)) { event.preventDefault(); } - EventHandler.one(target, EVENT_SHOW$4, showEvent => { if (showEvent.defaultPrevented) { // only register focus restorer if modal will actually get shown return; } - EventHandler.one(target, EVENT_HIDDEN$4, () => { if (isVisible(this)) { this.focus(); } }); - }); // avoid conflict when clicking modal toggler while another one is open + }); + // avoid conflict when clicking modal toggler while another one is open const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1); - if (alreadyOpen) { Modal.getInstance(alreadyOpen).hide(); } - const data = Modal.getOrCreateInstance(target); data.toggle(this); }); enableDismissTrigger(Modal); + /** * jQuery */ @@ -4998,10 +4518,12 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): offcanvas.js + * Bootstrap offcanvas.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -5036,6 +4558,7 @@ keyboard: 'boolean', scroll: 'boolean' }; + /** * Class definition */ @@ -5046,130 +4569,95 @@ this._isShown = false; this._backdrop = this._initializeBackDrop(); this._focustrap = this._initializeFocusTrap(); - this._addEventListeners(); - } // Getters - + } + // Getters static get Default() { return Default$5; } - static get DefaultType() { return DefaultType$5; } - static get NAME() { return NAME$6; - } // Public - + } + // Public toggle(relatedTarget) { return this._isShown ? this.hide() : this.show(relatedTarget); } - show(relatedTarget) { if (this._isShown) { return; } - const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, { relatedTarget }); - if (showEvent.defaultPrevented) { return; } - this._isShown = true; - this._backdrop.show(); - if (!this._config.scroll) { new ScrollBarHelper().hide(); } - this._element.setAttribute('aria-modal', true); - this._element.setAttribute('role', 'dialog'); - this._element.classList.add(CLASS_NAME_SHOWING$1); - const completeCallBack = () => { if (!this._config.scroll || this._config.backdrop) { this._focustrap.activate(); } - this._element.classList.add(CLASS_NAME_SHOW$3); - this._element.classList.remove(CLASS_NAME_SHOWING$1); - EventHandler.trigger(this._element, EVENT_SHOWN$3, { relatedTarget }); }; - this._queueCallback(completeCallBack, this._element, true); } - hide() { if (!this._isShown) { return; } - const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3); - if (hideEvent.defaultPrevented) { return; } - this._focustrap.deactivate(); - this._element.blur(); - this._isShown = false; - this._element.classList.add(CLASS_NAME_HIDING); - this._backdrop.hide(); - const completeCallback = () => { this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING); - this._element.removeAttribute('aria-modal'); - this._element.removeAttribute('role'); - if (!this._config.scroll) { new ScrollBarHelper().reset(); } - EventHandler.trigger(this._element, EVENT_HIDDEN$3); }; - this._queueCallback(completeCallback, this._element, true); } - dispose() { this._backdrop.dispose(); - this._focustrap.deactivate(); - super.dispose(); - } // Private - + } + // Private _initializeBackDrop() { const clickCallback = () => { if (this._config.backdrop === 'static') { EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); return; } - this.hide(); - }; // 'static' option will be translated to true, and booleans will keep their value - + }; + // 'static' option will be translated to true, and booleans will keep their value const isVisible = Boolean(this._config.backdrop); return new Backdrop({ className: CLASS_NAME_BACKDROP, @@ -5179,75 +4667,63 @@ clickCallback: isVisible ? clickCallback : null }); } - _initializeFocusTrap() { return new FocusTrap({ trapElement: this._element }); } - _addEventListeners() { EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { if (event.key !== ESCAPE_KEY) { return; } - - if (!this._config.keyboard) { - EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); + if (this._config.keyboard) { + this.hide(); return; } - - this.hide(); + EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); }); - } // Static - + } + // Static static jQueryInterface(config) { return this.each(function () { const data = Offcanvas.getOrCreateInstance(this, config); - if (typeof config !== 'string') { return; } - if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { throw new TypeError(`No method named "${config}"`); } - data[config](this); }); } - } + /** * Data API implementation */ - EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { - const target = getElementFromSelector(this); - + const target = SelectorEngine.getElementFromSelector(this); if (['A', 'AREA'].includes(this.tagName)) { event.preventDefault(); } - if (isDisabled(this)) { return; } - EventHandler.one(target, EVENT_HIDDEN$3, () => { // focus on trigger when it is closed if (isVisible(this)) { this.focus(); } - }); // avoid conflict when clicking a toggler of an offcanvas, while another is open + }); + // avoid conflict when clicking a toggler of an offcanvas, while another is open const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR); - if (alreadyOpen && alreadyOpen !== target) { Offcanvas.getInstance(alreadyOpen).hide(); } - const data = Offcanvas.getOrCreateInstance(target); data.toggle(this); }); @@ -5264,6 +4740,7 @@ } }); enableDismissTrigger(Offcanvas); + /** * jQuery */ @@ -5272,42 +4749,13 @@ /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): util/sanitizer.js + * Bootstrap util/sanitizer.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ - const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); - const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; - /** - * A pattern that recognizes a commonly useful subset of URLs that are safe. - * - * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts - */ - - const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; - /** - * A pattern that matches safe data URLs. Only matches image, video and audio types. - * - * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts - */ - - const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; - - const allowedAttribute = (attribute, allowedAttributeList) => { - const attributeName = attribute.nodeName.toLowerCase(); - - if (allowedAttributeList.includes(attributeName)) { - if (uriAttributes.has(attributeName)) { - return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue)); - } - - return true; - } // Check if a regular expression validates the attribute. - - - return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName)); - }; + // js-docs-start allow-list + const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; const DefaultAllowlist = { // Global attributes allowed on any supplied element below. '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], @@ -5317,7 +4765,10 @@ br: [], col: [], code: [], + dd: [], div: [], + dl: [], + dt: [], em: [], hr: [], h1: [], @@ -5341,46 +4792,65 @@ u: [], ul: [] }; + // js-docs-end allow-list + + const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); + + /** + * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation + * contexts. + * + * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38 + */ + // eslint-disable-next-line unicorn/better-regex + const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i; + const allowedAttribute = (attribute, allowedAttributeList) => { + const attributeName = attribute.nodeName.toLowerCase(); + if (allowedAttributeList.includes(attributeName)) { + if (uriAttributes.has(attributeName)) { + return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue)); + } + return true; + } + + // Check if a regular expression validates the attribute. + return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName)); + }; function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) { if (!unsafeHtml.length) { return unsafeHtml; } - if (sanitizeFunction && typeof sanitizeFunction === 'function') { return sanitizeFunction(unsafeHtml); } - const domParser = new window.DOMParser(); const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); const elements = [].concat(...createdDocument.body.querySelectorAll('*')); - for (const element of elements) { const elementName = element.nodeName.toLowerCase(); - if (!Object.keys(allowList).includes(elementName)) { element.remove(); continue; } - const attributeList = [].concat(...element.attributes); const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []); - for (const attribute of attributeList) { if (!allowedAttribute(attribute, allowedAttributes)) { element.removeAttribute(attribute.nodeName); } } } - return createdDocument.body.innerHTML; } /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): util/template-factory.js + * Bootstrap util/template-factory.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -5409,6 +4879,7 @@ entry: '(string|element|function|null)', selector: '(string|element)' }; + /** * Class definition */ @@ -5417,65 +4888,53 @@ constructor(config) { super(); this._config = this._getConfig(config); - } // Getters - + } + // Getters static get Default() { return Default$4; } - static get DefaultType() { return DefaultType$4; } - static get NAME() { return NAME$5; - } // Public - + } + // Public getContent() { return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean); } - hasContent() { return this.getContent().length > 0; } - changeContent(content) { this._checkContent(content); - - this._config.content = { ...this._config.content, + this._config.content = { + ...this._config.content, ...content }; return this; } - toHtml() { const templateWrapper = document.createElement('div'); templateWrapper.innerHTML = this._maybeSanitize(this._config.template); - for (const [selector, text] of Object.entries(this._config.content)) { this._setContent(templateWrapper, text, selector); } - const template = templateWrapper.children[0]; - const extraClass = this._resolvePossibleFunction(this._config.extraClass); - if (extraClass) { template.classList.add(...extraClass.split(' ')); } - return template; - } // Private - + } + // Private _typeCheckConfig(config) { super._typeCheckConfig(config); - this._checkContent(config.content); } - _checkContent(arg) { for (const [selector, content] of Object.entries(arg)) { super._typeCheckConfig({ @@ -5484,61 +4943,50 @@ }, DefaultContentType); } } - _setContent(template, content, selector) { const templateElement = SelectorEngine.findOne(selector, template); - if (!templateElement) { return; } - content = this._resolvePossibleFunction(content); - if (!content) { templateElement.remove(); return; } - if (isElement$1(content)) { this._putElementInTemplate(getElement(content), templateElement); - return; } - if (this._config.html) { templateElement.innerHTML = this._maybeSanitize(content); return; } - templateElement.textContent = content; } - _maybeSanitize(arg) { return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg; } - _resolvePossibleFunction(arg) { - return typeof arg === 'function' ? arg(this) : arg; + return execute(arg, [this]); } - _putElementInTemplate(element, templateElement) { if (this._config.html) { templateElement.innerHTML = ''; templateElement.append(element); return; } - templateElement.textContent = element.textContent; } - } /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): tooltip.js + * Bootstrap tooltip.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -5581,7 +5029,7 @@ delay: 0, fallbackPlacements: ['top', 'right', 'bottom', 'left'], html: false, - offset: [0, 0], + offset: [0, 6], placement: 'top', popperConfig: null, sanitize: true, @@ -5610,6 +5058,7 @@ title: '(string|element|function)', trigger: 'string' }; + /** * Class definition */ @@ -5619,162 +5068,130 @@ if (typeof Popper === 'undefined') { throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); } + super(element, config); - super(element, config); // Private - + // Private this._isEnabled = true; this._timeout = 0; this._isHovered = null; this._activeTrigger = {}; this._popper = null; this._templateFactory = null; - this._newContent = null; // Protected + this._newContent = null; + // Protected this.tip = null; - this._setListeners(); - if (!this._config.selector) { this._fixTitle(); } - } // Getters - + } + // Getters static get Default() { return Default$3; } - static get DefaultType() { return DefaultType$3; } - static get NAME() { return NAME$4; - } // Public - + } + // Public enable() { this._isEnabled = true; } - disable() { this._isEnabled = false; } - toggleEnabled() { this._isEnabled = !this._isEnabled; } - toggle() { if (!this._isEnabled) { return; } - this._activeTrigger.click = !this._activeTrigger.click; - if (this._isShown()) { this._leave(); - return; } - this._enter(); } - dispose() { clearTimeout(this._timeout); EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); - if (this._element.getAttribute('data-bs-original-title')) { this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title')); } - this._disposePopper(); - super.dispose(); } - show() { if (this._element.style.display === 'none') { throw new Error('Please use show on visible elements'); } - if (!(this._isWithContent() && this._isEnabled)) { return; } - const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2)); const shadowRoot = findShadowRoot(this._element); - const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element); - if (showEvent.defaultPrevented || !isInTheDom) { return; - } // todo v6 remove this OR make it optional - + } + // TODO: v6 remove this or make it optional this._disposePopper(); - const tip = this._getTipElement(); - this._element.setAttribute('aria-describedby', tip.getAttribute('id')); - const { container } = this._config; - if (!this._element.ownerDocument.documentElement.contains(this.tip)) { container.append(tip); EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED)); } - this._popper = this._createPopper(tip); - tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra + tip.classList.add(CLASS_NAME_SHOW$2); + + // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html - if ('ontouchstart' in document.documentElement) { for (const element of [].concat(...document.body.children)) { EventHandler.on(element, 'mouseover', noop); } } - const complete = () => { EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2)); - if (this._isHovered === false) { this._leave(); } - this._isHovered = false; }; - this._queueCallback(complete, this.tip, this._isAnimated()); } - hide() { if (!this._isShown()) { return; } - const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2)); - if (hideEvent.defaultPrevented) { return; } - const tip = this._getTipElement(); + tip.classList.remove(CLASS_NAME_SHOW$2); - tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra + // If this is a touch-enabled device we remove the extra // empty mouseover listeners we added for iOS support - if ('ontouchstart' in document.documentElement) { for (const element of [].concat(...document.body.children)) { EventHandler.off(element, 'mouseover', noop); } } - this._activeTrigger[TRIGGER_CLICK] = false; this._activeTrigger[TRIGGER_FOCUS] = false; this._activeTrigger[TRIGGER_HOVER] = false; @@ -5784,133 +5201,107 @@ if (this._isWithActiveTrigger()) { return; } - if (!this._isHovered) { this._disposePopper(); } - this._element.removeAttribute('aria-describedby'); - EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2)); }; - this._queueCallback(complete, this.tip, this._isAnimated()); } - update() { if (this._popper) { this._popper.update(); } - } // Protected - + } + // Protected _isWithContent() { return Boolean(this._getTitle()); } - _getTipElement() { if (!this.tip) { this.tip = this._createTipElement(this._newContent || this._getContentForTemplate()); } - return this.tip; } - _createTipElement(content) { - const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6 - + const tip = this._getTemplateFactory(content).toHtml(); + // TODO: remove this check in v6 if (!tip) { return null; } - - tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // todo: on v6 the following can be achieved with CSS only - + tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); + // TODO: v6 the following can be achieved with CSS only tip.classList.add(`bs-${this.constructor.NAME}-auto`); const tipId = getUID(this.constructor.NAME).toString(); tip.setAttribute('id', tipId); - if (this._isAnimated()) { tip.classList.add(CLASS_NAME_FADE$2); } - return tip; } - setContent(content) { this._newContent = content; - if (this._isShown()) { this._disposePopper(); - this.show(); } } - _getTemplateFactory(content) { if (this._templateFactory) { this._templateFactory.changeContent(content); } else { - this._templateFactory = new TemplateFactory({ ...this._config, + this._templateFactory = new TemplateFactory({ + ...this._config, // the `content` var has to be after `this._config` // to override config.content in case of popover content, extraClass: this._resolvePossibleFunction(this._config.customClass) }); } - return this._templateFactory; } - _getContentForTemplate() { return { [SELECTOR_TOOLTIP_INNER]: this._getTitle() }; } - _getTitle() { return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title'); - } // Private - + } + // Private _initializeOnDelegatedTarget(event) { return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); } - _isAnimated() { return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2); } - _isShown() { return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2); } - _createPopper(tip) { - const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement; + const placement = execute(this._config.placement, [this, tip, this._element]); const attachment = AttachmentMap[placement.toUpperCase()]; return createPopper(this._element, tip, this._getPopperConfig(attachment)); } - _getOffset() { const { offset } = this._config; - if (typeof offset === 'string') { return offset.split(',').map(value => Number.parseInt(value, 10)); } - if (typeof offset === 'function') { return popperData => offset(popperData, this._element); } - return offset; } - _resolvePossibleFunction(arg) { - return typeof arg === 'function' ? arg.call(this._element) : arg; + return execute(arg, [this._element]); } - _getPopperConfig(attachment) { const defaultBsPopperConfig = { placement: attachment, @@ -5945,19 +5336,17 @@ } }] }; - return { ...defaultBsPopperConfig, - ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) + return { + ...defaultBsPopperConfig, + ...execute(this._config.popperConfig, [defaultBsPopperConfig]) }; } - _setListeners() { const triggers = this._config.trigger.split(' '); - for (const trigger of triggers) { if (trigger === 'click') { EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => { const context = this._initializeOnDelegatedTarget(event); - context.toggle(); }); } else if (trigger !== TRIGGER_MANUAL) { @@ -5965,187 +5354,151 @@ const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1); EventHandler.on(this._element, eventIn, this._config.selector, event => { const context = this._initializeOnDelegatedTarget(event); - context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; - context._enter(); }); EventHandler.on(this._element, eventOut, this._config.selector, event => { const context = this._initializeOnDelegatedTarget(event); - context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); - context._leave(); }); } } - this._hideModalHandler = () => { if (this._element) { this.hide(); } }; - EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); } - _fixTitle() { const title = this._element.getAttribute('title'); - if (!title) { return; } - if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) { this._element.setAttribute('aria-label', title); } - this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility - - this._element.removeAttribute('title'); } - _enter() { if (this._isShown() || this._isHovered) { this._isHovered = true; return; } - this._isHovered = true; - this._setTimeout(() => { if (this._isHovered) { this.show(); } }, this._config.delay.show); } - _leave() { if (this._isWithActiveTrigger()) { return; } - this._isHovered = false; - this._setTimeout(() => { if (!this._isHovered) { this.hide(); } }, this._config.delay.hide); } - _setTimeout(handler, timeout) { clearTimeout(this._timeout); this._timeout = setTimeout(handler, timeout); } - _isWithActiveTrigger() { return Object.values(this._activeTrigger).includes(true); } - _getConfig(config) { const dataAttributes = Manipulator.getDataAttributes(this._element); - for (const dataAttribute of Object.keys(dataAttributes)) { if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) { delete dataAttributes[dataAttribute]; } } - - config = { ...dataAttributes, + config = { + ...dataAttributes, ...(typeof config === 'object' && config ? config : {}) }; config = this._mergeConfigObj(config); config = this._configAfterMerge(config); - this._typeCheckConfig(config); - return config; } - _configAfterMerge(config) { config.container = config.container === false ? document.body : getElement(config.container); - if (typeof config.delay === 'number') { config.delay = { show: config.delay, hide: config.delay }; } - if (typeof config.title === 'number') { config.title = config.title.toString(); } - if (typeof config.content === 'number') { config.content = config.content.toString(); } - return config; } - _getDelegateConfig() { const config = {}; - - for (const key in this._config) { - if (this.constructor.Default[key] !== this._config[key]) { - config[key] = this._config[key]; + for (const [key, value] of Object.entries(this._config)) { + if (this.constructor.Default[key] !== value) { + config[key] = value; } } - config.selector = false; - config.trigger = 'manual'; // In the future can be replaced with: + config.trigger = 'manual'; + + // In the future can be replaced with: // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]]) // `Object.fromEntries(keysWithDifferentValues)` - return config; } - _disposePopper() { if (this._popper) { this._popper.destroy(); - this._popper = null; } - if (this.tip) { this.tip.remove(); this.tip = null; } - } // Static - + } + // Static static jQueryInterface(config) { return this.each(function () { const data = Tooltip.getOrCreateInstance(this, config); - if (typeof config !== 'string') { return; } - if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`); } - data[config](); }); } - } + /** * jQuery */ - defineJQueryPlugin(Tooltip); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): popover.js + * Bootstrap popover.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -6153,16 +5506,19 @@ const NAME$3 = 'popover'; const SELECTOR_TITLE = '.popover-header'; const SELECTOR_CONTENT = '.popover-body'; - const Default$2 = { ...Tooltip.Default, + const Default$2 = { + ...Tooltip.Default, content: '', offset: [0, 8], placement: 'right', template: '', trigger: 'click' }; - const DefaultType$2 = { ...Tooltip.DefaultType, + const DefaultType$2 = { + ...Tooltip.DefaultType, content: '(null|string|element|function)' }; + /** * Class definition */ @@ -6172,63 +5528,58 @@ static get Default() { return Default$2; } - static get DefaultType() { return DefaultType$2; } - static get NAME() { return NAME$3; - } // Overrides - + } + // Overrides _isWithContent() { return this._getTitle() || this._getContent(); - } // Private - + } + // Private _getContentForTemplate() { return { [SELECTOR_TITLE]: this._getTitle(), [SELECTOR_CONTENT]: this._getContent() }; } - _getContent() { return this._resolvePossibleFunction(this._config.content); - } // Static - + } + // Static static jQueryInterface(config) { return this.each(function () { const data = Popover.getOrCreateInstance(this, config); - if (typeof config !== 'string') { return; } - if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`); } - data[config](); }); } - } + /** * jQuery */ - defineJQueryPlugin(Popover); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.2.3): scrollspy.js + * Bootstrap scrollspy.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ + + /** * Constants */ @@ -6267,14 +5618,16 @@ target: 'element', threshold: 'array' }; + /** * Class definition */ class ScrollSpy extends BaseComponent { constructor(element, config) { - super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper + super(element, config); + // this._element is the observablesContainer and config.target the menu links wrapper this._targetLinks = new Map(); this._observableSections = new Map(); this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element; @@ -6285,87 +5638,75 @@ parentScrollTop: 0 }; this.refresh(); // initialize - } // Getters - + } + // Getters static get Default() { return Default$1; } - static get DefaultType() { return DefaultType$1; } - static get NAME() { return NAME$2; - } // Public - + } + // Public refresh() { this._initializeTargetsAndObservables(); - this._maybeEnableSmoothScroll(); - if (this._observer) { this._observer.disconnect(); } else { this._observer = this._getNewObserver(); } - for (const section of this._observableSections.values()) { this._observer.observe(section); } } - dispose() { this._observer.disconnect(); - super.dispose(); - } // Private - + } + // Private _configAfterMerge(config) { // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case - config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only + config.target = getElement(config.target) || document.body; + // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin; - if (typeof config.threshold === 'string') { config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value)); } - return config; } - _maybeEnableSmoothScroll() { if (!this._config.smoothScroll) { return; - } // unregister any previous listeners - + } + // unregister any previous listeners EventHandler.off(this._config.target, EVENT_CLICK); EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => { const observableSection = this._observableSections.get(event.target.hash); - if (observableSection) { event.preventDefault(); const root = this._rootElement || window; const height = observableSection.offsetTop - this._element.offsetTop; - if (root.scrollTo) { root.scrollTo({ top: height, behavior: 'smooth' }); return; - } // Chrome 60 doesn't support `scrollTo` - + } + // Chrome 60 doesn't support `scrollTo` root.scrollTop = height; } }); } - _getNewObserver() { const options = { root: this._rootElement, @@ -6373,95 +5714,77 @@ rootMargin: this._config.rootMargin }; return new IntersectionObserver(entries => this._observerCallback(entries), options); - } // The logic of selection - + } + // The logic of selection _observerCallback(entries) { const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`); - const activate = entry => { this._previousScrollData.visibleEntryTop = entry.target.offsetTop; - this._process(targetElement(entry)); }; - const parentScrollTop = (this._rootElement || document.documentElement).scrollTop; const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop; this._previousScrollData.parentScrollTop = parentScrollTop; - for (const entry of entries) { if (!entry.isIntersecting) { this._activeTarget = null; - this._clearActiveClass(targetElement(entry)); - continue; } - - const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop - + const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; + // if we are scrolling down, pick the bigger offsetTop if (userScrollsDown && entryIsLowerThanPrevious) { - activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration - + activate(entry); + // if parent isn't scrolled, let's keep the first visible item, breaking the iteration if (!parentScrollTop) { return; } - continue; - } // if we are scrolling up, pick the smallest offsetTop - + } + // if we are scrolling up, pick the smallest offsetTop if (!userScrollsDown && !entryIsLowerThanPrevious) { activate(entry); } } } - _initializeTargetsAndObservables() { this._targetLinks = new Map(); this._observableSections = new Map(); const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target); - for (const anchor of targetLinks) { // ensure that the anchor has an id and is not disabled if (!anchor.hash || isDisabled(anchor)) { continue; } + const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element); - const observableSection = SelectorEngine.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible - + // ensure that the observableSection exists & is visible if (isVisible(observableSection)) { - this._targetLinks.set(anchor.hash, anchor); - + this._targetLinks.set(decodeURI(anchor.hash), anchor); this._observableSections.set(anchor.hash, observableSection); } } } - _process(target) { if (this._activeTarget === target) { return; } - this._clearActiveClass(this._config.target); - this._activeTarget = target; target.classList.add(CLASS_NAME_ACTIVE$1); - this._activateParents(target); - EventHandler.trigger(this._element, EVENT_ACTIVATE, { relatedTarget: target }); } - _activateParents(target) { // Activate dropdown parents if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1); return; } - for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) { // Set triggered links parents as active // With both
","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","has","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","flag","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","swap","old","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","showHide","show","values","body","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","option","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","optgroup","tbody","tfoot","colgroup","caption","th","div","buildFragment","scripts","selection","ignored","wrap","attached","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","propHooks","run","percent","eased","duration","pos","step","fx","scrollTop","scrollLeft","linear","p","swing","cos","PI","fxNow","inProgress","opt","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","height","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","bind","complete","timer","anim","*","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflow","overflowX","overflowY","prefilter","speed","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","parseInt","for","class","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","isLocal","protocol","processData","async","contentType","accepts","json","responseFields","converters","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","text script","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","hover","fnOver","fnOut","unbind","delegate","undelegate","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","define","amd","_jQuery","_$","$","noConflict"],"mappings":";CAaA,SAAYA,EAAQC,GAEnB,aAEuB,iBAAXC,QAAiD,iBAAnBA,OAAOC,QAShDD,OAAOC,QAAUH,EAAOI,SACvBH,EAASD,GAAQ,GACjB,SAAUK,GACT,IAAMA,EAAED,SACP,MAAM,IAAIE,MAAO,4CAElB,OAAOL,EAASI,IAGlBJ,EAASD,GAtBX,CA0BuB,oBAAXO,OAAyBA,OAASC,KAAM,SAAUD,EAAQE,GAMtE,aAEA,IAAIC,EAAM,GAENN,EAAWG,EAAOH,SAElBO,EAAWC,OAAOC,eAElBC,EAAQJ,EAAII,MAEZC,EAASL,EAAIK,OAEbC,EAAON,EAAIM,KAEXC,EAAUP,EAAIO,QAEdC,EAAa,GAEbC,EAAWD,EAAWC,SAEtBC,EAASF,EAAWG,eAEpBC,EAAaF,EAAOD,SAEpBI,EAAuBD,EAAWE,KAAMZ,QAExCa,EAAU,GAEVC,EAAa,SAAqBC,GAMhC,MAAsB,mBAARA,GAA8C,iBAAjBA,EAAIC,UAIjDC,EAAW,SAAmBF,GAChC,OAAc,MAAPA,GAAeA,IAAQA,EAAIpB,QAM/BuB,EAA4B,CAC/BC,MAAM,EACNC,KAAK,EACLC,OAAO,EACPC,UAAU,GAGX,SAASC,EAASC,EAAMC,EAAMC,GAG7B,IAAIC,EAAGC,EACNC,GAHDH,EAAMA,GAAOlC,GAGCsC,cAAe,UAG7B,GADAD,EAAOE,KAAOP,EACTC,EACJ,IAAME,KAAKT,GAYVU,EAAMH,EAAME,IAAOF,EAAKO,cAAgBP,EAAKO,aAAcL,KAE1DE,EAAOI,aAAcN,EAAGC,GAI3BF,EAAIQ,KAAKC,YAAaN,GAASO,WAAWC,YAAaR,GAIzD,SAASS,EAAQvB,GAChB,OAAY,MAAPA,EACGA,EAAM,GAIQ,iBAARA,GAAmC,mBAARA,EACxCT,EAAYC,EAASK,KAAMG,KAAW,gBAC/BA,EAQT,IACCwB,EAAU,QAGVC,EAAS,SAAUC,EAAUC,GAI5B,OAAO,IAAIF,EAAOG,GAAGC,KAAMH,EAAUC,IAKtCG,EAAQ,qCAmVT,SAASC,EAAa/B,GAMrB,IAAIgC,IAAWhC,GAAO,WAAYA,GAAOA,EAAIgC,OAC5C5B,EAAOmB,EAAQvB,GAEhB,OAAKD,EAAYC,KAASE,EAAUF,KAIpB,UAATI,GAA+B,IAAX4B,GACR,iBAAXA,GAAgC,EAATA,GAAgBA,EAAS,KAAOhC,GA/VhEyB,EAAOG,GAAKH,EAAOQ,UAAY,CAG9BC,OAAQV,EAERW,YAAaV,EAGbO,OAAQ,EAERI,QAAS,WACR,OAAOjD,EAAMU,KAAMhB,OAKpBwD,IAAK,SAAUC,GAGd,OAAY,MAAPA,EACGnD,EAAMU,KAAMhB,MAIbyD,EAAM,EAAIzD,KAAMyD,EAAMzD,KAAKmD,QAAWnD,KAAMyD,IAKpDC,UAAW,SAAUC,GAGpB,IAAIC,EAAMhB,EAAOiB,MAAO7D,KAAKsD,cAAeK,GAM5C,OAHAC,EAAIE,WAAa9D,KAGV4D,GAIRG,KAAM,SAAUC,GACf,OAAOpB,EAAOmB,KAAM/D,KAAMgE,IAG3BC,IAAK,SAAUD,GACd,OAAOhE,KAAK0D,UAAWd,EAAOqB,IAAKjE,KAAM,SAAUkE,EAAMnC,GACxD,OAAOiC,EAAShD,KAAMkD,EAAMnC,EAAGmC,OAIjC5D,MAAO,WACN,OAAON,KAAK0D,UAAWpD,EAAM6D,MAAOnE,KAAMoE,aAG3CC,MAAO,WACN,OAAOrE,KAAKsE,GAAI,IAGjBC,KAAM,WACL,OAAOvE,KAAKsE,IAAK,IAGlBA,GAAI,SAAUvC,GACb,IAAIyC,EAAMxE,KAAKmD,OACdsB,GAAK1C,GAAMA,EAAI,EAAIyC,EAAM,GAC1B,OAAOxE,KAAK0D,UAAgB,GAALe,GAAUA,EAAID,EAAM,CAAExE,KAAMyE,IAAQ,KAG5DC,IAAK,WACJ,OAAO1E,KAAK8D,YAAc9D,KAAKsD,eAKhC9C,KAAMA,EACNmE,KAAMzE,EAAIyE,KACVC,OAAQ1E,EAAI0E,QAGbhC,EAAOiC,OAASjC,EAAOG,GAAG8B,OAAS,WAClC,IAAIC,EAASC,EAAMvD,EAAKwD,EAAMC,EAAaC,EAC1CC,EAASf,UAAW,IAAO,GAC3BrC,EAAI,EACJoB,EAASiB,UAAUjB,OACnBiC,GAAO,EAsBR,IAnBuB,kBAAXD,IACXC,EAAOD,EAGPA,EAASf,UAAWrC,IAAO,GAC3BA,KAIsB,iBAAXoD,GAAwBjE,EAAYiE,KAC/CA,EAAS,IAILpD,IAAMoB,IACVgC,EAASnF,KACT+B,KAGOA,EAAIoB,EAAQpB,IAGnB,GAAqC,OAA9B+C,EAAUV,UAAWrC,IAG3B,IAAMgD,KAAQD,EACbE,EAAOF,EAASC,GAIF,cAATA,GAAwBI,IAAWH,IAKnCI,GAAQJ,IAAUpC,EAAOyC,cAAeL,KAC1CC,EAAcK,MAAMC,QAASP,MAC/BxD,EAAM2D,EAAQJ,GAIbG,EADID,IAAgBK,MAAMC,QAAS/D,GAC3B,GACIyD,GAAgBrC,EAAOyC,cAAe7D,GAG1CA,EAFA,GAITyD,GAAc,EAGdE,EAAQJ,GAASnC,EAAOiC,OAAQO,EAAMF,EAAOF,SAGzBQ,IAATR,IACXG,EAAQJ,GAASC,IAOrB,OAAOG,GAGRvC,EAAOiC,OAAQ,CAGdY,QAAS,UAAa9C,EAAU+C,KAAKC,UAAWC,QAAS,MAAO,IAGhEC,SAAS,EAETC,MAAO,SAAUC,GAChB,MAAM,IAAIjG,MAAOiG,IAGlBC,KAAM,aAENX,cAAe,SAAUlE,GACxB,IAAI8E,EAAOC,EAIX,SAAM/E,GAAgC,oBAAzBR,EAASK,KAAMG,QAI5B8E,EAAQ9F,EAAUgB,KASK,mBADvB+E,EAAOtF,EAAOI,KAAMiF,EAAO,gBAAmBA,EAAM3C,cACfxC,EAAWE,KAAMkF,KAAWnF,IAGlEoF,cAAe,SAAUhF,GACxB,IAAI4D,EAEJ,IAAMA,KAAQ5D,EACb,OAAO,EAER,OAAO,GAIRiF,WAAY,SAAUxE,EAAMkD,GAC3BnD,EAASC,EAAM,CAAEH,MAAOqD,GAAWA,EAAQrD,SAG5CsC,KAAM,SAAU5C,EAAK6C,GACpB,IAAIb,EAAQpB,EAAI,EAEhB,GAAKmB,EAAa/B,IAEjB,IADAgC,EAAShC,EAAIgC,OACLpB,EAAIoB,EAAQpB,IACnB,IAAgD,IAA3CiC,EAAShD,KAAMG,EAAKY,GAAKA,EAAGZ,EAAKY,IACrC,WAIF,IAAMA,KAAKZ,EACV,IAAgD,IAA3C6C,EAAShD,KAAMG,EAAKY,GAAKA,EAAGZ,EAAKY,IACrC,MAKH,OAAOZ,GAIRkF,KAAM,SAAUlE,GACf,OAAe,MAARA,EACN,IACEA,EAAO,IAAKyD,QAAS3C,EAAO,KAIhCqD,UAAW,SAAUpG,EAAKqG,GACzB,IAAI3C,EAAM2C,GAAW,GAarB,OAXY,MAAPrG,IACCgD,EAAa9C,OAAQF,IACzB0C,EAAOiB,MAAOD,EACE,iBAAR1D,EACP,CAAEA,GAAQA,GAGXM,EAAKQ,KAAM4C,EAAK1D,IAIX0D,GAGR4C,QAAS,SAAUtC,EAAMhE,EAAK6B,GAC7B,OAAc,MAAP7B,GAAe,EAAIO,EAAQO,KAAMd,EAAKgE,EAAMnC,IAKpD8B,MAAO,SAAUQ,EAAOoC,GAKvB,IAJA,IAAIjC,GAAOiC,EAAOtD,OACjBsB,EAAI,EACJ1C,EAAIsC,EAAMlB,OAEHsB,EAAID,EAAKC,IAChBJ,EAAOtC,KAAQ0E,EAAQhC,GAKxB,OAFAJ,EAAMlB,OAASpB,EAERsC,GAGRqC,KAAM,SAAU/C,EAAOK,EAAU2C,GAShC,IARA,IACCC,EAAU,GACV7E,EAAI,EACJoB,EAASQ,EAAMR,OACf0D,GAAkBF,EAIX5E,EAAIoB,EAAQpB,KACAiC,EAAUL,EAAO5B,GAAKA,KAChB8E,GACxBD,EAAQpG,KAAMmD,EAAO5B,IAIvB,OAAO6E,GAIR3C,IAAK,SAAUN,EAAOK,EAAU8C,GAC/B,IAAI3D,EAAQ4D,EACXhF,EAAI,EACJ6B,EAAM,GAGP,GAAKV,EAAaS,GAEjB,IADAR,EAASQ,EAAMR,OACPpB,EAAIoB,EAAQpB,IAGL,OAFdgF,EAAQ/C,EAAUL,EAAO5B,GAAKA,EAAG+E,KAGhClD,EAAIpD,KAAMuG,QAMZ,IAAMhF,KAAK4B,EAGI,OAFdoD,EAAQ/C,EAAUL,EAAO5B,GAAKA,EAAG+E,KAGhClD,EAAIpD,KAAMuG,GAMb,OAAOxG,EAAO4D,MAAO,GAAIP,IAI1BoD,KAAM,EAIN/F,QAASA,IAGa,mBAAXgG,SACXrE,EAAOG,GAAIkE,OAAOC,UAAahH,EAAK+G,OAAOC,WAI5CtE,EAAOmB,KAAM,uEAAuEoD,MAAO,KAC3F,SAAUpF,EAAGgD,GACZrE,EAAY,WAAaqE,EAAO,KAAQA,EAAKqC,gBAmB9C,IAAIC,EAWJ,SAAWtH,GAEX,IAAIgC,EACHd,EACAqG,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EACAnI,EACAoI,EACAC,EACAC,EACAC,EACAvB,EACAwB,EAGA3C,EAAU,SAAW,EAAI,IAAI4C,KAC7BC,EAAevI,EAAOH,SACtB2I,EAAU,EACVC,EAAO,EACPC,EAAaC,KACbC,EAAaD,KACbE,EAAgBF,KAChBG,EAAyBH,KACzBI,EAAY,SAAUC,EAAGC,GAIxB,OAHKD,IAAMC,IACVlB,GAAe,GAET,GAIRlH,EAAS,GAAKC,eACdX,EAAM,GACN+I,EAAM/I,EAAI+I,IACVC,EAAchJ,EAAIM,KAClBA,EAAON,EAAIM,KACXF,EAAQJ,EAAII,MAGZG,EAAU,SAAU0I,EAAMjF,GAGzB,IAFA,IAAInC,EAAI,EACPyC,EAAM2E,EAAKhG,OACJpB,EAAIyC,EAAKzC,IAChB,GAAKoH,EAAKpH,KAAOmC,EAChB,OAAOnC,EAGT,OAAQ,GAGTqH,EAAW,6HAKXC,EAAa,sBAGbC,EAAa,gCAGbC,EAAa,MAAQF,EAAa,KAAOC,EAAa,OAASD,EAE9D,gBAAkBA,EAElB,2DAA6DC,EAAa,OAASD,EACnF,OAEDG,EAAU,KAAOF,EAAa,wFAKAC,EAAa,eAM3CE,EAAc,IAAIC,OAAQL,EAAa,IAAK,KAC5CpG,EAAQ,IAAIyG,OAAQ,IAAML,EAAa,8BAAgCA,EAAa,KAAM,KAE1FM,EAAS,IAAID,OAAQ,IAAML,EAAa,KAAOA,EAAa,KAC5DO,EAAe,IAAIF,OAAQ,IAAML,EAAa,WAAaA,EAAa,IAAMA,EAAa,KAC3FQ,EAAW,IAAIH,OAAQL,EAAa,MAEpCS,EAAU,IAAIJ,OAAQF,GACtBO,EAAc,IAAIL,OAAQ,IAAMJ,EAAa,KAE7CU,EAAY,CACXC,GAAM,IAAIP,OAAQ,MAAQJ,EAAa,KACvCY,MAAS,IAAIR,OAAQ,QAAUJ,EAAa,KAC5Ca,IAAO,IAAIT,OAAQ,KAAOJ,EAAa,SACvCc,KAAQ,IAAIV,OAAQ,IAAMH,GAC1Bc,OAAU,IAAIX,OAAQ,IAAMF,GAC5Bc,MAAS,IAAIZ,OAAQ,yDAA2DL,EAC/E,+BAAiCA,EAAa,cAAgBA,EAC9D,aAAeA,EAAa,SAAU,KACvCkB,KAAQ,IAAIb,OAAQ,OAASN,EAAW,KAAM,KAG9CoB,aAAgB,IAAId,OAAQ,IAAML,EAAa,mDAC9CA,EAAa,mBAAqBA,EAAa,mBAAoB,MAGrEoB,EAAQ,SACRC,EAAU,sCACVC,EAAU,SAEVC,EAAU,yBAGVC,EAAa,mCAEbC,GAAW,OAIXC,GAAY,IAAIrB,OAAQ,qBAAuBL,EAAa,MAAQA,EAAa,OAAQ,MACzF2B,GAAY,SAAUC,EAAGC,EAASC,GACjC,IAAIC,EAAO,KAAOF,EAAU,MAI5B,OAAOE,GAASA,GAAQD,EACvBD,EACAE,EAAO,EAENC,OAAOC,aAAcF,EAAO,OAE5BC,OAAOC,aAAcF,GAAQ,GAAK,MAAe,KAAPA,EAAe,QAK5DG,GAAa,sDACbC,GAAa,SAAUC,EAAIC,GAC1B,OAAKA,EAGQ,OAAPD,EACG,SAIDA,EAAGnL,MAAO,GAAI,GAAM,KAAOmL,EAAGE,WAAYF,EAAGtI,OAAS,GAAIxC,SAAU,IAAO,IAI5E,KAAO8K,GAOfG,GAAgB,WACf7D,KAGD8D,GAAqBC,GACpB,SAAU5H,GACT,OAAyB,IAAlBA,EAAK6H,UAAqD,aAAhC7H,EAAK8H,SAAS5E,eAEhD,CAAE6E,IAAK,aAAcC,KAAM,WAI7B,IACC1L,EAAK2D,MACHjE,EAAMI,EAAMU,KAAMsH,EAAa6D,YAChC7D,EAAa6D,YAIdjM,EAAKoI,EAAa6D,WAAWhJ,QAAS/B,SACrC,MAAQgL,GACT5L,EAAO,CAAE2D,MAAOjE,EAAIiD,OAGnB,SAAUgC,EAAQkH,GACjBnD,EAAY/E,MAAOgB,EAAQ7E,EAAMU,KAAKqL,KAKvC,SAAUlH,EAAQkH,GACjB,IAAI5H,EAAIU,EAAOhC,OACdpB,EAAI,EAEL,MAASoD,EAAOV,KAAO4H,EAAItK,MAC3BoD,EAAOhC,OAASsB,EAAI,IAKvB,SAAS4C,GAAQxE,EAAUC,EAASyD,EAAS+F,GAC5C,IAAIC,EAAGxK,EAAGmC,EAAMsI,EAAKC,EAAOC,EAAQC,EACnCC,EAAa9J,GAAWA,EAAQ+J,cAGhCzL,EAAW0B,EAAUA,EAAQ1B,SAAW,EAKzC,GAHAmF,EAAUA,GAAW,GAGI,iBAAb1D,IAA0BA,GACxB,IAAbzB,GAA+B,IAAbA,GAA+B,KAAbA,EAEpC,OAAOmF,EAIR,IAAM+F,KAEExJ,EAAUA,EAAQ+J,eAAiB/J,EAAUwF,KAAmB1I,GACtEmI,EAAajF,GAEdA,EAAUA,GAAWlD,EAEhBqI,GAAiB,CAIrB,GAAkB,KAAb7G,IAAoBqL,EAAQ5B,EAAWiC,KAAMjK,IAGjD,GAAM0J,EAAIE,EAAM,IAGf,GAAkB,IAAbrL,EAAiB,CACrB,KAAM8C,EAAOpB,EAAQiK,eAAgBR,IAUpC,OAAOhG,EALP,GAAKrC,EAAK8I,KAAOT,EAEhB,OADAhG,EAAQ/F,KAAM0D,GACPqC,OAYT,GAAKqG,IAAe1I,EAAO0I,EAAWG,eAAgBR,KACrDnE,EAAUtF,EAASoB,IACnBA,EAAK8I,KAAOT,EAGZ,OADAhG,EAAQ/F,KAAM0D,GACPqC,MAKH,CAAA,GAAKkG,EAAM,GAEjB,OADAjM,EAAK2D,MAAOoC,EAASzD,EAAQmK,qBAAsBpK,IAC5C0D,EAGD,IAAMgG,EAAIE,EAAM,KAAOxL,EAAQiM,wBACrCpK,EAAQoK,uBAGR,OADA1M,EAAK2D,MAAOoC,EAASzD,EAAQoK,uBAAwBX,IAC9ChG,EAKT,GAAKtF,EAAQkM,MACXtE,EAAwBhG,EAAW,QAClCqF,IAAcA,EAAUkF,KAAMvK,MAIlB,IAAbzB,GAAqD,WAAnC0B,EAAQkJ,SAAS5E,eAA8B,CAUlE,GARAuF,EAAc9J,EACd+J,EAAa9J,EAOK,IAAb1B,GAAkByI,EAASuD,KAAMvK,GAAa,EAG5C2J,EAAM1J,EAAQV,aAAc,OACjCoK,EAAMA,EAAI5G,QAAS2F,GAAYC,IAE/B1I,EAAQT,aAAc,KAAOmK,EAAM/G,GAKpC1D,GADA2K,EAASjF,EAAU5E,IACRM,OACX,MAAQpB,IACP2K,EAAO3K,GAAK,IAAMyK,EAAM,IAAMa,GAAYX,EAAO3K,IAElD4K,EAAcD,EAAOY,KAAM,KAG3BV,EAAa9B,GAASsC,KAAMvK,IAAc0K,GAAazK,EAAQN,aAC9DM,EAGF,IAIC,OAHAtC,EAAK2D,MAAOoC,EACXqG,EAAWY,iBAAkBb,IAEvBpG,EACN,MAAQkH,GACT5E,EAAwBhG,GAAU,GACjC,QACI2J,IAAQ/G,GACZ3C,EAAQ4K,gBAAiB,QAQ9B,OAAO/F,EAAQ9E,EAAS+C,QAAS3C,EAAO,MAAQH,EAASyD,EAAS+F,GASnE,SAAS5D,KACR,IAAIiF,EAAO,GAUX,OARA,SAASC,EAAOC,EAAK9G,GAMpB,OAJK4G,EAAKnN,KAAMqN,EAAM,KAAQvG,EAAKwG,oBAE3BF,EAAOD,EAAKI,SAEZH,EAAOC,EAAM,KAAQ9G,GAS/B,SAASiH,GAAcjL,GAEtB,OADAA,EAAI0C,IAAY,EACT1C,EAOR,SAASkL,GAAQlL,GAChB,IAAImL,EAAKtO,EAASsC,cAAc,YAEhC,IACC,QAASa,EAAImL,GACZ,MAAO9B,GACR,OAAO,EACN,QAEI8B,EAAG1L,YACP0L,EAAG1L,WAAWC,YAAayL,GAG5BA,EAAK,MASP,SAASC,GAAWC,EAAOC,GAC1B,IAAInO,EAAMkO,EAAMjH,MAAM,KACrBpF,EAAI7B,EAAIiD,OAET,MAAQpB,IACPuF,EAAKgH,WAAYpO,EAAI6B,IAAOsM,EAU9B,SAASE,GAAcxF,EAAGC,GACzB,IAAIwF,EAAMxF,GAAKD,EACd0F,EAAOD,GAAsB,IAAfzF,EAAE3H,UAAiC,IAAf4H,EAAE5H,UACnC2H,EAAE2F,YAAc1F,EAAE0F,YAGpB,GAAKD,EACJ,OAAOA,EAIR,GAAKD,EACJ,MAASA,EAAMA,EAAIG,YAClB,GAAKH,IAAQxF,EACZ,OAAQ,EAKX,OAAOD,EAAI,GAAK,EAOjB,SAAS6F,GAAmBrN,GAC3B,OAAO,SAAU2C,GAEhB,MAAgB,UADLA,EAAK8H,SAAS5E,eACElD,EAAK3C,OAASA,GAQ3C,SAASsN,GAAoBtN,GAC5B,OAAO,SAAU2C,GAChB,IAAIa,EAAOb,EAAK8H,SAAS5E,cACzB,OAAiB,UAATrC,GAA6B,WAATA,IAAsBb,EAAK3C,OAASA,GAQlE,SAASuN,GAAsB/C,GAG9B,OAAO,SAAU7H,GAKhB,MAAK,SAAUA,EASTA,EAAK1B,aAAgC,IAAlB0B,EAAK6H,SAGvB,UAAW7H,EACV,UAAWA,EAAK1B,WACb0B,EAAK1B,WAAWuJ,WAAaA,EAE7B7H,EAAK6H,WAAaA,EAMpB7H,EAAK6K,aAAehD,GAI1B7H,EAAK6K,cAAgBhD,GACpBF,GAAoB3H,KAAW6H,EAG3B7H,EAAK6H,WAAaA,EAKd,UAAW7H,GACfA,EAAK6H,WAAaA,GAY5B,SAASiD,GAAwBjM,GAChC,OAAOiL,GAAa,SAAUiB,GAE7B,OADAA,GAAYA,EACLjB,GAAa,SAAU1B,EAAM1F,GACnC,IAAInC,EACHyK,EAAenM,EAAI,GAAIuJ,EAAKnJ,OAAQ8L,GACpClN,EAAImN,EAAa/L,OAGlB,MAAQpB,IACFuK,EAAO7H,EAAIyK,EAAanN,MAC5BuK,EAAK7H,KAAOmC,EAAQnC,GAAK6H,EAAK7H,SAYnC,SAAS8I,GAAazK,GACrB,OAAOA,GAAmD,oBAAjCA,EAAQmK,sBAAwCnK,EAujC1E,IAAMf,KAnjCNd,EAAUoG,GAAOpG,QAAU,GAO3BuG,EAAQH,GAAOG,MAAQ,SAAUtD,GAChC,IAAIiL,EAAYjL,EAAKkL,aACpBpH,GAAW9D,EAAK2I,eAAiB3I,GAAMmL,gBAKxC,OAAQ5E,EAAM2C,KAAM+B,GAAanH,GAAWA,EAAQgE,UAAY,SAQjEjE,EAAcV,GAAOU,YAAc,SAAUlG,GAC5C,IAAIyN,EAAYC,EACfzN,EAAMD,EAAOA,EAAKgL,eAAiBhL,EAAOyG,EAG3C,OAAKxG,IAAQlC,GAA6B,IAAjBkC,EAAIV,UAAmBU,EAAIuN,kBAMpDrH,GADApI,EAAWkC,GACQuN,gBACnBpH,GAAkBT,EAAO5H,GAIpB0I,IAAiB1I,IACpB2P,EAAY3P,EAAS4P,cAAgBD,EAAUE,MAAQF,IAGnDA,EAAUG,iBACdH,EAAUG,iBAAkB,SAAU9D,IAAe,GAG1C2D,EAAUI,aACrBJ,EAAUI,YAAa,WAAY/D,KAUrC3K,EAAQsI,WAAa0E,GAAO,SAAUC,GAErC,OADAA,EAAG0B,UAAY,KACP1B,EAAG9L,aAAa,eAOzBnB,EAAQgM,qBAAuBgB,GAAO,SAAUC,GAE/C,OADAA,EAAG3L,YAAa3C,EAASiQ,cAAc,MAC/B3B,EAAGjB,qBAAqB,KAAK9J,SAItClC,EAAQiM,uBAAyBtC,EAAQwC,KAAMxN,EAASsN,wBAMxDjM,EAAQ6O,QAAU7B,GAAO,SAAUC,GAElC,OADAlG,EAAQzF,YAAa2L,GAAKlB,GAAKvH,GACvB7F,EAASmQ,oBAAsBnQ,EAASmQ,kBAAmBtK,GAAUtC,SAIzElC,EAAQ6O,SACZxI,EAAK0I,OAAW,GAAI,SAAUhD,GAC7B,IAAIiD,EAASjD,EAAGpH,QAASmF,GAAWC,IACpC,OAAO,SAAU9G,GAChB,OAAOA,EAAK9B,aAAa,QAAU6N,IAGrC3I,EAAK4I,KAAS,GAAI,SAAUlD,EAAIlK,GAC/B,GAAuC,oBAA3BA,EAAQiK,gBAAkC9E,EAAiB,CACtE,IAAI/D,EAAOpB,EAAQiK,eAAgBC,GACnC,OAAO9I,EAAO,CAAEA,GAAS,OAI3BoD,EAAK0I,OAAW,GAAK,SAAUhD,GAC9B,IAAIiD,EAASjD,EAAGpH,QAASmF,GAAWC,IACpC,OAAO,SAAU9G,GAChB,IAAIrC,EAAwC,oBAA1BqC,EAAKiM,kBACtBjM,EAAKiM,iBAAiB,MACvB,OAAOtO,GAAQA,EAAKkF,QAAUkJ,IAMhC3I,EAAK4I,KAAS,GAAI,SAAUlD,EAAIlK,GAC/B,GAAuC,oBAA3BA,EAAQiK,gBAAkC9E,EAAiB,CACtE,IAAIpG,EAAME,EAAG4B,EACZO,EAAOpB,EAAQiK,eAAgBC,GAEhC,GAAK9I,EAAO,CAIX,IADArC,EAAOqC,EAAKiM,iBAAiB,QAChBtO,EAAKkF,QAAUiG,EAC3B,MAAO,CAAE9I,GAIVP,EAAQb,EAAQiN,kBAAmB/C,GACnCjL,EAAI,EACJ,MAASmC,EAAOP,EAAM5B,KAErB,IADAF,EAAOqC,EAAKiM,iBAAiB,QAChBtO,EAAKkF,QAAUiG,EAC3B,MAAO,CAAE9I,GAKZ,MAAO,MAMVoD,EAAK4I,KAAU,IAAIjP,EAAQgM,qBAC1B,SAAUmD,EAAKtN,GACd,MAA6C,oBAAjCA,EAAQmK,qBACZnK,EAAQmK,qBAAsBmD,GAG1BnP,EAAQkM,IACZrK,EAAQ0K,iBAAkB4C,QAD3B,GAKR,SAAUA,EAAKtN,GACd,IAAIoB,EACHmM,EAAM,GACNtO,EAAI,EAEJwE,EAAUzD,EAAQmK,qBAAsBmD,GAGzC,GAAa,MAARA,EAAc,CAClB,MAASlM,EAAOqC,EAAQxE,KACA,IAAlBmC,EAAK9C,UACTiP,EAAI7P,KAAM0D,GAIZ,OAAOmM,EAER,OAAO9J,GAITe,EAAK4I,KAAY,MAAIjP,EAAQiM,wBAA0B,SAAU0C,EAAW9M,GAC3E,GAA+C,oBAAnCA,EAAQoK,wBAA0CjF,EAC7D,OAAOnF,EAAQoK,uBAAwB0C,IAUzCzH,EAAgB,GAOhBD,EAAY,IAENjH,EAAQkM,IAAMvC,EAAQwC,KAAMxN,EAAS4N,qBAG1CS,GAAO,SAAUC,GAMhBlG,EAAQzF,YAAa2L,GAAKoC,UAAY,UAAY7K,EAAU,qBAC1CA,EAAU,kEAOvByI,EAAGV,iBAAiB,wBAAwBrK,QAChD+E,EAAU1H,KAAM,SAAW6I,EAAa,gBAKnC6E,EAAGV,iBAAiB,cAAcrK,QACvC+E,EAAU1H,KAAM,MAAQ6I,EAAa,aAAeD,EAAW,KAI1D8E,EAAGV,iBAAkB,QAAU/H,EAAU,MAAOtC,QACrD+E,EAAU1H,KAAK,MAMV0N,EAAGV,iBAAiB,YAAYrK,QACrC+E,EAAU1H,KAAK,YAMV0N,EAAGV,iBAAkB,KAAO/H,EAAU,MAAOtC,QAClD+E,EAAU1H,KAAK,cAIjByN,GAAO,SAAUC,GAChBA,EAAGoC,UAAY,oFAKf,IAAIC,EAAQ3Q,EAASsC,cAAc,SACnCqO,EAAMlO,aAAc,OAAQ,UAC5B6L,EAAG3L,YAAagO,GAAQlO,aAAc,OAAQ,KAIzC6L,EAAGV,iBAAiB,YAAYrK,QACpC+E,EAAU1H,KAAM,OAAS6I,EAAa,eAKS,IAA3C6E,EAAGV,iBAAiB,YAAYrK,QACpC+E,EAAU1H,KAAM,WAAY,aAK7BwH,EAAQzF,YAAa2L,GAAKnC,UAAW,EACY,IAA5CmC,EAAGV,iBAAiB,aAAarK,QACrC+E,EAAU1H,KAAM,WAAY,aAI7B0N,EAAGV,iBAAiB,QACpBtF,EAAU1H,KAAK,YAIXS,EAAQuP,gBAAkB5F,EAAQwC,KAAOxG,EAAUoB,EAAQpB,SAChEoB,EAAQyI,uBACRzI,EAAQ0I,oBACR1I,EAAQ2I,kBACR3I,EAAQ4I,qBAER3C,GAAO,SAAUC,GAGhBjN,EAAQ4P,kBAAoBjK,EAAQ5F,KAAMkN,EAAI,KAI9CtH,EAAQ5F,KAAMkN,EAAI,aAClB/F,EAAc3H,KAAM,KAAMgJ,KAI5BtB,EAAYA,EAAU/E,QAAU,IAAIuG,OAAQxB,EAAUoF,KAAK,MAC3DnF,EAAgBA,EAAchF,QAAU,IAAIuG,OAAQvB,EAAcmF,KAAK,MAIvEgC,EAAa1E,EAAQwC,KAAMpF,EAAQ8I,yBAKnC1I,EAAWkH,GAAc1E,EAAQwC,KAAMpF,EAAQI,UAC9C,SAAUW,EAAGC,GACZ,IAAI+H,EAAuB,IAAfhI,EAAE3H,SAAiB2H,EAAEsG,gBAAkBtG,EAClDiI,EAAMhI,GAAKA,EAAExG,WACd,OAAOuG,IAAMiI,MAAWA,GAAwB,IAAjBA,EAAI5P,YAClC2P,EAAM3I,SACL2I,EAAM3I,SAAU4I,GAChBjI,EAAE+H,yBAA8D,GAAnC/H,EAAE+H,wBAAyBE,MAG3D,SAAUjI,EAAGC,GACZ,GAAKA,EACJ,MAASA,EAAIA,EAAExG,WACd,GAAKwG,IAAMD,EACV,OAAO,EAIV,OAAO,GAOTD,EAAYwG,EACZ,SAAUvG,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,OADAlB,GAAe,EACR,EAIR,IAAImJ,GAAWlI,EAAE+H,yBAA2B9H,EAAE8H,wBAC9C,OAAKG,IAYU,GAPfA,GAAYlI,EAAE8D,eAAiB9D,MAAUC,EAAE6D,eAAiB7D,GAC3DD,EAAE+H,wBAAyB9H,GAG3B,KAIE/H,EAAQiQ,cAAgBlI,EAAE8H,wBAAyB/H,KAAQkI,EAGxDlI,IAAMnJ,GAAYmJ,EAAE8D,gBAAkBvE,GAAgBF,EAASE,EAAcS,IACzE,EAEJC,IAAMpJ,GAAYoJ,EAAE6D,gBAAkBvE,GAAgBF,EAASE,EAAcU,GAC1E,EAIDnB,EACJpH,EAASoH,EAAWkB,GAAMtI,EAASoH,EAAWmB,GAChD,EAGe,EAAViI,GAAe,EAAI,IAE3B,SAAUlI,EAAGC,GAEZ,GAAKD,IAAMC,EAEV,OADAlB,GAAe,EACR,EAGR,IAAI0G,EACHzM,EAAI,EACJoP,EAAMpI,EAAEvG,WACRwO,EAAMhI,EAAExG,WACR4O,EAAK,CAAErI,GACPsI,EAAK,CAAErI,GAGR,IAAMmI,IAAQH,EACb,OAAOjI,IAAMnJ,GAAY,EACxBoJ,IAAMpJ,EAAW,EACjBuR,GAAO,EACPH,EAAM,EACNnJ,EACEpH,EAASoH,EAAWkB,GAAMtI,EAASoH,EAAWmB,GAChD,EAGK,GAAKmI,IAAQH,EACnB,OAAOzC,GAAcxF,EAAGC,GAIzBwF,EAAMzF,EACN,MAASyF,EAAMA,EAAIhM,WAClB4O,EAAGE,QAAS9C,GAEbA,EAAMxF,EACN,MAASwF,EAAMA,EAAIhM,WAClB6O,EAAGC,QAAS9C,GAIb,MAAQ4C,EAAGrP,KAAOsP,EAAGtP,GACpBA,IAGD,OAAOA,EAENwM,GAAc6C,EAAGrP,GAAIsP,EAAGtP,IAGxBqP,EAAGrP,KAAOuG,GAAgB,EAC1B+I,EAAGtP,KAAOuG,EAAe,EACzB,IAGK1I,GAGRyH,GAAOT,QAAU,SAAU2K,EAAMC,GAChC,OAAOnK,GAAQkK,EAAM,KAAM,KAAMC,IAGlCnK,GAAOmJ,gBAAkB,SAAUtM,EAAMqN,GAMxC,IAJOrN,EAAK2I,eAAiB3I,KAAWtE,GACvCmI,EAAa7D,GAGTjD,EAAQuP,iBAAmBvI,IAC9BY,EAAwB0I,EAAO,QAC7BpJ,IAAkBA,EAAciF,KAAMmE,OACtCrJ,IAAkBA,EAAUkF,KAAMmE,IAErC,IACC,IAAI3N,EAAMgD,EAAQ5F,KAAMkD,EAAMqN,GAG9B,GAAK3N,GAAO3C,EAAQ4P,mBAGlB3M,EAAKtE,UAAuC,KAA3BsE,EAAKtE,SAASwB,SAChC,OAAOwC,EAEP,MAAOwI,GACRvD,EAAwB0I,GAAM,GAIhC,OAAyD,EAAlDlK,GAAQkK,EAAM3R,EAAU,KAAM,CAAEsE,IAASf,QAGjDkE,GAAOe,SAAW,SAAUtF,EAASoB,GAKpC,OAHOpB,EAAQ+J,eAAiB/J,KAAclD,GAC7CmI,EAAajF,GAEPsF,EAAUtF,EAASoB,IAG3BmD,GAAOoK,KAAO,SAAUvN,EAAMa,IAEtBb,EAAK2I,eAAiB3I,KAAWtE,GACvCmI,EAAa7D,GAGd,IAAInB,EAAKuE,EAAKgH,WAAYvJ,EAAKqC,eAE9BpF,EAAMe,GAAMnC,EAAOI,KAAMsG,EAAKgH,WAAYvJ,EAAKqC,eAC9CrE,EAAImB,EAAMa,GAAOkD,QACjBzC,EAEF,YAAeA,IAARxD,EACNA,EACAf,EAAQsI,aAAetB,EACtB/D,EAAK9B,aAAc2C,IAClB/C,EAAMkC,EAAKiM,iBAAiBpL,KAAU/C,EAAI0P,UAC1C1P,EAAI+E,MACJ,MAGJM,GAAOsK,OAAS,SAAUC,GACzB,OAAQA,EAAM,IAAIhM,QAAS2F,GAAYC,KAGxCnE,GAAOvB,MAAQ,SAAUC,GACxB,MAAM,IAAIjG,MAAO,0CAA4CiG,IAO9DsB,GAAOwK,WAAa,SAAUtL,GAC7B,IAAIrC,EACH4N,EAAa,GACbrN,EAAI,EACJ1C,EAAI,EAOL,GAJA+F,GAAgB7G,EAAQ8Q,iBACxBlK,GAAa5G,EAAQ+Q,YAAczL,EAAQjG,MAAO,GAClDiG,EAAQ5B,KAAMmE,GAEThB,EAAe,CACnB,MAAS5D,EAAOqC,EAAQxE,KAClBmC,IAASqC,EAASxE,KACtB0C,EAAIqN,EAAWtR,KAAMuB,IAGvB,MAAQ0C,IACP8B,EAAQ3B,OAAQkN,EAAYrN,GAAK,GAQnC,OAFAoD,EAAY,KAELtB,GAORgB,EAAUF,GAAOE,QAAU,SAAUrD,GACpC,IAAIrC,EACH+B,EAAM,GACN7B,EAAI,EACJX,EAAW8C,EAAK9C,SAEjB,GAAMA,GAMC,GAAkB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAkB,CAGjE,GAAiC,iBAArB8C,EAAK+N,YAChB,OAAO/N,EAAK+N,YAGZ,IAAM/N,EAAOA,EAAKgO,WAAYhO,EAAMA,EAAOA,EAAKyK,YAC/C/K,GAAO2D,EAASrD,QAGZ,GAAkB,IAAb9C,GAA+B,IAAbA,EAC7B,OAAO8C,EAAKiO,eAhBZ,MAAStQ,EAAOqC,EAAKnC,KAEpB6B,GAAO2D,EAAS1F,GAkBlB,OAAO+B,IAGR0D,EAAOD,GAAO+K,UAAY,CAGzBtE,YAAa,GAEbuE,aAAcrE,GAEdvB,MAAOzC,EAEPsE,WAAY,GAEZ4B,KAAM,GAENoC,SAAU,CACTC,IAAK,CAAEtG,IAAK,aAAc5H,OAAO,GACjCmO,IAAK,CAAEvG,IAAK,cACZwG,IAAK,CAAExG,IAAK,kBAAmB5H,OAAO,GACtCqO,IAAK,CAAEzG,IAAK,oBAGb0G,UAAW,CACVvI,KAAQ,SAAUqC,GAUjB,OATAA,EAAM,GAAKA,EAAM,GAAG7G,QAASmF,GAAWC,IAGxCyB,EAAM,IAAOA,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAM,IAAK7G,QAASmF,GAAWC,IAExD,OAAbyB,EAAM,KACVA,EAAM,GAAK,IAAMA,EAAM,GAAK,KAGtBA,EAAMnM,MAAO,EAAG,IAGxBgK,MAAS,SAAUmC,GA6BlB,OAlBAA,EAAM,GAAKA,EAAM,GAAGrF,cAEY,QAA3BqF,EAAM,GAAGnM,MAAO,EAAG,IAEjBmM,EAAM,IACXpF,GAAOvB,MAAO2G,EAAM,IAKrBA,EAAM,KAAQA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAAK,GAAmB,SAAbA,EAAM,IAA8B,QAAbA,EAAM,KACzFA,EAAM,KAAUA,EAAM,GAAKA,EAAM,IAAqB,QAAbA,EAAM,KAGpCA,EAAM,IACjBpF,GAAOvB,MAAO2G,EAAM,IAGdA,GAGRpC,OAAU,SAAUoC,GACnB,IAAImG,EACHC,GAAYpG,EAAM,IAAMA,EAAM,GAE/B,OAAKzC,EAAiB,MAAEoD,KAAMX,EAAM,IAC5B,MAIHA,EAAM,GACVA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAGxBoG,GAAY/I,EAAQsD,KAAMyF,KAEpCD,EAASnL,EAAUoL,GAAU,MAE7BD,EAASC,EAASpS,QAAS,IAAKoS,EAAS1P,OAASyP,GAAWC,EAAS1P,UAGvEsJ,EAAM,GAAKA,EAAM,GAAGnM,MAAO,EAAGsS,GAC9BnG,EAAM,GAAKoG,EAASvS,MAAO,EAAGsS,IAIxBnG,EAAMnM,MAAO,EAAG,MAIzB0P,OAAQ,CAEP7F,IAAO,SAAU2I,GAChB,IAAI9G,EAAW8G,EAAiBlN,QAASmF,GAAWC,IAAY5D,cAChE,MAA4B,MAArB0L,EACN,WAAa,OAAO,GACpB,SAAU5O,GACT,OAAOA,EAAK8H,UAAY9H,EAAK8H,SAAS5E,gBAAkB4E,IAI3D9B,MAAS,SAAU0F,GAClB,IAAImD,EAAUtK,EAAYmH,EAAY,KAEtC,OAAOmD,IACLA,EAAU,IAAIrJ,OAAQ,MAAQL,EAAa,IAAMuG,EAAY,IAAMvG,EAAa,SACjFZ,EAAYmH,EAAW,SAAU1L,GAChC,OAAO6O,EAAQ3F,KAAgC,iBAAnBlJ,EAAK0L,WAA0B1L,EAAK0L,WAA0C,oBAAtB1L,EAAK9B,cAAgC8B,EAAK9B,aAAa,UAAY,OAI1JgI,KAAQ,SAAUrF,EAAMiO,EAAUC,GACjC,OAAO,SAAU/O,GAChB,IAAIgP,EAAS7L,GAAOoK,KAAMvN,EAAMa,GAEhC,OAAe,MAAVmO,EACgB,OAAbF,GAEFA,IAINE,GAAU,GAEU,MAAbF,EAAmBE,IAAWD,EACvB,OAAbD,EAAoBE,IAAWD,EAClB,OAAbD,EAAoBC,GAAqC,IAA5BC,EAAOzS,QAASwS,GAChC,OAAbD,EAAoBC,IAAoC,EAA3BC,EAAOzS,QAASwS,GAChC,OAAbD,EAAoBC,GAASC,EAAO5S,OAAQ2S,EAAM9P,UAAa8P,EAClD,OAAbD,GAA2F,GAArE,IAAME,EAAOtN,QAAS6D,EAAa,KAAQ,KAAMhJ,QAASwS,GACnE,OAAbD,IAAoBE,IAAWD,GAASC,EAAO5S,MAAO,EAAG2S,EAAM9P,OAAS,KAAQ8P,EAAQ,QAK3F3I,MAAS,SAAU/I,EAAM4R,EAAMlE,EAAU5K,EAAOE,GAC/C,IAAI6O,EAAgC,QAAvB7R,EAAKjB,MAAO,EAAG,GAC3B+S,EAA+B,SAArB9R,EAAKjB,OAAQ,GACvBgT,EAAkB,YAATH,EAEV,OAAiB,IAAV9O,GAAwB,IAATE,EAGrB,SAAUL,GACT,QAASA,EAAK1B,YAGf,SAAU0B,EAAMpB,EAASyQ,GACxB,IAAI3F,EAAO4F,EAAaC,EAAY5R,EAAM6R,EAAWC,EACpD1H,EAAMmH,IAAWC,EAAU,cAAgB,kBAC3CO,EAAS1P,EAAK1B,WACduC,EAAOuO,GAAUpP,EAAK8H,SAAS5E,cAC/ByM,GAAYN,IAAQD,EACpB7E,GAAO,EAER,GAAKmF,EAAS,CAGb,GAAKR,EAAS,CACb,MAAQnH,EAAM,CACbpK,EAAOqC,EACP,MAASrC,EAAOA,EAAMoK,GACrB,GAAKqH,EACJzR,EAAKmK,SAAS5E,gBAAkBrC,EACd,IAAlBlD,EAAKT,SAEL,OAAO,EAITuS,EAAQ1H,EAAe,SAAT1K,IAAoBoS,GAAS,cAE5C,OAAO,EAMR,GAHAA,EAAQ,CAAEN,EAAUO,EAAO1B,WAAa0B,EAAOE,WAG1CT,GAAWQ,EAAW,CAe1BpF,GADAiF,GADA9F,GAHA4F,GAJAC,GADA5R,EAAO+R,GACYnO,KAAc5D,EAAM4D,GAAY,KAIzB5D,EAAKkS,YAC7BN,EAAY5R,EAAKkS,UAAa,KAEXxS,IAAU,IACZ,KAAQgH,GAAWqF,EAAO,KACzBA,EAAO,GAC3B/L,EAAO6R,GAAaE,EAAOzH,WAAYuH,GAEvC,MAAS7R,IAAS6R,GAAa7R,GAAQA,EAAMoK,KAG3CwC,EAAOiF,EAAY,IAAMC,EAAM1K,MAGhC,GAAuB,IAAlBpH,EAAKT,YAAoBqN,GAAQ5M,IAASqC,EAAO,CACrDsP,EAAajS,GAAS,CAAEgH,EAASmL,EAAWjF,GAC5C,YAuBF,GAjBKoF,IAYJpF,EADAiF,GADA9F,GAHA4F,GAJAC,GADA5R,EAAOqC,GACYuB,KAAc5D,EAAM4D,GAAY,KAIzB5D,EAAKkS,YAC7BN,EAAY5R,EAAKkS,UAAa,KAEXxS,IAAU,IACZ,KAAQgH,GAAWqF,EAAO,KAMhC,IAATa,EAEJ,MAAS5M,IAAS6R,GAAa7R,GAAQA,EAAMoK,KAC3CwC,EAAOiF,EAAY,IAAMC,EAAM1K,MAEhC,IAAOqK,EACNzR,EAAKmK,SAAS5E,gBAAkBrC,EACd,IAAlBlD,EAAKT,aACHqN,IAGGoF,KAKJL,GAJAC,EAAa5R,EAAM4D,KAAc5D,EAAM4D,GAAY,KAIzB5D,EAAKkS,YAC7BN,EAAY5R,EAAKkS,UAAa,KAEnBxS,GAAS,CAAEgH,EAASkG,IAG7B5M,IAASqC,GACb,MASL,OADAuK,GAAQlK,KACQF,GAAWoK,EAAOpK,GAAU,GAAqB,GAAhBoK,EAAOpK,KAK5DgG,OAAU,SAAU2J,EAAQ/E,GAK3B,IAAIgF,EACHlR,EAAKuE,EAAKkC,QAASwK,IAAY1M,EAAK4M,WAAYF,EAAO5M,gBACtDC,GAAOvB,MAAO,uBAAyBkO,GAKzC,OAAKjR,EAAI0C,GACD1C,EAAIkM,GAIK,EAAZlM,EAAGI,QACP8Q,EAAO,CAAED,EAAQA,EAAQ,GAAI/E,GACtB3H,EAAK4M,WAAWrT,eAAgBmT,EAAO5M,eAC7C4G,GAAa,SAAU1B,EAAM1F,GAC5B,IAAIuN,EACHC,EAAUrR,EAAIuJ,EAAM2C,GACpBlN,EAAIqS,EAAQjR,OACb,MAAQpB,IAEPuK,EADA6H,EAAM1T,EAAS6L,EAAM8H,EAAQrS,OACZ6E,EAASuN,GAAQC,EAAQrS,MAG5C,SAAUmC,GACT,OAAOnB,EAAImB,EAAM,EAAG+P,KAIhBlR,IAITyG,QAAS,CAER6K,IAAOrG,GAAa,SAAUnL,GAI7B,IAAI0N,EAAQ,GACXhK,EAAU,GACV+N,EAAU5M,EAAS7E,EAAS+C,QAAS3C,EAAO,OAE7C,OAAOqR,EAAS7O,GACfuI,GAAa,SAAU1B,EAAM1F,EAAS9D,EAASyQ,GAC9C,IAAIrP,EACHqQ,EAAYD,EAAShI,EAAM,KAAMiH,EAAK,IACtCxR,EAAIuK,EAAKnJ,OAGV,MAAQpB,KACDmC,EAAOqQ,EAAUxS,MACtBuK,EAAKvK,KAAO6E,EAAQ7E,GAAKmC,MAI5B,SAAUA,EAAMpB,EAASyQ,GAKxB,OAJAhD,EAAM,GAAKrM,EACXoQ,EAAS/D,EAAO,KAAMgD,EAAKhN,GAE3BgK,EAAM,GAAK,MACHhK,EAAQ0C,SAInBuL,IAAOxG,GAAa,SAAUnL,GAC7B,OAAO,SAAUqB,GAChB,OAAyC,EAAlCmD,GAAQxE,EAAUqB,GAAOf,UAIlCiF,SAAY4F,GAAa,SAAU7L,GAElC,OADAA,EAAOA,EAAKyD,QAASmF,GAAWC,IACzB,SAAU9G,GAChB,OAAkE,GAAzDA,EAAK+N,aAAe1K,EAASrD,IAASzD,QAAS0B,MAW1DsS,KAAQzG,GAAc,SAAUyG,GAM/B,OAJM1K,EAAYqD,KAAKqH,GAAQ,KAC9BpN,GAAOvB,MAAO,qBAAuB2O,GAEtCA,EAAOA,EAAK7O,QAASmF,GAAWC,IAAY5D,cACrC,SAAUlD,GAChB,IAAIwQ,EACJ,GACC,GAAMA,EAAWzM,EAChB/D,EAAKuQ,KACLvQ,EAAK9B,aAAa,aAAe8B,EAAK9B,aAAa,QAGnD,OADAsS,EAAWA,EAAStN,iBACAqN,GAA2C,IAAnCC,EAASjU,QAASgU,EAAO,YAE5CvQ,EAAOA,EAAK1B,aAAiC,IAAlB0B,EAAK9C,UAC3C,OAAO,KAKT+D,OAAU,SAAUjB,GACnB,IAAIyQ,EAAO5U,EAAO6U,UAAY7U,EAAO6U,SAASD,KAC9C,OAAOA,GAAQA,EAAKrU,MAAO,KAAQ4D,EAAK8I,IAGzC6H,KAAQ,SAAU3Q,GACjB,OAAOA,IAAS8D,GAGjB8M,MAAS,SAAU5Q,GAClB,OAAOA,IAAStE,EAASmV,iBAAmBnV,EAASoV,UAAYpV,EAASoV,gBAAkB9Q,EAAK3C,MAAQ2C,EAAK+Q,OAAS/Q,EAAKgR,WAI7HC,QAAWrG,IAAsB,GACjC/C,SAAY+C,IAAsB,GAElCsG,QAAW,SAAUlR,GAGpB,IAAI8H,EAAW9H,EAAK8H,SAAS5E,cAC7B,MAAqB,UAAb4E,KAA0B9H,EAAKkR,SAA0B,WAAbpJ,KAA2B9H,EAAKmR,UAGrFA,SAAY,SAAUnR,GAOrB,OAJKA,EAAK1B,YACT0B,EAAK1B,WAAW8S,eAGQ,IAAlBpR,EAAKmR,UAIbE,MAAS,SAAUrR,GAKlB,IAAMA,EAAOA,EAAKgO,WAAYhO,EAAMA,EAAOA,EAAKyK,YAC/C,GAAKzK,EAAK9C,SAAW,EACpB,OAAO,EAGT,OAAO,GAGRwS,OAAU,SAAU1P,GACnB,OAAQoD,EAAKkC,QAAe,MAAGtF,IAIhCsR,OAAU,SAAUtR,GACnB,OAAOyG,EAAQyC,KAAMlJ,EAAK8H,WAG3BuE,MAAS,SAAUrM,GAClB,OAAOwG,EAAQ0C,KAAMlJ,EAAK8H,WAG3ByJ,OAAU,SAAUvR,GACnB,IAAIa,EAAOb,EAAK8H,SAAS5E,cACzB,MAAgB,UAATrC,GAAkC,WAAdb,EAAK3C,MAA8B,WAATwD,GAGtD5C,KAAQ,SAAU+B,GACjB,IAAIuN,EACJ,MAAuC,UAAhCvN,EAAK8H,SAAS5E,eACN,SAAdlD,EAAK3C,OAImC,OAArCkQ,EAAOvN,EAAK9B,aAAa,UAA2C,SAAvBqP,EAAKrK,gBAIvD/C,MAAS2K,GAAuB,WAC/B,MAAO,CAAE,KAGVzK,KAAQyK,GAAuB,SAAUE,EAAc/L,GACtD,MAAO,CAAEA,EAAS,KAGnBmB,GAAM0K,GAAuB,SAAUE,EAAc/L,EAAQ8L,GAC5D,MAAO,CAAEA,EAAW,EAAIA,EAAW9L,EAAS8L,KAG7CyG,KAAQ1G,GAAuB,SAAUE,EAAc/L,GAEtD,IADA,IAAIpB,EAAI,EACAA,EAAIoB,EAAQpB,GAAK,EACxBmN,EAAa1O,KAAMuB,GAEpB,OAAOmN,IAGRyG,IAAO3G,GAAuB,SAAUE,EAAc/L,GAErD,IADA,IAAIpB,EAAI,EACAA,EAAIoB,EAAQpB,GAAK,EACxBmN,EAAa1O,KAAMuB,GAEpB,OAAOmN,IAGR0G,GAAM5G,GAAuB,SAAUE,EAAc/L,EAAQ8L,GAM5D,IALA,IAAIlN,EAAIkN,EAAW,EAClBA,EAAW9L,EACAA,EAAX8L,EACC9L,EACA8L,EACa,KAALlN,GACTmN,EAAa1O,KAAMuB,GAEpB,OAAOmN,IAGR2G,GAAM7G,GAAuB,SAAUE,EAAc/L,EAAQ8L,GAE5D,IADA,IAAIlN,EAAIkN,EAAW,EAAIA,EAAW9L,EAAS8L,IACjClN,EAAIoB,GACb+L,EAAa1O,KAAMuB,GAEpB,OAAOmN,OAKL1F,QAAa,IAAIlC,EAAKkC,QAAY,GAG5B,CAAEsM,OAAO,EAAMC,UAAU,EAAMC,MAAM,EAAMC,UAAU,EAAMC,OAAO,GAC5E5O,EAAKkC,QAASzH,GAAM6M,GAAmB7M,GAExC,IAAMA,IAAK,CAAEoU,QAAQ,EAAMC,OAAO,GACjC9O,EAAKkC,QAASzH,GAAM8M,GAAoB9M,GAIzC,SAASmS,MAuET,SAAS7G,GAAYgJ,GAIpB,IAHA,IAAItU,EAAI,EACPyC,EAAM6R,EAAOlT,OACbN,EAAW,GACJd,EAAIyC,EAAKzC,IAChBc,GAAYwT,EAAOtU,GAAGgF,MAEvB,OAAOlE,EAGR,SAASiJ,GAAewI,EAASgC,EAAYC,GAC5C,IAAItK,EAAMqK,EAAWrK,IACpBuK,EAAOF,EAAWpK,KAClB2B,EAAM2I,GAAQvK,EACdwK,EAAmBF,GAAgB,eAAR1I,EAC3B6I,EAAWlO,IAEZ,OAAO8N,EAAWjS,MAEjB,SAAUH,EAAMpB,EAASyQ,GACxB,MAASrP,EAAOA,EAAM+H,GACrB,GAAuB,IAAlB/H,EAAK9C,UAAkBqV,EAC3B,OAAOnC,EAASpQ,EAAMpB,EAASyQ,GAGjC,OAAO,GAIR,SAAUrP,EAAMpB,EAASyQ,GACxB,IAAIoD,EAAUnD,EAAaC,EAC1BmD,EAAW,CAAErO,EAASmO,GAGvB,GAAKnD,GACJ,MAASrP,EAAOA,EAAM+H,GACrB,IAAuB,IAAlB/H,EAAK9C,UAAkBqV,IACtBnC,EAASpQ,EAAMpB,EAASyQ,GAC5B,OAAO,OAKV,MAASrP,EAAOA,EAAM+H,GACrB,GAAuB,IAAlB/H,EAAK9C,UAAkBqV,EAO3B,GAFAjD,GAJAC,EAAavP,EAAMuB,KAAcvB,EAAMuB,GAAY,KAIzBvB,EAAK6P,YAAeN,EAAYvP,EAAK6P,UAAa,IAEvEyC,GAAQA,IAAStS,EAAK8H,SAAS5E,cACnClD,EAAOA,EAAM+H,IAAS/H,MAChB,CAAA,IAAMyS,EAAWnD,EAAa3F,KACpC8I,EAAU,KAAQpO,GAAWoO,EAAU,KAAQD,EAG/C,OAAQE,EAAU,GAAMD,EAAU,GAMlC,IAHAnD,EAAa3F,GAAQ+I,GAGL,GAAMtC,EAASpQ,EAAMpB,EAASyQ,GAC7C,OAAO,EAMZ,OAAO,GAIV,SAASsD,GAAgBC,GACxB,OAAyB,EAAlBA,EAAS3T,OACf,SAAUe,EAAMpB,EAASyQ,GACxB,IAAIxR,EAAI+U,EAAS3T,OACjB,MAAQpB,IACP,IAAM+U,EAAS/U,GAAImC,EAAMpB,EAASyQ,GACjC,OAAO,EAGT,OAAO,GAERuD,EAAS,GAYX,SAASC,GAAUxC,EAAWtQ,EAAK+L,EAAQlN,EAASyQ,GAOnD,IANA,IAAIrP,EACH8S,EAAe,GACfjV,EAAI,EACJyC,EAAM+P,EAAUpR,OAChB8T,EAAgB,MAAPhT,EAEFlC,EAAIyC,EAAKzC,KACVmC,EAAOqQ,EAAUxS,MAChBiO,IAAUA,EAAQ9L,EAAMpB,EAASyQ,KACtCyD,EAAaxW,KAAM0D,GACd+S,GACJhT,EAAIzD,KAAMuB,KAMd,OAAOiV,EAGR,SAASE,GAAYvE,EAAW9P,EAAUyR,EAAS6C,EAAYC,EAAYC,GAO1E,OANKF,IAAeA,EAAY1R,KAC/B0R,EAAaD,GAAYC,IAErBC,IAAeA,EAAY3R,KAC/B2R,EAAaF,GAAYE,EAAYC,IAE/BrJ,GAAa,SAAU1B,EAAM/F,EAASzD,EAASyQ,GACrD,IAAI+D,EAAMvV,EAAGmC,EACZqT,EAAS,GACTC,EAAU,GACVC,EAAclR,EAAQpD,OAGtBQ,EAAQ2I,GA5CX,SAA2BzJ,EAAU6U,EAAUnR,GAG9C,IAFA,IAAIxE,EAAI,EACPyC,EAAMkT,EAASvU,OACRpB,EAAIyC,EAAKzC,IAChBsF,GAAQxE,EAAU6U,EAAS3V,GAAIwE,GAEhC,OAAOA,EAsCWoR,CAAkB9U,GAAY,IAAKC,EAAQ1B,SAAW,CAAE0B,GAAYA,EAAS,IAG7F8U,GAAYjF,IAAerG,GAASzJ,EAEnCc,EADAoT,GAAUpT,EAAO4T,EAAQ5E,EAAW7P,EAASyQ,GAG9CsE,EAAavD,EAEZ8C,IAAgB9K,EAAOqG,EAAY8E,GAAeN,GAGjD,GAGA5Q,EACDqR,EAQF,GALKtD,GACJA,EAASsD,EAAWC,EAAY/U,EAASyQ,GAIrC4D,EAAa,CACjBG,EAAOP,GAAUc,EAAYL,GAC7BL,EAAYG,EAAM,GAAIxU,EAASyQ,GAG/BxR,EAAIuV,EAAKnU,OACT,MAAQpB,KACDmC,EAAOoT,EAAKvV,MACjB8V,EAAYL,EAAQzV,MAAS6V,EAAWJ,EAAQzV,IAAOmC,IAK1D,GAAKoI,GACJ,GAAK8K,GAAczE,EAAY,CAC9B,GAAKyE,EAAa,CAEjBE,EAAO,GACPvV,EAAI8V,EAAW1U,OACf,MAAQpB,KACDmC,EAAO2T,EAAW9V,KAEvBuV,EAAK9W,KAAOoX,EAAU7V,GAAKmC,GAG7BkT,EAAY,KAAOS,EAAa,GAAKP,EAAM/D,GAI5CxR,EAAI8V,EAAW1U,OACf,MAAQpB,KACDmC,EAAO2T,EAAW9V,MACoC,GAA1DuV,EAAOF,EAAa3W,EAAS6L,EAAMpI,GAASqT,EAAOxV,MAEpDuK,EAAKgL,KAAU/Q,EAAQ+Q,GAAQpT,UAOlC2T,EAAad,GACZc,IAAetR,EACdsR,EAAWjT,OAAQ6S,EAAaI,EAAW1U,QAC3C0U,GAEGT,EACJA,EAAY,KAAM7Q,EAASsR,EAAYtE,GAEvC/S,EAAK2D,MAAOoC,EAASsR,KAMzB,SAASC,GAAmBzB,GAwB3B,IAvBA,IAAI0B,EAAczD,EAAS7P,EAC1BD,EAAM6R,EAAOlT,OACb6U,EAAkB1Q,EAAKgL,SAAU+D,EAAO,GAAG9U,MAC3C0W,EAAmBD,GAAmB1Q,EAAKgL,SAAS,KACpDvQ,EAAIiW,EAAkB,EAAI,EAG1BE,EAAepM,GAAe,SAAU5H,GACvC,OAAOA,IAAS6T,GACdE,GAAkB,GACrBE,EAAkBrM,GAAe,SAAU5H,GAC1C,OAAwC,EAAjCzD,EAASsX,EAAc7T,IAC5B+T,GAAkB,GACrBnB,EAAW,CAAE,SAAU5S,EAAMpB,EAASyQ,GACrC,IAAI3P,GAASoU,IAAqBzE,GAAOzQ,IAAY8E,MACnDmQ,EAAejV,GAAS1B,SACxB8W,EAAchU,EAAMpB,EAASyQ,GAC7B4E,EAAiBjU,EAAMpB,EAASyQ,IAGlC,OADAwE,EAAe,KACRnU,IAGD7B,EAAIyC,EAAKzC,IAChB,GAAMuS,EAAUhN,EAAKgL,SAAU+D,EAAOtU,GAAGR,MACxCuV,EAAW,CAAEhL,GAAc+K,GAAgBC,GAAYxC,QACjD,CAIN,IAHAA,EAAUhN,EAAK0I,OAAQqG,EAAOtU,GAAGR,MAAO4C,MAAO,KAAMkS,EAAOtU,GAAG6E,UAGjDnB,GAAY,CAGzB,IADAhB,IAAM1C,EACE0C,EAAID,EAAKC,IAChB,GAAK6C,EAAKgL,SAAU+D,EAAO5R,GAAGlD,MAC7B,MAGF,OAAO2V,GACF,EAAJnV,GAAS8U,GAAgBC,GACrB,EAAJ/U,GAASsL,GAERgJ,EAAO/V,MAAO,EAAGyB,EAAI,GAAIxB,OAAO,CAAEwG,MAAgC,MAAzBsP,EAAQtU,EAAI,GAAIR,KAAe,IAAM,MAC7EqE,QAAS3C,EAAO,MAClBqR,EACAvS,EAAI0C,GAAKqT,GAAmBzB,EAAO/V,MAAOyB,EAAG0C,IAC7CA,EAAID,GAAOsT,GAAoBzB,EAASA,EAAO/V,MAAOmE,IACtDA,EAAID,GAAO6I,GAAYgJ,IAGzBS,EAAStW,KAAM8T,GAIjB,OAAOuC,GAAgBC,GA8RxB,OA9mBA5C,GAAW9Q,UAAYkE,EAAK8Q,QAAU9Q,EAAKkC,QAC3ClC,EAAK4M,WAAa,IAAIA,GAEtBzM,EAAWJ,GAAOI,SAAW,SAAU5E,EAAUwV,GAChD,IAAIjE,EAAS3H,EAAO4J,EAAQ9U,EAC3B+W,EAAO5L,EAAQ6L,EACfC,EAAS7P,EAAY9F,EAAW,KAEjC,GAAK2V,EACJ,OAAOH,EAAY,EAAIG,EAAOlY,MAAO,GAGtCgY,EAAQzV,EACR6J,EAAS,GACT6L,EAAajR,EAAKqL,UAElB,MAAQ2F,EAAQ,CAyBf,IAAM/W,KAtBA6S,KAAY3H,EAAQ9C,EAAOmD,KAAMwL,MACjC7L,IAEJ6L,EAAQA,EAAMhY,MAAOmM,EAAM,GAAGtJ,SAAYmV,GAE3C5L,EAAOlM,KAAO6V,EAAS,KAGxBjC,GAAU,GAGJ3H,EAAQ7C,EAAakD,KAAMwL,MAChClE,EAAU3H,EAAMsB,QAChBsI,EAAO7V,KAAK,CACXuG,MAAOqN,EAEP7S,KAAMkL,EAAM,GAAG7G,QAAS3C,EAAO,OAEhCqV,EAAQA,EAAMhY,MAAO8T,EAAQjR,SAIhBmE,EAAK0I,SACZvD,EAAQzC,EAAWzI,GAAOuL,KAAMwL,KAAcC,EAAYhX,MAC9DkL,EAAQ8L,EAAYhX,GAAQkL,MAC7B2H,EAAU3H,EAAMsB,QAChBsI,EAAO7V,KAAK,CACXuG,MAAOqN,EACP7S,KAAMA,EACNqF,QAAS6F,IAEV6L,EAAQA,EAAMhY,MAAO8T,EAAQjR,SAI/B,IAAMiR,EACL,MAOF,OAAOiE,EACNC,EAAMnV,OACNmV,EACCjR,GAAOvB,MAAOjD,GAEd8F,EAAY9F,EAAU6J,GAASpM,MAAO,IA+XzCoH,EAAUL,GAAOK,QAAU,SAAU7E,EAAU4J,GAC9C,IAAI1K,EAhH8B0W,EAAiBC,EAC/CC,EACHC,EACAC,EA8GAH,EAAc,GACdD,EAAkB,GAClBD,EAAS5P,EAAe/F,EAAW,KAEpC,IAAM2V,EAAS,CAER/L,IACLA,EAAQhF,EAAU5E,IAEnBd,EAAI0K,EAAMtJ,OACV,MAAQpB,KACPyW,EAASV,GAAmBrL,EAAM1K,KACrB0D,GACZiT,EAAYlY,KAAMgY,GAElBC,EAAgBjY,KAAMgY,IAKxBA,EAAS5P,EAAe/F,GArIS4V,EAqI2BA,EApIzDE,EAA6B,GADkBD,EAqI2BA,GApItDvV,OACvByV,EAAqC,EAAzBH,EAAgBtV,OAC5B0V,EAAe,SAAUvM,EAAMxJ,EAASyQ,EAAKhN,EAASuS,GACrD,IAAI5U,EAAMO,EAAG6P,EACZyE,EAAe,EACfhX,EAAI,IACJwS,EAAYjI,GAAQ,GACpB0M,EAAa,GACbC,EAAgBrR,EAEhBjE,EAAQ2I,GAAQsM,GAAatR,EAAK4I,KAAU,IAAG,IAAK4I,GAEpDI,EAAiB3Q,GAA4B,MAAjB0Q,EAAwB,EAAIvT,KAAKC,UAAY,GACzEnB,EAAMb,EAAMR,OASb,IAPK2V,IACJlR,EAAmB9E,IAAYlD,GAAYkD,GAAWgW,GAM/C/W,IAAMyC,GAA4B,OAApBN,EAAOP,EAAM5B,IAAaA,IAAM,CACrD,GAAK6W,GAAa1U,EAAO,CACxBO,EAAI,EACE3B,GAAWoB,EAAK2I,gBAAkBjN,IACvCmI,EAAa7D,GACbqP,GAAOtL,GAER,MAASqM,EAAUmE,EAAgBhU,KAClC,GAAK6P,EAASpQ,EAAMpB,GAAWlD,EAAU2T,GAAO,CAC/ChN,EAAQ/F,KAAM0D,GACd,MAGG4U,IACJvQ,EAAU2Q,GAKPP,KAEEzU,GAAQoQ,GAAWpQ,IACxB6U,IAIIzM,GACJiI,EAAU/T,KAAM0D,IAgBnB,GATA6U,GAAgBhX,EASX4W,GAAS5W,IAAMgX,EAAe,CAClCtU,EAAI,EACJ,MAAS6P,EAAUoE,EAAYjU,KAC9B6P,EAASC,EAAWyE,EAAYlW,EAASyQ,GAG1C,GAAKjH,EAAO,CAEX,GAAoB,EAAfyM,EACJ,MAAQhX,IACAwS,EAAUxS,IAAMiX,EAAWjX,KACjCiX,EAAWjX,GAAKkH,EAAIjI,KAAMuF,IAM7ByS,EAAajC,GAAUiC,GAIxBxY,EAAK2D,MAAOoC,EAASyS,GAGhBF,IAAcxM,GAA4B,EAApB0M,EAAW7V,QACG,EAAtC4V,EAAeL,EAAYvV,QAE7BkE,GAAOwK,WAAYtL,GAUrB,OALKuS,IACJvQ,EAAU2Q,EACVtR,EAAmBqR,GAGb1E,GAGFoE,EACN3K,GAAc6K,GACdA,KA4BOhW,SAAWA,EAEnB,OAAO2V,GAYR7Q,EAASN,GAAOM,OAAS,SAAU9E,EAAUC,EAASyD,EAAS+F,GAC9D,IAAIvK,EAAGsU,EAAQ8C,EAAO5X,EAAM2O,EAC3BkJ,EAA+B,mBAAbvW,GAA2BA,EAC7C4J,GAASH,GAAQ7E,EAAW5E,EAAWuW,EAASvW,UAAYA,GAM7D,GAJA0D,EAAUA,GAAW,GAIC,IAAjBkG,EAAMtJ,OAAe,CAIzB,GAAqB,GADrBkT,EAAS5J,EAAM,GAAKA,EAAM,GAAGnM,MAAO,IACxB6C,QAA2C,QAA5BgW,EAAQ9C,EAAO,IAAI9U,MACvB,IAArBuB,EAAQ1B,UAAkB6G,GAAkBX,EAAKgL,SAAU+D,EAAO,GAAG9U,MAAS,CAG/E,KADAuB,GAAYwE,EAAK4I,KAAS,GAAGiJ,EAAMvS,QAAQ,GAAGhB,QAAQmF,GAAWC,IAAYlI,IAAa,IAAK,IAE9F,OAAOyD,EAGI6S,IACXtW,EAAUA,EAAQN,YAGnBK,EAAWA,EAASvC,MAAO+V,EAAOtI,QAAQhH,MAAM5D,QAIjDpB,EAAIiI,EAAwB,aAAEoD,KAAMvK,GAAa,EAAIwT,EAAOlT,OAC5D,MAAQpB,IAAM,CAIb,GAHAoX,EAAQ9C,EAAOtU,GAGVuF,EAAKgL,SAAW/Q,EAAO4X,EAAM5X,MACjC,MAED,IAAM2O,EAAO5I,EAAK4I,KAAM3O,MAEjB+K,EAAO4D,EACZiJ,EAAMvS,QAAQ,GAAGhB,QAASmF,GAAWC,IACrCF,GAASsC,KAAMiJ,EAAO,GAAG9U,OAAUgM,GAAazK,EAAQN,aAAgBM,IACpE,CAKJ,GAFAuT,EAAOzR,OAAQ7C,EAAG,KAClBc,EAAWyJ,EAAKnJ,QAAUkK,GAAYgJ,IAGrC,OADA7V,EAAK2D,MAAOoC,EAAS+F,GACd/F,EAGR,QAeJ,OAPE6S,GAAY1R,EAAS7E,EAAU4J,IAChCH,EACAxJ,GACCmF,EACD1B,GACCzD,GAAWgI,GAASsC,KAAMvK,IAAc0K,GAAazK,EAAQN,aAAgBM,GAExEyD,GAMRtF,EAAQ+Q,WAAavM,EAAQ0B,MAAM,IAAIxC,KAAMmE,GAAYwE,KAAK,MAAQ7H,EAItExE,EAAQ8Q,mBAAqBjK,EAG7BC,IAIA9G,EAAQiQ,aAAejD,GAAO,SAAUC,GAEvC,OAA0E,EAAnEA,EAAG4C,wBAAyBlR,EAASsC,cAAc,eAMrD+L,GAAO,SAAUC,GAEtB,OADAA,EAAGoC,UAAY,mBAC+B,MAAvCpC,EAAGgE,WAAW9P,aAAa,WAElC+L,GAAW,yBAA0B,SAAUjK,EAAMa,EAAMyC,GAC1D,IAAMA,EACL,OAAOtD,EAAK9B,aAAc2C,EAA6B,SAAvBA,EAAKqC,cAA2B,EAAI,KAOjEnG,EAAQsI,YAAe0E,GAAO,SAAUC,GAG7C,OAFAA,EAAGoC,UAAY,WACfpC,EAAGgE,WAAW7P,aAAc,QAAS,IACY,KAA1C6L,EAAGgE,WAAW9P,aAAc,YAEnC+L,GAAW,QAAS,SAAUjK,EAAMa,EAAMyC,GACzC,IAAMA,GAAyC,UAAhCtD,EAAK8H,SAAS5E,cAC5B,OAAOlD,EAAKmV,eAOTpL,GAAO,SAAUC,GACtB,OAAsC,MAA/BA,EAAG9L,aAAa,eAEvB+L,GAAW/E,EAAU,SAAUlF,EAAMa,EAAMyC,GAC1C,IAAIxF,EACJ,IAAMwF,EACL,OAAwB,IAAjBtD,EAAMa,GAAkBA,EAAKqC,eACjCpF,EAAMkC,EAAKiM,iBAAkBpL,KAAW/C,EAAI0P,UAC7C1P,EAAI+E,MACL,OAKGM,GA1sEP,CA4sEItH,GAIJ6C,EAAOsN,KAAO7I,EACdzE,EAAO2O,KAAOlK,EAAO+K,UAGrBxP,EAAO2O,KAAM,KAAQ3O,EAAO2O,KAAK/H,QACjC5G,EAAOiP,WAAajP,EAAO0W,OAASjS,EAAOwK,WAC3CjP,EAAOT,KAAOkF,EAAOE,QACrB3E,EAAO2W,SAAWlS,EAAOG,MACzB5E,EAAOwF,SAAWf,EAAOe,SACzBxF,EAAO4W,eAAiBnS,EAAOsK,OAK/B,IAAI1F,EAAM,SAAU/H,EAAM+H,EAAKwN,GAC9B,IAAIrF,EAAU,GACbsF,OAAqBlU,IAAViU,EAEZ,OAAUvV,EAAOA,EAAM+H,KAA6B,IAAlB/H,EAAK9C,SACtC,GAAuB,IAAlB8C,EAAK9C,SAAiB,CAC1B,GAAKsY,GAAY9W,EAAQsB,GAAOyV,GAAIF,GACnC,MAEDrF,EAAQ5T,KAAM0D,GAGhB,OAAOkQ,GAIJwF,EAAW,SAAUC,EAAG3V,GAG3B,IAFA,IAAIkQ,EAAU,GAENyF,EAAGA,EAAIA,EAAElL,YACI,IAAfkL,EAAEzY,UAAkByY,IAAM3V,GAC9BkQ,EAAQ5T,KAAMqZ,GAIhB,OAAOzF,GAIJ0F,EAAgBlX,EAAO2O,KAAK9E,MAAMjC,aAItC,SAASwB,EAAU9H,EAAMa,GAEvB,OAAOb,EAAK8H,UAAY9H,EAAK8H,SAAS5E,gBAAkBrC,EAAKqC,cAG/D,IAAI2S,EAAa,kEAKjB,SAASC,EAAQxI,EAAUyI,EAAW5F,GACrC,OAAKnT,EAAY+Y,GACTrX,EAAO8D,KAAM8K,EAAU,SAAUtN,EAAMnC,GAC7C,QAASkY,EAAUjZ,KAAMkD,EAAMnC,EAAGmC,KAAWmQ,IAK1C4F,EAAU7Y,SACPwB,EAAO8D,KAAM8K,EAAU,SAAUtN,GACvC,OAASA,IAAS+V,IAAgB5F,IAKV,iBAAd4F,EACJrX,EAAO8D,KAAM8K,EAAU,SAAUtN,GACvC,OAA4C,EAAnCzD,EAAQO,KAAMiZ,EAAW/V,KAAkBmQ,IAK/CzR,EAAOoN,OAAQiK,EAAWzI,EAAU6C,GAG5CzR,EAAOoN,OAAS,SAAUuB,EAAM5N,EAAO0Q,GACtC,IAAInQ,EAAOP,EAAO,GAMlB,OAJK0Q,IACJ9C,EAAO,QAAUA,EAAO,KAGH,IAAjB5N,EAAMR,QAAkC,IAAlBe,EAAK9C,SACxBwB,EAAOsN,KAAKM,gBAAiBtM,EAAMqN,GAAS,CAAErN,GAAS,GAGxDtB,EAAOsN,KAAKtJ,QAAS2K,EAAM3O,EAAO8D,KAAM/C,EAAO,SAAUO,GAC/D,OAAyB,IAAlBA,EAAK9C,aAIdwB,EAAOG,GAAG8B,OAAQ,CACjBqL,KAAM,SAAUrN,GACf,IAAId,EAAG6B,EACNY,EAAMxE,KAAKmD,OACX+W,EAAOla,KAER,GAAyB,iBAAb6C,EACX,OAAO7C,KAAK0D,UAAWd,EAAQC,GAAWmN,OAAQ,WACjD,IAAMjO,EAAI,EAAGA,EAAIyC,EAAKzC,IACrB,GAAKa,EAAOwF,SAAU8R,EAAMnY,GAAK/B,MAChC,OAAO,KAQX,IAFA4D,EAAM5D,KAAK0D,UAAW,IAEhB3B,EAAI,EAAGA,EAAIyC,EAAKzC,IACrBa,EAAOsN,KAAMrN,EAAUqX,EAAMnY,GAAK6B,GAGnC,OAAa,EAANY,EAAU5B,EAAOiP,WAAYjO,GAAQA,GAE7CoM,OAAQ,SAAUnN,GACjB,OAAO7C,KAAK0D,UAAWsW,EAAQha,KAAM6C,GAAY,IAAI,KAEtDwR,IAAK,SAAUxR,GACd,OAAO7C,KAAK0D,UAAWsW,EAAQha,KAAM6C,GAAY,IAAI,KAEtD8W,GAAI,SAAU9W,GACb,QAASmX,EACRha,KAIoB,iBAAb6C,GAAyBiX,EAAc1M,KAAMvK,GACnDD,EAAQC,GACRA,GAAY,IACb,GACCM,UASJ,IAAIgX,EAMHtP,EAAa,uCAENjI,EAAOG,GAAGC,KAAO,SAAUH,EAAUC,EAAS+R,GACpD,IAAIpI,EAAOvI,EAGX,IAAMrB,EACL,OAAO7C,KAQR,GAHA6U,EAAOA,GAAQsF,EAGU,iBAAbtX,EAAwB,CAanC,KAPC4J,EALsB,MAAlB5J,EAAU,IACsB,MAApCA,EAAUA,EAASM,OAAS,IACT,GAAnBN,EAASM,OAGD,CAAE,KAAMN,EAAU,MAGlBgI,EAAWiC,KAAMjK,MAIV4J,EAAO,IAAQ3J,EA6CxB,OAAMA,GAAWA,EAAQO,QACtBP,GAAW+R,GAAO3E,KAAMrN,GAK1B7C,KAAKsD,YAAaR,GAAUoN,KAAMrN,GAhDzC,GAAK4J,EAAO,GAAM,CAYjB,GAXA3J,EAAUA,aAAmBF,EAASE,EAAS,GAAMA,EAIrDF,EAAOiB,MAAO7D,KAAM4C,EAAOwX,UAC1B3N,EAAO,GACP3J,GAAWA,EAAQ1B,SAAW0B,EAAQ+J,eAAiB/J,EAAUlD,GACjE,IAIIma,EAAW3M,KAAMX,EAAO,KAAS7J,EAAOyC,cAAevC,GAC3D,IAAM2J,KAAS3J,EAGT5B,EAAYlB,KAAMyM,IACtBzM,KAAMyM,GAAS3J,EAAS2J,IAIxBzM,KAAKyR,KAAMhF,EAAO3J,EAAS2J,IAK9B,OAAOzM,KAYP,OARAkE,EAAOtE,EAASmN,eAAgBN,EAAO,OAKtCzM,KAAM,GAAMkE,EACZlE,KAAKmD,OAAS,GAERnD,KAcH,OAAK6C,EAASzB,UACpBpB,KAAM,GAAM6C,EACZ7C,KAAKmD,OAAS,EACPnD,MAIIkB,EAAY2B,QACD2C,IAAfqP,EAAKwF,MACXxF,EAAKwF,MAAOxX,GAGZA,EAAUD,GAGLA,EAAO0D,UAAWzD,EAAU7C,QAIhCoD,UAAYR,EAAOG,GAGxBoX,EAAavX,EAAQhD,GAGrB,IAAI0a,EAAe,iCAGlBC,EAAmB,CAClBC,UAAU,EACVC,UAAU,EACVvO,MAAM,EACNwO,MAAM,GAoFR,SAASC,EAASnM,EAAKvC,GACtB,OAAUuC,EAAMA,EAAKvC,KAA4B,IAAjBuC,EAAIpN,UACpC,OAAOoN,EAnFR5L,EAAOG,GAAG8B,OAAQ,CACjB2P,IAAK,SAAUrP,GACd,IAAIyV,EAAUhY,EAAQuC,EAAQnF,MAC7B6a,EAAID,EAAQzX,OAEb,OAAOnD,KAAKgQ,OAAQ,WAEnB,IADA,IAAIjO,EAAI,EACAA,EAAI8Y,EAAG9Y,IACd,GAAKa,EAAOwF,SAAUpI,KAAM4a,EAAS7Y,IACpC,OAAO,KAMX+Y,QAAS,SAAU1I,EAAWtP,GAC7B,IAAI0L,EACHzM,EAAI,EACJ8Y,EAAI7a,KAAKmD,OACTiR,EAAU,GACVwG,EAA+B,iBAAdxI,GAA0BxP,EAAQwP,GAGpD,IAAM0H,EAAc1M,KAAMgF,GACzB,KAAQrQ,EAAI8Y,EAAG9Y,IACd,IAAMyM,EAAMxO,KAAM+B,GAAKyM,GAAOA,IAAQ1L,EAAS0L,EAAMA,EAAIhM,WAGxD,GAAKgM,EAAIpN,SAAW,KAAQwZ,GACH,EAAxBA,EAAQG,MAAOvM,GAGE,IAAjBA,EAAIpN,UACHwB,EAAOsN,KAAKM,gBAAiBhC,EAAK4D,IAAgB,CAEnDgC,EAAQ5T,KAAMgO,GACd,MAMJ,OAAOxO,KAAK0D,UAA4B,EAAjB0Q,EAAQjR,OAAaP,EAAOiP,WAAYuC,GAAYA,IAI5E2G,MAAO,SAAU7W,GAGhB,OAAMA,EAKe,iBAATA,EACJzD,EAAQO,KAAM4B,EAAQsB,GAAQlE,KAAM,IAIrCS,EAAQO,KAAMhB,KAGpBkE,EAAKb,OAASa,EAAM,GAAMA,GAZjBlE,KAAM,IAAOA,KAAM,GAAIwC,WAAexC,KAAKqE,QAAQ2W,UAAU7X,QAAU,GAgBlF8X,IAAK,SAAUpY,EAAUC,GACxB,OAAO9C,KAAK0D,UACXd,EAAOiP,WACNjP,EAAOiB,MAAO7D,KAAKwD,MAAOZ,EAAQC,EAAUC,OAK/CoY,QAAS,SAAUrY,GAClB,OAAO7C,KAAKib,IAAiB,MAAZpY,EAChB7C,KAAK8D,WAAa9D,KAAK8D,WAAWkM,OAAQnN,OAU7CD,EAAOmB,KAAM,CACZ6P,OAAQ,SAAU1P,GACjB,IAAI0P,EAAS1P,EAAK1B,WAClB,OAAOoR,GAA8B,KAApBA,EAAOxS,SAAkBwS,EAAS,MAEpDuH,QAAS,SAAUjX,GAClB,OAAO+H,EAAK/H,EAAM,eAEnBkX,aAAc,SAAUlX,EAAMnC,EAAG0X,GAChC,OAAOxN,EAAK/H,EAAM,aAAcuV,IAEjCvN,KAAM,SAAUhI,GACf,OAAOyW,EAASzW,EAAM,gBAEvBwW,KAAM,SAAUxW,GACf,OAAOyW,EAASzW,EAAM,oBAEvBmX,QAAS,SAAUnX,GAClB,OAAO+H,EAAK/H,EAAM,gBAEnB8W,QAAS,SAAU9W,GAClB,OAAO+H,EAAK/H,EAAM,oBAEnBoX,UAAW,SAAUpX,EAAMnC,EAAG0X,GAC7B,OAAOxN,EAAK/H,EAAM,cAAeuV,IAElC8B,UAAW,SAAUrX,EAAMnC,EAAG0X,GAC7B,OAAOxN,EAAK/H,EAAM,kBAAmBuV,IAEtCG,SAAU,SAAU1V,GACnB,OAAO0V,GAAY1V,EAAK1B,YAAc,IAAK0P,WAAYhO,IAExDsW,SAAU,SAAUtW,GACnB,OAAO0V,EAAU1V,EAAKgO,aAEvBuI,SAAU,SAAUvW,GACnB,MAAqC,oBAAzBA,EAAKsX,gBACTtX,EAAKsX,iBAMRxP,EAAU9H,EAAM,cACpBA,EAAOA,EAAKuX,SAAWvX,GAGjBtB,EAAOiB,MAAO,GAAIK,EAAKiI,eAE7B,SAAUpH,EAAMhC,GAClBH,EAAOG,GAAIgC,GAAS,SAAU0U,EAAO5W,GACpC,IAAIuR,EAAUxR,EAAOqB,IAAKjE,KAAM+C,EAAI0W,GAuBpC,MArB0B,UAArB1U,EAAKzE,OAAQ,KACjBuC,EAAW4W,GAGP5W,GAAgC,iBAAbA,IACvBuR,EAAUxR,EAAOoN,OAAQnN,EAAUuR,IAGjB,EAAdpU,KAAKmD,SAGHoX,EAAkBxV,IACvBnC,EAAOiP,WAAYuC,GAIfkG,EAAalN,KAAMrI,IACvBqP,EAAQsH,WAIH1b,KAAK0D,UAAW0Q,MAGzB,IAAIuH,EAAgB,oBAsOpB,SAASC,EAAUC,GAClB,OAAOA,EAER,SAASC,EAASC,GACjB,MAAMA,EAGP,SAASC,EAAYjV,EAAOkV,EAASC,EAAQC,GAC5C,IAAIC,EAEJ,IAGMrV,GAAS7F,EAAckb,EAASrV,EAAMsV,SAC1CD,EAAOpb,KAAM+F,GAAQyB,KAAMyT,GAAUK,KAAMJ,GAGhCnV,GAAS7F,EAAckb,EAASrV,EAAMwV,MACjDH,EAAOpb,KAAM+F,EAAOkV,EAASC,GAQ7BD,EAAQ9X,WAAOqB,EAAW,CAAEuB,GAAQzG,MAAO6b,IAM3C,MAAQpV,GAITmV,EAAO/X,WAAOqB,EAAW,CAAEuB,KAvO7BnE,EAAO4Z,UAAY,SAAU1X,GA9B7B,IAAwBA,EACnB2X,EAiCJ3X,EAA6B,iBAAZA,GAlCMA,EAmCPA,EAlCZ2X,EAAS,GACb7Z,EAAOmB,KAAMe,EAAQ2H,MAAOkP,IAAmB,GAAI,SAAU1Q,EAAGyR,GAC/DD,EAAQC,IAAS,IAEXD,GA+BN7Z,EAAOiC,OAAQ,GAAIC,GAEpB,IACC6X,EAGAC,EAGAC,EAGAC,EAGA3T,EAAO,GAGP4T,EAAQ,GAGRC,GAAe,EAGfC,EAAO,WAQN,IALAH,EAASA,GAAUhY,EAAQoY,KAI3BL,EAAQF,GAAS,EACTI,EAAM5Z,OAAQ6Z,GAAe,EAAI,CACxCJ,EAASG,EAAMhP,QACf,QAAUiP,EAAc7T,EAAKhG,QAGmC,IAA1DgG,EAAM6T,GAAc7Y,MAAOyY,EAAQ,GAAKA,EAAQ,KACpD9X,EAAQqY,cAGRH,EAAc7T,EAAKhG,OACnByZ,GAAS,GAMN9X,EAAQ8X,SACbA,GAAS,GAGVD,GAAS,EAGJG,IAIH3T,EADIyT,EACG,GAIA,KAMV1C,EAAO,CAGNe,IAAK,WA2BJ,OA1BK9R,IAGCyT,IAAWD,IACfK,EAAc7T,EAAKhG,OAAS,EAC5B4Z,EAAMvc,KAAMoc,IAGb,SAAW3B,EAAKhH,GACfrR,EAAOmB,KAAMkQ,EAAM,SAAUhJ,EAAGnE,GAC1B5F,EAAY4F,GACVhC,EAAQwU,QAAWY,EAAK1F,IAAK1N,IAClCqC,EAAK3I,KAAMsG,GAEDA,GAAOA,EAAI3D,QAA4B,WAAlBT,EAAQoE,IAGxCmU,EAAKnU,KATR,CAYK1C,WAEAwY,IAAWD,GACfM,KAGKjd,MAIRod,OAAQ,WAYP,OAXAxa,EAAOmB,KAAMK,UAAW,SAAU6G,EAAGnE,GACpC,IAAIiU,EACJ,OAA0D,GAAhDA,EAAQnY,EAAO4D,QAASM,EAAKqC,EAAM4R,IAC5C5R,EAAKvE,OAAQmW,EAAO,GAGfA,GAASiC,GACbA,MAIIhd,MAKRwU,IAAK,SAAUzR,GACd,OAAOA,GACwB,EAA9BH,EAAO4D,QAASzD,EAAIoG,GACN,EAAdA,EAAKhG,QAIPoS,MAAO,WAIN,OAHKpM,IACJA,EAAO,IAEDnJ,MAMRqd,QAAS,WAGR,OAFAP,EAASC,EAAQ,GACjB5T,EAAOyT,EAAS,GACT5c,MAER+L,SAAU,WACT,OAAQ5C,GAMTmU,KAAM,WAKL,OAJAR,EAASC,EAAQ,GACXH,GAAWD,IAChBxT,EAAOyT,EAAS,IAEV5c,MAER8c,OAAQ,WACP,QAASA,GAIVS,SAAU,SAAUza,EAASmR,GAS5B,OARM6I,IAEL7I,EAAO,CAAEnR,GADTmR,EAAOA,GAAQ,IACQ3T,MAAQ2T,EAAK3T,QAAU2T,GAC9C8I,EAAMvc,KAAMyT,GACN0I,GACLM,KAGKjd,MAIRid,KAAM,WAEL,OADA/C,EAAKqD,SAAUvd,KAAMoE,WACdpE,MAIR6c,MAAO,WACN,QAASA,IAIZ,OAAO3C,GA4CRtX,EAAOiC,OAAQ,CAEd2Y,SAAU,SAAUC,GACnB,IAAIC,EAAS,CAIX,CAAE,SAAU,WAAY9a,EAAO4Z,UAAW,UACzC5Z,EAAO4Z,UAAW,UAAY,GAC/B,CAAE,UAAW,OAAQ5Z,EAAO4Z,UAAW,eACtC5Z,EAAO4Z,UAAW,eAAiB,EAAG,YACvC,CAAE,SAAU,OAAQ5Z,EAAO4Z,UAAW,eACrC5Z,EAAO4Z,UAAW,eAAiB,EAAG,aAExCmB,EAAQ,UACRtB,EAAU,CACTsB,MAAO,WACN,OAAOA,GAERC,OAAQ,WAEP,OADAC,EAASrV,KAAMpE,WAAYkY,KAAMlY,WAC1BpE,MAER8d,QAAS,SAAU/a,GAClB,OAAOsZ,EAAQE,KAAM,KAAMxZ,IAI5Bgb,KAAM,WACL,IAAIC,EAAM5Z,UAEV,OAAOxB,EAAO4a,SAAU,SAAUS,GACjCrb,EAAOmB,KAAM2Z,EAAQ,SAAU3b,EAAGmc,GAGjC,IAAInb,EAAK7B,EAAY8c,EAAKE,EAAO,MAAWF,EAAKE,EAAO,IAKxDL,EAAUK,EAAO,IAAO,WACvB,IAAIC,EAAWpb,GAAMA,EAAGoB,MAAOnE,KAAMoE,WAChC+Z,GAAYjd,EAAYid,EAAS9B,SACrC8B,EAAS9B,UACP+B,SAAUH,EAASI,QACnB7V,KAAMyV,EAAShC,SACfK,KAAM2B,EAAS/B,QAEjB+B,EAAUC,EAAO,GAAM,QACtBle,KACA+C,EAAK,CAAEob,GAAa/Z,eAKxB4Z,EAAM,OACH3B,WAELE,KAAM,SAAU+B,EAAaC,EAAYC,GACxC,IAAIC,EAAW,EACf,SAASxC,EAASyC,EAAOb,EAAUxP,EAASsQ,GAC3C,OAAO,WACN,IAAIC,EAAO5e,KACViU,EAAO7P,UACPya,EAAa,WACZ,IAAIV,EAAU5B,EAKd,KAAKmC,EAAQD,GAAb,CAQA,IAJAN,EAAW9P,EAAQlK,MAAOya,EAAM3K,MAId4J,EAASxB,UAC1B,MAAM,IAAIyC,UAAW,4BAOtBvC,EAAO4B,IAKgB,iBAAbA,GACY,mBAAbA,IACRA,EAAS5B,KAGLrb,EAAYqb,GAGXoC,EACJpC,EAAKvb,KACJmd,EACAlC,EAASwC,EAAUZ,EAAUjC,EAAU+C,GACvC1C,EAASwC,EAAUZ,EAAU/B,EAAS6C,KAOvCF,IAEAlC,EAAKvb,KACJmd,EACAlC,EAASwC,EAAUZ,EAAUjC,EAAU+C,GACvC1C,EAASwC,EAAUZ,EAAU/B,EAAS6C,GACtC1C,EAASwC,EAAUZ,EAAUjC,EAC5BiC,EAASkB,eASP1Q,IAAYuN,IAChBgD,OAAOpZ,EACPyO,EAAO,CAAEkK,KAKRQ,GAAWd,EAASmB,aAAeJ,EAAM3K,MAK7CgL,EAAUN,EACTE,EACA,WACC,IACCA,IACC,MAAQzS,GAEJxJ,EAAO4a,SAAS0B,eACpBtc,EAAO4a,SAAS0B,cAAe9S,EAC9B6S,EAAQE,YAMQV,GAAbC,EAAQ,IAIPrQ,IAAYyN,IAChB8C,OAAOpZ,EACPyO,EAAO,CAAE7H,IAGVyR,EAASuB,WAAYR,EAAM3K,MAS3ByK,EACJO,KAKKrc,EAAO4a,SAAS6B,eACpBJ,EAAQE,WAAavc,EAAO4a,SAAS6B,gBAEtCtf,EAAOuf,WAAYL,KAKtB,OAAOrc,EAAO4a,SAAU,SAAUS,GAGjCP,EAAQ,GAAK,GAAIzC,IAChBgB,EACC,EACAgC,EACA/c,EAAYsd,GACXA,EACA5C,EACDqC,EAASc,aAKXrB,EAAQ,GAAK,GAAIzC,IAChBgB,EACC,EACAgC,EACA/c,EAAYod,GACXA,EACA1C,IAKH8B,EAAQ,GAAK,GAAIzC,IAChBgB,EACC,EACAgC,EACA/c,EAAYqd,GACXA,EACAzC,MAGAO,WAKLA,QAAS,SAAUlb,GAClB,OAAc,MAAPA,EAAcyB,EAAOiC,OAAQ1D,EAAKkb,GAAYA,IAGvDwB,EAAW,GAkEZ,OA/DAjb,EAAOmB,KAAM2Z,EAAQ,SAAU3b,EAAGmc,GACjC,IAAI/U,EAAO+U,EAAO,GACjBqB,EAAcrB,EAAO,GAKtB7B,EAAS6B,EAAO,IAAQ/U,EAAK8R,IAGxBsE,GACJpW,EAAK8R,IACJ,WAIC0C,EAAQ4B,GAKT7B,EAAQ,EAAI3b,GAAK,GAAIsb,QAIrBK,EAAQ,EAAI3b,GAAK,GAAIsb,QAGrBK,EAAQ,GAAK,GAAIJ,KAGjBI,EAAQ,GAAK,GAAIJ,MAOnBnU,EAAK8R,IAAKiD,EAAO,GAAIjB,MAKrBY,EAAUK,EAAO,IAAQ,WAExB,OADAL,EAAUK,EAAO,GAAM,QAAUle,OAAS6d,OAAWrY,EAAYxF,KAAMoE,WAChEpE,MAMR6d,EAAUK,EAAO,GAAM,QAAW/U,EAAKoU,WAIxClB,EAAQA,QAASwB,GAGZJ,GACJA,EAAKzc,KAAM6c,EAAUA,GAIfA,GAIR2B,KAAM,SAAUC,GACf,IAGCC,EAAYtb,UAAUjB,OAGtBpB,EAAI2d,EAGJC,EAAkBra,MAAOvD,GACzB6d,EAAgBtf,EAAMU,KAAMoD,WAG5Byb,EAASjd,EAAO4a,WAGhBsC,EAAa,SAAU/d,GACtB,OAAO,SAAUgF,GAChB4Y,EAAiB5d,GAAM/B,KACvB4f,EAAe7d,GAAyB,EAAnBqC,UAAUjB,OAAa7C,EAAMU,KAAMoD,WAAc2C,IAC5D2Y,GACTG,EAAOb,YAAaW,EAAiBC,KAMzC,GAAKF,GAAa,IACjB1D,EAAYyD,EAAaI,EAAOrX,KAAMsX,EAAY/d,IAAMka,QAAS4D,EAAO3D,QACtEwD,GAGsB,YAAnBG,EAAOlC,SACXzc,EAAY0e,EAAe7d,IAAO6d,EAAe7d,GAAIwa,OAErD,OAAOsD,EAAOtD,OAKhB,MAAQxa,IACPia,EAAY4D,EAAe7d,GAAK+d,EAAY/d,GAAK8d,EAAO3D,QAGzD,OAAO2D,EAAOxD,aAOhB,IAAI0D,EAAc,yDAElBnd,EAAO4a,SAAS0B,cAAgB,SAAUpZ,EAAOka,GAI3CjgB,EAAOkgB,SAAWlgB,EAAOkgB,QAAQC,MAAQpa,GAASia,EAAY3S,KAAMtH,EAAMf,OAC9EhF,EAAOkgB,QAAQC,KAAM,8BAAgCpa,EAAMqa,QAASra,EAAMka,MAAOA,IAOnFpd,EAAOwd,eAAiB,SAAUta,GACjC/F,EAAOuf,WAAY,WAClB,MAAMxZ,KAQR,IAAIua,EAAYzd,EAAO4a,WAkDvB,SAAS8C,IACR1gB,EAAS2gB,oBAAqB,mBAAoBD,GAClDvgB,EAAOwgB,oBAAqB,OAAQD,GACpC1d,EAAOyX,QAnDRzX,EAAOG,GAAGsX,MAAQ,SAAUtX,GAY3B,OAVAsd,EACE9D,KAAMxZ,GAKN+a,SAAO,SAAUhY,GACjBlD,EAAOwd,eAAgBta,KAGlB9F,MAGR4C,EAAOiC,OAAQ,CAGdgB,SAAS,EAIT2a,UAAW,EAGXnG,MAAO,SAAUoG,KAGF,IAATA,IAAkB7d,EAAO4d,UAAY5d,EAAOiD,WAKjDjD,EAAOiD,SAAU,KAGZ4a,GAAsC,IAAnB7d,EAAO4d,WAK/BH,EAAUrB,YAAapf,EAAU,CAAEgD,OAIrCA,EAAOyX,MAAMkC,KAAO8D,EAAU9D,KAaD,aAAxB3c,EAAS8gB,YACa,YAAxB9gB,EAAS8gB,aAA6B9gB,EAASyP,gBAAgBsR,SAGjE5gB,EAAOuf,WAAY1c,EAAOyX,QAK1Bza,EAAS8P,iBAAkB,mBAAoB4Q,GAG/CvgB,EAAO2P,iBAAkB,OAAQ4Q,IAQlC,IAAIM,EAAS,SAAUjd,EAAOZ,EAAI8K,EAAK9G,EAAO8Z,EAAWC,EAAUC,GAClE,IAAIhf,EAAI,EACPyC,EAAMb,EAAMR,OACZ6d,EAAc,MAAPnT,EAGR,GAAuB,WAAlBnL,EAAQmL,GAEZ,IAAM9L,KADN8e,GAAY,EACDhT,EACV+S,EAAQjd,EAAOZ,EAAIhB,EAAG8L,EAAK9L,IAAK,EAAM+e,EAAUC,QAI3C,QAAevb,IAAVuB,IACX8Z,GAAY,EAEN3f,EAAY6F,KACjBga,GAAM,GAGFC,IAGCD,GACJhe,EAAG/B,KAAM2C,EAAOoD,GAChBhE,EAAK,OAILie,EAAOje,EACPA,EAAK,SAAUmB,EAAM2J,EAAK9G,GACzB,OAAOia,EAAKhgB,KAAM4B,EAAQsB,GAAQ6C,MAKhChE,GACJ,KAAQhB,EAAIyC,EAAKzC,IAChBgB,EACCY,EAAO5B,GAAK8L,EAAKkT,EACjBha,EACAA,EAAM/F,KAAM2C,EAAO5B,GAAKA,EAAGgB,EAAIY,EAAO5B,GAAK8L,KAM/C,OAAKgT,EACGld,EAIHqd,EACGje,EAAG/B,KAAM2C,GAGVa,EAAMzB,EAAIY,EAAO,GAAKkK,GAAQiT,GAKlCG,EAAY,QACfC,EAAa,YAGd,SAASC,EAAYC,EAAKC,GACzB,OAAOA,EAAOC,cAMf,SAASC,EAAWC,GACnB,OAAOA,EAAO5b,QAASqb,EAAW,OAAQrb,QAASsb,EAAYC,GAEhE,IAAIM,EAAa,SAAUC,GAQ1B,OAA0B,IAAnBA,EAAMtgB,UAAqC,IAAnBsgB,EAAMtgB,YAAsBsgB,EAAMtgB,UAMlE,SAASugB,IACR3hB,KAAKyF,QAAU7C,EAAO6C,QAAUkc,EAAKC,MAGtCD,EAAKC,IAAM,EAEXD,EAAKve,UAAY,CAEhBwK,MAAO,SAAU8T,GAGhB,IAAI3a,EAAQ2a,EAAO1hB,KAAKyF,SA4BxB,OAzBMsB,IACLA,EAAQ,GAKH0a,EAAYC,KAIXA,EAAMtgB,SACVsgB,EAAO1hB,KAAKyF,SAAYsB,EAMxB3G,OAAOyhB,eAAgBH,EAAO1hB,KAAKyF,QAAS,CAC3CsB,MAAOA,EACP+a,cAAc,MAMX/a,GAERgb,IAAK,SAAUL,EAAOM,EAAMjb,GAC3B,IAAIkb,EACHrU,EAAQ5N,KAAK4N,MAAO8T,GAIrB,GAAqB,iBAATM,EACXpU,EAAO2T,EAAWS,IAAWjb,OAM7B,IAAMkb,KAAQD,EACbpU,EAAO2T,EAAWU,IAAWD,EAAMC,GAGrC,OAAOrU,GAERpK,IAAK,SAAUke,EAAO7T,GACrB,YAAerI,IAARqI,EACN7N,KAAK4N,MAAO8T,GAGZA,EAAO1hB,KAAKyF,UAAaic,EAAO1hB,KAAKyF,SAAW8b,EAAW1T,KAE7D+S,OAAQ,SAAUc,EAAO7T,EAAK9G,GAa7B,YAAavB,IAARqI,GACCA,GAAsB,iBAARA,QAAgCrI,IAAVuB,EAElC/G,KAAKwD,IAAKke,EAAO7T,IASzB7N,KAAK+hB,IAAKL,EAAO7T,EAAK9G,QAILvB,IAAVuB,EAAsBA,EAAQ8G,IAEtCuP,OAAQ,SAAUsE,EAAO7T,GACxB,IAAI9L,EACH6L,EAAQ8T,EAAO1hB,KAAKyF,SAErB,QAAeD,IAAVoI,EAAL,CAIA,QAAapI,IAARqI,EAAoB,CAkBxB9L,GAXC8L,EAJIvI,MAAMC,QAASsI,GAIbA,EAAI5J,IAAKsd,IAEf1T,EAAM0T,EAAW1T,MAIJD,EACZ,CAAEC,GACAA,EAAIpB,MAAOkP,IAAmB,IAG1BxY,OAER,MAAQpB,WACA6L,EAAOC,EAAK9L,UAKRyD,IAARqI,GAAqBjL,EAAOuD,cAAeyH,MAM1C8T,EAAMtgB,SACVsgB,EAAO1hB,KAAKyF,cAAYD,SAEjBkc,EAAO1hB,KAAKyF,YAItByc,QAAS,SAAUR,GAClB,IAAI9T,EAAQ8T,EAAO1hB,KAAKyF,SACxB,YAAiBD,IAAVoI,IAAwBhL,EAAOuD,cAAeyH,KAGvD,IAAIuU,EAAW,IAAIR,EAEfS,EAAW,IAAIT,EAcfU,EAAS,gCACZC,EAAa,SA2Bd,SAASC,GAAUre,EAAM2J,EAAKmU,GAC7B,IAAIjd,EA1Baid,EA8BjB,QAAcxc,IAATwc,GAAwC,IAAlB9d,EAAK9C,SAI/B,GAHA2D,EAAO,QAAU8I,EAAIjI,QAAS0c,EAAY,OAAQlb,cAG7B,iBAFrB4a,EAAO9d,EAAK9B,aAAc2C,IAEM,CAC/B,IACCid,EAnCW,UADGA,EAoCEA,IA/BL,UAATA,IAIS,SAATA,EACG,KAIHA,KAAUA,EAAO,IACbA,EAGJK,EAAOjV,KAAM4U,GACVQ,KAAKC,MAAOT,GAGbA,GAeH,MAAQ5V,IAGVgW,EAASL,IAAK7d,EAAM2J,EAAKmU,QAEzBA,OAAOxc,EAGT,OAAOwc,EAGRpf,EAAOiC,OAAQ,CACdqd,QAAS,SAAUhe,GAClB,OAAOke,EAASF,QAAShe,IAAUie,EAASD,QAAShe,IAGtD8d,KAAM,SAAU9d,EAAMa,EAAMid,GAC3B,OAAOI,EAASxB,OAAQ1c,EAAMa,EAAMid,IAGrCU,WAAY,SAAUxe,EAAMa,GAC3Bqd,EAAShF,OAAQlZ,EAAMa,IAKxB4d,MAAO,SAAUze,EAAMa,EAAMid,GAC5B,OAAOG,EAASvB,OAAQ1c,EAAMa,EAAMid,IAGrCY,YAAa,SAAU1e,EAAMa,GAC5Bod,EAAS/E,OAAQlZ,EAAMa,MAIzBnC,EAAOG,GAAG8B,OAAQ,CACjBmd,KAAM,SAAUnU,EAAK9G,GACpB,IAAIhF,EAAGgD,EAAMid,EACZ9d,EAAOlE,KAAM,GACboO,EAAQlK,GAAQA,EAAKqF,WAGtB,QAAa/D,IAARqI,EAAoB,CACxB,GAAK7N,KAAKmD,SACT6e,EAAOI,EAAS5e,IAAKU,GAEE,IAAlBA,EAAK9C,WAAmB+gB,EAAS3e,IAAKU,EAAM,iBAAmB,CACnEnC,EAAIqM,EAAMjL,OACV,MAAQpB,IAIFqM,EAAOrM,IAEsB,KADjCgD,EAAOqJ,EAAOrM,GAAIgD,MACRtE,QAAS,WAClBsE,EAAOwc,EAAWxc,EAAKzE,MAAO,IAC9BiiB,GAAUre,EAAMa,EAAMid,EAAMjd,KAI/Bod,EAASJ,IAAK7d,EAAM,gBAAgB,GAItC,OAAO8d,EAIR,MAAoB,iBAARnU,EACJ7N,KAAK+D,KAAM,WACjBqe,EAASL,IAAK/hB,KAAM6N,KAIf+S,EAAQ5gB,KAAM,SAAU+G,GAC9B,IAAIib,EAOJ,GAAK9d,QAAkBsB,IAAVuB,EAKZ,YAAcvB,KADdwc,EAAOI,EAAS5e,IAAKU,EAAM2J,IAEnBmU,OAMMxc,KADdwc,EAAOO,GAAUre,EAAM2J,IAEfmU,OAIR,EAIDhiB,KAAK+D,KAAM,WAGVqe,EAASL,IAAK/hB,KAAM6N,EAAK9G,MAExB,KAAMA,EAA0B,EAAnB3C,UAAUjB,OAAY,MAAM,IAG7Cuf,WAAY,SAAU7U,GACrB,OAAO7N,KAAK+D,KAAM,WACjBqe,EAAShF,OAAQpd,KAAM6N,QAM1BjL,EAAOiC,OAAQ,CACdkY,MAAO,SAAU7Y,EAAM3C,EAAMygB,GAC5B,IAAIjF,EAEJ,GAAK7Y,EAYJ,OAXA3C,GAASA,GAAQ,MAAS,QAC1Bwb,EAAQoF,EAAS3e,IAAKU,EAAM3C,GAGvBygB,KACEjF,GAASzX,MAAMC,QAASyc,GAC7BjF,EAAQoF,EAASvB,OAAQ1c,EAAM3C,EAAMqB,EAAO0D,UAAW0b,IAEvDjF,EAAMvc,KAAMwhB,IAGPjF,GAAS,IAIlB8F,QAAS,SAAU3e,EAAM3C,GACxBA,EAAOA,GAAQ,KAEf,IAAIwb,EAAQna,EAAOma,MAAO7Y,EAAM3C,GAC/BuhB,EAAc/F,EAAM5Z,OACpBJ,EAAKga,EAAMhP,QACXgV,EAAQngB,EAAOogB,YAAa9e,EAAM3C,GAMvB,eAAPwB,IACJA,EAAKga,EAAMhP,QACX+U,KAGI/f,IAIU,OAATxB,GACJwb,EAAMzL,QAAS,qBAITyR,EAAME,KACblgB,EAAG/B,KAAMkD,EApBF,WACNtB,EAAOigB,QAAS3e,EAAM3C,IAmBFwhB,KAGhBD,GAAeC,GACpBA,EAAMxN,MAAM0H,QAKd+F,YAAa,SAAU9e,EAAM3C,GAC5B,IAAIsM,EAAMtM,EAAO,aACjB,OAAO4gB,EAAS3e,IAAKU,EAAM2J,IAASsU,EAASvB,OAAQ1c,EAAM2J,EAAK,CAC/D0H,MAAO3S,EAAO4Z,UAAW,eAAgBvB,IAAK,WAC7CkH,EAAS/E,OAAQlZ,EAAM,CAAE3C,EAAO,QAASsM,WAM7CjL,EAAOG,GAAG8B,OAAQ,CACjBkY,MAAO,SAAUxb,EAAMygB,GACtB,IAAIkB,EAAS,EAQb,MANqB,iBAAT3hB,IACXygB,EAAOzgB,EACPA,EAAO,KACP2hB,KAGI9e,UAAUjB,OAAS+f,EAChBtgB,EAAOma,MAAO/c,KAAM,GAAKuB,QAGjBiE,IAATwc,EACNhiB,KACAA,KAAK+D,KAAM,WACV,IAAIgZ,EAAQna,EAAOma,MAAO/c,KAAMuB,EAAMygB,GAGtCpf,EAAOogB,YAAahjB,KAAMuB,GAEZ,OAATA,GAAgC,eAAfwb,EAAO,IAC5Bna,EAAOigB,QAAS7iB,KAAMuB,MAI1BshB,QAAS,SAAUthB,GAClB,OAAOvB,KAAK+D,KAAM,WACjBnB,EAAOigB,QAAS7iB,KAAMuB,MAGxB4hB,WAAY,SAAU5hB,GACrB,OAAOvB,KAAK+c,MAAOxb,GAAQ,KAAM,KAKlC8a,QAAS,SAAU9a,EAAMJ,GACxB,IAAIkP,EACH+S,EAAQ,EACRC,EAAQzgB,EAAO4a,WACfhM,EAAWxR,KACX+B,EAAI/B,KAAKmD,OACT8Y,EAAU,aACCmH,GACTC,EAAMrE,YAAaxN,EAAU,CAAEA,KAIb,iBAATjQ,IACXJ,EAAMI,EACNA,OAAOiE,GAERjE,EAAOA,GAAQ,KAEf,MAAQQ,KACPsO,EAAM8R,EAAS3e,IAAKgO,EAAUzP,GAAKR,EAAO,gBAC9B8O,EAAIkF,QACf6N,IACA/S,EAAIkF,MAAM0F,IAAKgB,IAIjB,OADAA,IACOoH,EAAMhH,QAASlb,MAGxB,IAAImiB,GAAO,sCAA0CC,OAEjDC,GAAU,IAAI9Z,OAAQ,iBAAmB4Z,GAAO,cAAe,KAG/DG,GAAY,CAAE,MAAO,QAAS,SAAU,QAExCpU,GAAkBzP,EAASyP,gBAI1BqU,GAAa,SAAUxf,GACzB,OAAOtB,EAAOwF,SAAUlE,EAAK2I,cAAe3I,IAE7Cyf,GAAW,CAAEA,UAAU,GAOnBtU,GAAgBuU,cACpBF,GAAa,SAAUxf,GACtB,OAAOtB,EAAOwF,SAAUlE,EAAK2I,cAAe3I,IAC3CA,EAAK0f,YAAaD,MAAezf,EAAK2I,gBAG1C,IAAIgX,GAAqB,SAAU3f,EAAMgK,GAOvC,MAA8B,UAH9BhK,EAAOgK,GAAMhK,GAGD4f,MAAMC,SACM,KAAvB7f,EAAK4f,MAAMC,SAMXL,GAAYxf,IAEsB,SAAlCtB,EAAOohB,IAAK9f,EAAM,YAGjB+f,GAAO,SAAU/f,EAAMY,EAASd,EAAUiQ,GAC7C,IAAIrQ,EAAKmB,EACRmf,EAAM,GAGP,IAAMnf,KAAQD,EACbof,EAAKnf,GAASb,EAAK4f,MAAO/e,GAC1Bb,EAAK4f,MAAO/e,GAASD,EAASC,GAM/B,IAAMA,KAHNnB,EAAMI,EAASG,MAAOD,EAAM+P,GAAQ,IAGtBnP,EACbZ,EAAK4f,MAAO/e,GAASmf,EAAKnf,GAG3B,OAAOnB,GAMR,SAASugB,GAAWjgB,EAAM+d,EAAMmC,EAAYC,GAC3C,IAAIC,EAAUC,EACbC,EAAgB,GAChBC,EAAeJ,EACd,WACC,OAAOA,EAAM7V,OAEd,WACC,OAAO5L,EAAOohB,IAAK9f,EAAM+d,EAAM,KAEjCyC,EAAUD,IACVE,EAAOP,GAAcA,EAAY,KAASxhB,EAAOgiB,UAAW3C,GAAS,GAAK,MAG1E4C,EAAgB3gB,EAAK9C,WAClBwB,EAAOgiB,UAAW3C,IAAmB,OAAT0C,IAAkBD,IAChDlB,GAAQ1W,KAAMlK,EAAOohB,IAAK9f,EAAM+d,IAElC,GAAK4C,GAAiBA,EAAe,KAAQF,EAAO,CAInDD,GAAoB,EAGpBC,EAAOA,GAAQE,EAAe,GAG9BA,GAAiBH,GAAW,EAE5B,MAAQF,IAIP5hB,EAAOkhB,MAAO5f,EAAM+d,EAAM4C,EAAgBF,IACnC,EAAIJ,IAAY,GAAMA,EAAQE,IAAiBC,GAAW,MAAW,IAC3EF,EAAgB,GAEjBK,GAAgCN,EAIjCM,GAAgC,EAChCjiB,EAAOkhB,MAAO5f,EAAM+d,EAAM4C,EAAgBF,GAG1CP,EAAaA,GAAc,GAgB5B,OAbKA,IACJS,GAAiBA,IAAkBH,GAAW,EAG9CJ,EAAWF,EAAY,GACtBS,GAAkBT,EAAY,GAAM,GAAMA,EAAY,IACrDA,EAAY,GACTC,IACJA,EAAMM,KAAOA,EACbN,EAAM1Q,MAAQkR,EACdR,EAAM3f,IAAM4f,IAGPA,EAIR,IAAIQ,GAAoB,GAyBxB,SAASC,GAAUvT,EAAUwT,GAO5B,IANA,IAAIjB,EAAS7f,EAxBcA,EACvBoT,EACHxV,EACAkK,EACA+X,EAqBAkB,EAAS,GACTlK,EAAQ,EACR5X,EAASqO,EAASrO,OAGX4X,EAAQ5X,EAAQ4X,KACvB7W,EAAOsN,EAAUuJ,IACN+I,QAIXC,EAAU7f,EAAK4f,MAAMC,QAChBiB,GAKa,SAAZjB,IACJkB,EAAQlK,GAAUoH,EAAS3e,IAAKU,EAAM,YAAe,KAC/C+gB,EAAQlK,KACb7W,EAAK4f,MAAMC,QAAU,KAGK,KAAvB7f,EAAK4f,MAAMC,SAAkBF,GAAoB3f,KACrD+gB,EAAQlK,IA7CVgJ,EAFAjiB,EADGwV,OAAAA,EACHxV,GAF0BoC,EAiDaA,GA/C5B2I,cACXb,EAAW9H,EAAK8H,UAChB+X,EAAUe,GAAmB9Y,MAM9BsL,EAAOxV,EAAIojB,KAAK3iB,YAAaT,EAAII,cAAe8J,IAChD+X,EAAUnhB,EAAOohB,IAAK1M,EAAM,WAE5BA,EAAK9U,WAAWC,YAAa6U,GAEZ,SAAZyM,IACJA,EAAU,SAEXe,GAAmB9Y,GAAa+X,MAkCb,SAAZA,IACJkB,EAAQlK,GAAU,OAGlBoH,EAASJ,IAAK7d,EAAM,UAAW6f,KAMlC,IAAMhJ,EAAQ,EAAGA,EAAQ5X,EAAQ4X,IACR,MAAnBkK,EAAQlK,KACZvJ,EAAUuJ,GAAQ+I,MAAMC,QAAUkB,EAAQlK,IAI5C,OAAOvJ,EAGR5O,EAAOG,GAAG8B,OAAQ,CACjBmgB,KAAM,WACL,OAAOD,GAAU/kB,MAAM,IAExBmlB,KAAM,WACL,OAAOJ,GAAU/kB,OAElBolB,OAAQ,SAAUzH,GACjB,MAAsB,kBAAVA,EACJA,EAAQ3d,KAAKglB,OAAShlB,KAAKmlB,OAG5BnlB,KAAK+D,KAAM,WACZ8f,GAAoB7jB,MACxB4C,EAAQ5C,MAAOglB,OAEfpiB,EAAQ5C,MAAOmlB,YAKnB,IAAIE,GAAiB,wBAEjBC,GAAW,iCAEXC,GAAc,qCAKdC,GAAU,CAGbC,OAAQ,CAAE,EAAG,+BAAgC,aAK7CC,MAAO,CAAE,EAAG,UAAW,YACvBC,IAAK,CAAE,EAAG,oBAAqB,uBAC/BC,GAAI,CAAE,EAAG,iBAAkB,oBAC3BC,GAAI,CAAE,EAAG,qBAAsB,yBAE/BC,SAAU,CAAE,EAAG,GAAI,KAUpB,SAASC,GAAQjjB,EAASsN,GAIzB,IAAIxM,EAYJ,OATCA,EAD4C,oBAAjCd,EAAQmK,qBACbnK,EAAQmK,qBAAsBmD,GAAO,KAEI,oBAA7BtN,EAAQ0K,iBACpB1K,EAAQ0K,iBAAkB4C,GAAO,KAGjC,QAGM5K,IAAR4K,GAAqBA,GAAOpE,EAAUlJ,EAASsN,GAC5CxN,EAAOiB,MAAO,CAAEf,GAAWc,GAG5BA,EAKR,SAASoiB,GAAeriB,EAAOsiB,GAI9B,IAHA,IAAIlkB,EAAI,EACP8Y,EAAIlX,EAAMR,OAEHpB,EAAI8Y,EAAG9Y,IACdogB,EAASJ,IACRpe,EAAO5B,GACP,cACCkkB,GAAe9D,EAAS3e,IAAKyiB,EAAalkB,GAAK,eAvCnDyjB,GAAQU,SAAWV,GAAQC,OAE3BD,GAAQW,MAAQX,GAAQY,MAAQZ,GAAQa,SAAWb,GAAQc,QAAUd,GAAQE,MAC7EF,GAAQe,GAAKf,GAAQK,GA0CrB,IA8FEW,GACAjW,GA/FE9F,GAAQ,YAEZ,SAASgc,GAAe9iB,EAAOb,EAAS4jB,EAASC,EAAWC,GAO3D,IANA,IAAI1iB,EAAMmM,EAAKD,EAAKyW,EAAMC,EAAUriB,EACnCsiB,EAAWjkB,EAAQkkB,yBACnBC,EAAQ,GACRllB,EAAI,EACJ8Y,EAAIlX,EAAMR,OAEHpB,EAAI8Y,EAAG9Y,IAGd,IAFAmC,EAAOP,EAAO5B,KAEQ,IAATmC,EAGZ,GAAwB,WAAnBxB,EAAQwB,GAIZtB,EAAOiB,MAAOojB,EAAO/iB,EAAK9C,SAAW,CAAE8C,GAASA,QAG1C,GAAMuG,GAAM2C,KAAMlJ,GAIlB,CACNmM,EAAMA,GAAO0W,EAASxkB,YAAaO,EAAQZ,cAAe,QAG1DkO,GAAQkV,GAASxY,KAAM5I,IAAU,CAAE,GAAI,KAAQ,GAAIkD,cACnDyf,EAAOrB,GAASpV,IAASoV,GAAQM,SACjCzV,EAAIC,UAAYuW,EAAM,GAAMjkB,EAAOskB,cAAehjB,GAAS2iB,EAAM,GAGjEpiB,EAAIoiB,EAAM,GACV,MAAQpiB,IACP4L,EAAMA,EAAIyD,UAKXlR,EAAOiB,MAAOojB,EAAO5W,EAAIlE,aAGzBkE,EAAM0W,EAAS7U,YAGXD,YAAc,QAzBlBgV,EAAMzmB,KAAMsC,EAAQqkB,eAAgBjjB,IA+BvC6iB,EAAS9U,YAAc,GAEvBlQ,EAAI,EACJ,MAAUmC,EAAO+iB,EAAOllB,KAGvB,GAAK4kB,IAAkD,EAArC/jB,EAAO4D,QAAStC,EAAMyiB,GAClCC,GACJA,EAAQpmB,KAAM0D,QAgBhB,GAXA4iB,EAAWpD,GAAYxf,GAGvBmM,EAAM0V,GAAQgB,EAASxkB,YAAa2B,GAAQ,UAGvC4iB,GACJd,GAAe3V,GAIXqW,EAAU,CACdjiB,EAAI,EACJ,MAAUP,EAAOmM,EAAK5L,KAChB8gB,GAAYnY,KAAMlJ,EAAK3C,MAAQ,KACnCmlB,EAAQlmB,KAAM0D,GAMlB,OAAO6iB,EAMNP,GADc5mB,EAASonB,yBACRzkB,YAAa3C,EAASsC,cAAe,SACpDqO,GAAQ3Q,EAASsC,cAAe,UAM3BG,aAAc,OAAQ,SAC5BkO,GAAMlO,aAAc,UAAW,WAC/BkO,GAAMlO,aAAc,OAAQ,KAE5BmkB,GAAIjkB,YAAagO,IAIjBtP,EAAQmmB,WAAaZ,GAAIa,WAAW,GAAOA,WAAW,GAAOvT,UAAUsB,QAIvEoR,GAAIlW,UAAY,yBAChBrP,EAAQqmB,iBAAmBd,GAAIa,WAAW,GAAOvT,UAAUuF,aAI5D,IACCkO,GAAY,OACZC,GAAc,iDACdC,GAAiB,sBAElB,SAASC,KACR,OAAO,EAGR,SAASC,KACR,OAAO,EASR,SAASC,GAAY1jB,EAAM3C,GAC1B,OAAS2C,IAMV,WACC,IACC,OAAOtE,EAASmV,cACf,MAAQ8S,KATQC,KAAqC,UAATvmB,GAY/C,SAASwmB,GAAI7jB,EAAM8jB,EAAOnlB,EAAUmf,EAAMjf,EAAIklB,GAC7C,IAAIC,EAAQ3mB,EAGZ,GAAsB,iBAAVymB,EAAqB,CAShC,IAAMzmB,IANmB,iBAAbsB,IAGXmf,EAAOA,GAAQnf,EACfA,OAAW2C,GAEEwiB,EACbD,GAAI7jB,EAAM3C,EAAMsB,EAAUmf,EAAMgG,EAAOzmB,GAAQ0mB,GAEhD,OAAO/jB,EAsBR,GAnBa,MAAR8d,GAAsB,MAANjf,GAGpBA,EAAKF,EACLmf,EAAOnf,OAAW2C,GACD,MAANzC,IACc,iBAAbF,GAGXE,EAAKif,EACLA,OAAOxc,IAIPzC,EAAKif,EACLA,EAAOnf,EACPA,OAAW2C,KAGD,IAAPzC,EACJA,EAAK4kB,QACC,IAAM5kB,EACZ,OAAOmB,EAeR,OAZa,IAAR+jB,IACJC,EAASnlB,GACTA,EAAK,SAAUolB,GAId,OADAvlB,IAASwlB,IAAKD,GACPD,EAAO/jB,MAAOnE,KAAMoE,aAIzB4C,KAAOkhB,EAAOlhB,OAAUkhB,EAAOlhB,KAAOpE,EAAOoE,SAE1C9C,EAAKH,KAAM,WACjBnB,EAAOulB,MAAMlN,IAAKjb,KAAMgoB,EAAOjlB,EAAIif,EAAMnf,KA4a3C,SAASwlB,GAAgBna,EAAI3M,EAAMqmB,GAG5BA,GAQNzF,EAASJ,IAAK7T,EAAI3M,GAAM,GACxBqB,EAAOulB,MAAMlN,IAAK/M,EAAI3M,EAAM,CAC3B4N,WAAW,EACXd,QAAS,SAAU8Z,GAClB,IAAIG,EAAUpV,EACbqV,EAAQpG,EAAS3e,IAAKxD,KAAMuB,GAE7B,GAAyB,EAAlB4mB,EAAMK,WAAmBxoB,KAAMuB,IAKrC,GAAMgnB,EAAMplB,QAiCEP,EAAOulB,MAAMxJ,QAASpd,IAAU,IAAKknB,cAClDN,EAAMO,uBAfN,GAdAH,EAAQjoB,EAAMU,KAAMoD,WACpB+d,EAASJ,IAAK/hB,KAAMuB,EAAMgnB,GAK1BD,EAAWV,EAAY5nB,KAAMuB,GAC7BvB,KAAMuB,KAEDgnB,KADLrV,EAASiP,EAAS3e,IAAKxD,KAAMuB,KACJ+mB,EACxBnG,EAASJ,IAAK/hB,KAAMuB,GAAM,GAE1B2R,EAAS,GAELqV,IAAUrV,EAKd,OAFAiV,EAAMQ,2BACNR,EAAMS,iBACC1V,EAAOnM,WAeLwhB,EAAMplB,SAGjBgf,EAASJ,IAAK/hB,KAAMuB,EAAM,CACzBwF,MAAOnE,EAAOulB,MAAMU,QAInBjmB,EAAOiC,OAAQ0jB,EAAO,GAAK3lB,EAAOkmB,MAAM1lB,WACxCmlB,EAAMjoB,MAAO,GACbN,QAKFmoB,EAAMQ,qCAzE0BnjB,IAA7B2c,EAAS3e,IAAK0K,EAAI3M,IACtBqB,EAAOulB,MAAMlN,IAAK/M,EAAI3M,EAAMmmB,IAza/B9kB,EAAOulB,MAAQ,CAEd3oB,OAAQ,GAERyb,IAAK,SAAU/W,EAAM8jB,EAAO3Z,EAAS2T,EAAMnf,GAE1C,IAAIkmB,EAAaC,EAAa3Y,EAC7B4Y,EAAQC,EAAGC,EACXxK,EAASyK,EAAU7nB,EAAM8nB,EAAYC,EACrCC,EAAWpH,EAAS3e,IAAKU,GAG1B,GAAMqlB,EAAN,CAKKlb,EAAQA,UAEZA,GADA0a,EAAc1a,GACQA,QACtBxL,EAAWkmB,EAAYlmB,UAKnBA,GACJD,EAAOsN,KAAKM,gBAAiBnB,GAAiBxM,GAIzCwL,EAAQrH,OACbqH,EAAQrH,KAAOpE,EAAOoE,SAIfiiB,EAASM,EAASN,UACzBA,EAASM,EAASN,OAAS,KAEpBD,EAAcO,EAASC,UAC9BR,EAAcO,EAASC,OAAS,SAAUpd,GAIzC,MAAyB,oBAAXxJ,GAA0BA,EAAOulB,MAAMsB,YAAcrd,EAAE7K,KACpEqB,EAAOulB,MAAMuB,SAASvlB,MAAOD,EAAME,gBAAcoB,IAMpD0jB,GADAlB,GAAUA,GAAS,IAAKvb,MAAOkP,IAAmB,CAAE,KAC1CxY,OACV,MAAQ+lB,IAEP3nB,EAAO+nB,GADPjZ,EAAMoX,GAAe3a,KAAMkb,EAAOkB,KAAS,IACpB,GACvBG,GAAehZ,EAAK,IAAO,IAAKlJ,MAAO,KAAMxC,OAGvCpD,IAKNod,EAAU/b,EAAOulB,MAAMxJ,QAASpd,IAAU,GAG1CA,GAASsB,EAAW8b,EAAQ8J,aAAe9J,EAAQgL,WAAcpoB,EAGjEod,EAAU/b,EAAOulB,MAAMxJ,QAASpd,IAAU,GAG1C4nB,EAAYvmB,EAAOiC,OAAQ,CAC1BtD,KAAMA,EACN+nB,SAAUA,EACVtH,KAAMA,EACN3T,QAASA,EACTrH,KAAMqH,EAAQrH,KACdnE,SAAUA,EACV2H,aAAc3H,GAAYD,EAAO2O,KAAK9E,MAAMjC,aAAa4C,KAAMvK,GAC/DsM,UAAWka,EAAW/b,KAAM,MAC1Byb,IAGKK,EAAWH,EAAQ1nB,OAC1B6nB,EAAWH,EAAQ1nB,GAAS,IACnBqoB,cAAgB,EAGnBjL,EAAQkL,QACiD,IAA9DlL,EAAQkL,MAAM7oB,KAAMkD,EAAM8d,EAAMqH,EAAYL,IAEvC9kB,EAAKwL,kBACTxL,EAAKwL,iBAAkBnO,EAAMynB,IAK3BrK,EAAQ1D,MACZ0D,EAAQ1D,IAAIja,KAAMkD,EAAMilB,GAElBA,EAAU9a,QAAQrH,OACvBmiB,EAAU9a,QAAQrH,KAAOqH,EAAQrH,OAK9BnE,EACJumB,EAASxkB,OAAQwkB,EAASQ,gBAAiB,EAAGT,GAE9CC,EAAS5oB,KAAM2oB,GAIhBvmB,EAAOulB,MAAM3oB,OAAQ+B,IAAS,KAMhC6b,OAAQ,SAAUlZ,EAAM8jB,EAAO3Z,EAASxL,EAAUinB,GAEjD,IAAIrlB,EAAGslB,EAAW1Z,EACjB4Y,EAAQC,EAAGC,EACXxK,EAASyK,EAAU7nB,EAAM8nB,EAAYC,EACrCC,EAAWpH,EAASD,QAAShe,IAAUie,EAAS3e,IAAKU,GAEtD,GAAMqlB,IAAeN,EAASM,EAASN,QAAvC,CAMAC,GADAlB,GAAUA,GAAS,IAAKvb,MAAOkP,IAAmB,CAAE,KAC1CxY,OACV,MAAQ+lB,IAMP,GAJA3nB,EAAO+nB,GADPjZ,EAAMoX,GAAe3a,KAAMkb,EAAOkB,KAAS,IACpB,GACvBG,GAAehZ,EAAK,IAAO,IAAKlJ,MAAO,KAAMxC,OAGvCpD,EAAN,CAOAod,EAAU/b,EAAOulB,MAAMxJ,QAASpd,IAAU,GAE1C6nB,EAAWH,EADX1nB,GAASsB,EAAW8b,EAAQ8J,aAAe9J,EAAQgL,WAAcpoB,IACpC,GAC7B8O,EAAMA,EAAK,IACV,IAAI3G,OAAQ,UAAY2f,EAAW/b,KAAM,iBAAoB,WAG9Dyc,EAAYtlB,EAAI2kB,EAASjmB,OACzB,MAAQsB,IACP0kB,EAAYC,EAAU3kB,IAEfqlB,GAAeR,IAAaH,EAAUG,UACzCjb,GAAWA,EAAQrH,OAASmiB,EAAUniB,MACtCqJ,IAAOA,EAAIjD,KAAM+b,EAAUha,YAC3BtM,GAAYA,IAAasmB,EAAUtmB,WACxB,OAAbA,IAAqBsmB,EAAUtmB,YAChCumB,EAASxkB,OAAQH,EAAG,GAEf0kB,EAAUtmB,UACdumB,EAASQ,gBAELjL,EAAQvB,QACZuB,EAAQvB,OAAOpc,KAAMkD,EAAMilB,IAOzBY,IAAcX,EAASjmB,SACrBwb,EAAQqL,WACkD,IAA/DrL,EAAQqL,SAAShpB,KAAMkD,EAAMmlB,EAAYE,EAASC,SAElD5mB,EAAOqnB,YAAa/lB,EAAM3C,EAAMgoB,EAASC,eAGnCP,EAAQ1nB,SA1Cf,IAAMA,KAAQ0nB,EACbrmB,EAAOulB,MAAM/K,OAAQlZ,EAAM3C,EAAOymB,EAAOkB,GAAK7a,EAASxL,GAAU,GA8C/DD,EAAOuD,cAAe8iB,IAC1B9G,EAAS/E,OAAQlZ,EAAM,mBAIzBwlB,SAAU,SAAUQ,GAGnB,IAEInoB,EAAG0C,EAAGb,EAAKwQ,EAAS+U,EAAWgB,EAF/BhC,EAAQvlB,EAAOulB,MAAMiC,IAAKF,GAG7BjW,EAAO,IAAI3O,MAAOlB,UAAUjB,QAC5BimB,GAAajH,EAAS3e,IAAKxD,KAAM,WAAc,IAAMmoB,EAAM5mB,OAAU,GACrEod,EAAU/b,EAAOulB,MAAMxJ,QAASwJ,EAAM5mB,OAAU,GAKjD,IAFA0S,EAAM,GAAMkU,EAENpmB,EAAI,EAAGA,EAAIqC,UAAUjB,OAAQpB,IAClCkS,EAAMlS,GAAMqC,UAAWrC,GAMxB,GAHAomB,EAAMkC,eAAiBrqB,MAGlB2e,EAAQ2L,cAA2D,IAA5C3L,EAAQ2L,YAAYtpB,KAAMhB,KAAMmoB,GAA5D,CAKAgC,EAAevnB,EAAOulB,MAAMiB,SAASpoB,KAAMhB,KAAMmoB,EAAOiB,GAGxDrnB,EAAI,EACJ,OAAUqS,EAAU+V,EAAcpoB,QAAYomB,EAAMoC,uBAAyB,CAC5EpC,EAAMqC,cAAgBpW,EAAQlQ,KAE9BO,EAAI,EACJ,OAAU0kB,EAAY/U,EAAQgV,SAAU3kB,QACtC0jB,EAAMsC,gCAIDtC,EAAMuC,aAAsC,IAAxBvB,EAAUha,YACnCgZ,EAAMuC,WAAWtd,KAAM+b,EAAUha,aAEjCgZ,EAAMgB,UAAYA,EAClBhB,EAAMnG,KAAOmH,EAAUnH,UAKVxc,KAHb5B,IAAUhB,EAAOulB,MAAMxJ,QAASwK,EAAUG,WAAc,IAAKE,QAC5DL,EAAU9a,SAAUlK,MAAOiQ,EAAQlQ,KAAM+P,MAGT,KAAzBkU,EAAMjV,OAAStP,KACrBukB,EAAMS,iBACNT,EAAMO,oBAYX,OAJK/J,EAAQgM,cACZhM,EAAQgM,aAAa3pB,KAAMhB,KAAMmoB,GAG3BA,EAAMjV,SAGdkW,SAAU,SAAUjB,EAAOiB,GAC1B,IAAIrnB,EAAGonB,EAAWvX,EAAKgZ,EAAiBC,EACvCV,EAAe,GACfP,EAAgBR,EAASQ,cACzBpb,EAAM2Z,EAAMhjB,OAGb,GAAKykB,GAIJpb,EAAIpN,YAOc,UAAf+mB,EAAM5mB,MAAoC,GAAhB4mB,EAAM1S,QAEnC,KAAQjH,IAAQxO,KAAMwO,EAAMA,EAAIhM,YAAcxC,KAI7C,GAAsB,IAAjBwO,EAAIpN,WAAoC,UAAf+mB,EAAM5mB,OAAqC,IAAjBiN,EAAIzC,UAAsB,CAGjF,IAFA6e,EAAkB,GAClBC,EAAmB,GACb9oB,EAAI,EAAGA,EAAI6nB,EAAe7nB,SAMEyD,IAA5BqlB,EAFLjZ,GAHAuX,EAAYC,EAAUrnB,IAGNc,SAAW,OAG1BgoB,EAAkBjZ,GAAQuX,EAAU3e,cACC,EAApC5H,EAAQgP,EAAK5R,MAAO+a,MAAOvM,GAC3B5L,EAAOsN,KAAM0B,EAAK5R,KAAM,KAAM,CAAEwO,IAAQrL,QAErC0nB,EAAkBjZ,IACtBgZ,EAAgBpqB,KAAM2oB,GAGnByB,EAAgBznB,QACpBgnB,EAAa3pB,KAAM,CAAE0D,KAAMsK,EAAK4a,SAAUwB,IAY9C,OALApc,EAAMxO,KACD4pB,EAAgBR,EAASjmB,QAC7BgnB,EAAa3pB,KAAM,CAAE0D,KAAMsK,EAAK4a,SAAUA,EAAS9oB,MAAOspB,KAGpDO,GAGRW,QAAS,SAAU/lB,EAAMgmB,GACxB3qB,OAAOyhB,eAAgBjf,EAAOkmB,MAAM1lB,UAAW2B,EAAM,CACpDimB,YAAY,EACZlJ,cAAc,EAEdte,IAAKtC,EAAY6pB,GAChB,WACC,GAAK/qB,KAAKirB,cACR,OAAOF,EAAM/qB,KAAKirB,gBAGrB,WACC,GAAKjrB,KAAKirB,cACR,OAAOjrB,KAAKirB,cAAelmB,IAI/Bgd,IAAK,SAAUhb,GACd3G,OAAOyhB,eAAgB7hB,KAAM+E,EAAM,CAClCimB,YAAY,EACZlJ,cAAc,EACdoJ,UAAU,EACVnkB,MAAOA,QAMXqjB,IAAK,SAAUa,GACd,OAAOA,EAAeroB,EAAO6C,SAC5BwlB,EACA,IAAIroB,EAAOkmB,MAAOmC,IAGpBtM,QAAS,CACRwM,KAAM,CAGLC,UAAU,GAEXC,MAAO,CAGNxB,MAAO,SAAU7H,GAIhB,IAAI9T,EAAKlO,MAAQgiB,EAWjB,OARKqD,GAAejY,KAAMc,EAAG3M,OAC5B2M,EAAGmd,OAASrf,EAAUkC,EAAI,UAG1Bma,GAAgBna,EAAI,QAASwZ,KAIvB,GAERmB,QAAS,SAAU7G,GAIlB,IAAI9T,EAAKlO,MAAQgiB,EAUjB,OAPKqD,GAAejY,KAAMc,EAAG3M,OAC5B2M,EAAGmd,OAASrf,EAAUkC,EAAI,UAE1Bma,GAAgBna,EAAI,UAId,GAKR4X,SAAU,SAAUqC,GACnB,IAAIhjB,EAASgjB,EAAMhjB,OACnB,OAAOkgB,GAAejY,KAAMjI,EAAO5D,OAClC4D,EAAOkmB,OAASrf,EAAU7G,EAAQ,UAClCgd,EAAS3e,IAAK2B,EAAQ,UACtB6G,EAAU7G,EAAQ,OAIrBmmB,aAAc,CACbX,aAAc,SAAUxC,QAID3iB,IAAjB2iB,EAAMjV,QAAwBiV,EAAM8C,gBACxC9C,EAAM8C,cAAcM,YAAcpD,EAAMjV,YA8F7CtQ,EAAOqnB,YAAc,SAAU/lB,EAAM3C,EAAMioB,GAGrCtlB,EAAKqc,qBACTrc,EAAKqc,oBAAqBhf,EAAMioB,IAIlC5mB,EAAOkmB,MAAQ,SAAUtnB,EAAKgqB,GAG7B,KAAQxrB,gBAAgB4C,EAAOkmB,OAC9B,OAAO,IAAIlmB,EAAOkmB,MAAOtnB,EAAKgqB,GAI1BhqB,GAAOA,EAAID,MACfvB,KAAKirB,cAAgBzpB,EACrBxB,KAAKuB,KAAOC,EAAID,KAIhBvB,KAAKyrB,mBAAqBjqB,EAAIkqB,uBACHlmB,IAAzBhE,EAAIkqB,mBAGgB,IAApBlqB,EAAI+pB,YACL7D,GACAC,GAKD3nB,KAAKmF,OAAW3D,EAAI2D,QAAkC,IAAxB3D,EAAI2D,OAAO/D,SACxCI,EAAI2D,OAAO3C,WACXhB,EAAI2D,OAELnF,KAAKwqB,cAAgBhpB,EAAIgpB,cACzBxqB,KAAK2rB,cAAgBnqB,EAAImqB,eAIzB3rB,KAAKuB,KAAOC,EAIRgqB,GACJ5oB,EAAOiC,OAAQ7E,KAAMwrB,GAItBxrB,KAAK4rB,UAAYpqB,GAAOA,EAAIoqB,WAAavjB,KAAKwjB,MAG9C7rB,KAAM4C,EAAO6C,UAAY,GAK1B7C,EAAOkmB,MAAM1lB,UAAY,CACxBE,YAAaV,EAAOkmB,MACpB2C,mBAAoB9D,GACpB4C,qBAAsB5C,GACtB8C,8BAA+B9C,GAC/BmE,aAAa,EAEblD,eAAgB,WACf,IAAIxc,EAAIpM,KAAKirB,cAEbjrB,KAAKyrB,mBAAqB/D,GAErBtb,IAAMpM,KAAK8rB,aACf1f,EAAEwc,kBAGJF,gBAAiB,WAChB,IAAItc,EAAIpM,KAAKirB,cAEbjrB,KAAKuqB,qBAAuB7C,GAEvBtb,IAAMpM,KAAK8rB,aACf1f,EAAEsc,mBAGJC,yBAA0B,WACzB,IAAIvc,EAAIpM,KAAKirB,cAEbjrB,KAAKyqB,8BAAgC/C,GAEhCtb,IAAMpM,KAAK8rB,aACf1f,EAAEuc,2BAGH3oB,KAAK0oB,oBAKP9lB,EAAOmB,KAAM,CACZgoB,QAAQ,EACRC,SAAS,EACTC,YAAY,EACZC,gBAAgB,EAChBC,SAAS,EACTC,QAAQ,EACRC,YAAY,EACZC,SAAS,EACTC,OAAO,EACPC,OAAO,EACPC,UAAU,EACVC,MAAM,EACNC,QAAQ,EACR/qB,MAAM,EACNgrB,UAAU,EACV/e,KAAK,EACLgf,SAAS,EACTpX,QAAQ,EACRqX,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,SAAS,EACTC,WAAW,EACXC,aAAa,EACbC,SAAS,EACTC,SAAS,EACTC,eAAe,EACfC,WAAW,EACXC,SAAS,EAETC,MAAO,SAAUvF,GAChB,IAAI1S,EAAS0S,EAAM1S,OAGnB,OAAoB,MAAf0S,EAAMuF,OAAiBnG,GAAUna,KAAM+a,EAAM5mB,MACxB,MAAlB4mB,EAAMyE,SAAmBzE,EAAMyE,SAAWzE,EAAM0E,SAIlD1E,EAAMuF,YAAoBloB,IAAXiQ,GAAwB+R,GAAYpa,KAAM+a,EAAM5mB,MACtD,EAATkU,EACG,EAGM,EAATA,EACG,EAGM,EAATA,EACG,EAGD,EAGD0S,EAAMuF,QAEZ9qB,EAAOulB,MAAM2C,SAEhBloB,EAAOmB,KAAM,CAAE+Q,MAAO,UAAW6Y,KAAM,YAAc,SAAUpsB,EAAMknB,GACpE7lB,EAAOulB,MAAMxJ,QAASpd,GAAS,CAG9BsoB,MAAO,WAQN,OAHAxB,GAAgBroB,KAAMuB,EAAMqmB,KAGrB,GAERiB,QAAS,WAMR,OAHAR,GAAgBroB,KAAMuB,IAGf,GAGRknB,aAAcA,KAYhB7lB,EAAOmB,KAAM,CACZ6pB,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,cACZ,SAAUC,EAAM5D,GAClBxnB,EAAOulB,MAAMxJ,QAASqP,GAAS,CAC9BvF,aAAc2B,EACdT,SAAUS,EAEVZ,OAAQ,SAAUrB,GACjB,IAAIvkB,EAEHqqB,EAAU9F,EAAMwD,cAChBxC,EAAYhB,EAAMgB,UASnB,OALM8E,IAAaA,IANTjuB,MAMgC4C,EAAOwF,SANvCpI,KAMyDiuB,MAClE9F,EAAM5mB,KAAO4nB,EAAUG,SACvB1lB,EAAMulB,EAAU9a,QAAQlK,MAAOnE,KAAMoE,WACrC+jB,EAAM5mB,KAAO6oB,GAEPxmB,MAKVhB,EAAOG,GAAG8B,OAAQ,CAEjBkjB,GAAI,SAAUC,EAAOnlB,EAAUmf,EAAMjf,GACpC,OAAOglB,GAAI/nB,KAAMgoB,EAAOnlB,EAAUmf,EAAMjf,IAEzCklB,IAAK,SAAUD,EAAOnlB,EAAUmf,EAAMjf,GACrC,OAAOglB,GAAI/nB,KAAMgoB,EAAOnlB,EAAUmf,EAAMjf,EAAI,IAE7CqlB,IAAK,SAAUJ,EAAOnlB,EAAUE,GAC/B,IAAIomB,EAAW5nB,EACf,GAAKymB,GAASA,EAAMY,gBAAkBZ,EAAMmB,UAW3C,OARAA,EAAYnB,EAAMmB,UAClBvmB,EAAQolB,EAAMqC,gBAAiBjC,IAC9Be,EAAUha,UACTga,EAAUG,SAAW,IAAMH,EAAUha,UACrCga,EAAUG,SACXH,EAAUtmB,SACVsmB,EAAU9a,SAEJrO,KAER,GAAsB,iBAAVgoB,EAAqB,CAGhC,IAAMzmB,KAAQymB,EACbhoB,KAAKooB,IAAK7mB,EAAMsB,EAAUmlB,EAAOzmB,IAElC,OAAOvB,KAWR,OATkB,IAAb6C,GAA0C,mBAAbA,IAGjCE,EAAKF,EACLA,OAAW2C,IAEA,IAAPzC,IACJA,EAAK4kB,IAEC3nB,KAAK+D,KAAM,WACjBnB,EAAOulB,MAAM/K,OAAQpd,KAAMgoB,EAAOjlB,EAAIF,QAMzC,IAKCqrB,GAAY,8FAOZC,GAAe,wBAGfC,GAAW,oCACXC,GAAe,2CAGhB,SAASC,GAAoBpqB,EAAMuX,GAClC,OAAKzP,EAAU9H,EAAM,UACpB8H,EAA+B,KAArByP,EAAQra,SAAkBqa,EAAUA,EAAQvJ,WAAY,OAE3DtP,EAAQsB,GAAOsW,SAAU,SAAW,IAGrCtW,EAIR,SAASqqB,GAAerqB,GAEvB,OADAA,EAAK3C,MAAyC,OAAhC2C,EAAK9B,aAAc,SAAsB,IAAM8B,EAAK3C,KAC3D2C,EAER,SAASsqB,GAAetqB,GAOvB,MAN2C,WAApCA,EAAK3C,MAAQ,IAAKjB,MAAO,EAAG,GAClC4D,EAAK3C,KAAO2C,EAAK3C,KAAKjB,MAAO,GAE7B4D,EAAKwJ,gBAAiB,QAGhBxJ,EAGR,SAASuqB,GAAgBjtB,EAAKktB,GAC7B,IAAI3sB,EAAG8Y,EAAGtZ,EAAMotB,EAAUC,EAAUC,EAAUC,EAAU7F,EAExD,GAAuB,IAAlByF,EAAKttB,SAAV,CAKA,GAAK+gB,EAASD,QAAS1gB,KACtBmtB,EAAWxM,EAASvB,OAAQpf,GAC5BotB,EAAWzM,EAASJ,IAAK2M,EAAMC,GAC/B1F,EAAS0F,EAAS1F,QAMjB,IAAM1nB,YAHCqtB,EAASpF,OAChBoF,EAAS3F,OAAS,GAEJA,EACb,IAAMlnB,EAAI,EAAG8Y,EAAIoO,EAAQ1nB,GAAO4B,OAAQpB,EAAI8Y,EAAG9Y,IAC9Ca,EAAOulB,MAAMlN,IAAKyT,EAAMntB,EAAM0nB,EAAQ1nB,GAAQQ,IAO7CqgB,EAASF,QAAS1gB,KACtBqtB,EAAWzM,EAASxB,OAAQpf,GAC5BstB,EAAWlsB,EAAOiC,OAAQ,GAAIgqB,GAE9BzM,EAASL,IAAK2M,EAAMI,KAkBtB,SAASC,GAAUC,EAAY/a,EAAMjQ,EAAU4iB,GAG9C3S,EAAO1T,EAAO4D,MAAO,GAAI8P,GAEzB,IAAI8S,EAAU1iB,EAAOqiB,EAASuI,EAAYptB,EAAMC,EAC/CC,EAAI,EACJ8Y,EAAImU,EAAW7rB,OACf+rB,EAAWrU,EAAI,EACf9T,EAAQkN,EAAM,GACdkb,EAAkBjuB,EAAY6F,GAG/B,GAAKooB,GACG,EAAJtU,GAA0B,iBAAV9T,IAChB9F,EAAQmmB,YAAcgH,GAAShhB,KAAMrG,GACxC,OAAOioB,EAAWjrB,KAAM,SAAUgX,GACjC,IAAIb,EAAO8U,EAAW1qB,GAAIyW,GACrBoU,IACJlb,EAAM,GAAMlN,EAAM/F,KAAMhB,KAAM+a,EAAOb,EAAKkV,SAE3CL,GAAU7U,EAAMjG,EAAMjQ,EAAU4iB,KAIlC,GAAK/L,IAEJxW,GADA0iB,EAAWN,GAAexS,EAAM+a,EAAY,GAAIniB,eAAe,EAAOmiB,EAAYpI,IACjE1U,WAEmB,IAA/B6U,EAAS5a,WAAWhJ,SACxB4jB,EAAW1iB,GAIPA,GAASuiB,GAAU,CAOvB,IALAqI,GADAvI,EAAU9jB,EAAOqB,IAAK8hB,GAAQgB,EAAU,UAAYwH,KAC/BprB,OAKbpB,EAAI8Y,EAAG9Y,IACdF,EAAOklB,EAEFhlB,IAAMmtB,IACVrtB,EAAOe,EAAOsC,MAAOrD,GAAM,GAAM,GAG5BotB,GAIJrsB,EAAOiB,MAAO6iB,EAASX,GAAQlkB,EAAM,YAIvCmC,EAAShD,KAAMguB,EAAYjtB,GAAKF,EAAME,GAGvC,GAAKktB,EAOJ,IANAntB,EAAM4kB,EAASA,EAAQvjB,OAAS,GAAI0J,cAGpCjK,EAAOqB,IAAKyiB,EAAS8H,IAGfzsB,EAAI,EAAGA,EAAIktB,EAAYltB,IAC5BF,EAAO6kB,EAAS3kB,GACXwjB,GAAYnY,KAAMvL,EAAKN,MAAQ,MAClC4gB,EAASvB,OAAQ/e,EAAM,eACxBe,EAAOwF,SAAUtG,EAAKD,KAEjBA,EAAKL,KAA8C,YAArCK,EAAKN,MAAQ,IAAK6F,cAG/BxE,EAAOysB,WAAaxtB,EAAKH,UAC7BkB,EAAOysB,SAAUxtB,EAAKL,IAAK,CAC1BC,MAAOI,EAAKJ,OAASI,EAAKO,aAAc,WAI1CT,EAASE,EAAKoQ,YAAYrM,QAASyoB,GAAc,IAAMxsB,EAAMC,IAQnE,OAAOktB,EAGR,SAAS5R,GAAQlZ,EAAMrB,EAAUysB,GAKhC,IAJA,IAAIztB,EACHolB,EAAQpkB,EAAWD,EAAOoN,OAAQnN,EAAUqB,GAASA,EACrDnC,EAAI,EAE4B,OAAvBF,EAAOolB,EAAOllB,IAAeA,IAChCutB,GAA8B,IAAlBztB,EAAKT,UACtBwB,EAAO2sB,UAAWxJ,GAAQlkB,IAGtBA,EAAKW,aACJ8sB,GAAY5L,GAAY7hB,IAC5BmkB,GAAeD,GAAQlkB,EAAM,WAE9BA,EAAKW,WAAWC,YAAaZ,IAI/B,OAAOqC,EAGRtB,EAAOiC,OAAQ,CACdqiB,cAAe,SAAUkI,GACxB,OAAOA,EAAKxpB,QAASsoB,GAAW,cAGjChpB,MAAO,SAAUhB,EAAMsrB,EAAeC,GACrC,IAAI1tB,EAAG8Y,EAAG6U,EAAaC,EApINnuB,EAAKktB,EACnB1iB,EAoIF9G,EAAQhB,EAAKmjB,WAAW,GACxBuI,EAASlM,GAAYxf,GAGtB,KAAMjD,EAAQqmB,gBAAsC,IAAlBpjB,EAAK9C,UAAoC,KAAlB8C,EAAK9C,UAC3DwB,EAAO2W,SAAUrV,IAMnB,IAHAyrB,EAAe5J,GAAQ7gB,GAGjBnD,EAAI,EAAG8Y,GAFb6U,EAAc3J,GAAQ7hB,IAEOf,OAAQpB,EAAI8Y,EAAG9Y,IAhJ5BP,EAiJLkuB,EAAa3tB,GAjJH2sB,EAiJQiB,EAAc5tB,QAhJzCiK,EAGc,WAHdA,EAAW0iB,EAAK1iB,SAAS5E,gBAGAie,GAAejY,KAAM5L,EAAID,MACrDmtB,EAAKtZ,QAAU5T,EAAI4T,QAGK,UAAbpJ,GAAqC,aAAbA,IACnC0iB,EAAKrV,aAAe7X,EAAI6X,cA6IxB,GAAKmW,EACJ,GAAKC,EAIJ,IAHAC,EAAcA,GAAe3J,GAAQ7hB,GACrCyrB,EAAeA,GAAgB5J,GAAQ7gB,GAEjCnD,EAAI,EAAG8Y,EAAI6U,EAAYvsB,OAAQpB,EAAI8Y,EAAG9Y,IAC3C0sB,GAAgBiB,EAAa3tB,GAAK4tB,EAAc5tB,SAGjD0sB,GAAgBvqB,EAAMgB,GAWxB,OAL2B,GAD3ByqB,EAAe5J,GAAQ7gB,EAAO,WACZ/B,QACjB6iB,GAAe2J,GAAeC,GAAU7J,GAAQ7hB,EAAM,WAIhDgB,GAGRqqB,UAAW,SAAU5rB,GAKpB,IAJA,IAAIqe,EAAM9d,EAAM3C,EACfod,EAAU/b,EAAOulB,MAAMxJ,QACvB5c,EAAI,OAE6ByD,KAAxBtB,EAAOP,EAAO5B,IAAqBA,IAC5C,GAAK0f,EAAYvd,GAAS,CACzB,GAAO8d,EAAO9d,EAAMie,EAAS1c,SAAc,CAC1C,GAAKuc,EAAKiH,OACT,IAAM1nB,KAAQygB,EAAKiH,OACbtK,EAASpd,GACbqB,EAAOulB,MAAM/K,OAAQlZ,EAAM3C,GAI3BqB,EAAOqnB,YAAa/lB,EAAM3C,EAAMygB,EAAKwH,QAOxCtlB,EAAMie,EAAS1c,cAAYD,EAEvBtB,EAAMke,EAAS3c,WAInBvB,EAAMke,EAAS3c,cAAYD,OAOhC5C,EAAOG,GAAG8B,OAAQ,CACjBgrB,OAAQ,SAAUhtB,GACjB,OAAOua,GAAQpd,KAAM6C,GAAU,IAGhCua,OAAQ,SAAUva,GACjB,OAAOua,GAAQpd,KAAM6C,IAGtBV,KAAM,SAAU4E,GACf,OAAO6Z,EAAQ5gB,KAAM,SAAU+G,GAC9B,YAAiBvB,IAAVuB,EACNnE,EAAOT,KAAMnC,MACbA,KAAKuV,QAAQxR,KAAM,WACK,IAAlB/D,KAAKoB,UAAoC,KAAlBpB,KAAKoB,UAAqC,IAAlBpB,KAAKoB,WACxDpB,KAAKiS,YAAclL,MAGpB,KAAMA,EAAO3C,UAAUjB,SAG3B2sB,OAAQ,WACP,OAAOf,GAAU/uB,KAAMoE,UAAW,SAAUF,GACpB,IAAlBlE,KAAKoB,UAAoC,KAAlBpB,KAAKoB,UAAqC,IAAlBpB,KAAKoB,UAC3CktB,GAAoBtuB,KAAMkE,GAChC3B,YAAa2B,MAKvB6rB,QAAS,WACR,OAAOhB,GAAU/uB,KAAMoE,UAAW,SAAUF,GAC3C,GAAuB,IAAlBlE,KAAKoB,UAAoC,KAAlBpB,KAAKoB,UAAqC,IAAlBpB,KAAKoB,SAAiB,CACzE,IAAI+D,EAASmpB,GAAoBtuB,KAAMkE,GACvCiB,EAAO6qB,aAAc9rB,EAAMiB,EAAO+M,gBAKrC+d,OAAQ,WACP,OAAOlB,GAAU/uB,KAAMoE,UAAW,SAAUF,GACtClE,KAAKwC,YACTxC,KAAKwC,WAAWwtB,aAAc9rB,EAAMlE,SAKvCkwB,MAAO,WACN,OAAOnB,GAAU/uB,KAAMoE,UAAW,SAAUF,GACtClE,KAAKwC,YACTxC,KAAKwC,WAAWwtB,aAAc9rB,EAAMlE,KAAK2O,gBAK5C4G,MAAO,WAIN,IAHA,IAAIrR,EACHnC,EAAI,EAE2B,OAAtBmC,EAAOlE,KAAM+B,IAAeA,IACd,IAAlBmC,EAAK9C,WAGTwB,EAAO2sB,UAAWxJ,GAAQ7hB,GAAM,IAGhCA,EAAK+N,YAAc,IAIrB,OAAOjS,MAGRkF,MAAO,SAAUsqB,EAAeC,GAI/B,OAHAD,EAAiC,MAAjBA,GAAgCA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzDzvB,KAAKiE,IAAK,WAChB,OAAOrB,EAAOsC,MAAOlF,KAAMwvB,EAAeC,MAI5CL,KAAM,SAAUroB,GACf,OAAO6Z,EAAQ5gB,KAAM,SAAU+G,GAC9B,IAAI7C,EAAOlE,KAAM,IAAO,GACvB+B,EAAI,EACJ8Y,EAAI7a,KAAKmD,OAEV,QAAeqC,IAAVuB,GAAyC,IAAlB7C,EAAK9C,SAChC,OAAO8C,EAAKoM,UAIb,GAAsB,iBAAVvJ,IAAuBonB,GAAa/gB,KAAMrG,KACpDye,IAAWF,GAASxY,KAAM/F,IAAW,CAAE,GAAI,KAAQ,GAAIK,eAAkB,CAE1EL,EAAQnE,EAAOskB,cAAengB,GAE9B,IACC,KAAQhF,EAAI8Y,EAAG9Y,IAIS,KAHvBmC,EAAOlE,KAAM+B,IAAO,IAGVX,WACTwB,EAAO2sB,UAAWxJ,GAAQ7hB,GAAM,IAChCA,EAAKoM,UAAYvJ,GAInB7C,EAAO,EAGN,MAAQkI,KAGNlI,GACJlE,KAAKuV,QAAQua,OAAQ/oB,IAEpB,KAAMA,EAAO3C,UAAUjB,SAG3BgtB,YAAa,WACZ,IAAIvJ,EAAU,GAGd,OAAOmI,GAAU/uB,KAAMoE,UAAW,SAAUF,GAC3C,IAAI0P,EAAS5T,KAAKwC,WAEbI,EAAO4D,QAASxG,KAAM4mB,GAAY,IACtChkB,EAAO2sB,UAAWxJ,GAAQ/lB,OACrB4T,GACJA,EAAOwc,aAAclsB,EAAMlE,QAK3B4mB,MAILhkB,EAAOmB,KAAM,CACZssB,SAAU,SACVC,UAAW,UACXN,aAAc,SACdO,YAAa,QACbC,WAAY,eACV,SAAUzrB,EAAM0rB,GAClB7tB,EAAOG,GAAIgC,GAAS,SAAUlC,GAO7B,IANA,IAAIc,EACHC,EAAM,GACN8sB,EAAS9tB,EAAQC,GACjB0B,EAAOmsB,EAAOvtB,OAAS,EACvBpB,EAAI,EAEGA,GAAKwC,EAAMxC,IAClB4B,EAAQ5B,IAAMwC,EAAOvE,KAAOA,KAAKkF,OAAO,GACxCtC,EAAQ8tB,EAAQ3uB,IAAO0uB,GAAY9sB,GAInCnD,EAAK2D,MAAOP,EAAKD,EAAMH,OAGxB,OAAOxD,KAAK0D,UAAWE,MAGzB,IAAI+sB,GAAY,IAAIjnB,OAAQ,KAAO4Z,GAAO,kBAAmB,KAEzDsN,GAAY,SAAU1sB,GAKxB,IAAIwoB,EAAOxoB,EAAK2I,cAAc2C,YAM9B,OAJMkd,GAASA,EAAKmE,SACnBnE,EAAO3sB,GAGD2sB,EAAKoE,iBAAkB5sB,IAG5B6sB,GAAY,IAAIrnB,OAAQ+Z,GAAUnW,KAAM,KAAO,KAiGnD,SAAS0jB,GAAQ9sB,EAAMa,EAAMksB,GAC5B,IAAIC,EAAOC,EAAUC,EAAUxtB,EAM9BkgB,EAAQ5f,EAAK4f,MAqCd,OAnCAmN,EAAWA,GAAYL,GAAW1sB,MAQpB,MAFbN,EAAMqtB,EAASI,iBAAkBtsB,IAAUksB,EAAUlsB,KAEjC2e,GAAYxf,KAC/BN,EAAMhB,EAAOkhB,MAAO5f,EAAMa,KAQrB9D,EAAQqwB,kBAAoBX,GAAUvjB,KAAMxJ,IAASmtB,GAAU3jB,KAAMrI,KAG1EmsB,EAAQpN,EAAMoN,MACdC,EAAWrN,EAAMqN,SACjBC,EAAWtN,EAAMsN,SAGjBtN,EAAMqN,SAAWrN,EAAMsN,SAAWtN,EAAMoN,MAAQttB,EAChDA,EAAMqtB,EAASC,MAGfpN,EAAMoN,MAAQA,EACdpN,EAAMqN,SAAWA,EACjBrN,EAAMsN,SAAWA,SAIJ5rB,IAAR5B,EAINA,EAAM,GACNA,EAIF,SAAS2tB,GAAcC,EAAaC,GAGnC,MAAO,CACNjuB,IAAK,WACJ,IAAKguB,IASL,OAASxxB,KAAKwD,IAAMiuB,GAASttB,MAAOnE,KAAMoE,kBALlCpE,KAAKwD,OA3JhB,WAIC,SAASkuB,IAGR,GAAMlL,EAAN,CAIAmL,EAAU7N,MAAM8N,QAAU,+EAE1BpL,EAAI1C,MAAM8N,QACT,4HAGDviB,GAAgB9M,YAAaovB,GAAYpvB,YAAaikB,GAEtD,IAAIqL,EAAW9xB,EAAO+wB,iBAAkBtK,GACxCsL,EAAoC,OAAjBD,EAASpiB,IAG5BsiB,EAAsE,KAA9CC,EAAoBH,EAASI,YAIrDzL,EAAI1C,MAAMoO,MAAQ,MAClBC,EAA6D,KAAzCH,EAAoBH,EAASK,OAIjDE,EAAgE,KAAzCJ,EAAoBH,EAASX,OAMpD1K,EAAI1C,MAAMuO,SAAW,WACrBC,EAAiE,KAA9CN,EAAoBxL,EAAI+L,YAAc,GAEzDljB,GAAgB5M,YAAakvB,GAI7BnL,EAAM,MAGP,SAASwL,EAAoBQ,GAC5B,OAAO9sB,KAAK+sB,MAAOC,WAAYF,IAGhC,IAAIV,EAAkBM,EAAsBE,EAAkBH,EAC7DJ,EACAJ,EAAY/xB,EAASsC,cAAe,OACpCskB,EAAM5mB,EAASsC,cAAe,OAGzBskB,EAAI1C,QAMV0C,EAAI1C,MAAM6O,eAAiB,cAC3BnM,EAAIa,WAAW,GAAOvD,MAAM6O,eAAiB,GAC7C1xB,EAAQ2xB,gBAA+C,gBAA7BpM,EAAI1C,MAAM6O,eAEpC/vB,EAAOiC,OAAQ5D,EAAS,CACvB4xB,kBAAmB,WAElB,OADAnB,IACOU,GAERd,eAAgB,WAEf,OADAI,IACOS,GAERW,cAAe,WAEd,OADApB,IACOI,GAERiB,mBAAoB,WAEnB,OADArB,IACOK,GAERiB,cAAe,WAEd,OADAtB,IACOY,MAvFV,GAsKA,IAAIW,GAAc,CAAE,SAAU,MAAO,MACpCC,GAAatzB,EAASsC,cAAe,OAAQ4hB,MAC7CqP,GAAc,GAkBf,SAASC,GAAeruB,GACvB,IAAIsuB,EAAQzwB,EAAO0wB,SAAUvuB,IAAUouB,GAAapuB,GAEpD,OAAKsuB,IAGAtuB,KAAQmuB,GACLnuB,EAEDouB,GAAapuB,GAxBrB,SAAyBA,GAGxB,IAAIwuB,EAAUxuB,EAAM,GAAIuc,cAAgBvc,EAAKzE,MAAO,GACnDyB,EAAIkxB,GAAY9vB,OAEjB,MAAQpB,IAEP,IADAgD,EAAOkuB,GAAalxB,GAAMwxB,KACbL,GACZ,OAAOnuB,EAeoByuB,CAAgBzuB,IAAUA,GAIxD,IAKC0uB,GAAe,4BACfC,GAAc,MACdC,GAAU,CAAEtB,SAAU,WAAYuB,WAAY,SAAU7P,QAAS,SACjE8P,GAAqB,CACpBC,cAAe,IACfC,WAAY,OAGd,SAASC,GAAmB9vB,EAAM6C,EAAOktB,GAIxC,IAAIrtB,EAAU4c,GAAQ1W,KAAM/F,GAC5B,OAAOH,EAGNlB,KAAKwuB,IAAK,EAAGttB,EAAS,IAAQqtB,GAAY,KAAUrtB,EAAS,IAAO,MACpEG,EAGF,SAASotB,GAAoBjwB,EAAMkwB,EAAWC,EAAKC,EAAaC,EAAQC,GACvE,IAAIzyB,EAAkB,UAAdqyB,EAAwB,EAAI,EACnCK,EAAQ,EACRC,EAAQ,EAGT,GAAKL,KAAUC,EAAc,SAAW,WACvC,OAAO,EAGR,KAAQvyB,EAAI,EAAGA,GAAK,EAGN,WAARsyB,IACJK,GAAS9xB,EAAOohB,IAAK9f,EAAMmwB,EAAM5Q,GAAW1hB,IAAK,EAAMwyB,IAIlDD,GAmBQ,YAARD,IACJK,GAAS9xB,EAAOohB,IAAK9f,EAAM,UAAYuf,GAAW1hB,IAAK,EAAMwyB,IAIjD,WAARF,IACJK,GAAS9xB,EAAOohB,IAAK9f,EAAM,SAAWuf,GAAW1hB,GAAM,SAAS,EAAMwyB,MAtBvEG,GAAS9xB,EAAOohB,IAAK9f,EAAM,UAAYuf,GAAW1hB,IAAK,EAAMwyB,GAGhD,YAARF,EACJK,GAAS9xB,EAAOohB,IAAK9f,EAAM,SAAWuf,GAAW1hB,GAAM,SAAS,EAAMwyB,GAItEE,GAAS7xB,EAAOohB,IAAK9f,EAAM,SAAWuf,GAAW1hB,GAAM,SAAS,EAAMwyB,IAoCzE,OAhBMD,GAA8B,GAAfE,IAIpBE,GAAShvB,KAAKwuB,IAAK,EAAGxuB,KAAKivB,KAC1BzwB,EAAM,SAAWkwB,EAAW,GAAI9S,cAAgB8S,EAAU9zB,MAAO,IACjEk0B,EACAE,EACAD,EACA,MAIM,GAGDC,EAGR,SAASE,GAAkB1wB,EAAMkwB,EAAWK,GAG3C,IAAIF,EAAS3D,GAAW1sB,GAKvBowB,IADmBrzB,EAAQ4xB,qBAAuB4B,IAEE,eAAnD7xB,EAAOohB,IAAK9f,EAAM,aAAa,EAAOqwB,GACvCM,EAAmBP,EAEnBtyB,EAAMgvB,GAAQ9sB,EAAMkwB,EAAWG,GAC/BO,EAAa,SAAWV,EAAW,GAAI9S,cAAgB8S,EAAU9zB,MAAO,GAIzE,GAAKqwB,GAAUvjB,KAAMpL,GAAQ,CAC5B,IAAMyyB,EACL,OAAOzyB,EAERA,EAAM,OAgCP,QApBQf,EAAQ4xB,qBAAuByB,GAC9B,SAARtyB,IACC0wB,WAAY1wB,IAA0D,WAAjDY,EAAOohB,IAAK9f,EAAM,WAAW,EAAOqwB,KAC1DrwB,EAAK6wB,iBAAiB5xB,SAEtBmxB,EAAiE,eAAnD1xB,EAAOohB,IAAK9f,EAAM,aAAa,EAAOqwB,IAKpDM,EAAmBC,KAAc5wB,KAEhClC,EAAMkC,EAAM4wB,MAKd9yB,EAAM0wB,WAAY1wB,IAAS,GAI1BmyB,GACCjwB,EACAkwB,EACAK,IAAWH,EAAc,SAAW,WACpCO,EACAN,EAGAvyB,GAEE,KA+SL,SAASgzB,GAAO9wB,EAAMY,EAASmd,EAAMvd,EAAKuwB,GACzC,OAAO,IAAID,GAAM5xB,UAAUJ,KAAMkB,EAAMY,EAASmd,EAAMvd,EAAKuwB,GA7S5DryB,EAAOiC,OAAQ,CAIdqwB,SAAU,CACTC,QAAS,CACR3xB,IAAK,SAAUU,EAAM+sB,GACpB,GAAKA,EAAW,CAGf,IAAIrtB,EAAMotB,GAAQ9sB,EAAM,WACxB,MAAe,KAARN,EAAa,IAAMA,MAO9BghB,UAAW,CACVwQ,yBAA2B,EAC3BC,aAAe,EACfC,aAAe,EACfC,UAAY,EACZC,YAAc,EACdzB,YAAc,EACd0B,UAAY,EACZC,YAAc,EACdC,eAAiB,EACjBC,iBAAmB,EACnBC,SAAW,EACXC,YAAc,EACdC,cAAgB,EAChBC,YAAc,EACdb,SAAW,EACXc,OAAS,EACTC,SAAW,EACXC,QAAU,EACVC,QAAU,EACVC,MAAQ,GAKT/C,SAAU,GAGVxP,MAAO,SAAU5f,EAAMa,EAAMgC,EAAO0tB,GAGnC,GAAMvwB,GAA0B,IAAlBA,EAAK9C,UAAoC,IAAlB8C,EAAK9C,UAAmB8C,EAAK4f,MAAlE,CAKA,IAAIlgB,EAAKrC,EAAMwhB,EACduT,EAAW/U,EAAWxc,GACtBwxB,EAAe7C,GAAYtmB,KAAMrI,GACjC+e,EAAQ5f,EAAK4f,MAad,GARMyS,IACLxxB,EAAOquB,GAAekD,IAIvBvT,EAAQngB,EAAOsyB,SAAUnwB,IAAUnC,EAAOsyB,SAAUoB,QAGrC9wB,IAAVuB,EA0CJ,OAAKgc,GAAS,QAASA,QACwBvd,KAA5C5B,EAAMmf,EAAMvf,IAAKU,GAAM,EAAOuwB,IAEzB7wB,EAIDkgB,EAAO/e,GA7CA,YAHdxD,SAAcwF,KAGcnD,EAAM4f,GAAQ1W,KAAM/F,KAAanD,EAAK,KACjEmD,EAAQod,GAAWjgB,EAAMa,EAAMnB,GAG/BrC,EAAO,UAIM,MAATwF,GAAiBA,GAAUA,IAOlB,WAATxF,GAAsBg1B,IAC1BxvB,GAASnD,GAAOA,EAAK,KAAShB,EAAOgiB,UAAW0R,GAAa,GAAK,OAI7Dr1B,EAAQ2xB,iBAA6B,KAAV7rB,GAAiD,IAAjChC,EAAKtE,QAAS,gBAC9DqjB,EAAO/e,GAAS,WAIXge,GAAY,QAASA,QACsBvd,KAA9CuB,EAAQgc,EAAMhB,IAAK7d,EAAM6C,EAAO0tB,MAE7B8B,EACJzS,EAAM0S,YAAazxB,EAAMgC,GAEzB+c,EAAO/e,GAASgC,MAkBpBid,IAAK,SAAU9f,EAAMa,EAAM0vB,EAAOF,GACjC,IAAIvyB,EAAKyB,EAAKsf,EACbuT,EAAW/U,EAAWxc,GA6BvB,OA5BgB2uB,GAAYtmB,KAAMrI,KAMjCA,EAAOquB,GAAekD,KAIvBvT,EAAQngB,EAAOsyB,SAAUnwB,IAAUnC,EAAOsyB,SAAUoB,KAGtC,QAASvT,IACtB/gB,EAAM+gB,EAAMvf,IAAKU,GAAM,EAAMuwB,SAIjBjvB,IAARxD,IACJA,EAAMgvB,GAAQ9sB,EAAMa,EAAMwvB,IAId,WAARvyB,GAAoB+C,KAAQ8uB,KAChC7xB,EAAM6xB,GAAoB9uB,IAIZ,KAAV0vB,GAAgBA,GACpBhxB,EAAMivB,WAAY1wB,IACD,IAAVyyB,GAAkBgC,SAAUhzB,GAAQA,GAAO,EAAIzB,GAGhDA,KAITY,EAAOmB,KAAM,CAAE,SAAU,SAAW,SAAUhC,EAAGqyB,GAChDxxB,EAAOsyB,SAAUd,GAAc,CAC9B5wB,IAAK,SAAUU,EAAM+sB,EAAUwD,GAC9B,GAAKxD,EAIJ,OAAOwC,GAAarmB,KAAMxK,EAAOohB,IAAK9f,EAAM,aAQxCA,EAAK6wB,iBAAiB5xB,QAAWe,EAAKwyB,wBAAwBxF,MAIhE0D,GAAkB1wB,EAAMkwB,EAAWK,GAHnCxQ,GAAM/f,EAAMyvB,GAAS,WACpB,OAAOiB,GAAkB1wB,EAAMkwB,EAAWK,MAM/C1S,IAAK,SAAU7d,EAAM6C,EAAO0tB,GAC3B,IAAI7tB,EACH2tB,EAAS3D,GAAW1sB,GAIpByyB,GAAsB11B,EAAQ+xB,iBACT,aAApBuB,EAAOlC,SAIRiC,GADkBqC,GAAsBlC,IAEY,eAAnD7xB,EAAOohB,IAAK9f,EAAM,aAAa,EAAOqwB,GACvCN,EAAWQ,EACVN,GACCjwB,EACAkwB,EACAK,EACAH,EACAC,GAED,EAqBF,OAjBKD,GAAeqC,IACnB1C,GAAYvuB,KAAKivB,KAChBzwB,EAAM,SAAWkwB,EAAW,GAAI9S,cAAgB8S,EAAU9zB,MAAO,IACjEoyB,WAAY6B,EAAQH,IACpBD,GAAoBjwB,EAAMkwB,EAAW,UAAU,EAAOG,GACtD,KAKGN,IAAcrtB,EAAU4c,GAAQ1W,KAAM/F,KACb,QAA3BH,EAAS,IAAO,QAElB1C,EAAK4f,MAAOsQ,GAAcrtB,EAC1BA,EAAQnE,EAAOohB,IAAK9f,EAAMkwB,IAGpBJ,GAAmB9vB,EAAM6C,EAAOktB,OAK1CrxB,EAAOsyB,SAASjD,WAAaV,GAActwB,EAAQ8xB,mBAClD,SAAU7uB,EAAM+sB,GACf,GAAKA,EACJ,OAASyB,WAAY1B,GAAQ9sB,EAAM,gBAClCA,EAAKwyB,wBAAwBE,KAC5B3S,GAAM/f,EAAM,CAAE+tB,WAAY,GAAK,WAC9B,OAAO/tB,EAAKwyB,wBAAwBE,QAElC,OAMRh0B,EAAOmB,KAAM,CACZ8yB,OAAQ,GACRC,QAAS,GACTC,OAAQ,SACN,SAAUC,EAAQC,GACpBr0B,EAAOsyB,SAAU8B,EAASC,GAAW,CACpCC,OAAQ,SAAUnwB,GAOjB,IANA,IAAIhF,EAAI,EACPo1B,EAAW,GAGXC,EAAyB,iBAAVrwB,EAAqBA,EAAMI,MAAO,KAAQ,CAAEJ,GAEpDhF,EAAI,EAAGA,IACdo1B,EAAUH,EAASvT,GAAW1hB,GAAMk1B,GACnCG,EAAOr1B,IAAOq1B,EAAOr1B,EAAI,IAAOq1B,EAAO,GAGzC,OAAOD,IAIO,WAAXH,IACJp0B,EAAOsyB,SAAU8B,EAASC,GAASlV,IAAMiS,MAI3CpxB,EAAOG,GAAG8B,OAAQ,CACjBmf,IAAK,SAAUjf,EAAMgC,GACpB,OAAO6Z,EAAQ5gB,KAAM,SAAUkE,EAAMa,EAAMgC,GAC1C,IAAIwtB,EAAQ/vB,EACXP,EAAM,GACNlC,EAAI,EAEL,GAAKuD,MAAMC,QAASR,GAAS,CAI5B,IAHAwvB,EAAS3D,GAAW1sB,GACpBM,EAAMO,EAAK5B,OAEHpB,EAAIyC,EAAKzC,IAChBkC,EAAKc,EAAMhD,IAAQa,EAAOohB,IAAK9f,EAAMa,EAAMhD,IAAK,EAAOwyB,GAGxD,OAAOtwB,EAGR,YAAiBuB,IAAVuB,EACNnE,EAAOkhB,MAAO5f,EAAMa,EAAMgC,GAC1BnE,EAAOohB,IAAK9f,EAAMa,IACjBA,EAAMgC,EAA0B,EAAnB3C,UAAUjB,aAQ5BP,EAAOoyB,MAAQA,IAET5xB,UAAY,CACjBE,YAAa0xB,GACbhyB,KAAM,SAAUkB,EAAMY,EAASmd,EAAMvd,EAAKuwB,EAAQtQ,GACjD3kB,KAAKkE,KAAOA,EACZlE,KAAKiiB,KAAOA,EACZjiB,KAAKi1B,OAASA,GAAUryB,EAAOqyB,OAAOnP,SACtC9lB,KAAK8E,QAAUA,EACf9E,KAAK2T,MAAQ3T,KAAK6rB,IAAM7rB,KAAKwO,MAC7BxO,KAAK0E,IAAMA,EACX1E,KAAK2kB,KAAOA,IAAU/hB,EAAOgiB,UAAW3C,GAAS,GAAK,OAEvDzT,IAAK,WACJ,IAAIuU,EAAQiS,GAAMqC,UAAWr3B,KAAKiiB,MAElC,OAAOc,GAASA,EAAMvf,IACrBuf,EAAMvf,IAAKxD,MACXg1B,GAAMqC,UAAUvR,SAAStiB,IAAKxD,OAEhCs3B,IAAK,SAAUC,GACd,IAAIC,EACHzU,EAAQiS,GAAMqC,UAAWr3B,KAAKiiB,MAoB/B,OAlBKjiB,KAAK8E,QAAQ2yB,SACjBz3B,KAAK03B,IAAMF,EAAQ50B,EAAOqyB,OAAQj1B,KAAKi1B,QACtCsC,EAASv3B,KAAK8E,QAAQ2yB,SAAWF,EAAS,EAAG,EAAGv3B,KAAK8E,QAAQ2yB,UAG9Dz3B,KAAK03B,IAAMF,EAAQD,EAEpBv3B,KAAK6rB,KAAQ7rB,KAAK0E,IAAM1E,KAAK2T,OAAU6jB,EAAQx3B,KAAK2T,MAE/C3T,KAAK8E,QAAQ6yB,MACjB33B,KAAK8E,QAAQ6yB,KAAK32B,KAAMhB,KAAKkE,KAAMlE,KAAK6rB,IAAK7rB,MAGzC+iB,GAASA,EAAMhB,IACnBgB,EAAMhB,IAAK/hB,MAEXg1B,GAAMqC,UAAUvR,SAAS/D,IAAK/hB,MAExBA,QAIOgD,KAAKI,UAAY4xB,GAAM5xB,WAEvC4xB,GAAMqC,UAAY,CACjBvR,SAAU,CACTtiB,IAAK,SAAU6gB,GACd,IAAInR,EAIJ,OAA6B,IAAxBmR,EAAMngB,KAAK9C,UACa,MAA5BijB,EAAMngB,KAAMmgB,EAAMpC,OAAoD,MAAlCoC,EAAMngB,KAAK4f,MAAOO,EAAMpC,MACrDoC,EAAMngB,KAAMmgB,EAAMpC,OAO1B/O,EAAStQ,EAAOohB,IAAKK,EAAMngB,KAAMmgB,EAAMpC,KAAM,MAGhB,SAAX/O,EAAwBA,EAAJ,GAEvC6O,IAAK,SAAUsC,GAKTzhB,EAAOg1B,GAAGD,KAAMtT,EAAMpC,MAC1Brf,EAAOg1B,GAAGD,KAAMtT,EAAMpC,MAAQoC,GACK,IAAxBA,EAAMngB,KAAK9C,WACrBwB,EAAOsyB,SAAU7Q,EAAMpC,OAC4B,MAAnDoC,EAAMngB,KAAK4f,MAAOsP,GAAe/O,EAAMpC,OAGxCoC,EAAMngB,KAAMmgB,EAAMpC,MAASoC,EAAMwH,IAFjCjpB,EAAOkhB,MAAOO,EAAMngB,KAAMmgB,EAAMpC,KAAMoC,EAAMwH,IAAMxH,EAAMM,UAU5CkT,UAAY7C,GAAMqC,UAAUS,WAAa,CACxD/V,IAAK,SAAUsC,GACTA,EAAMngB,KAAK9C,UAAYijB,EAAMngB,KAAK1B,aACtC6hB,EAAMngB,KAAMmgB,EAAMpC,MAASoC,EAAMwH,OAKpCjpB,EAAOqyB,OAAS,CACf8C,OAAQ,SAAUC,GACjB,OAAOA,GAERC,MAAO,SAAUD,GAChB,MAAO,GAAMtyB,KAAKwyB,IAAKF,EAAItyB,KAAKyyB,IAAO,GAExCrS,SAAU,SAGXljB,EAAOg1B,GAAK5C,GAAM5xB,UAAUJ,KAG5BJ,EAAOg1B,GAAGD,KAAO,GAKjB,IACCS,GAAOC,GAkrBH9nB,GAEH+nB,GAnrBDC,GAAW,yBACXC,GAAO,cAER,SAASC,KACHJ,MACqB,IAApBz4B,EAAS84B,QAAoB34B,EAAO44B,sBACxC54B,EAAO44B,sBAAuBF,IAE9B14B,EAAOuf,WAAYmZ,GAAU71B,EAAOg1B,GAAGgB,UAGxCh2B,EAAOg1B,GAAGiB,QAKZ,SAASC,KAIR,OAHA/4B,EAAOuf,WAAY,WAClB8Y,QAAQ5yB,IAEA4yB,GAAQ/vB,KAAKwjB,MAIvB,SAASkN,GAAOx3B,EAAMy3B,GACrB,IAAItL,EACH3rB,EAAI,EACJqM,EAAQ,CAAE6qB,OAAQ13B,GAKnB,IADAy3B,EAAeA,EAAe,EAAI,EAC1Bj3B,EAAI,EAAGA,GAAK,EAAIi3B,EAEvB5qB,EAAO,UADPsf,EAAQjK,GAAW1hB,KACSqM,EAAO,UAAYsf,GAAUnsB,EAO1D,OAJKy3B,IACJ5qB,EAAM+mB,QAAU/mB,EAAM8iB,MAAQ3vB,GAGxB6M,EAGR,SAAS8qB,GAAanyB,EAAOkb,EAAMkX,GAKlC,IAJA,IAAI9U,EACH2K,GAAeoK,GAAUC,SAAUpX,IAAU,IAAK1hB,OAAQ64B,GAAUC,SAAU,MAC9Ete,EAAQ,EACR5X,EAAS6rB,EAAW7rB,OACb4X,EAAQ5X,EAAQ4X,IACvB,GAAOsJ,EAAQ2K,EAAYjU,GAAQ/Z,KAAMm4B,EAAWlX,EAAMlb,GAGzD,OAAOsd,EAsNV,SAAS+U,GAAWl1B,EAAMo1B,EAAYx0B,GACrC,IAAIoO,EACHqmB,EACAxe,EAAQ,EACR5X,EAASi2B,GAAUI,WAAWr2B,OAC9B0a,EAAWjb,EAAO4a,WAAWI,OAAQ,kBAG7Bib,EAAK30B,OAEb20B,EAAO,WACN,GAAKU,EACJ,OAAO,EAYR,IAVA,IAAIE,EAAcrB,IAASU,KAC1BpZ,EAAYha,KAAKwuB,IAAK,EAAGiF,EAAUO,UAAYP,EAAU1B,SAAWgC,GAKpElC,EAAU,GADH7X,EAAYyZ,EAAU1B,UAAY,GAEzC1c,EAAQ,EACR5X,EAASg2B,EAAUQ,OAAOx2B,OAEnB4X,EAAQ5X,EAAQ4X,IACvBoe,EAAUQ,OAAQ5e,GAAQuc,IAAKC,GAMhC,OAHA1Z,EAASkB,WAAY7a,EAAM,CAAEi1B,EAAW5B,EAAS7X,IAG5C6X,EAAU,GAAKp0B,EACZuc,GAIFvc,GACL0a,EAASkB,WAAY7a,EAAM,CAAEi1B,EAAW,EAAG,IAI5Ctb,EAASmB,YAAa9a,EAAM,CAAEi1B,KACvB,IAERA,EAAYtb,EAASxB,QAAS,CAC7BnY,KAAMA,EACNsnB,MAAO5oB,EAAOiC,OAAQ,GAAIy0B,GAC1BM,KAAMh3B,EAAOiC,QAAQ,EAAM,CAC1Bg1B,cAAe,GACf5E,OAAQryB,EAAOqyB,OAAOnP,UACpBhhB,GACHg1B,mBAAoBR,EACpBS,gBAAiBj1B,EACjB40B,UAAWtB,IAASU,KACpBrB,SAAU3yB,EAAQ2yB,SAClBkC,OAAQ,GACRT,YAAa,SAAUjX,EAAMvd,GAC5B,IAAI2f,EAAQzhB,EAAOoyB,MAAO9wB,EAAMi1B,EAAUS,KAAM3X,EAAMvd,EACpDy0B,EAAUS,KAAKC,cAAe5X,IAAUkX,EAAUS,KAAK3E,QAEzD,OADAkE,EAAUQ,OAAOn5B,KAAM6jB,GAChBA,GAERpB,KAAM,SAAU+W,GACf,IAAIjf,EAAQ,EAIX5X,EAAS62B,EAAUb,EAAUQ,OAAOx2B,OAAS,EAC9C,GAAKo2B,EACJ,OAAOv5B,KAGR,IADAu5B,GAAU,EACFxe,EAAQ5X,EAAQ4X,IACvBoe,EAAUQ,OAAQ5e,GAAQuc,IAAK,GAUhC,OANK0C,GACJnc,EAASkB,WAAY7a,EAAM,CAAEi1B,EAAW,EAAG,IAC3Ctb,EAASmB,YAAa9a,EAAM,CAAEi1B,EAAWa,KAEzCnc,EAASuB,WAAYlb,EAAM,CAAEi1B,EAAWa,IAElCh6B,QAGTwrB,EAAQ2N,EAAU3N,MAInB,KA/HD,SAAqBA,EAAOqO,GAC3B,IAAI9e,EAAOhW,EAAMkwB,EAAQluB,EAAOgc,EAGhC,IAAMhI,KAASyQ,EAed,GAbAyJ,EAAS4E,EADT90B,EAAOwc,EAAWxG,IAElBhU,EAAQykB,EAAOzQ,GACVzV,MAAMC,QAASwB,KACnBkuB,EAASluB,EAAO,GAChBA,EAAQykB,EAAOzQ,GAAUhU,EAAO,IAG5BgU,IAAUhW,IACdymB,EAAOzmB,GAASgC,SACTykB,EAAOzQ,KAGfgI,EAAQngB,EAAOsyB,SAAUnwB,KACX,WAAYge,EAMzB,IAAMhI,KALNhU,EAAQgc,EAAMmU,OAAQnwB,UACfykB,EAAOzmB,GAICgC,EACNgU,KAASyQ,IAChBA,EAAOzQ,GAAUhU,EAAOgU,GACxB8e,EAAe9e,GAAUka,QAI3B4E,EAAe90B,GAASkwB,EA6F1BgF,CAAYzO,EAAO2N,EAAUS,KAAKC,eAE1B9e,EAAQ5X,EAAQ4X,IAEvB,GADA7H,EAASkmB,GAAUI,WAAYze,GAAQ/Z,KAAMm4B,EAAWj1B,EAAMsnB,EAAO2N,EAAUS,MAM9E,OAJK14B,EAAYgS,EAAO+P,QACvBrgB,EAAOogB,YAAamW,EAAUj1B,KAAMi1B,EAAUS,KAAK7c,OAAQkG,KAC1D/P,EAAO+P,KAAKiX,KAAMhnB,IAEbA,EAyBT,OArBAtQ,EAAOqB,IAAKunB,EAAO0N,GAAaC,GAE3Bj4B,EAAYi4B,EAAUS,KAAKjmB,QAC/BwlB,EAAUS,KAAKjmB,MAAM3S,KAAMkD,EAAMi1B,GAIlCA,EACE/a,SAAU+a,EAAUS,KAAKxb,UACzB5V,KAAM2wB,EAAUS,KAAKpxB,KAAM2wB,EAAUS,KAAKO,UAC1C7d,KAAM6c,EAAUS,KAAKtd,MACrBsB,OAAQub,EAAUS,KAAKhc,QAEzBhb,EAAOg1B,GAAGwC,MACTx3B,EAAOiC,OAAQg0B,EAAM,CACpB30B,KAAMA,EACNm2B,KAAMlB,EACNpc,MAAOoc,EAAUS,KAAK7c,SAIjBoc,EAGRv2B,EAAOw2B,UAAYx2B,EAAOiC,OAAQu0B,GAAW,CAE5CC,SAAU,CACTiB,IAAK,CAAE,SAAUrY,EAAMlb,GACtB,IAAIsd,EAAQrkB,KAAKk5B,YAAajX,EAAMlb,GAEpC,OADAod,GAAWE,EAAMngB,KAAM+d,EAAMuB,GAAQ1W,KAAM/F,GAASsd,GAC7CA,KAITkW,QAAS,SAAU/O,EAAOxnB,GACpB9C,EAAYsqB,IAChBxnB,EAAWwnB,EACXA,EAAQ,CAAE,MAEVA,EAAQA,EAAM/e,MAAOkP,GAOtB,IAJA,IAAIsG,EACHlH,EAAQ,EACR5X,EAASqoB,EAAMroB,OAER4X,EAAQ5X,EAAQ4X,IACvBkH,EAAOuJ,EAAOzQ,GACdqe,GAAUC,SAAUpX,GAASmX,GAAUC,SAAUpX,IAAU,GAC3DmX,GAAUC,SAAUpX,GAAO3Q,QAAStN,IAItCw1B,WAAY,CA3Wb,SAA2Bt1B,EAAMsnB,EAAOoO,GACvC,IAAI3X,EAAMlb,EAAOqe,EAAQrC,EAAOyX,EAASC,EAAWC,EAAgB3W,EACnE4W,EAAQ,UAAWnP,GAAS,WAAYA,EACxC6O,EAAOr6B,KACPguB,EAAO,GACPlK,EAAQ5f,EAAK4f,MACb4U,EAASx0B,EAAK9C,UAAYyiB,GAAoB3f,GAC9C02B,EAAWzY,EAAS3e,IAAKU,EAAM,UA6BhC,IAAM+d,KA1BA2X,EAAK7c,QAEa,OADvBgG,EAAQngB,EAAOogB,YAAa9e,EAAM,OACvB22B,WACV9X,EAAM8X,SAAW,EACjBL,EAAUzX,EAAMxN,MAAM0H,KACtB8F,EAAMxN,MAAM0H,KAAO,WACZ8F,EAAM8X,UACXL,MAIHzX,EAAM8X,WAENR,EAAKzc,OAAQ,WAGZyc,EAAKzc,OAAQ,WACZmF,EAAM8X,WACAj4B,EAAOma,MAAO7Y,EAAM,MAAOf,QAChC4f,EAAMxN,MAAM0H,YAOFuO,EAEb,GADAzkB,EAAQykB,EAAOvJ,GACVsW,GAASnrB,KAAMrG,GAAU,CAG7B,UAFOykB,EAAOvJ,GACdmD,EAASA,GAAoB,WAAVre,EACdA,KAAY2xB,EAAS,OAAS,QAAW,CAI7C,GAAe,SAAV3xB,IAAoB6zB,QAAiCp1B,IAArBo1B,EAAU3Y,GAK9C,SAJAyW,GAAS,EAOX1K,EAAM/L,GAAS2Y,GAAYA,EAAU3Y,IAAUrf,EAAOkhB,MAAO5f,EAAM+d,GAMrE,IADAwY,GAAa73B,EAAOuD,cAAeqlB,MAChB5oB,EAAOuD,cAAe6nB,GA8DzC,IAAM/L,KAzDD0Y,GAA2B,IAAlBz2B,EAAK9C,WAMlBw4B,EAAKkB,SAAW,CAAEhX,EAAMgX,SAAUhX,EAAMiX,UAAWjX,EAAMkX,WAIlC,OADvBN,EAAiBE,GAAYA,EAAS7W,WAErC2W,EAAiBvY,EAAS3e,IAAKU,EAAM,YAGrB,UADjB6f,EAAUnhB,EAAOohB,IAAK9f,EAAM,cAEtBw2B,EACJ3W,EAAU2W,GAIV3V,GAAU,CAAE7gB,IAAQ,GACpBw2B,EAAiBx2B,EAAK4f,MAAMC,SAAW2W,EACvC3W,EAAUnhB,EAAOohB,IAAK9f,EAAM,WAC5B6gB,GAAU,CAAE7gB,OAKG,WAAZ6f,GAAoC,iBAAZA,GAAgD,MAAlB2W,IACrB,SAAhC93B,EAAOohB,IAAK9f,EAAM,WAGhBu2B,IACLJ,EAAK7xB,KAAM,WACVsb,EAAMC,QAAU2W,IAEM,MAAlBA,IACJ3W,EAAUD,EAAMC,QAChB2W,EAA6B,SAAZ3W,EAAqB,GAAKA,IAG7CD,EAAMC,QAAU,iBAKd6V,EAAKkB,WACThX,EAAMgX,SAAW,SACjBT,EAAKzc,OAAQ,WACZkG,EAAMgX,SAAWlB,EAAKkB,SAAU,GAChChX,EAAMiX,UAAYnB,EAAKkB,SAAU,GACjChX,EAAMkX,UAAYpB,EAAKkB,SAAU,MAKnCL,GAAY,EACEzM,EAGPyM,IACAG,EACC,WAAYA,IAChBlC,EAASkC,EAASlC,QAGnBkC,EAAWzY,EAASvB,OAAQ1c,EAAM,SAAU,CAAE6f,QAAS2W,IAInDtV,IACJwV,EAASlC,QAAUA,GAIfA,GACJ3T,GAAU,CAAE7gB,IAAQ,GAKrBm2B,EAAK7xB,KAAM,WASV,IAAMyZ,KAJAyW,GACL3T,GAAU,CAAE7gB,IAEbie,EAAS/E,OAAQlZ,EAAM,UACT8pB,EACbprB,EAAOkhB,MAAO5f,EAAM+d,EAAM+L,EAAM/L,OAMnCwY,EAAYvB,GAAaR,EAASkC,EAAU3Y,GAAS,EAAGA,EAAMoY,GACtDpY,KAAQ2Y,IACfA,EAAU3Y,GAASwY,EAAU9mB,MACxB+kB,IACJ+B,EAAU/1B,IAAM+1B,EAAU9mB,MAC1B8mB,EAAU9mB,MAAQ,MAuMrBsnB,UAAW,SAAUj3B,EAAU+rB,GACzBA,EACJqJ,GAAUI,WAAWloB,QAAStN,GAE9Bo1B,GAAUI,WAAWh5B,KAAMwD,MAK9BpB,EAAOs4B,MAAQ,SAAUA,EAAOjG,EAAQlyB,GACvC,IAAIu1B,EAAM4C,GAA0B,iBAAVA,EAAqBt4B,EAAOiC,OAAQ,GAAIq2B,GAAU,CAC3Ef,SAAUp3B,IAAOA,GAAMkyB,GACtB/zB,EAAYg6B,IAAWA,EACxBzD,SAAUyD,EACVjG,OAAQlyB,GAAMkyB,GAAUA,IAAW/zB,EAAY+zB,IAAYA,GAoC5D,OAhCKryB,EAAOg1B,GAAGxP,IACdkQ,EAAIb,SAAW,EAGc,iBAAjBa,EAAIb,WACVa,EAAIb,YAAY70B,EAAOg1B,GAAGuD,OAC9B7C,EAAIb,SAAW70B,EAAOg1B,GAAGuD,OAAQ7C,EAAIb,UAGrCa,EAAIb,SAAW70B,EAAOg1B,GAAGuD,OAAOrV,UAMjB,MAAbwS,EAAIvb,QAA+B,IAAdub,EAAIvb,QAC7Bub,EAAIvb,MAAQ,MAIbub,EAAIpU,IAAMoU,EAAI6B,SAEd7B,EAAI6B,SAAW,WACTj5B,EAAYo3B,EAAIpU,MACpBoU,EAAIpU,IAAIljB,KAAMhB,MAGVs4B,EAAIvb,OACRna,EAAOigB,QAAS7iB,KAAMs4B,EAAIvb,QAIrBub,GAGR11B,EAAOG,GAAG8B,OAAQ,CACjBu2B,OAAQ,SAAUF,EAAOG,EAAIpG,EAAQjxB,GAGpC,OAAOhE,KAAKgQ,OAAQ6T,IAAqBG,IAAK,UAAW,GAAIgB,OAG3DtgB,MAAM42B,QAAS,CAAEnG,QAASkG,GAAMH,EAAOjG,EAAQjxB,IAElDs3B,QAAS,SAAUrZ,EAAMiZ,EAAOjG,EAAQjxB,GACvC,IAAIuR,EAAQ3S,EAAOuD,cAAe8b,GACjCsZ,EAAS34B,EAAOs4B,MAAOA,EAAOjG,EAAQjxB,GACtCw3B,EAAc,WAGb,IAAInB,EAAOjB,GAAWp5B,KAAM4C,EAAOiC,OAAQ,GAAIod,GAAQsZ,IAGlDhmB,GAAS4M,EAAS3e,IAAKxD,KAAM,YACjCq6B,EAAKpX,MAAM,IAKd,OAFCuY,EAAYC,OAASD,EAEfjmB,IAA0B,IAAjBgmB,EAAOxe,MACtB/c,KAAK+D,KAAMy3B,GACXx7B,KAAK+c,MAAOwe,EAAOxe,MAAOye,IAE5BvY,KAAM,SAAU1hB,EAAM4hB,EAAY6W,GACjC,IAAI0B,EAAY,SAAU3Y,GACzB,IAAIE,EAAOF,EAAME,YACVF,EAAME,KACbA,EAAM+W,IAYP,MATqB,iBAATz4B,IACXy4B,EAAU7W,EACVA,EAAa5hB,EACbA,OAAOiE,GAEH2d,IAAuB,IAAT5hB,GAClBvB,KAAK+c,MAAOxb,GAAQ,KAAM,IAGpBvB,KAAK+D,KAAM,WACjB,IAAI8e,GAAU,EACb9H,EAAgB,MAARxZ,GAAgBA,EAAO,aAC/Bo6B,EAAS/4B,EAAO+4B,OAChB3Z,EAAOG,EAAS3e,IAAKxD,MAEtB,GAAK+a,EACCiH,EAAMjH,IAAWiH,EAAMjH,GAAQkI,MACnCyY,EAAW1Z,EAAMjH,SAGlB,IAAMA,KAASiH,EACTA,EAAMjH,IAAWiH,EAAMjH,GAAQkI,MAAQuV,GAAKprB,KAAM2N,IACtD2gB,EAAW1Z,EAAMjH,IAKpB,IAAMA,EAAQ4gB,EAAOx4B,OAAQ4X,KACvB4gB,EAAQ5gB,GAAQ7W,OAASlE,MACnB,MAARuB,GAAgBo6B,EAAQ5gB,GAAQgC,QAAUxb,IAE5Co6B,EAAQ5gB,GAAQsf,KAAKpX,KAAM+W,GAC3BnX,GAAU,EACV8Y,EAAO/2B,OAAQmW,EAAO,KAOnB8H,GAAYmX,GAChBp3B,EAAOigB,QAAS7iB,KAAMuB,MAIzBk6B,OAAQ,SAAUl6B,GAIjB,OAHc,IAATA,IACJA,EAAOA,GAAQ,MAETvB,KAAK+D,KAAM,WACjB,IAAIgX,EACHiH,EAAOG,EAAS3e,IAAKxD,MACrB+c,EAAQiF,EAAMzgB,EAAO,SACrBwhB,EAAQf,EAAMzgB,EAAO,cACrBo6B,EAAS/4B,EAAO+4B,OAChBx4B,EAAS4Z,EAAQA,EAAM5Z,OAAS,EAajC,IAVA6e,EAAKyZ,QAAS,EAGd74B,EAAOma,MAAO/c,KAAMuB,EAAM,IAErBwhB,GAASA,EAAME,MACnBF,EAAME,KAAKjiB,KAAMhB,MAAM,GAIlB+a,EAAQ4gB,EAAOx4B,OAAQ4X,KACvB4gB,EAAQ5gB,GAAQ7W,OAASlE,MAAQ27B,EAAQ5gB,GAAQgC,QAAUxb,IAC/Do6B,EAAQ5gB,GAAQsf,KAAKpX,MAAM,GAC3B0Y,EAAO/2B,OAAQmW,EAAO,IAKxB,IAAMA,EAAQ,EAAGA,EAAQ5X,EAAQ4X,IAC3BgC,EAAOhC,IAAWgC,EAAOhC,GAAQ0gB,QACrC1e,EAAOhC,GAAQ0gB,OAAOz6B,KAAMhB,aAKvBgiB,EAAKyZ,YAKf74B,EAAOmB,KAAM,CAAE,SAAU,OAAQ,QAAU,SAAUhC,EAAGgD,GACvD,IAAI62B,EAAQh5B,EAAOG,GAAIgC,GACvBnC,EAAOG,GAAIgC,GAAS,SAAUm2B,EAAOjG,EAAQjxB,GAC5C,OAAgB,MAATk3B,GAAkC,kBAAVA,EAC9BU,EAAMz3B,MAAOnE,KAAMoE,WACnBpE,KAAKs7B,QAASvC,GAAOh0B,GAAM,GAAQm2B,EAAOjG,EAAQjxB,MAKrDpB,EAAOmB,KAAM,CACZ83B,UAAW9C,GAAO,QAClB+C,QAAS/C,GAAO,QAChBgD,YAAahD,GAAO,UACpBiD,OAAQ,CAAE7G,QAAS,QACnB8G,QAAS,CAAE9G,QAAS,QACpB+G,WAAY,CAAE/G,QAAS,WACrB,SAAUpwB,EAAMymB,GAClB5oB,EAAOG,GAAIgC,GAAS,SAAUm2B,EAAOjG,EAAQjxB,GAC5C,OAAOhE,KAAKs7B,QAAS9P,EAAO0P,EAAOjG,EAAQjxB,MAI7CpB,EAAO+4B,OAAS,GAChB/4B,EAAOg1B,GAAGiB,KAAO,WAChB,IAAIuB,EACHr4B,EAAI,EACJ45B,EAAS/4B,EAAO+4B,OAIjB,IAFAvD,GAAQ/vB,KAAKwjB,MAEL9pB,EAAI45B,EAAOx4B,OAAQpB,KAC1Bq4B,EAAQuB,EAAQ55B,OAGC45B,EAAQ55B,KAAQq4B,GAChCuB,EAAO/2B,OAAQ7C,IAAK,GAIhB45B,EAAOx4B,QACZP,EAAOg1B,GAAG3U,OAEXmV,QAAQ5yB,GAGT5C,EAAOg1B,GAAGwC,MAAQ,SAAUA,GAC3Bx3B,EAAO+4B,OAAOn7B,KAAM45B,GACpBx3B,EAAOg1B,GAAGjkB,SAGX/Q,EAAOg1B,GAAGgB,SAAW,GACrBh2B,EAAOg1B,GAAGjkB,MAAQ,WACZ0kB,KAILA,IAAa,EACbI,OAGD71B,EAAOg1B,GAAG3U,KAAO,WAChBoV,GAAa,MAGdz1B,EAAOg1B,GAAGuD,OAAS,CAClBgB,KAAM,IACNC,KAAM,IAGNtW,SAAU,KAMXljB,EAAOG,GAAGs5B,MAAQ,SAAUC,EAAM/6B,GAIjC,OAHA+6B,EAAO15B,EAAOg1B,IAAKh1B,EAAOg1B,GAAGuD,OAAQmB,IAAiBA,EACtD/6B,EAAOA,GAAQ,KAERvB,KAAK+c,MAAOxb,EAAM,SAAU2K,EAAM6W,GACxC,IAAIwZ,EAAUx8B,EAAOuf,WAAYpT,EAAMowB,GACvCvZ,EAAME,KAAO,WACZljB,EAAOy8B,aAAcD,OAOnBhsB,GAAQ3Q,EAASsC,cAAe,SAEnCo2B,GADS14B,EAASsC,cAAe,UACpBK,YAAa3C,EAASsC,cAAe,WAEnDqO,GAAMhP,KAAO,WAIbN,EAAQw7B,QAA0B,KAAhBlsB,GAAMxJ,MAIxB9F,EAAQy7B,YAAcpE,GAAIjjB,UAI1B9E,GAAQ3Q,EAASsC,cAAe,UAC1B6E,MAAQ,IACdwJ,GAAMhP,KAAO,QACbN,EAAQ07B,WAA6B,MAAhBpsB,GAAMxJ,MAI5B,IAAI61B,GACHtuB,GAAa1L,EAAO2O,KAAKjD,WAE1B1L,EAAOG,GAAG8B,OAAQ,CACjB4M,KAAM,SAAU1M,EAAMgC,GACrB,OAAO6Z,EAAQ5gB,KAAM4C,EAAO6O,KAAM1M,EAAMgC,EAA0B,EAAnB3C,UAAUjB,SAG1D05B,WAAY,SAAU93B,GACrB,OAAO/E,KAAK+D,KAAM,WACjBnB,EAAOi6B,WAAY78B,KAAM+E,QAK5BnC,EAAOiC,OAAQ,CACd4M,KAAM,SAAUvN,EAAMa,EAAMgC,GAC3B,IAAInD,EAAKmf,EACR+Z,EAAQ54B,EAAK9C,SAGd,GAAe,IAAV07B,GAAyB,IAAVA,GAAyB,IAAVA,EAKnC,MAAkC,oBAAtB54B,EAAK9B,aACTQ,EAAOqf,KAAM/d,EAAMa,EAAMgC,IAKlB,IAAV+1B,GAAgBl6B,EAAO2W,SAAUrV,KACrC6e,EAAQngB,EAAOm6B,UAAWh4B,EAAKqC,iBAC5BxE,EAAO2O,KAAK9E,MAAMlC,KAAK6C,KAAMrI,GAAS63B,QAAWp3B,SAGtCA,IAAVuB,EACW,OAAVA,OACJnE,EAAOi6B,WAAY34B,EAAMa,GAIrBge,GAAS,QAASA,QACuBvd,KAA3C5B,EAAMmf,EAAMhB,IAAK7d,EAAM6C,EAAOhC,IACzBnB,GAGRM,EAAK7B,aAAc0C,EAAMgC,EAAQ,IAC1BA,GAGHgc,GAAS,QAASA,GAA+C,QAApCnf,EAAMmf,EAAMvf,IAAKU,EAAMa,IACjDnB,EAMM,OAHdA,EAAMhB,EAAOsN,KAAKuB,KAAMvN,EAAMa,SAGTS,EAAY5B,IAGlCm5B,UAAW,CACVx7B,KAAM,CACLwgB,IAAK,SAAU7d,EAAM6C,GACpB,IAAM9F,EAAQ07B,YAAwB,UAAV51B,GAC3BiF,EAAU9H,EAAM,SAAY,CAC5B,IAAIlC,EAAMkC,EAAK6C,MAKf,OAJA7C,EAAK7B,aAAc,OAAQ0E,GACtB/E,IACJkC,EAAK6C,MAAQ/E,GAEP+E,MAMX81B,WAAY,SAAU34B,EAAM6C,GAC3B,IAAIhC,EACHhD,EAAI,EAIJi7B,EAAYj2B,GAASA,EAAM0F,MAAOkP,GAEnC,GAAKqhB,GAA+B,IAAlB94B,EAAK9C,SACtB,MAAU2D,EAAOi4B,EAAWj7B,KAC3BmC,EAAKwJ,gBAAiB3I,MAO1B63B,GAAW,CACV7a,IAAK,SAAU7d,EAAM6C,EAAOhC,GAQ3B,OAPe,IAAVgC,EAGJnE,EAAOi6B,WAAY34B,EAAMa,GAEzBb,EAAK7B,aAAc0C,EAAMA,GAEnBA,IAITnC,EAAOmB,KAAMnB,EAAO2O,KAAK9E,MAAMlC,KAAKgZ,OAAO9W,MAAO,QAAU,SAAU1K,EAAGgD,GACxE,IAAIk4B,EAAS3uB,GAAYvJ,IAAUnC,EAAOsN,KAAKuB,KAE/CnD,GAAYvJ,GAAS,SAAUb,EAAMa,EAAMyC,GAC1C,IAAI5D,EAAK4lB,EACR0T,EAAgBn4B,EAAKqC,cAYtB,OAVMI,IAGLgiB,EAASlb,GAAY4uB,GACrB5uB,GAAY4uB,GAAkBt5B,EAC9BA,EAAqC,MAA/Bq5B,EAAQ/4B,EAAMa,EAAMyC,GACzB01B,EACA,KACD5uB,GAAY4uB,GAAkB1T,GAExB5lB,KAOT,IAAIu5B,GAAa,sCAChBC,GAAa,gBAyIb,SAASC,GAAkBt2B,GAE1B,OADaA,EAAM0F,MAAOkP,IAAmB,IAC/BrO,KAAM,KAItB,SAASgwB,GAAUp5B,GAClB,OAAOA,EAAK9B,cAAgB8B,EAAK9B,aAAc,UAAa,GAG7D,SAASm7B,GAAgBx2B,GACxB,OAAKzB,MAAMC,QAASwB,GACZA,EAEc,iBAAVA,GACJA,EAAM0F,MAAOkP,IAEd,GAxJR/Y,EAAOG,GAAG8B,OAAQ,CACjBod,KAAM,SAAUld,EAAMgC,GACrB,OAAO6Z,EAAQ5gB,KAAM4C,EAAOqf,KAAMld,EAAMgC,EAA0B,EAAnB3C,UAAUjB,SAG1Dq6B,WAAY,SAAUz4B,GACrB,OAAO/E,KAAK+D,KAAM,kBACV/D,KAAM4C,EAAO66B,QAAS14B,IAAUA,QAK1CnC,EAAOiC,OAAQ,CACdod,KAAM,SAAU/d,EAAMa,EAAMgC,GAC3B,IAAInD,EAAKmf,EACR+Z,EAAQ54B,EAAK9C,SAGd,GAAe,IAAV07B,GAAyB,IAAVA,GAAyB,IAAVA,EAWnC,OAPe,IAAVA,GAAgBl6B,EAAO2W,SAAUrV,KAGrCa,EAAOnC,EAAO66B,QAAS14B,IAAUA,EACjCge,EAAQngB,EAAOy0B,UAAWtyB,SAGZS,IAAVuB,EACCgc,GAAS,QAASA,QACuBvd,KAA3C5B,EAAMmf,EAAMhB,IAAK7d,EAAM6C,EAAOhC,IACzBnB,EAGCM,EAAMa,GAASgC,EAGpBgc,GAAS,QAASA,GAA+C,QAApCnf,EAAMmf,EAAMvf,IAAKU,EAAMa,IACjDnB,EAGDM,EAAMa,IAGdsyB,UAAW,CACVniB,SAAU,CACT1R,IAAK,SAAUU,GAOd,IAAIw5B,EAAW96B,EAAOsN,KAAKuB,KAAMvN,EAAM,YAEvC,OAAKw5B,EACGC,SAAUD,EAAU,IAI3BP,GAAW/vB,KAAMlJ,EAAK8H,WACtBoxB,GAAWhwB,KAAMlJ,EAAK8H,WACtB9H,EAAK+Q,KAEE,GAGA,KAKXwoB,QAAS,CACRG,MAAO,UACPC,QAAS,eAYL58B,EAAQy7B,cACb95B,EAAOy0B,UAAUhiB,SAAW,CAC3B7R,IAAK,SAAUU,GAId,IAAI0P,EAAS1P,EAAK1B,WAIlB,OAHKoR,GAAUA,EAAOpR,YACrBoR,EAAOpR,WAAW8S,cAEZ,MAERyM,IAAK,SAAU7d,GAId,IAAI0P,EAAS1P,EAAK1B,WACboR,IACJA,EAAO0B,cAEF1B,EAAOpR,YACXoR,EAAOpR,WAAW8S,kBAOvB1S,EAAOmB,KAAM,CACZ,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,mBACE,WACFnB,EAAO66B,QAASz9B,KAAKoH,eAAkBpH,OA4BxC4C,EAAOG,GAAG8B,OAAQ,CACjBi5B,SAAU,SAAU/2B,GACnB,IAAIg3B,EAAS75B,EAAMsK,EAAKwvB,EAAUC,EAAOx5B,EAAGy5B,EAC3Cn8B,EAAI,EAEL,GAAKb,EAAY6F,GAChB,OAAO/G,KAAK+D,KAAM,SAAUU,GAC3B7B,EAAQ5C,MAAO89B,SAAU/2B,EAAM/F,KAAMhB,KAAMyE,EAAG64B,GAAUt9B,UAM1D,IAFA+9B,EAAUR,GAAgBx2B,IAEb5D,OACZ,MAAUe,EAAOlE,KAAM+B,KAItB,GAHAi8B,EAAWV,GAAUp5B,GACrBsK,EAAwB,IAAlBtK,EAAK9C,UAAoB,IAAMi8B,GAAkBW,GAAa,IAEzD,CACVv5B,EAAI,EACJ,MAAUw5B,EAAQF,EAASt5B,KACrB+J,EAAI/N,QAAS,IAAMw9B,EAAQ,KAAQ,IACvCzvB,GAAOyvB,EAAQ,KAMZD,KADLE,EAAab,GAAkB7uB,KAE9BtK,EAAK7B,aAAc,QAAS67B,GAMhC,OAAOl+B,MAGRm+B,YAAa,SAAUp3B,GACtB,IAAIg3B,EAAS75B,EAAMsK,EAAKwvB,EAAUC,EAAOx5B,EAAGy5B,EAC3Cn8B,EAAI,EAEL,GAAKb,EAAY6F,GAChB,OAAO/G,KAAK+D,KAAM,SAAUU,GAC3B7B,EAAQ5C,MAAOm+B,YAAap3B,EAAM/F,KAAMhB,KAAMyE,EAAG64B,GAAUt9B,UAI7D,IAAMoE,UAAUjB,OACf,OAAOnD,KAAKyR,KAAM,QAAS,IAK5B,IAFAssB,EAAUR,GAAgBx2B,IAEb5D,OACZ,MAAUe,EAAOlE,KAAM+B,KAMtB,GALAi8B,EAAWV,GAAUp5B,GAGrBsK,EAAwB,IAAlBtK,EAAK9C,UAAoB,IAAMi8B,GAAkBW,GAAa,IAEzD,CACVv5B,EAAI,EACJ,MAAUw5B,EAAQF,EAASt5B,KAG1B,OAA4C,EAApC+J,EAAI/N,QAAS,IAAMw9B,EAAQ,KAClCzvB,EAAMA,EAAI5I,QAAS,IAAMq4B,EAAQ,IAAK,KAMnCD,KADLE,EAAab,GAAkB7uB,KAE9BtK,EAAK7B,aAAc,QAAS67B,GAMhC,OAAOl+B,MAGRo+B,YAAa,SAAUr3B,EAAOs3B,GAC7B,IAAI98B,SAAcwF,EACjBu3B,EAAwB,WAAT/8B,GAAqB+D,MAAMC,QAASwB,GAEpD,MAAyB,kBAAbs3B,GAA0BC,EAC9BD,EAAWr+B,KAAK89B,SAAU/2B,GAAU/G,KAAKm+B,YAAap3B,GAGzD7F,EAAY6F,GACT/G,KAAK+D,KAAM,SAAUhC,GAC3Ba,EAAQ5C,MAAOo+B,YACdr3B,EAAM/F,KAAMhB,KAAM+B,EAAGu7B,GAAUt9B,MAAQq+B,GACvCA,KAKIr+B,KAAK+D,KAAM,WACjB,IAAI6L,EAAW7N,EAAGmY,EAAMqkB,EAExB,GAAKD,EAAe,CAGnBv8B,EAAI,EACJmY,EAAOtX,EAAQ5C,MACfu+B,EAAahB,GAAgBx2B,GAE7B,MAAU6I,EAAY2uB,EAAYx8B,KAG5BmY,EAAKskB,SAAU5uB,GACnBsK,EAAKikB,YAAavuB,GAElBsK,EAAK4jB,SAAUluB,aAKIpK,IAAVuB,GAAgC,YAATxF,KAClCqO,EAAY0tB,GAAUt9B,QAIrBmiB,EAASJ,IAAK/hB,KAAM,gBAAiB4P,GAOjC5P,KAAKqC,cACTrC,KAAKqC,aAAc,QAClBuN,IAAuB,IAAV7I,EACb,GACAob,EAAS3e,IAAKxD,KAAM,kBAAqB,QAO9Cw+B,SAAU,SAAU37B,GACnB,IAAI+M,EAAW1L,EACdnC,EAAI,EAEL6N,EAAY,IAAM/M,EAAW,IAC7B,MAAUqB,EAAOlE,KAAM+B,KACtB,GAAuB,IAAlBmC,EAAK9C,WACoE,GAA3E,IAAMi8B,GAAkBC,GAAUp5B,IAAW,KAAMzD,QAASmP,GAC7D,OAAO,EAIV,OAAO,KAOT,IAAI6uB,GAAU,MAEd77B,EAAOG,GAAG8B,OAAQ,CACjB7C,IAAK,SAAU+E,GACd,IAAIgc,EAAOnf,EAAKurB,EACfjrB,EAAOlE,KAAM,GAEd,OAAMoE,UAAUjB,QA0BhBgsB,EAAkBjuB,EAAY6F,GAEvB/G,KAAK+D,KAAM,SAAUhC,GAC3B,IAAIC,EAEmB,IAAlBhC,KAAKoB,WAWE,OANXY,EADImtB,EACEpoB,EAAM/F,KAAMhB,KAAM+B,EAAGa,EAAQ5C,MAAOgC,OAEpC+E,GAKN/E,EAAM,GAEoB,iBAARA,EAClBA,GAAO,GAEIsD,MAAMC,QAASvD,KAC1BA,EAAMY,EAAOqB,IAAKjC,EAAK,SAAU+E,GAChC,OAAgB,MAATA,EAAgB,GAAKA,EAAQ,OAItCgc,EAAQngB,EAAO87B,SAAU1+B,KAAKuB,OAAUqB,EAAO87B,SAAU1+B,KAAKgM,SAAS5E,iBAGrD,QAAS2b,QAA+Cvd,IAApCud,EAAMhB,IAAK/hB,KAAMgC,EAAK,WAC3DhC,KAAK+G,MAAQ/E,OAzDTkC,GACJ6e,EAAQngB,EAAO87B,SAAUx6B,EAAK3C,OAC7BqB,EAAO87B,SAAUx6B,EAAK8H,SAAS5E,iBAG/B,QAAS2b,QACgCvd,KAAvC5B,EAAMmf,EAAMvf,IAAKU,EAAM,UAElBN,EAMY,iBAHpBA,EAAMM,EAAK6C,OAIHnD,EAAIgC,QAAS64B,GAAS,IAIhB,MAAP76B,EAAc,GAAKA,OAG3B,KAyCHhB,EAAOiC,OAAQ,CACd65B,SAAU,CACTjZ,OAAQ,CACPjiB,IAAK,SAAUU,GAEd,IAAIlC,EAAMY,EAAOsN,KAAKuB,KAAMvN,EAAM,SAClC,OAAc,MAAPlC,EACNA,EAMAq7B,GAAkBz6B,EAAOT,KAAM+B,MAGlCyD,OAAQ,CACPnE,IAAK,SAAUU,GACd,IAAI6C,EAAO0e,EAAQ1jB,EAClB+C,EAAUZ,EAAKY,QACfiW,EAAQ7W,EAAKoR,cACb2S,EAAoB,eAAd/jB,EAAK3C,KACX0jB,EAASgD,EAAM,KAAO,GACtBiM,EAAMjM,EAAMlN,EAAQ,EAAIjW,EAAQ3B,OAUjC,IAPCpB,EADIgZ,EAAQ,EACRmZ,EAGAjM,EAAMlN,EAAQ,EAIXhZ,EAAImyB,EAAKnyB,IAKhB,KAJA0jB,EAAS3gB,EAAS/C,IAIJsT,UAAYtT,IAAMgZ,KAG7B0K,EAAO1Z,YACL0Z,EAAOjjB,WAAWuJ,WACnBC,EAAUyZ,EAAOjjB,WAAY,aAAiB,CAMjD,GAHAuE,EAAQnE,EAAQ6iB,GAASzjB,MAGpBimB,EACJ,OAAOlhB,EAIRke,EAAOzkB,KAAMuG,GAIf,OAAOke,GAGRlD,IAAK,SAAU7d,EAAM6C,GACpB,IAAI43B,EAAWlZ,EACd3gB,EAAUZ,EAAKY,QACfmgB,EAASriB,EAAO0D,UAAWS,GAC3BhF,EAAI+C,EAAQ3B,OAEb,MAAQpB,MACP0jB,EAAS3gB,EAAS/C,IAINsT,UACuD,EAAlEzS,EAAO4D,QAAS5D,EAAO87B,SAASjZ,OAAOjiB,IAAKiiB,GAAUR,MAEtD0Z,GAAY,GAUd,OAHMA,IACLz6B,EAAKoR,eAAiB,GAEhB2P,OAOXriB,EAAOmB,KAAM,CAAE,QAAS,YAAc,WACrCnB,EAAO87B,SAAU1+B,MAAS,CACzB+hB,IAAK,SAAU7d,EAAM6C,GACpB,GAAKzB,MAAMC,QAASwB,GACnB,OAAS7C,EAAKkR,SAA2D,EAAjDxS,EAAO4D,QAAS5D,EAAQsB,GAAOlC,MAAO+E,KAI3D9F,EAAQw7B,UACb75B,EAAO87B,SAAU1+B,MAAOwD,IAAM,SAAUU,GACvC,OAAwC,OAAjCA,EAAK9B,aAAc,SAAqB,KAAO8B,EAAK6C,UAW9D9F,EAAQ29B,QAAU,cAAe7+B,EAGjC,IAAI8+B,GAAc,kCACjBC,GAA0B,SAAU1yB,GACnCA,EAAEsc,mBAGJ9lB,EAAOiC,OAAQjC,EAAOulB,MAAO,CAE5BU,QAAS,SAAUV,EAAOnG,EAAM9d,EAAM66B,GAErC,IAAIh9B,EAAGyM,EAAK6B,EAAK2uB,EAAYC,EAAQzV,EAAQ7K,EAASugB,EACrDC,EAAY,CAAEj7B,GAAQtE,GACtB2B,EAAOX,EAAOI,KAAMmnB,EAAO,QAAWA,EAAM5mB,KAAO4mB,EACnDkB,EAAazoB,EAAOI,KAAMmnB,EAAO,aAAgBA,EAAMhZ,UAAUhI,MAAO,KAAQ,GAKjF,GAHAqH,EAAM0wB,EAAc7uB,EAAMnM,EAAOA,GAAQtE,EAGlB,IAAlBsE,EAAK9C,UAAoC,IAAlB8C,EAAK9C,WAK5By9B,GAAYzxB,KAAM7L,EAAOqB,EAAOulB,MAAMsB,cAIf,EAAvBloB,EAAKd,QAAS,OAIlBc,GADA8nB,EAAa9nB,EAAK4F,MAAO,MACP4G,QAClBsb,EAAW1kB,QAEZs6B,EAAS19B,EAAKd,QAAS,KAAQ,GAAK,KAAOc,GAG3C4mB,EAAQA,EAAOvlB,EAAO6C,SACrB0iB,EACA,IAAIvlB,EAAOkmB,MAAOvnB,EAAuB,iBAAV4mB,GAAsBA,IAGhDK,UAAYuW,EAAe,EAAI,EACrC5W,EAAMhZ,UAAYka,EAAW/b,KAAM,KACnC6a,EAAMuC,WAAavC,EAAMhZ,UACxB,IAAIzF,OAAQ,UAAY2f,EAAW/b,KAAM,iBAAoB,WAC7D,KAGD6a,EAAMjV,YAAS1N,EACT2iB,EAAMhjB,SACXgjB,EAAMhjB,OAASjB,GAIhB8d,EAAe,MAARA,EACN,CAAEmG,GACFvlB,EAAO0D,UAAW0b,EAAM,CAAEmG,IAG3BxJ,EAAU/b,EAAOulB,MAAMxJ,QAASpd,IAAU,GACpCw9B,IAAgBpgB,EAAQkK,UAAmD,IAAxClK,EAAQkK,QAAQ1kB,MAAOD,EAAM8d,IAAtE,CAMA,IAAM+c,IAAiBpgB,EAAQyM,WAAa/pB,EAAU6C,GAAS,CAM9D,IAJA86B,EAAargB,EAAQ8J,cAAgBlnB,EAC/Bs9B,GAAYzxB,KAAM4xB,EAAaz9B,KACpCiN,EAAMA,EAAIhM,YAEHgM,EAAKA,EAAMA,EAAIhM,WACtB28B,EAAU3+B,KAAMgO,GAChB6B,EAAM7B,EAIF6B,KAAUnM,EAAK2I,eAAiBjN,IACpCu/B,EAAU3+B,KAAM6P,EAAIb,aAAea,EAAI+uB,cAAgBr/B,GAKzDgC,EAAI,EACJ,OAAUyM,EAAM2wB,EAAWp9B,QAAYomB,EAAMoC,uBAC5C2U,EAAc1wB,EACd2Z,EAAM5mB,KAAW,EAAJQ,EACZi9B,EACArgB,EAAQgL,UAAYpoB,GAGrBioB,GAAWrH,EAAS3e,IAAKgL,EAAK,WAAc,IAAM2Z,EAAM5mB,OACvD4gB,EAAS3e,IAAKgL,EAAK,YAEnBgb,EAAOrlB,MAAOqK,EAAKwT,IAIpBwH,EAASyV,GAAUzwB,EAAKywB,KACTzV,EAAOrlB,OAASsd,EAAYjT,KAC1C2Z,EAAMjV,OAASsW,EAAOrlB,MAAOqK,EAAKwT,IACZ,IAAjBmG,EAAMjV,QACViV,EAAMS,kBA8CT,OA1CAT,EAAM5mB,KAAOA,EAGPw9B,GAAiB5W,EAAMsD,sBAEpB9M,EAAQmH,WACqC,IAApDnH,EAAQmH,SAAS3hB,MAAOg7B,EAAUl2B,MAAO+Y,KACzCP,EAAYvd,IAIP+6B,GAAU/9B,EAAYgD,EAAM3C,MAAaF,EAAU6C,MAGvDmM,EAAMnM,EAAM+6B,MAGX/6B,EAAM+6B,GAAW,MAIlBr8B,EAAOulB,MAAMsB,UAAYloB,EAEpB4mB,EAAMoC,wBACV2U,EAAYxvB,iBAAkBnO,EAAMu9B,IAGrC56B,EAAM3C,KAED4mB,EAAMoC,wBACV2U,EAAY3e,oBAAqBhf,EAAMu9B,IAGxCl8B,EAAOulB,MAAMsB,eAAYjkB,EAEpB6K,IACJnM,EAAM+6B,GAAW5uB,IAMd8X,EAAMjV,SAKdmsB,SAAU,SAAU99B,EAAM2C,EAAMikB,GAC/B,IAAI/b,EAAIxJ,EAAOiC,OACd,IAAIjC,EAAOkmB,MACXX,EACA,CACC5mB,KAAMA,EACNuqB,aAAa,IAIflpB,EAAOulB,MAAMU,QAASzc,EAAG,KAAMlI,MAKjCtB,EAAOG,GAAG8B,OAAQ,CAEjBgkB,QAAS,SAAUtnB,EAAMygB,GACxB,OAAOhiB,KAAK+D,KAAM,WACjBnB,EAAOulB,MAAMU,QAAStnB,EAAMygB,EAAMhiB,SAGpCs/B,eAAgB,SAAU/9B,EAAMygB,GAC/B,IAAI9d,EAAOlE,KAAM,GACjB,GAAKkE,EACJ,OAAOtB,EAAOulB,MAAMU,QAAStnB,EAAMygB,EAAM9d,GAAM,MAc5CjD,EAAQ29B,SACbh8B,EAAOmB,KAAM,CAAE+Q,MAAO,UAAW6Y,KAAM,YAAc,SAAUK,EAAM5D,GAGpE,IAAI/b,EAAU,SAAU8Z,GACvBvlB,EAAOulB,MAAMkX,SAAUjV,EAAKjC,EAAMhjB,OAAQvC,EAAOulB,MAAMiC,IAAKjC,KAG7DvlB,EAAOulB,MAAMxJ,QAASyL,GAAQ,CAC7BP,MAAO,WACN,IAAI/nB,EAAM9B,KAAK6M,eAAiB7M,KAC/Bu/B,EAAWpd,EAASvB,OAAQ9e,EAAKsoB,GAE5BmV,GACLz9B,EAAI4N,iBAAkBse,EAAM3f,GAAS,GAEtC8T,EAASvB,OAAQ9e,EAAKsoB,GAAOmV,GAAY,GAAM,IAEhDvV,SAAU,WACT,IAAIloB,EAAM9B,KAAK6M,eAAiB7M,KAC/Bu/B,EAAWpd,EAASvB,OAAQ9e,EAAKsoB,GAAQ,EAEpCmV,EAKLpd,EAASvB,OAAQ9e,EAAKsoB,EAAKmV,IAJ3Bz9B,EAAIye,oBAAqByN,EAAM3f,GAAS,GACxC8T,EAAS/E,OAAQtb,EAAKsoB,QAS3B,IAAIxV,GAAW7U,EAAO6U,SAElBnT,GAAQ4G,KAAKwjB,MAEb2T,GAAS,KAKb58B,EAAO68B,SAAW,SAAUzd,GAC3B,IAAIzO,EACJ,IAAMyO,GAAwB,iBAATA,EACpB,OAAO,KAKR,IACCzO,GAAM,IAAMxT,EAAO2/B,WAAcC,gBAAiB3d,EAAM,YACvD,MAAQ5V,GACTmH,OAAM/N,EAMP,OAHM+N,IAAOA,EAAItG,qBAAsB,eAAgB9J,QACtDP,EAAOkD,MAAO,gBAAkBkc,GAE1BzO,GAIR,IACCqsB,GAAW,QACXC,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,qCAEhB,SAASC,GAAahJ,EAAQ71B,EAAK8+B,EAAahlB,GAC/C,IAAIlW,EAEJ,GAAKO,MAAMC,QAASpE,GAGnByB,EAAOmB,KAAM5C,EAAK,SAAUY,EAAG8Z,GACzBokB,GAAeL,GAASxyB,KAAM4pB,GAGlC/b,EAAK+b,EAAQnb,GAKbmkB,GACChJ,EAAS,KAAqB,iBAANnb,GAAuB,MAALA,EAAY9Z,EAAI,IAAO,IACjE8Z,EACAokB,EACAhlB,UAKG,GAAMglB,GAAiC,WAAlBv9B,EAAQvB,GAUnC8Z,EAAK+b,EAAQ71B,QAPb,IAAM4D,KAAQ5D,EACb6+B,GAAahJ,EAAS,IAAMjyB,EAAO,IAAK5D,EAAK4D,GAAQk7B,EAAahlB,GAYrErY,EAAOs9B,MAAQ,SAAUn3B,EAAGk3B,GAC3B,IAAIjJ,EACHmJ,EAAI,GACJllB,EAAM,SAAUpN,EAAKuyB,GAGpB,IAAIr5B,EAAQ7F,EAAYk/B,GACvBA,IACAA,EAEDD,EAAGA,EAAEh9B,QAAWk9B,mBAAoBxyB,GAAQ,IAC3CwyB,mBAA6B,MAATt5B,EAAgB,GAAKA,IAG5C,GAAU,MAALgC,EACJ,MAAO,GAIR,GAAKzD,MAAMC,QAASwD,IAASA,EAAE1F,SAAWT,EAAOyC,cAAe0D,GAG/DnG,EAAOmB,KAAMgF,EAAG,WACfkS,EAAKjb,KAAK+E,KAAM/E,KAAK+G,cAOtB,IAAMiwB,KAAUjuB,EACfi3B,GAAahJ,EAAQjuB,EAAGiuB,GAAUiJ,EAAahlB,GAKjD,OAAOklB,EAAE7yB,KAAM,MAGhB1K,EAAOG,GAAG8B,OAAQ,CACjBy7B,UAAW,WACV,OAAO19B,EAAOs9B,MAAOlgC,KAAKugC,mBAE3BA,eAAgB,WACf,OAAOvgC,KAAKiE,IAAK,WAGhB,IAAIuN,EAAW5O,EAAOqf,KAAMjiB,KAAM,YAClC,OAAOwR,EAAW5O,EAAO0D,UAAWkL,GAAaxR,OAEjDgQ,OAAQ,WACR,IAAIzO,EAAOvB,KAAKuB,KAGhB,OAAOvB,KAAK+E,OAASnC,EAAQ5C,MAAO2Z,GAAI,cACvComB,GAAa3yB,KAAMpN,KAAKgM,YAAe8zB,GAAgB1yB,KAAM7L,KAC3DvB,KAAKoV,UAAYiQ,GAAejY,KAAM7L,MAEzC0C,IAAK,SAAUlC,EAAGmC,GAClB,IAAIlC,EAAMY,EAAQ5C,MAAOgC,MAEzB,OAAY,MAAPA,EACG,KAGHsD,MAAMC,QAASvD,GACZY,EAAOqB,IAAKjC,EAAK,SAAUA,GACjC,MAAO,CAAE+C,KAAMb,EAAKa,KAAMgC,MAAO/E,EAAI4D,QAASi6B,GAAO,WAIhD,CAAE96B,KAAMb,EAAKa,KAAMgC,MAAO/E,EAAI4D,QAASi6B,GAAO,WAClDr8B,SAKN,IACCg9B,GAAM,OACNC,GAAQ,OACRC,GAAa,gBACbC,GAAW,6BAIXC,GAAa,iBACbC,GAAY,QAWZrH,GAAa,GAObsH,GAAa,GAGbC,GAAW,KAAKxgC,OAAQ,KAGxBygC,GAAephC,EAASsC,cAAe,KAIxC,SAAS++B,GAA6BC,GAGrC,OAAO,SAAUC,EAAoB1jB,GAED,iBAAvB0jB,IACX1jB,EAAO0jB,EACPA,EAAqB,KAGtB,IAAIC,EACHr/B,EAAI,EACJs/B,EAAYF,EAAmB/5B,cAAcqF,MAAOkP,IAAmB,GAExE,GAAKza,EAAYuc,GAGhB,MAAU2jB,EAAWC,EAAWt/B,KAGR,MAAlBq/B,EAAU,IACdA,EAAWA,EAAS9gC,MAAO,IAAO,KAChC4gC,EAAWE,GAAaF,EAAWE,IAAc,IAAK9vB,QAASmM,KAI/DyjB,EAAWE,GAAaF,EAAWE,IAAc,IAAK5gC,KAAMid,IAQnE,SAAS6jB,GAA+BJ,EAAWp8B,EAASi1B,EAAiBwH,GAE5E,IAAIC,EAAY,GACfC,EAAqBP,IAAcJ,GAEpC,SAASY,EAASN,GACjB,IAAI/rB,EAcJ,OAbAmsB,EAAWJ,IAAa,EACxBx+B,EAAOmB,KAAMm9B,EAAWE,IAAc,GAAI,SAAUn2B,EAAG02B,GACtD,IAAIC,EAAsBD,EAAoB78B,EAASi1B,EAAiBwH,GACxE,MAAoC,iBAAxBK,GACVH,GAAqBD,EAAWI,GAKtBH,IACDpsB,EAAWusB,QADf,GAHN98B,EAAQu8B,UAAU/vB,QAASswB,GAC3BF,EAASE,IACF,KAKFvsB,EAGR,OAAOqsB,EAAS58B,EAAQu8B,UAAW,MAAUG,EAAW,MAASE,EAAS,KAM3E,SAASG,GAAY18B,EAAQ3D,GAC5B,IAAIqM,EAAKzI,EACR08B,EAAcl/B,EAAOm/B,aAAaD,aAAe,GAElD,IAAMj0B,KAAOrM,OACQgE,IAAfhE,EAAKqM,MACPi0B,EAAaj0B,GAAQ1I,EAAWC,IAAUA,EAAO,KAAUyI,GAAQrM,EAAKqM,IAO5E,OAJKzI,GACJxC,EAAOiC,QAAQ,EAAMM,EAAQC,GAGvBD,EA/EP67B,GAAa/rB,KAAOL,GAASK,KAgP9BrS,EAAOiC,OAAQ,CAGdm9B,OAAQ,EAGRC,aAAc,GACdC,KAAM,GAENH,aAAc,CACbI,IAAKvtB,GAASK,KACd1T,KAAM,MACN6gC,QAvRgB,4DAuRQh1B,KAAMwH,GAASytB,UACvC7iC,QAAQ,EACR8iC,aAAa,EACbC,OAAO,EACPC,YAAa,mDAcbC,QAAS,CACRnI,IAAKyG,GACL5+B,KAAM,aACNitB,KAAM,YACN7b,IAAK,4BACLmvB,KAAM,qCAGPjoB,SAAU,CACTlH,IAAK,UACL6b,KAAM,SACNsT,KAAM,YAGPC,eAAgB,CACfpvB,IAAK,cACLpR,KAAM,eACNugC,KAAM,gBAKPE,WAAY,CAGXC,SAAUx3B,OAGVy3B,aAAa,EAGbC,YAAavgB,KAAKC,MAGlBugB,WAAYpgC,EAAO68B,UAOpBqC,YAAa,CACZK,KAAK,EACLr/B,SAAS,IAOXmgC,UAAW,SAAU99B,EAAQ+9B,GAC5B,OAAOA,EAGNrB,GAAYA,GAAY18B,EAAQvC,EAAOm/B,cAAgBmB,GAGvDrB,GAAYj/B,EAAOm/B,aAAc58B,IAGnCg+B,cAAelC,GAA6BzH,IAC5C4J,cAAenC,GAA6BH,IAG5CuC,KAAM,SAAUlB,EAAKr9B,GAGA,iBAARq9B,IACXr9B,EAAUq9B,EACVA,OAAM38B,GAIPV,EAAUA,GAAW,GAErB,IAAIw+B,EAGHC,EAGAC,EACAC,EAGAC,EAGAC,EAGArjB,EAGAsjB,EAGA7hC,EAGA8hC,EAGA1D,EAAIv9B,EAAOqgC,UAAW,GAAIn+B,GAG1Bg/B,EAAkB3D,EAAEr9B,SAAWq9B,EAG/B4D,EAAqB5D,EAAEr9B,UACpBghC,EAAgB1iC,UAAY0iC,EAAgBzgC,QAC7CT,EAAQkhC,GACRlhC,EAAOulB,MAGTtK,EAAWjb,EAAO4a,WAClBwmB,EAAmBphC,EAAO4Z,UAAW,eAGrCynB,EAAa9D,EAAE8D,YAAc,GAG7BC,EAAiB,GACjBC,EAAsB,GAGtBC,EAAW,WAGX7C,EAAQ,CACP7gB,WAAY,EAGZ2jB,kBAAmB,SAAUx2B,GAC5B,IAAIpB,EACJ,GAAK6T,EAAY,CAChB,IAAMmjB,EAAkB,CACvBA,EAAkB,GAClB,MAAUh3B,EAAQk0B,GAAS7zB,KAAM02B,GAChCC,EAAiBh3B,EAAO,GAAIrF,cAAgB,MACzCq8B,EAAiBh3B,EAAO,GAAIrF,cAAgB,MAAS,IACrD7G,OAAQkM,EAAO,IAGpBA,EAAQg3B,EAAiB51B,EAAIzG,cAAgB,KAE9C,OAAgB,MAATqF,EAAgB,KAAOA,EAAMa,KAAM,OAI3Cg3B,sBAAuB,WACtB,OAAOhkB,EAAYkjB,EAAwB,MAI5Ce,iBAAkB,SAAUx/B,EAAMgC,GAMjC,OALkB,MAAbuZ,IACJvb,EAAOo/B,EAAqBp/B,EAAKqC,eAChC+8B,EAAqBp/B,EAAKqC,gBAAmBrC,EAC9Cm/B,EAAgBn/B,GAASgC,GAEnB/G,MAIRwkC,iBAAkB,SAAUjjC,GAI3B,OAHkB,MAAb+e,IACJ6f,EAAEsE,SAAWljC,GAEPvB,MAIRikC,WAAY,SAAUhgC,GACrB,IAAIrC,EACJ,GAAKqC,EACJ,GAAKqc,EAGJihB,EAAM3jB,OAAQ3Z,EAAKs9B,EAAMmD,cAIzB,IAAM9iC,KAAQqC,EACbggC,EAAYriC,GAAS,CAAEqiC,EAAYriC,GAAQqC,EAAKrC,IAInD,OAAO5B,MAIR2kC,MAAO,SAAUC,GAChB,IAAIC,EAAYD,GAAcR,EAK9B,OAJKd,GACJA,EAAUqB,MAAOE,GAElBr8B,EAAM,EAAGq8B,GACF7kC,OAoBV,GAfA6d,EAASxB,QAASklB,GAKlBpB,EAAEgC,MAAUA,GAAOhC,EAAEgC,KAAOvtB,GAASK,MAAS,IAC5CrP,QAASi7B,GAAWjsB,GAASytB,SAAW,MAG1ClC,EAAE5+B,KAAOuD,EAAQsX,QAAUtX,EAAQvD,MAAQ4+B,EAAE/jB,QAAU+jB,EAAE5+B,KAGzD4+B,EAAEkB,WAAclB,EAAEiB,UAAY,KAAMh6B,cAAcqF,MAAOkP,IAAmB,CAAE,IAGxD,MAAjBwkB,EAAE2E,YAAsB,CAC5BnB,EAAY/jC,EAASsC,cAAe,KAKpC,IACCyhC,EAAU1uB,KAAOkrB,EAAEgC,IAInBwB,EAAU1uB,KAAO0uB,EAAU1uB,KAC3BkrB,EAAE2E,YAAc9D,GAAaqB,SAAW,KAAOrB,GAAa+D,MAC3DpB,EAAUtB,SAAW,KAAOsB,EAAUoB,KACtC,MAAQ34B,GAIT+zB,EAAE2E,aAAc,GAalB,GARK3E,EAAEne,MAAQme,EAAEmC,aAAiC,iBAAXnC,EAAEne,OACxCme,EAAEne,KAAOpf,EAAOs9B,MAAOC,EAAEne,KAAMme,EAAEF,cAIlCqB,GAA+B9H,GAAY2G,EAAGr7B,EAASy8B,GAGlDjhB,EACJ,OAAOihB,EA6ER,IAAMx/B,KAxEN6hC,EAAchhC,EAAOulB,OAASgY,EAAE3gC,SAGQ,GAApBoD,EAAOo/B,UAC1Bp/B,EAAOulB,MAAMU,QAAS,aAIvBsX,EAAE5+B,KAAO4+B,EAAE5+B,KAAK+f,cAGhB6e,EAAE6E,YAAcpE,GAAWxzB,KAAM+yB,EAAE5+B,MAKnCgiC,EAAWpD,EAAEgC,IAAIv8B,QAAS66B,GAAO,IAG3BN,EAAE6E,WAuBI7E,EAAEne,MAAQme,EAAEmC,aACoD,KAAzEnC,EAAEqC,aAAe,IAAK/hC,QAAS,uCACjC0/B,EAAEne,KAAOme,EAAEne,KAAKpc,QAAS46B,GAAK,OAtB9BqD,EAAW1D,EAAEgC,IAAI7hC,MAAOijC,EAASpgC,QAG5Bg9B,EAAEne,OAAUme,EAAEmC,aAAiC,iBAAXnC,EAAEne,QAC1CuhB,IAAc/D,GAAOpyB,KAAMm2B,GAAa,IAAM,KAAQpD,EAAEne,YAGjDme,EAAEne,OAIO,IAAZme,EAAEvyB,QACN21B,EAAWA,EAAS39B,QAAS86B,GAAY,MACzCmD,GAAarE,GAAOpyB,KAAMm2B,GAAa,IAAM,KAAQ,KAAS9hC,KAAYoiC,GAI3E1D,EAAEgC,IAAMoB,EAAWM,GASf1D,EAAE8E,aACDriC,EAAOq/B,aAAcsB,IACzBhC,EAAMgD,iBAAkB,oBAAqB3hC,EAAOq/B,aAAcsB,IAE9D3gC,EAAOs/B,KAAMqB,IACjBhC,EAAMgD,iBAAkB,gBAAiB3hC,EAAOs/B,KAAMqB,MAKnDpD,EAAEne,MAAQme,EAAE6E,aAAgC,IAAlB7E,EAAEqC,aAAyB19B,EAAQ09B,cACjEjB,EAAMgD,iBAAkB,eAAgBpE,EAAEqC,aAI3CjB,EAAMgD,iBACL,SACApE,EAAEkB,UAAW,IAAOlB,EAAEsC,QAAStC,EAAEkB,UAAW,IAC3ClB,EAAEsC,QAAStC,EAAEkB,UAAW,KACA,MAArBlB,EAAEkB,UAAW,GAAc,KAAON,GAAW,WAAa,IAC7DZ,EAAEsC,QAAS,MAIFtC,EAAE+E,QACZ3D,EAAMgD,iBAAkBxiC,EAAGo+B,EAAE+E,QAASnjC,IAIvC,GAAKo+B,EAAEgF,cAC+C,IAAnDhF,EAAEgF,WAAWnkC,KAAM8iC,EAAiBvC,EAAOpB,IAAiB7f,GAG9D,OAAOihB,EAAMoD,QAed,GAXAP,EAAW,QAGXJ,EAAiB/oB,IAAKklB,EAAEhG,UACxBoH,EAAM/4B,KAAM23B,EAAEiF,SACd7D,EAAMjlB,KAAM6jB,EAAEr6B,OAGdw9B,EAAYhC,GAA+BR,GAAYX,EAAGr7B,EAASy8B,GAK5D,CASN,GARAA,EAAM7gB,WAAa,EAGdkjB,GACJG,EAAmBlb,QAAS,WAAY,CAAE0Y,EAAOpB,IAI7C7f,EACJ,OAAOihB,EAIHpB,EAAEoC,OAAqB,EAAZpC,EAAE5D,UACjBmH,EAAe3jC,EAAOuf,WAAY,WACjCiiB,EAAMoD,MAAO,YACXxE,EAAE5D,UAGN,IACCjc,GAAY,EACZgjB,EAAU+B,KAAMnB,EAAgB17B,GAC/B,MAAQ4D,GAGT,GAAKkU,EACJ,MAAMlU,EAIP5D,GAAO,EAAG4D,SAhCX5D,GAAO,EAAG,gBAqCX,SAASA,EAAMk8B,EAAQY,EAAkBC,EAAWL,GACnD,IAAIM,EAAWJ,EAASt/B,EAAO2/B,EAAUC,EACxCd,EAAaU,EAGThlB,IAILA,GAAY,EAGPojB,GACJ3jC,EAAOy8B,aAAckH,GAKtBJ,OAAY99B,EAGZg+B,EAAwB0B,GAAW,GAGnC3D,EAAM7gB,WAAsB,EAATgkB,EAAa,EAAI,EAGpCc,EAAsB,KAAVd,GAAiBA,EAAS,KAAkB,MAAXA,EAGxCa,IACJE,EA5lBJ,SAA8BtF,EAAGoB,EAAOgE,GAEvC,IAAII,EAAIpkC,EAAMqkC,EAAeC,EAC5BprB,EAAW0lB,EAAE1lB,SACb4mB,EAAYlB,EAAEkB,UAGf,MAA2B,MAAnBA,EAAW,GAClBA,EAAUtzB,aACEvI,IAAPmgC,IACJA,EAAKxF,EAAEsE,UAAYlD,EAAM8C,kBAAmB,iBAK9C,GAAKsB,EACJ,IAAMpkC,KAAQkZ,EACb,GAAKA,EAAUlZ,IAAUkZ,EAAUlZ,GAAO6L,KAAMu4B,GAAO,CACtDtE,EAAU/vB,QAAS/P,GACnB,MAMH,GAAK8/B,EAAW,KAAOkE,EACtBK,EAAgBvE,EAAW,OACrB,CAGN,IAAM9/B,KAAQgkC,EAAY,CACzB,IAAMlE,EAAW,IAAOlB,EAAEyC,WAAYrhC,EAAO,IAAM8/B,EAAW,IAAQ,CACrEuE,EAAgBrkC,EAChB,MAEKskC,IACLA,EAAgBtkC,GAKlBqkC,EAAgBA,GAAiBC,EAMlC,GAAKD,EAIJ,OAHKA,IAAkBvE,EAAW,IACjCA,EAAU/vB,QAASs0B,GAEbL,EAAWK,GAyiBLE,CAAqB3F,EAAGoB,EAAOgE,IAI3CE,EAtiBH,SAAsBtF,EAAGsF,EAAUlE,EAAOiE,GACzC,IAAIO,EAAOC,EAASC,EAAM51B,EAAKqK,EAC9BkoB,EAAa,GAGbvB,EAAYlB,EAAEkB,UAAU/gC,QAGzB,GAAK+gC,EAAW,GACf,IAAM4E,KAAQ9F,EAAEyC,WACfA,EAAYqD,EAAK7+B,eAAkB+4B,EAAEyC,WAAYqD,GAInDD,EAAU3E,EAAUtzB,QAGpB,MAAQi4B,EAcP,GAZK7F,EAAEwC,eAAgBqD,KACtBzE,EAAOpB,EAAEwC,eAAgBqD,IAAcP,IAIlC/qB,GAAQ8qB,GAAarF,EAAE+F,aAC5BT,EAAWtF,EAAE+F,WAAYT,EAAUtF,EAAEiB,WAGtC1mB,EAAOsrB,EACPA,EAAU3E,EAAUtzB,QAKnB,GAAiB,MAAZi4B,EAEJA,EAAUtrB,OAGJ,GAAc,MAATA,GAAgBA,IAASsrB,EAAU,CAM9C,KAHAC,EAAOrD,EAAYloB,EAAO,IAAMsrB,IAAapD,EAAY,KAAOoD,IAI/D,IAAMD,KAASnD,EAId,IADAvyB,EAAM01B,EAAM5+B,MAAO,MACT,KAAQ6+B,IAGjBC,EAAOrD,EAAYloB,EAAO,IAAMrK,EAAK,KACpCuyB,EAAY,KAAOvyB,EAAK,KACb,EAGG,IAAT41B,EACJA,EAAOrD,EAAYmD,IAGgB,IAAxBnD,EAAYmD,KACvBC,EAAU31B,EAAK,GACfgxB,EAAU/vB,QAASjB,EAAK,KAEzB,MAOJ,IAAc,IAAT41B,EAGJ,GAAKA,GAAQ9F,EAAEgG,UACdV,EAAWQ,EAAMR,QAEjB,IACCA,EAAWQ,EAAMR,GAChB,MAAQr5B,GACT,MAAO,CACNuR,MAAO,cACP7X,MAAOmgC,EAAO75B,EAAI,sBAAwBsO,EAAO,OAASsrB,IASjE,MAAO,CAAEroB,MAAO,UAAWqE,KAAMyjB,GAycpBW,CAAajG,EAAGsF,EAAUlE,EAAOiE,GAGvCA,GAGCrF,EAAE8E,cACNS,EAAWnE,EAAM8C,kBAAmB,oBAEnCzhC,EAAOq/B,aAAcsB,GAAamC,IAEnCA,EAAWnE,EAAM8C,kBAAmB,WAEnCzhC,EAAOs/B,KAAMqB,GAAamC,IAKZ,MAAXhB,GAA6B,SAAXvE,EAAE5+B,KACxBqjC,EAAa,YAGS,MAAXF,EACXE,EAAa,eAIbA,EAAaa,EAAS9nB,MACtBynB,EAAUK,EAASzjB,KAEnBwjB,IADA1/B,EAAQ2/B,EAAS3/B,UAMlBA,EAAQ8+B,GACHF,GAAWE,IACfA,EAAa,QACRF,EAAS,IACbA,EAAS,KAMZnD,EAAMmD,OAASA,EACfnD,EAAMqD,YAAeU,GAAoBV,GAAe,GAGnDY,EACJ3nB,EAASmB,YAAa8kB,EAAiB,CAAEsB,EAASR,EAAYrD,IAE9D1jB,EAASuB,WAAY0kB,EAAiB,CAAEvC,EAAOqD,EAAY9+B,IAI5Dy7B,EAAM0C,WAAYA,GAClBA,OAAaz+B,EAERo+B,GACJG,EAAmBlb,QAAS2c,EAAY,cAAgB,YACvD,CAAEjE,EAAOpB,EAAGqF,EAAYJ,EAAUt/B,IAIpCk+B,EAAiBzmB,SAAUumB,EAAiB,CAAEvC,EAAOqD,IAEhDhB,IACJG,EAAmBlb,QAAS,eAAgB,CAAE0Y,EAAOpB,MAG3Cv9B,EAAOo/B,QAChBp/B,EAAOulB,MAAMU,QAAS,cAKzB,OAAO0Y,GAGR8E,QAAS,SAAUlE,EAAKngB,EAAMhe,GAC7B,OAAOpB,EAAOY,IAAK2+B,EAAKngB,EAAMhe,EAAU,SAGzCsiC,UAAW,SAAUnE,EAAKn+B,GACzB,OAAOpB,EAAOY,IAAK2+B,OAAK38B,EAAWxB,EAAU,aAI/CpB,EAAOmB,KAAM,CAAE,MAAO,QAAU,SAAUhC,EAAGqa,GAC5CxZ,EAAQwZ,GAAW,SAAU+lB,EAAKngB,EAAMhe,EAAUzC,GAUjD,OAPKL,EAAY8gB,KAChBzgB,EAAOA,GAAQyC,EACfA,EAAWge,EACXA,OAAOxc,GAID5C,EAAOygC,KAAMzgC,EAAOiC,OAAQ,CAClCs9B,IAAKA,EACL5gC,KAAM6a,EACNglB,SAAU7/B,EACVygB,KAAMA,EACNojB,QAASphC,GACPpB,EAAOyC,cAAe88B,IAASA,OAKpCv/B,EAAOysB,SAAW,SAAU8S,EAAKr9B,GAChC,OAAOlC,EAAOygC,KAAM,CACnBlB,IAAKA,EAGL5gC,KAAM,MACN6/B,SAAU,SACVxzB,OAAO,EACP20B,OAAO,EACP/iC,QAAQ,EAKRojC,WAAY,CACX2D,cAAe,cAEhBL,WAAY,SAAUT,GACrB7iC,EAAOwD,WAAYq/B,EAAU3gC,OAMhClC,EAAOG,GAAG8B,OAAQ,CACjB2hC,QAAS,SAAUpX,GAClB,IAAIvI,EAyBJ,OAvBK7mB,KAAM,KACLkB,EAAYkuB,KAChBA,EAAOA,EAAKpuB,KAAMhB,KAAM,KAIzB6mB,EAAOjkB,EAAQwsB,EAAMpvB,KAAM,GAAI6M,eAAgBvI,GAAI,GAAIY,OAAO,GAEzDlF,KAAM,GAAIwC,YACdqkB,EAAKmJ,aAAchwB,KAAM,IAG1B6mB,EAAK5iB,IAAK,WACT,IAAIC,EAAOlE,KAEX,MAAQkE,EAAKuiC,kBACZviC,EAAOA,EAAKuiC,kBAGb,OAAOviC,IACJ4rB,OAAQ9vB,OAGNA,MAGR0mC,UAAW,SAAUtX,GACpB,OAAKluB,EAAYkuB,GACTpvB,KAAK+D,KAAM,SAAUhC,GAC3Ba,EAAQ5C,MAAO0mC,UAAWtX,EAAKpuB,KAAMhB,KAAM+B,MAItC/B,KAAK+D,KAAM,WACjB,IAAImW,EAAOtX,EAAQ5C,MAClBya,EAAWP,EAAKO,WAEZA,EAAStX,OACbsX,EAAS+rB,QAASpX,GAGlBlV,EAAK4V,OAAQV,MAKhBvI,KAAM,SAAUuI,GACf,IAAIuX,EAAiBzlC,EAAYkuB,GAEjC,OAAOpvB,KAAK+D,KAAM,SAAUhC,GAC3Ba,EAAQ5C,MAAOwmC,QAASG,EAAiBvX,EAAKpuB,KAAMhB,KAAM+B,GAAMqtB,MAIlEwX,OAAQ,SAAU/jC,GAIjB,OAHA7C,KAAK4T,OAAQ/Q,GAAWwR,IAAK,QAAStQ,KAAM,WAC3CnB,EAAQ5C,MAAOmwB,YAAanwB,KAAKmM,cAE3BnM,QAKT4C,EAAO2O,KAAK/H,QAAQkvB,OAAS,SAAUx0B,GACtC,OAAQtB,EAAO2O,KAAK/H,QAAQq9B,QAAS3iC,IAEtCtB,EAAO2O,KAAK/H,QAAQq9B,QAAU,SAAU3iC,GACvC,SAAWA,EAAKquB,aAAeruB,EAAK4iC,cAAgB5iC,EAAK6wB,iBAAiB5xB,SAM3EP,EAAOm/B,aAAagF,IAAM,WACzB,IACC,OAAO,IAAIhnC,EAAOinC,eACjB,MAAQ56B,MAGX,IAAI66B,GAAmB,CAGrBC,EAAG,IAIHC,KAAM,KAEPC,GAAexkC,EAAOm/B,aAAagF,MAEpC9lC,EAAQomC,OAASD,IAAkB,oBAAqBA,GACxDnmC,EAAQoiC,KAAO+D,KAAiBA,GAEhCxkC,EAAOwgC,cAAe,SAAUt+B,GAC/B,IAAId,EAAUsjC,EAGd,GAAKrmC,EAAQomC,MAAQD,KAAiBtiC,EAAQggC,YAC7C,MAAO,CACNO,KAAM,SAAUH,EAAS/K,GACxB,IAAIp4B,EACHglC,EAAMjiC,EAAQiiC,MAWf,GATAA,EAAIQ,KACHziC,EAAQvD,KACRuD,EAAQq9B,IACRr9B,EAAQy9B,MACRz9B,EAAQ0iC,SACR1iC,EAAQmR,UAIJnR,EAAQ2iC,UACZ,IAAM1lC,KAAK+C,EAAQ2iC,UAClBV,EAAKhlC,GAAM+C,EAAQ2iC,UAAW1lC,GAmBhC,IAAMA,KAdD+C,EAAQ2/B,UAAYsC,EAAIvC,kBAC5BuC,EAAIvC,iBAAkB1/B,EAAQ2/B,UAQzB3/B,EAAQggC,aAAgBI,EAAS,sBACtCA,EAAS,oBAAuB,kBAItBA,EACV6B,EAAIxC,iBAAkBxiC,EAAGmjC,EAASnjC,IAInCiC,EAAW,SAAUzC,GACpB,OAAO,WACDyC,IACJA,EAAWsjC,EAAgBP,EAAIW,OAC9BX,EAAIY,QAAUZ,EAAIa,QAAUb,EAAIc,UAC/Bd,EAAIe,mBAAqB,KAEb,UAATvmC,EACJwlC,EAAIpC,QACgB,UAATpjC,EAKgB,iBAAfwlC,EAAIrC,OACfvK,EAAU,EAAG,SAEbA,EAGC4M,EAAIrC,OACJqC,EAAInC,YAINzK,EACC8M,GAAkBF,EAAIrC,SAAYqC,EAAIrC,OACtCqC,EAAInC,WAK+B,UAAjCmC,EAAIgB,cAAgB,SACM,iBAArBhB,EAAIiB,aACV,CAAEC,OAAQlB,EAAItB,UACd,CAAEtjC,KAAM4kC,EAAIiB,cACbjB,EAAIzC,4BAQTyC,EAAIW,OAAS1jC,IACbsjC,EAAgBP,EAAIY,QAAUZ,EAAIc,UAAY7jC,EAAU,cAKnCwB,IAAhBuhC,EAAIa,QACRb,EAAIa,QAAUN,EAEdP,EAAIe,mBAAqB,WAGA,IAAnBf,EAAIrmB,YAMR3gB,EAAOuf,WAAY,WACbtb,GACJsjC,OAQLtjC,EAAWA,EAAU,SAErB,IAGC+iC,EAAI1B,KAAMvgC,EAAQkgC,YAAclgC,EAAQkd,MAAQ,MAC/C,MAAQ5V,GAGT,GAAKpI,EACJ,MAAMoI,IAKTu4B,MAAO,WACD3gC,GACJA,QAWLpB,EAAOugC,cAAe,SAAUhD,GAC1BA,EAAE2E,cACN3E,EAAE1lB,SAASxY,QAAS,KAKtBW,EAAOqgC,UAAW,CACjBR,QAAS,CACRxgC,OAAQ,6FAGTwY,SAAU,CACTxY,OAAQ,2BAET2gC,WAAY,CACX2D,cAAe,SAAUpkC,GAExB,OADAS,EAAOwD,WAAYjE,GACZA,MAMVS,EAAOugC,cAAe,SAAU,SAAUhD,QACxB36B,IAAZ26B,EAAEvyB,QACNuyB,EAAEvyB,OAAQ,GAENuyB,EAAE2E,cACN3E,EAAE5+B,KAAO,SAKXqB,EAAOwgC,cAAe,SAAU,SAAUjD,GAIxC,IAAIl+B,EAAQ+B,EADb,GAAKm8B,EAAE2E,aAAe3E,EAAE+H,YAEvB,MAAO,CACN7C,KAAM,SAAUp6B,EAAGkvB,GAClBl4B,EAASW,EAAQ,YACf6O,KAAM0uB,EAAE+H,aAAe,IACvBjmB,KAAM,CAAEkmB,QAAShI,EAAEiI,cAAe5mC,IAAK2+B,EAAEgC,MACzCpa,GAAI,aAAc/jB,EAAW,SAAUqkC,GACvCpmC,EAAOmb,SACPpZ,EAAW,KACNqkC,GACJlO,EAAuB,UAAbkO,EAAI9mC,KAAmB,IAAM,IAAK8mC,EAAI9mC,QAKnD3B,EAAS0C,KAAKC,YAAaN,EAAQ,KAEpC0iC,MAAO,WACD3gC,GACJA,QAUL,IAqGKkhB,GArGDojB,GAAe,GAClBC,GAAS,oBAGV3lC,EAAOqgC,UAAW,CACjBuF,MAAO,WACPC,cAAe,WACd,IAAIzkC,EAAWskC,GAAar/B,OAAWrG,EAAO6C,QAAU,IAAQhE,KAEhE,OADAzB,KAAMgE,IAAa,EACZA,KAKTpB,EAAOugC,cAAe,aAAc,SAAUhD,EAAGuI,EAAkBnH,GAElE,IAAIoH,EAAcC,EAAaC,EAC9BC,GAAuB,IAAZ3I,EAAEqI,QAAqBD,GAAOn7B,KAAM+yB,EAAEgC,KAChD,MACkB,iBAAXhC,EAAEne,MAE6C,KADnDme,EAAEqC,aAAe,IACjB/hC,QAAS,sCACX8nC,GAAOn7B,KAAM+yB,EAAEne,OAAU,QAI5B,GAAK8mB,GAAiC,UAArB3I,EAAEkB,UAAW,GA8D7B,OA3DAsH,EAAexI,EAAEsI,cAAgBvnC,EAAYi/B,EAAEsI,eAC9CtI,EAAEsI,gBACFtI,EAAEsI,cAGEK,EACJ3I,EAAG2I,GAAa3I,EAAG2I,GAAWljC,QAAS2iC,GAAQ,KAAOI,IAC/B,IAAZxI,EAAEqI,QACbrI,EAAEgC,MAAS3C,GAAOpyB,KAAM+yB,EAAEgC,KAAQ,IAAM,KAAQhC,EAAEqI,MAAQ,IAAMG,GAIjExI,EAAEyC,WAAY,eAAkB,WAI/B,OAHMiG,GACLjmC,EAAOkD,MAAO6iC,EAAe,mBAEvBE,EAAmB,IAI3B1I,EAAEkB,UAAW,GAAM,OAGnBuH,EAAc7oC,EAAQ4oC,GACtB5oC,EAAQ4oC,GAAiB,WACxBE,EAAoBzkC,WAIrBm9B,EAAM3jB,OAAQ,gBAGQpY,IAAhBojC,EACJhmC,EAAQ7C,GAASy9B,WAAYmL,GAI7B5oC,EAAQ4oC,GAAiBC,EAIrBzI,EAAGwI,KAGPxI,EAAEsI,cAAgBC,EAAiBD,cAGnCH,GAAa9nC,KAAMmoC,IAIfE,GAAqB3nC,EAAY0nC,IACrCA,EAAaC,EAAmB,IAGjCA,EAAoBD,OAAcpjC,IAI5B,WAYTvE,EAAQ8nC,qBACH7jB,GAAOtlB,EAASopC,eAAeD,mBAAoB,IAAK7jB,MACvD5U,UAAY,6BACiB,IAA3B4U,GAAK/Y,WAAWhJ,QAQxBP,EAAOwX,UAAY,SAAU4H,EAAMlf,EAASmmC,GAC3C,MAAqB,iBAATjnB,EACJ,IAEgB,kBAAZlf,IACXmmC,EAAcnmC,EACdA,GAAU,GAKLA,IAIA7B,EAAQ8nC,qBAMZxyB,GALAzT,EAAUlD,EAASopC,eAAeD,mBAAoB,KAKvC7mC,cAAe,SACzB+S,KAAOrV,EAASgV,SAASK,KAC9BnS,EAAQR,KAAKC,YAAagU,IAE1BzT,EAAUlD,GAKZ8mB,GAAWuiB,GAAe,IAD1BC,EAASnvB,EAAWjN,KAAMkV,IAKlB,CAAElf,EAAQZ,cAAegnC,EAAQ,MAGzCA,EAASziB,GAAe,CAAEzE,GAAQlf,EAAS4jB,GAEtCA,GAAWA,EAAQvjB,QACvBP,EAAQ8jB,GAAUtJ,SAGZxa,EAAOiB,MAAO,GAAIqlC,EAAO/8B,cAlChC,IAAIoK,EAAM2yB,EAAQxiB,GAyCnB9jB,EAAOG,GAAGooB,KAAO,SAAUgX,EAAKgH,EAAQnlC,GACvC,IAAInB,EAAUtB,EAAMkkC,EACnBvrB,EAAOla,KACPooB,EAAM+Z,EAAI1hC,QAAS,KAsDpB,OApDY,EAAP2nB,IACJvlB,EAAWw6B,GAAkB8E,EAAI7hC,MAAO8nB,IACxC+Z,EAAMA,EAAI7hC,MAAO,EAAG8nB,IAIhBlnB,EAAYioC,IAGhBnlC,EAAWmlC,EACXA,OAAS3jC,GAGE2jC,GAA4B,iBAAXA,IAC5B5nC,EAAO,QAIW,EAAd2Y,EAAK/W,QACTP,EAAOygC,KAAM,CACZlB,IAAKA,EAKL5gC,KAAMA,GAAQ,MACd6/B,SAAU,OACVpf,KAAMmnB,IACH3gC,KAAM,SAAUw/B,GAGnBvC,EAAWrhC,UAEX8V,EAAKkV,KAAMvsB,EAIVD,EAAQ,SAAUktB,OAAQltB,EAAOwX,UAAW4tB,IAAiB93B,KAAMrN,GAGnEmlC,KAKEpqB,OAAQ5Z,GAAY,SAAUu9B,EAAOmD,GACxCxqB,EAAKnW,KAAM,WACVC,EAASG,MAAOnE,KAAMylC,GAAY,CAAElE,EAAMyG,aAActD,EAAQnD,QAK5DvhC,MAOR4C,EAAOmB,KAAM,CACZ,YACA,WACA,eACA,YACA,cACA,YACE,SAAUhC,EAAGR,GACfqB,EAAOG,GAAIxB,GAAS,SAAUwB,GAC7B,OAAO/C,KAAK+nB,GAAIxmB,EAAMwB,MAOxBH,EAAO2O,KAAK/H,QAAQ4/B,SAAW,SAAUllC,GACxC,OAAOtB,EAAO8D,KAAM9D,EAAO+4B,OAAQ,SAAU54B,GAC5C,OAAOmB,IAASnB,EAAGmB,OAChBf,QAMLP,EAAOymC,OAAS,CACfC,UAAW,SAAUplC,EAAMY,EAAS/C,GACnC,IAAIwnC,EAAaC,EAASC,EAAWC,EAAQC,EAAWC,EACvDvX,EAAWzvB,EAAOohB,IAAK9f,EAAM,YAC7B2lC,EAAUjnC,EAAQsB,GAClBsnB,EAAQ,GAGS,WAAb6G,IACJnuB,EAAK4f,MAAMuO,SAAW,YAGvBsX,EAAYE,EAAQR,SACpBI,EAAY7mC,EAAOohB,IAAK9f,EAAM,OAC9B0lC,EAAahnC,EAAOohB,IAAK9f,EAAM,SACI,aAAbmuB,GAAwC,UAAbA,KACA,GAA9CoX,EAAYG,GAAanpC,QAAS,SAMpCipC,GADAH,EAAcM,EAAQxX,YACD5iB,IACrB+5B,EAAUD,EAAY3S,OAGtB8S,EAAShX,WAAY+W,IAAe,EACpCD,EAAU9W,WAAYkX,IAAgB,GAGlC1oC,EAAY4D,KAGhBA,EAAUA,EAAQ9D,KAAMkD,EAAMnC,EAAGa,EAAOiC,OAAQ,GAAI8kC,KAGjC,MAAf7kC,EAAQ2K,MACZ+b,EAAM/b,IAAQ3K,EAAQ2K,IAAMk6B,EAAUl6B,IAAQi6B,GAE1B,MAAhB5kC,EAAQ8xB,OACZpL,EAAMoL,KAAS9xB,EAAQ8xB,KAAO+S,EAAU/S,KAAS4S,GAG7C,UAAW1kC,EACfA,EAAQglC,MAAM9oC,KAAMkD,EAAMsnB,GAG1Bqe,EAAQ7lB,IAAKwH,KAKhB5oB,EAAOG,GAAG8B,OAAQ,CAGjBwkC,OAAQ,SAAUvkC,GAGjB,GAAKV,UAAUjB,OACd,YAAmBqC,IAAZV,EACN9E,KACAA,KAAK+D,KAAM,SAAUhC,GACpBa,EAAOymC,OAAOC,UAAWtpC,KAAM8E,EAAS/C,KAI3C,IAAIgoC,EAAMC,EACT9lC,EAAOlE,KAAM,GAEd,OAAMkE,EAQAA,EAAK6wB,iBAAiB5xB,QAK5B4mC,EAAO7lC,EAAKwyB,wBACZsT,EAAM9lC,EAAK2I,cAAc2C,YAClB,CACNC,IAAKs6B,EAAKt6B,IAAMu6B,EAAIC,YACpBrT,KAAMmT,EAAKnT,KAAOoT,EAAIE,cARf,CAAEz6B,IAAK,EAAGmnB,KAAM,QATxB,GAuBDvE,SAAU,WACT,GAAMryB,KAAM,GAAZ,CAIA,IAAImqC,EAAcd,EAAQvnC,EACzBoC,EAAOlE,KAAM,GACboqC,EAAe,CAAE36B,IAAK,EAAGmnB,KAAM,GAGhC,GAAwC,UAAnCh0B,EAAOohB,IAAK9f,EAAM,YAGtBmlC,EAASnlC,EAAKwyB,4BAER,CACN2S,EAASrpC,KAAKqpC,SAIdvnC,EAAMoC,EAAK2I,cACXs9B,EAAejmC,EAAKimC,cAAgBroC,EAAIuN,gBACxC,MAAQ86B,IACLA,IAAiBroC,EAAIojB,MAAQilB,IAAiBroC,EAAIuN,kBACT,WAA3CzM,EAAOohB,IAAKmmB,EAAc,YAE1BA,EAAeA,EAAa3nC,WAExB2nC,GAAgBA,IAAiBjmC,GAAkC,IAA1BimC,EAAa/oC,YAG1DgpC,EAAexnC,EAAQunC,GAAed,UACzB55B,KAAO7M,EAAOohB,IAAKmmB,EAAc,kBAAkB,GAChEC,EAAaxT,MAAQh0B,EAAOohB,IAAKmmB,EAAc,mBAAmB,IAKpE,MAAO,CACN16B,IAAK45B,EAAO55B,IAAM26B,EAAa36B,IAAM7M,EAAOohB,IAAK9f,EAAM,aAAa,GACpE0yB,KAAMyS,EAAOzS,KAAOwT,EAAaxT,KAAOh0B,EAAOohB,IAAK9f,EAAM,cAAc,MAc1EimC,aAAc,WACb,OAAOnqC,KAAKiE,IAAK,WAChB,IAAIkmC,EAAenqC,KAAKmqC,aAExB,MAAQA,GAA2D,WAA3CvnC,EAAOohB,IAAKmmB,EAAc,YACjDA,EAAeA,EAAaA,aAG7B,OAAOA,GAAgB96B,QAM1BzM,EAAOmB,KAAM,CAAE+zB,WAAY,cAAeD,UAAW,eAAiB,SAAUzb,EAAQ6F,GACvF,IAAIxS,EAAM,gBAAkBwS,EAE5Brf,EAAOG,GAAIqZ,GAAW,SAAUpa,GAC/B,OAAO4e,EAAQ5gB,KAAM,SAAUkE,EAAMkY,EAAQpa,GAG5C,IAAIgoC,EAOJ,GANK3oC,EAAU6C,GACd8lC,EAAM9lC,EACuB,IAAlBA,EAAK9C,WAChB4oC,EAAM9lC,EAAKsL,kBAGChK,IAARxD,EACJ,OAAOgoC,EAAMA,EAAK/nB,GAAS/d,EAAMkY,GAG7B4tB,EACJA,EAAIK,SACF56B,EAAYu6B,EAAIE,YAAVloC,EACPyN,EAAMzN,EAAMgoC,EAAIC,aAIjB/lC,EAAMkY,GAAWpa,GAEhBoa,EAAQpa,EAAKoC,UAAUjB,WAU5BP,EAAOmB,KAAM,CAAE,MAAO,QAAU,SAAUhC,EAAGkgB,GAC5Crf,EAAOsyB,SAAUjT,GAASsP,GAActwB,EAAQ6xB,cAC/C,SAAU5uB,EAAM+sB,GACf,GAAKA,EAIJ,OAHAA,EAAWD,GAAQ9sB,EAAM+d,GAGlB0O,GAAUvjB,KAAM6jB,GACtBruB,EAAQsB,GAAOmuB,WAAYpQ,GAAS,KACpCgP,MAQLruB,EAAOmB,KAAM,CAAEumC,OAAQ,SAAUC,MAAO,SAAW,SAAUxlC,EAAMxD,GAClEqB,EAAOmB,KAAM,CAAE+yB,QAAS,QAAU/xB,EAAM0W,QAASla,EAAMipC,GAAI,QAAUzlC,GACpE,SAAU0lC,EAAcC,GAGxB9nC,EAAOG,GAAI2nC,GAAa,SAAU7T,EAAQ9vB,GACzC,IAAI8Z,EAAYzc,UAAUjB,SAAYsnC,GAAkC,kBAAX5T,GAC5DpC,EAAQgW,KAA6B,IAAX5T,IAA6B,IAAV9vB,EAAiB,SAAW,UAE1E,OAAO6Z,EAAQ5gB,KAAM,SAAUkE,EAAM3C,EAAMwF,GAC1C,IAAIjF,EAEJ,OAAKT,EAAU6C,GAGyB,IAAhCwmC,EAASjqC,QAAS,SACxByD,EAAM,QAAUa,GAChBb,EAAKtE,SAASyP,gBAAiB,SAAWtK,GAIrB,IAAlBb,EAAK9C,UACTU,EAAMoC,EAAKmL,gBAIJ3J,KAAKwuB,IACXhwB,EAAKghB,KAAM,SAAWngB,GAAQjD,EAAK,SAAWiD,GAC9Cb,EAAKghB,KAAM,SAAWngB,GAAQjD,EAAK,SAAWiD,GAC9CjD,EAAK,SAAWiD,UAIDS,IAAVuB,EAGNnE,EAAOohB,IAAK9f,EAAM3C,EAAMkzB,GAGxB7xB,EAAOkhB,MAAO5f,EAAM3C,EAAMwF,EAAO0tB,IAChClzB,EAAMsf,EAAYgW,OAASrxB,EAAWqb,QAM5Cje,EAAOmB,KAAM,wLAEgDoD,MAAO,KACnE,SAAUpF,EAAGgD,GAGbnC,EAAOG,GAAIgC,GAAS,SAAUid,EAAMjf,GACnC,OAA0B,EAAnBqB,UAAUjB,OAChBnD,KAAK+nB,GAAIhjB,EAAM,KAAMid,EAAMjf,GAC3B/C,KAAK6oB,QAAS9jB,MAIjBnC,EAAOG,GAAG8B,OAAQ,CACjB8lC,MAAO,SAAUC,EAAQC,GACxB,OAAO7qC,KAAK4tB,WAAYgd,GAAS/c,WAAYgd,GAASD,MAOxDhoC,EAAOG,GAAG8B,OAAQ,CAEjBq1B,KAAM,SAAUlS,EAAOhG,EAAMjf,GAC5B,OAAO/C,KAAK+nB,GAAIC,EAAO,KAAMhG,EAAMjf,IAEpC+nC,OAAQ,SAAU9iB,EAAOjlB,GACxB,OAAO/C,KAAKooB,IAAKJ,EAAO,KAAMjlB,IAG/BgoC,SAAU,SAAUloC,EAAUmlB,EAAOhG,EAAMjf,GAC1C,OAAO/C,KAAK+nB,GAAIC,EAAOnlB,EAAUmf,EAAMjf,IAExCioC,WAAY,SAAUnoC,EAAUmlB,EAAOjlB,GAGtC,OAA4B,IAArBqB,UAAUjB,OAChBnD,KAAKooB,IAAKvlB,EAAU,MACpB7C,KAAKooB,IAAKJ,EAAOnlB,GAAY,KAAME,MAQtCH,EAAOqoC,MAAQ,SAAUloC,EAAID,GAC5B,IAAIuN,EAAK4D,EAAMg3B,EAUf,GARwB,iBAAZnoC,IACXuN,EAAMtN,EAAID,GACVA,EAAUC,EACVA,EAAKsN,GAKAnP,EAAY6B,GAalB,OARAkR,EAAO3T,EAAMU,KAAMoD,UAAW,IAC9B6mC,EAAQ,WACP,OAAOloC,EAAGoB,MAAOrB,GAAW9C,KAAMiU,EAAK1T,OAAQD,EAAMU,KAAMoD,eAItD4C,KAAOjE,EAAGiE,KAAOjE,EAAGiE,MAAQpE,EAAOoE,OAElCikC,GAGRroC,EAAOsoC,UAAY,SAAUC,GACvBA,EACJvoC,EAAO4d,YAEP5d,EAAOyX,OAAO,IAGhBzX,EAAO2C,QAAUD,MAAMC,QACvB3C,EAAOwoC,UAAY5oB,KAAKC,MACxB7f,EAAOoJ,SAAWA,EAClBpJ,EAAO1B,WAAaA,EACpB0B,EAAOvB,SAAWA,EAClBuB,EAAO2e,UAAYA,EACnB3e,EAAOrB,KAAOmB,EAEdE,EAAOipB,IAAMxjB,KAAKwjB,IAElBjpB,EAAOyoC,UAAY,SAAUlqC,GAK5B,IAAII,EAAOqB,EAAOrB,KAAMJ,GACxB,OAAkB,WAATI,GAA8B,WAATA,KAK5B+pC,MAAOnqC,EAAMuxB,WAAYvxB,KAmBL,mBAAXoqC,QAAyBA,OAAOC,KAC3CD,OAAQ,SAAU,GAAI,WACrB,OAAO3oC,IAOT,IAGC6oC,GAAU1rC,EAAO6C,OAGjB8oC,GAAK3rC,EAAO4rC,EAwBb,OAtBA/oC,EAAOgpC,WAAa,SAAUxmC,GAS7B,OARKrF,EAAO4rC,IAAM/oC,IACjB7C,EAAO4rC,EAAID,IAGPtmC,GAAQrF,EAAO6C,SAAWA,IAC9B7C,EAAO6C,OAAS6oC,IAGV7oC,GAMF3C,IACLF,EAAO6C,OAAS7C,EAAO4rC,EAAI/oC,GAMrBA","file":"jquery-3.4.1.min.js"} \ No newline at end of file diff --git a/aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.slim.min.js b/aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.slim.min.js deleted file mode 100644 index af151cfe..00000000 --- a/aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.slim.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.4.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(g,e){"use strict";var t=[],v=g.document,r=Object.getPrototypeOf,s=t.slice,y=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,m=n.hasOwnProperty,a=m.toString,l=a.call(Object),b={},x=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},w=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function C(e,t,n){var r,i,o=(n=n||v).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function T(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1 -ajax,-ajax/jsonp,-ajax/load,-ajax/parseXML,-ajax/script,-ajax/var/location,-ajax/var/nonce,-ajax/var/rquery,-ajax/xhr,-manipulation/_evalUrl,-event/ajax,-effects,-effects/Tween,-effects/animatedSelector",E=function(e,t){return new E.fn.init(e,t)},d=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function p(e){var t=!!e&&"length"in e&&e.length,n=T(e);return!x(e)&&!w(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+R+")"+R+"*"),U=new RegExp(R+"|>"),V=new RegExp(W),X=new RegExp("^"+B+"$"),Q={ID:new RegExp("^#("+B+")"),CLASS:new RegExp("^\\.("+B+")"),TAG:new RegExp("^("+B+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+W),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),bool:new RegExp("^(?:"+I+")$","i"),needsContext:new RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,G=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+R+"?|("+R+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){C()},ae=xe(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{O.apply(t=P.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){O={apply:t.length?function(e,t){q.apply(e,P.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,d=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==d&&9!==d&&11!==d)return n;if(!r&&((e?e.ownerDocument||e:m)!==T&&C(e),e=e||T,E)){if(11!==d&&(u=Z.exec(t)))if(i=u[1]){if(9===d){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return O.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&p.getElementsByClassName&&e.getElementsByClassName)return O.apply(n,e.getElementsByClassName(i)),n}if(p.qsa&&!S[t+" "]&&(!v||!v.test(t))&&(1!==d||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===d&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=N),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+be(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return O.apply(n,f.querySelectorAll(c)),n}catch(e){S(t,!0)}finally{s===N&&e.removeAttribute("id")}}}return g(t.replace(F,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>x.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[N]=!0,e}function ce(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)x.attrHandle[n[r]]=t}function de(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function pe(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in p=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},C=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==T&&9===r.nodeType&&r.documentElement&&(a=(T=r).documentElement,E=!i(T),m!==T&&(n=T.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),p.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),p.getElementsByTagName=ce(function(e){return e.appendChild(T.createComment("")),!e.getElementsByTagName("*").length}),p.getElementsByClassName=J.test(T.getElementsByClassName),p.getById=ce(function(e){return a.appendChild(e).id=N,!T.getElementsByName||!T.getElementsByName(N).length}),p.getById?(x.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(x.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},x.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),x.find.TAG=p.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):p.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},x.find.CLASS=p.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(p.qsa=J.test(T.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+R+"*(?:value|"+I+")"),e.querySelectorAll("[id~="+N+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+N+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+R+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(p.matchesSelector=J.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){p.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",W)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=J.test(a.compareDocumentPosition),y=t||J.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!p.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument===m&&y(m,e)?-1:t===T||t.ownerDocument===m&&y(m,t)?1:u?H(u,e)-H(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===T?-1:t===T?1:i?-1:o?1:u?H(u,e)-H(u,t):0;if(i===o)return de(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?de(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),T},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==T&&C(e),p.matchesSelector&&E&&!S[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||p.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){S(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=d[e+" "];return t||(t=new RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&d(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function L(e,n,r){return x(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:v,!0)),D.test(r[1])&&E.isPlainObject(t))for(r in t)x(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=v.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):x(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,j=E(v);var O=/^(?:parents|prev(?:Until|All))/,P={children:!0,contents:!0,next:!0,prev:!0};function H(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i,he={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ge(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&S(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;nx",b.noCloneChecked=!!ye.cloneNode(!0).lastChild.defaultValue;var we=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function Ne(){return!1}function Ae(e,t){return e===function(){try{return v.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ne;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return E().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=E.guid++)),e.each(function(){E.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(G.set(e,i,!1),E.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=G.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(E.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),G.set(this,i,r),t=o(this,i),this[i](),r!==(n=G.get(this,i))||t?G.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(G.set(this,i,{value:E.event.trigger(E.extend(r[0],E.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===G.get(e,i)&&E.event.add(e,i,Ee)}E.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,v=G.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&E.find.matchesSelector(ie,i),n.guid||(n.guid=E.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof E&&E.event.triggered!==e.type?E.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(I)||[""]).length;while(l--)p=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),p&&(f=E.event.special[p]||{},p=(i?f.delegateType:f.bindType)||p,f=E.event.special[p]||{},c=E.extend({type:p,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&E.expr.match.needsContext.test(i),namespace:h.join(".")},o),(d=u[p])||((d=u[p]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(p,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?d.splice(d.delegateCount++,0,c):d.push(c),E.event.global[p]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,d,p,h,g,v=G.hasData(e)&&G.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(I)||[""]).length;while(l--)if(p=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),p){f=E.event.special[p]||{},d=u[p=(r?f.delegateType:f.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;while(o--)c=d[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(d.splice(o,1),c.selector&&d.delegateCount--,f.remove&&f.remove.call(e,c));a&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||E.removeEvent(e,p,v.handle),delete u[p])}else for(p in u)E.event.remove(e,p+t[l],n,r,!0);E.isEmptyObject(u)&&G.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=E.event.fix(e),u=new Array(arguments.length),l=(G.get(this,"events")||{})[s.type]||[],c=E.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,Le=/\s*$/g;function Oe(e,t){return S(e,"table")&&S(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Ie(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(G.hasData(e)&&(o=G.access(e),a=G.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(b.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(a=ge(c),r=0,i=(o=ge(e)).length;r
",2===pt.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(b.createHTMLDocument?((r=(t=v.implementation.createHTMLDocument("")).createElement("base")).href=v.location.href,t.head.appendChild(r)):t=v),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),x(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||ie})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return z(this,function(e,t,n){var r;if(w(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=ze(b.pixelPosition,function(e,t){if(t)return t=Fe(e,n),Me.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return z(this,function(e,t,n){var r;return w(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","has","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","tokens","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","defaultValue","unique","isXMLDoc","escapeSelector","until","truncate","is","siblings","n","rneedsContext","rsingleTag","winnow","qualifier","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","targets","l","closest","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","object","flag","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","always","deferred","catch","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","that","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","console","warn","message","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","camelCase","string","acceptData","owner","Data","uid","defineProperty","configurable","set","data","prop","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","swap","old","defaultDisplayMap","showHide","show","values","body","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","option","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","optgroup","tbody","tfoot","colgroup","caption","th","div","buildFragment","scripts","selection","ignored","wrap","attached","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","t","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","now","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","char","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","round","parseFloat","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","opt","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","subtract","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","ceil","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","cssHooks","opacity","cssNumber","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","origName","isCustomProp","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","initialInUnit","adjustCSS","setProperty","isFinite","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","prefix","suffix","expand","expanded","parts","delay","time","fx","speeds","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","propHooks","tabindex","parseInt","for","class","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","s","valueOrFunction","encodeURIComponent","serialize","serializeArray","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","hidden","visible","offsetHeight","createHTMLDocument","implementation","keepScripts","parsed","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollLeft","scrollTop","scrollTo","Height","Width","","defaultExtra","funcName","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","proxy","holdReady","hold","parseJSON","isNumeric","isNaN","define","amd","_jQuery","_$","$","noConflict"],"mappings":"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","file":"jquery-3.4.1.slim.min.js"} \ No newline at end of file diff --git a/aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.js b/aspnet-samples/AspNetForm/Scripts/jquery-3.7.0.js similarity index 82% rename from aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.js rename to aspnet-samples/AspNetForm/Scripts/jquery-3.7.0.js index 773ad95c..5f5c9cae 100644 --- a/aspnet-samples/AspNetForm/Scripts/jquery-3.4.1.js +++ b/aspnet-samples/AspNetForm/Scripts/jquery-3.7.0.js @@ -1,15 +1,12 @@ /*! - * jQuery JavaScript Library v3.4.1 + * jQuery JavaScript Library v3.7.0 * https://jquery.com/ * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors + * Copyright OpenJS Foundation and other contributors * Released under the MIT license * https://jquery.org/license * - * Date: 2019-05-01T21:04Z + * Date: 2023-05-11T18:29Z */ ( function( global, factory ) { @@ -23,7 +20,7 @@ // (such as Node.js), expose a factory as module.exports. // This accentuates the need for the creation of a real `window`. // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. + // See ticket trac-14549 for more info. module.exports = global.document ? factory( global, true ) : function( w ) { @@ -47,13 +44,16 @@ var arr = []; -var document = window.document; - var getProto = Object.getPrototypeOf; var slice = arr.slice; -var concat = arr.concat; +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + var push = arr.push; @@ -73,12 +73,16 @@ var support = {}; var isFunction = function isFunction( obj ) { - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; var isWindow = function isWindow( obj ) { @@ -86,6 +90,8 @@ var isWindow = function isWindow( obj ) { }; +var document = window.document; + var preservedScriptAttributes = { @@ -141,8 +147,9 @@ function toType( obj ) { -var - version = "3.4.1", +var version = "3.7.0", + + rhtmlSuffix = /HTML$/i, // Define a local copy of jQuery jQuery = function( selector, context ) { @@ -150,11 +157,7 @@ var // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init( selector, context ); - }, - - // Support: Android <=4.0 only - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; + }; jQuery.fn = jQuery.prototype = { @@ -220,6 +223,18 @@ jQuery.fn = jQuery.prototype = { return this.eq( -1 ); }, + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); @@ -353,9 +368,10 @@ jQuery.extend( { return true; }, - // Evaluates a script in a global context - globalEval: function( code, options ) { - DOMEval( code, { nonce: options && options.nonce } ); + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); }, each: function( obj, callback ) { @@ -379,11 +395,31 @@ jQuery.extend( { return obj; }, - // Support: Android <=4.0 only - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); + + // Retrieve the text value of an array of DOM nodes + text: function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += jQuery.text( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + return elem.textContent; + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; }, // results is for internal usage only @@ -394,7 +430,7 @@ jQuery.extend( { if ( isArrayLike( Object( arr ) ) ) { jQuery.merge( ret, typeof arr === "string" ? - [ arr ] : arr + [ arr ] : arr ); } else { push.call( ret, arr ); @@ -408,6 +444,15 @@ jQuery.extend( { return arr == null ? -1 : indexOf.call( arr, elem, i ); }, + isXMLDoc: function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Assume HTML when documentElement doesn't yet exist, such as inside + // document fragments. + return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); + }, + // Support: Android <=4.0 only, PhantomJS 1 only // push.apply(_, arraylike) throws on ancient WebKit merge: function( first, second ) { @@ -472,7 +517,7 @@ jQuery.extend( { } // Flatten any nested arrays - return concat.apply( [], ret ); + return flat( ret ); }, // A global GUID counter for objects @@ -489,9 +534,9 @@ if ( typeof Symbol === "function" ) { // Populate the class2type map jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); function isArrayLike( obj ) { @@ -509,44 +554,98 @@ function isArrayLike( obj ) { return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj; } -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.4 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2019-04-08 - */ -(function( window ) { + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var pop = arr.pop; + + +var sort = arr.sort; + + +var splice = arr.splice; + + +var whitespace = "[\\x20\\t\\r\\n\\f]"; + + +var rtrimCSS = new RegExp( + "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", + "g" +); + + + + +// Note: an element does not contain itself +jQuery.contains = function( a, b ) { + var bup = b && b.parentNode; + + return a === bup || !!( bup && bup.nodeType === 1 && ( + + // Support: IE 9 - 11+ + // IE doesn't have `contains` on SVG. + a.contains ? + a.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); +}; + + + + +// CSS string/identifier serialization +// https://drafts.csswg.org/cssom/#common-serializing-idioms +var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; + +function fcssescape( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; +} + +jQuery.escapeSelector = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + + + + +var preferredDoc = document, + pushNative = push; + +( function() { var i, - support, Expr, - getText, - isXML, - tokenize, - compile, - select, outermostContext, sortInput, hasDuplicate, + push = pushNative, // Local document vars - setDocument, document, - docElem, + documentElement, documentIsHTML, rbuggyQSA, - rbuggyMatches, matches, - contains, // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, + expando = jQuery.expando, dirruns = 0, done = 0, classCache = createCache(), @@ -560,173 +659,145 @@ var i, return 0; }, - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + + "loop|multiple|open|readonly|required|scoped", // Regular expressions - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: // 1. quoted (capture 3; capture 4 or capture 5) "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) ".*" + ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + + whitespace + "*" ), rdescend = new RegExp( whitespace + "|>" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + ID: new RegExp( "^#(" + identifier + ")" ), + CLASS: new RegExp( "^\\.(" + identifier + ")" ), + TAG: new RegExp( "^(" + identifier + "|[*])" ), + ATTR: new RegExp( "^" + attributes ), + PSEUDO: new RegExp( "^" + pseudos ), + CHILD: new RegExp( + "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + bool: new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + needsContext: new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, - rhtml = /HTML$/i, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, - rnative = /^[^{]+\{\s*\[native \w/, - // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, + // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { + if ( nonHex ) { - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + // Strip the backslash prefix from a non-hex escape sequence + return nonHex; } - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + return high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }, - // Used for iframes - // See setDocument() + // Used for iframes; see `setDocument`. + // Support: IE 9 - 11+, Edge 12 - 18+ // Removing the function wrapper causes a "Permission Denied" - // error in IE + // error in IE/Edge. unloadHandler = function() { setDocument(); }, inDisabledFieldset = addCombinator( function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + return elem.disabled === true && nodeName( elem, "fieldset" ); }, { dir: "parentNode", next: "legend" } ); +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + // Optimize for push.apply( _, NodeList ) try { push.apply( - (arr = slice.call( preferredDoc.childNodes )), + ( arr = slice.call( preferredDoc.childNodes ) ), preferredDoc.childNodes ); - // Support: Android<4.0 + + // Support: Android <=4.0 // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; + push = { + apply: function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + }, + call: function( target ) { + pushNative.apply( target, slice.call( arguments, 1 ) ); } }; } -function Sizzle( selector, context, results, seed ) { +function find( selector, context, results, seed ) { var m, i, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, @@ -744,30 +815,26 @@ function Sizzle( selector, context, results, seed ) { // Try to shortcut find operations (as opposed to filters) in HTML documents if ( !seed ) { - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } + setDocument( context ); context = context || document; if ( documentIsHTML ) { // If the selector is sufficiently simple, try using a "get*By*" DOM method // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { // ID selector - if ( (m = match[1]) ) { + if ( ( m = match[ 1 ] ) ) { // Document context if ( nodeType === 9 ) { - if ( (elem = context.getElementById( m )) ) { + if ( ( elem = context.getElementById( m ) ) ) { - // Support: IE, Opera, Webkit - // TODO: identify versions + // Support: IE 9 only // getElementById can match elements by name instead of ID if ( elem.id === m ) { - results.push( elem ); + push.call( results, elem ); return results; } } else { @@ -777,40 +844,32 @@ function Sizzle( selector, context, results, seed ) { // Element context } else { - // Support: IE, Opera, Webkit - // TODO: identify versions + // Support: IE 9 only // getElementById can match elements by name instead of ID - if ( newContext && (elem = newContext.getElementById( m )) && - contains( context, elem ) && + if ( newContext && ( elem = newContext.getElementById( m ) ) && + find.contains( context, elem ) && elem.id === m ) { - results.push( elem ); + push.call( results, elem ); return results; } } // Type selector - } else if ( match[2] ) { + } else if ( match[ 2 ] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Class selector - } else if ( (m = match[3]) && support.getElementsByClassName && - context.getElementsByClassName ) { - + } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); return results; } } // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - (!rbuggyQSA || !rbuggyQSA.test( selector )) && - - // Support: IE 8 only - // Exclude object elements - (nodeType !== 1 || context.nodeName.toLowerCase() !== "object") ) { + if ( !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { newSelector = selector; newContext = context; @@ -819,27 +878,40 @@ function Sizzle( selector, context, results, seed ) { // descendant combinators, which is not what we want. // In such cases, we work around the behavior by prefixing every selector in the // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && rdescend.test( selector ) ) { + if ( nodeType === 1 && + ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { - // Capture the context ID, setting it first if necessary - if ( (nid = context.getAttribute( "id" )) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", (nid = expando) ); + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when + // strict-comparing two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( newContext != context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = jQuery.escapeSelector( nid ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } } // Prefix every selector in the list groups = tokenize( selector ); i = groups.length; while ( i-- ) { - groups[i] = "#" + nid + " " + toSelector( groups[i] ); + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); } newSelector = groups.join( "," ); - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; } try { @@ -859,7 +931,7 @@ function Sizzle( selector, context, results, seed ) { } // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); + return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); } /** @@ -872,18 +944,21 @@ function createCache() { var keys = []; function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + + // Use (key + " ") to avoid collision with native prototype properties + // (see https://github.com/jquery/sizzle/issues/157) if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries delete cache[ keys.shift() ]; } - return (cache[ key + " " ] = value); + return ( cache[ key + " " ] = value ); } return cache; } /** - * Mark a function for special use by Sizzle + * Mark a function for special use by jQuery selector module * @param {Function} fn The function to mark */ function markFunction( fn ) { @@ -896,72 +971,31 @@ function markFunction( fn ) { * @param {Function} fn Passed the created element and returns a boolean result */ function assert( fn ) { - var el = document.createElement("fieldset"); + var el = document.createElement( "fieldset" ); try { return !!fn( el ); - } catch (e) { + } catch ( e ) { return false; } finally { + // Remove from its parent by default if ( el.parentNode ) { el.parentNode.removeChild( el ); } + // release memory in IE el = null; } } -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - /** * Returns a function to use in pseudos for input types * @param {String} type */ function createInputPseudo( type ) { return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; + return nodeName( elem, "input" ) && elem.type === type; }; } @@ -971,8 +1005,8 @@ function createInputPseudo( type ) { */ function createButtonPseudo( type ) { return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; + return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && + elem.type === type; }; } @@ -1008,12 +1042,11 @@ function createDisabledPseudo( disabled ) { } } - // Support: IE 6 - 11 + // Support: IE 6 - 11+ // Use the isDisabled shortcut property to check for disabled fieldset ancestors return elem.isDisabled === disabled || // Where there is no isDisabled, check manually - /* jshint -W018 */ elem.isDisabled !== !disabled && inDisabledFieldset( elem ) === disabled; } @@ -1037,25 +1070,25 @@ function createDisabledPseudo( disabled ) { * @param {Function} fn */ function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { + return markFunction( function( argument ) { argument = +argument; - return markFunction(function( seed, matches ) { + return markFunction( function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); } } - }); - }); + } ); + } ); } /** - * Checks a node for validity as a Sizzle context + * Checks a node for validity as a jQuery selector context * @param {Element|Object=} context * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */ @@ -1063,117 +1096,116 @@ function testContext( context ) { return context && typeof context.getElementsByTagName !== "undefined" && context; } -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = (elem.ownerDocument || elem).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - /** * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document + * @param {Element|Object} [node] An element or document object to use to set the document * @returns {Object} Returns the current document */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, +function setDocument( node ) { + var subWindow, doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } // Update global variables document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); + documentElement = document.documentElement; + documentIsHTML = !jQuery.isXMLDoc( document ); - // Support: IE 9-11, Edge - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - if ( preferredDoc !== document && - (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + // Support: iOS 7 only, IE 9 - 11+ + // Older browsers didn't support unprefixed `matches`. + matches = documentElement.matches || + documentElement.webkitMatchesSelector || + documentElement.msMatchesSelector; - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (see trac-13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } + // Support: IE 9 - 11+, Edge 12 - 18+ + subWindow.addEventListener( "unload", unloadHandler ); } - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( el ) { - el.className = "i"; - return !el.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( el ) { - el.appendChild( document.createComment("") ); - return !el.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 + // Support: IE <10 // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programmatically-set names, // so use a roundabout getElementsByName test - support.getById = assert(function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - }); + support.getById = assert( function( el ) { + documentElement.appendChild( el ).id = jQuery.expando; + return !document.getElementsByName || + !document.getElementsByName( jQuery.expando ).length; + } ); + + // Support: IE 9 only + // Check to see if it's possible to do matchesSelector + // on a disconnected node. + support.disconnectedMatch = assert( function( el ) { + return matches.call( el, "*" ); + } ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // IE/Edge don't support the :scope pseudo-class. + support.scope = assert( function() { + return document.querySelectorAll( ":scope" ); + } ); + + // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only + // Make sure the `:has()` argument is parsed unforgivingly. + // We include `*` in the test to detect buggy implementations that are + // _selectively_ forgiving (specifically when the list includes at least + // one valid selector). + // Note that we treat complete lack of support for `:has()` as if it were + // spec-compliant support, which is fine because use of `:has()` in such + // environments will fail in the qSA path and fall back to jQuery traversal + // anyway. + support.cssHas = assert( function() { + try { + document.querySelector( ":has(*,:jqfake)" ); + return false; + } catch ( e ) { + return true; + } + } ); // ID filter and find if ( support.getById ) { - Expr.filter["ID"] = function( id ) { + Expr.filter.ID = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { - return elem.getAttribute("id") === attrId; + return elem.getAttribute( "id" ) === attrId; }; }; - Expr.find["ID"] = function( id, context ) { + Expr.find.ID = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var elem = context.getElementById( id ); return elem ? [ elem ] : []; } }; } else { - Expr.filter["ID"] = function( id ) { + Expr.filter.ID = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode("id"); + elem.getAttributeNode( "id" ); return node && node.value === attrId; }; }; // Support: IE 6 - 7 only // getElementById is not reliable as a find shortcut - Expr.find["ID"] = function( id, context ) { + Expr.find.ID = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var node, i, elems, elem = context.getElementById( id ); @@ -1181,7 +1213,7 @@ setDocument = Sizzle.setDocument = function( node ) { if ( elem ) { // Verify the id attribute - node = elem.getAttributeNode("id"); + node = elem.getAttributeNode( "id" ); if ( node && node.value === id ) { return [ elem ]; } @@ -1189,8 +1221,8 @@ setDocument = Sizzle.setDocument = function( node ) { // Fall back on getElementsByName elems = context.getElementsByName( id ); i = 0; - while ( (elem = elems[i++]) ) { - node = elem.getAttributeNode("id"); + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); if ( node && node.value === id ) { return [ elem ]; } @@ -1203,39 +1235,18 @@ setDocument = Sizzle.setDocument = function( node ) { } // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : + Expr.find.TAG = function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; + // DocumentFragment nodes don't have gEBTN + } else { + return context.querySelectorAll( tag ); + } + }; // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + Expr.find.CLASS = function( className, context ) { if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { return context.getElementsByClassName( className ); } @@ -1246,153 +1257,94 @@ setDocument = Sizzle.setDocument = function( node ) { // QSA and matchesSelector support - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 rbuggyQSA = []; - if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( el ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll(":checked").length ) { - rbuggyQSA.push(":checked"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { - assert(function( el ) { - el.innerHTML = "" + - ""; + var input; - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement("input"); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); + documentElement.appendChild( el ).innerHTML = + "" + + ""; - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } + // Support: iOS <=7 - 8 only + // Boolean attributes and "value" are not treated correctly in some XML documents + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll(":enabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } + // Support: iOS <=7 - 8 only + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll(":disabled").length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } + // Support: iOS 8 only + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } + // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ + // In some of the document kinds, these selectors wouldn't work natively. + // This is probably OK but for backwards compatibility we want to maintain + // handling them through jQuery traversal in jQuery 3.x. + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE 9 - 11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ + // In some of the document kinds, these selectors wouldn't work natively. + // This is probably OK but for backwards compatibility we want to maintain + // handling them through jQuery traversal in jQuery 3.x. + documentElement.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + } ); - assert(function( el ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); + if ( !support.cssHas ) { - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); + // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ + // Our regular `try-catch` mechanism fails to detect natively-unsupported + // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) + // in browsers that parse the `:has()` argument as a forgiving selector list. + // https://drafts.csswg.org/selectors/#relational now requires the argument + // to be parsed unforgivingly, but browsers have not yet fully adjusted. + rbuggyQSA.push( ":has" ); } - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); /* Sorting ---------------------------------------------------------------------- */ // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { + sortOrder = function( a, b ) { // Flag for duplicate removal if ( a === b ) { @@ -1407,7 +1359,11 @@ setDocument = Sizzle.setDocument = function( node ) { } // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? a.compareDocumentPosition( b ) : // Otherwise we know they are disconnected @@ -1415,148 +1371,109 @@ setDocument = Sizzle.setDocument = function( node ) { // Disconnected nodes if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { // Choose the first element that is related to our preferred document - if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a === document || a.ownerDocument == preferredDoc && + find.contains( preferredDoc, a ) ) { return -1; } - if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b === document || b.ownerDocument == preferredDoc && + find.contains( preferredDoc, b ) ) { return 1; } // Maintain original order return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 0; } return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === document ? -1 : - b === document ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; }; return document; -}; +} -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); +find.matches = function( expr, elements ) { + return find( expr, null, null, elements ); }; -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } +find.matchesSelector = function( elem, expr ) { + setDocument( elem ); - if ( support.matchesSelector && documentIsHTML && + if ( documentIsHTML && !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } - } catch (e) { + } catch ( e ) { nonnativeSelectorCache( expr, true ); } } - return Sizzle( expr, document, null, [ elem ] ).length > 0; + return find( expr, document, null, [ elem ] ).length > 0; }; -Sizzle.contains = function( context, elem ) { +find.contains = function( context, elem ) { + // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { setDocument( context ); } - return contains( context, elem ); + return jQuery.contains( context, elem ); }; -Sizzle.attr = function( elem, name ) { + +find.attr = function( elem, name ) { + // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) + + // Don't get fooled by Object.prototype properties (see trac-13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : undefined; - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; + if ( val !== undefined ) { + return val; + } -Sizzle.escape = function( sel ) { - return (sel + "").replace( rcssescape, fcssescape ); + return elem.getAttribute( name ); }; -Sizzle.error = function( msg ) { +find.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; @@ -1564,25 +1481,29 @@ Sizzle.error = function( msg ) { * Document sorting and removing duplicates * @param {ArrayLike} results */ -Sizzle.uniqueSort = function( results ) { +jQuery.uniqueSort = function( results ) { var elem, duplicates = [], j = 0, i = 0; // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); + // + // Support: Android <=4.0+ + // Testing for detecting duplicates is unpredictable so instead assume we can't + // depend on duplicate detection in all browsers without a stable sort. + hasDuplicate = !support.sortStable; + sortInput = !support.sortStable && slice.call( results, 0 ); + sort.call( results, sortOrder ); if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { + while ( ( elem = results[ i++ ] ) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } } while ( j-- ) { - results.splice( duplicates[ j ], 1 ); + splice.call( results, duplicates[ j ], 1 ); } } @@ -1593,42 +1514,11 @@ Sizzle.uniqueSort = function( results ) { return results; }; -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; +jQuery.fn.uniqueSort = function() { + return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); }; -Expr = Sizzle.selectors = { +Expr = jQuery.expr = { // Can be adjusted by the user cacheLength: 50, @@ -1649,20 +1539,22 @@ Expr = Sizzle.selectors = { }, preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); + ATTR: function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) + .replace( runescape, funescape ); - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; } return match.slice( 0, 4 ); }, - "CHILD": function( match ) { + CHILD: function( match ) { + /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) @@ -1673,49 +1565,55 @@ Expr = Sizzle.selectors = { 7 sign of y-component 8 y of y-component */ - match[1] = match[1].toLowerCase(); + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); + if ( !match[ 3 ] ) { + find.error( match[ 0 ] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) + ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); + } else if ( match[ 3 ] ) { + find.error( match[ 0 ] ); } return match; }, - "PSEUDO": function( match ) { + PSEUDO: function( match ) { var excess, - unquoted = !match[6] && match[2]; + unquoted = !match[ 6 ] && match[ 2 ]; - if ( matchExpr["CHILD"].test( match[0] ) ) { + if ( matchExpr.CHILD.test( match[ 0 ] ) ) { return null; } // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && + ( excess = tokenize( unquoted, true ) ) && + // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) @@ -1725,28 +1623,36 @@ Expr = Sizzle.selectors = { filter: { - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + TAG: function( nodeNameSelector ) { + var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? - function() { return true; } : + function() { + return true; + } : function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + return nodeName( elem, expectedNodeName ); }; }, - "CLASS": function( className ) { + CLASS: function( className ) { var pattern = classCache[ className + " " ]; return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + ( pattern = new RegExp( "(^|" + whitespace + ")" + className + + "(" + whitespace + "|$)" ) ) && classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); }, - "ATTR": function( name, operator, check ) { + ATTR: function( name, operator, check ) { return function( elem ) { - var result = Sizzle.attr( elem, name ); + var result = find.attr( elem, name ); if ( result == null ) { return operator === "!="; @@ -1757,18 +1663,34 @@ Expr = Sizzle.selectors = { result += ""; - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; + if ( operator === "=" ) { + return result === check; + } + if ( operator === "!=" ) { + return result !== check; + } + if ( operator === "^=" ) { + return check && result.indexOf( check ) === 0; + } + if ( operator === "*=" ) { + return check && result.indexOf( check ) > -1; + } + if ( operator === "$=" ) { + return check && result.slice( -check.length ) === check; + } + if ( operator === "~=" ) { + return ( " " + result.replace( rwhitespace, " " ) + " " ) + .indexOf( check ) > -1; + } + if ( operator === "|=" ) { + return result === check || result.slice( 0, check.length + 1 ) === check + "-"; + } + + return false; }; }, - "CHILD": function( type, what, argument, first, last ) { + CHILD: function( type, what, _argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; @@ -1780,8 +1702,8 @@ Expr = Sizzle.selectors = { return !!elem.parentNode; } : - function( elem, context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, + function( elem, _context, xml ) { + var cache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), @@ -1794,14 +1716,15 @@ Expr = Sizzle.selectors = { if ( simple ) { while ( dir ) { node = elem; - while ( (node = node[ dir ]) ) { + while ( ( node = node[ dir ] ) ) { if ( ofType ? - node.nodeName.toLowerCase() === name : + nodeName( node, name ) : node.nodeType === 1 ) { return false; } } + // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } @@ -1814,46 +1737,30 @@ Expr = Sizzle.selectors = { if ( forward && useCache ) { // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; + outerCache = parent[ expando ] || ( parent[ expando ] = {} ); + cache = outerCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex && cache[ 2 ]; node = nodeIndex && parent.childNodes[ nodeIndex ]; - while ( (node = ++nodeIndex && node && node[ dir ] || + while ( ( node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { + ( diff = nodeIndex = 0 ) || start.pop() ) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } } else { + // Use previously-cached element index if available if ( useCache ) { - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - cache = uniqueCache[ type ] || []; + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + cache = outerCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex; } @@ -1861,25 +1768,21 @@ Expr = Sizzle.selectors = { // xml :nth-child(...) // or :nth-last-child(...) or :nth(-last)?-of-type(...) if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { if ( ( ofType ? - node.nodeName.toLowerCase() === name : + nodeName( node, name ) : node.nodeType === 1 ) && ++diff ) { // Cache the index of each encountered element if ( useCache ) { - outerCache = node[ expando ] || (node[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - (outerCache[ node.uniqueID ] = {}); - - uniqueCache[ type ] = [ dirruns, diff ]; + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + outerCache[ type ] = [ dirruns, diff ]; } if ( node === elem ) { @@ -1897,18 +1800,19 @@ Expr = Sizzle.selectors = { }; }, - "PSEUDO": function( pseudo, argument ) { + PSEUDO: function( pseudo, argument ) { + // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes + // https://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); + find.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function - // just as Sizzle does + // just as jQuery does if ( fn[ expando ] ) { return fn( argument ); } @@ -1917,15 +1821,15 @@ Expr = Sizzle.selectors = { if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { + markFunction( function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); + idx = indexOf.call( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); } - }) : + } ) : function( elem ) { return fn( elem, 0, args ); }; @@ -1936,49 +1840,53 @@ Expr = Sizzle.selectors = { }, pseudos: { + // Potentially complex pseudos - "not": markFunction(function( selector ) { + not: markFunction( function( selector ) { + // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); + matcher = compile( selector.replace( rtrimCSS, "$1" ) ); return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { + markFunction( function( seed, matches, _context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); } } - }) : - function( elem, context, xml ) { - input[0] = elem; + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; matcher( input, null, xml, results ); - // Don't keep the element (issue #299) - input[0] = null; + + // Don't keep the element + // (see https://github.com/jquery/sizzle/issues/299) + input[ 0 ] = null; return !results.pop(); }; - }), + } ), - "has": markFunction(function( selector ) { + has: markFunction( function( selector ) { return function( elem ) { - return Sizzle( selector, elem ).length > 0; + return find( selector, elem ).length > 0; }; - }), + } ), - "contains": markFunction(function( text ) { + contains: markFunction( function( text ) { text = text.replace( runescape, funescape ); return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; }; - }), + } ), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value @@ -1986,57 +1894,65 @@ Expr = Sizzle.selectors = { // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { + // https://www.w3.org/TR/selectors/#lang-pseudo + lang: markFunction( function( lang ) { + // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); + if ( !ridentifier.test( lang || "" ) ) { + find.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { - if ( (elemLang = documentIsHTML ? + if ( ( elemLang = documentIsHTML ? elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); return false; }; - }), + } ), // Miscellaneous - "target": function( elem ) { + target: function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, - "root": function( elem ) { - return elem === docElem; + root: function( elem ) { + return elem === documentElement; }, - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + focus: function( elem ) { + return elem === safeActiveElement() && + document.hasFocus() && + !!( elem.type || elem.href || ~elem.tabIndex ); }, // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), + enabled: createDisabledPseudo( false ), + disabled: createDisabledPseudo( true ), + + checked: function( elem ) { - "checked": function( elem ) { // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + return ( nodeName( elem, "input" ) && !!elem.checked ) || + ( nodeName( elem, "option" ) && !!elem.selected ); }, - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly + selected: function( elem ) { + + // Support: IE <=11+ + // Accessing the selectedIndex property + // forces the browser to treat the default option as + // selected when in an optgroup. if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions elem.parentNode.selectedIndex; } @@ -2044,8 +1960,9 @@ Expr = Sizzle.selectors = { }, // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo + empty: function( elem ) { + + // https://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) // nodeType < 6 works because attributes (2) do not appear as children @@ -2057,86 +1974,92 @@ Expr = Sizzle.selectors = { return true; }, - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); + parent: function( elem ) { + return !Expr.pseudos.empty( elem ); }, // Element/input types - "header": function( elem ) { + header: function( elem ) { return rheader.test( elem.nodeName ); }, - "input": function( elem ) { + input: function( elem ) { return rinputs.test( elem.nodeName ); }, - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; + button: function( elem ) { + return nodeName( elem, "input" ) && elem.type === "button" || + nodeName( elem, "button" ); }, - "text": function( elem ) { + text: function( elem ) { var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && + return nodeName( elem, "input" ) && elem.type === "text" && - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + // Support: IE <10 only + // New HTML5 attribute values (e.g., "search") appear + // with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); }, // Position-in-collection - "first": createPositionalPseudo(function() { + first: createPositionalPseudo( function() { return [ 0 ]; - }), + } ), - "last": createPositionalPseudo(function( matchIndexes, length ) { + last: createPositionalPseudo( function( _matchIndexes, length ) { return [ length - 1 ]; - }), + } ), - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; - }), + } ), - "even": createPositionalPseudo(function( matchIndexes, length ) { + even: createPositionalPseudo( function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; - }), + } ), - "odd": createPositionalPseudo(function( matchIndexes, length ) { + odd: createPositionalPseudo( function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; + } ), + + lt: createPositionalPseudo( function( matchIndexes, length, argument ) { + var i; + + if ( argument < 0 ) { + i = argument + length; + } else if ( argument > length ) { + i = length; + } else { + i = argument; + } + for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; - }), + } ), - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + gt: createPositionalPseudo( function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; - }) + } ) } }; -Expr.pseudos["nth"] = Expr.pseudos["eq"]; +Expr.pseudos.nth = Expr.pseudos.eq; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { @@ -2151,7 +2074,7 @@ function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { +function tokenize( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; @@ -2167,37 +2090,39 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) { while ( soFar ) { // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { if ( match ) { + // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; + soFar = soFar.slice( match[ 0 ].length ) || soFar; } - groups.push( (tokens = []) ); + groups.push( ( tokens = [] ) ); } matched = false; // Combinators - if ( (match = rcombinators.exec( soFar )) ) { + if ( ( match = rleadingCombinator.exec( soFar ) ) ) { matched = match.shift(); - tokens.push({ + tokens.push( { value: matched, + // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); + type: match[ 0 ].replace( rtrimCSS, " " ) + } ); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { matched = match.shift(); - tokens.push({ + tokens.push( { value: matched, type: type, matches: match - }); + } ); soFar = soFar.slice( matched.length ); } } @@ -2210,20 +2135,23 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) { // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; + if ( parseOnly ) { + return soFar.length; + } + + return soFar ? + find.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} function toSelector( tokens ) { var i = 0, len = tokens.length, selector = ""; for ( ; i < len; i++ ) { - selector += tokens[i].value; + selector += tokens[ i ].value; } return selector; } @@ -2236,9 +2164,10 @@ function addCombinator( matcher, combinator, base ) { doneName = done++; return combinator.first ? + // Check against closest ancestor/preceding element function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { + while ( ( elem = elem[ dir ] ) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } @@ -2248,12 +2177,12 @@ function addCombinator( matcher, combinator, base ) { // Check against all ancestor/preceding elements function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, + var oldCache, outerCache, newCache = [ dirruns, doneName ]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching if ( xml ) { - while ( (elem = elem[ dir ]) ) { + while ( ( elem = elem[ dir ] ) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; @@ -2261,27 +2190,24 @@ function addCombinator( matcher, combinator, base ) { } } } else { - while ( (elem = elem[ dir ]) ) { + while ( ( elem = elem[ dir ] ) ) { if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - if ( skip && skip === elem.nodeName.toLowerCase() ) { + if ( skip && nodeName( elem, skip ) ) { elem = elem[ dir ] || elem; - } else if ( (oldCache = uniqueCache[ key ]) && + } else if ( ( oldCache = outerCache[ key ] ) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); + return ( newCache[ 2 ] = oldCache[ 2 ] ); } else { + // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; + outerCache[ key ] = newCache; // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { return true; } } @@ -2297,20 +2223,20 @@ function elementMatcher( matchers ) { function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { + if ( !matchers[ i ]( elem, context, xml ) ) { return false; } } return true; } : - matchers[0]; + matchers[ 0 ]; } function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); + find( selector, contexts[ i ], results ); } return results; } @@ -2323,7 +2249,7 @@ function condense( unmatched, map, filter, context, xml ) { mapped = map != null; for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { + if ( ( elem = unmatched[ i ] ) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { @@ -2343,34 +2269,38 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, matcherOut, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + elems = seed || + multipleContexts( selector || "*", + context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : - elems, + elems; + + if ( matcher ) { - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + // If we have a postFinder, or filtered seed, or non-seed postFilter + // or preexisting results, + matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - // ...intermediate processing is necessary - [] : + // ...intermediate processing is necessary + [] : - // ...otherwise use results directly - results : - matcherIn; + // ...otherwise use results directly + results; - // Find primary matches - if ( matcher ) { + // Find primary matches matcher( matcherIn, matcherOut, context, xml ); + } else { + matcherOut = matcherIn; } // Apply postFilter @@ -2381,8 +2311,8 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); } } } @@ -2390,25 +2320,27 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { - if ( (elem = matcherOut[i]) ) { + if ( ( elem = matcherOut[ i ] ) ) { + // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); + temp.push( ( matcherIn[ i ] = elem ) ); } } - postFinder( null, (matcherOut = []), temp, xml ); + postFinder( null, ( matcherOut = [] ), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { - seed[temp] = !(results[temp] = elem); + seed[ temp ] = !( results[ temp ] = elem ); } } } @@ -2426,14 +2358,14 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS push.apply( results, matcherOut ); } } - }); + } ); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) @@ -2441,42 +2373,52 @@ function matcherFromTokens( tokens ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; + return indexOf.call( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( + ( checkContext = context ).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) + + // Avoid hanging onto element + // (see https://github.com/jquery/sizzle/issues/299) checkContext = null; return ret; } ]; for ( ; i < len; i++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { + if ( Expr.relative[ tokens[ j ].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), + tokens.slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrimCSS, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), j < len && toSelector( tokens ) ); } @@ -2497,29 +2439,42 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { unmatched = seed && [], setMatched = [], contextBackup = outermostContext, + // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + elems = seed || byElement && Expr.find.TAG( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), len = elems.length; if ( outermost ) { - outermostContext = context === document || context || outermost; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; } // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + // Support: iOS <=7 - 9 only + // Tolerate NodeList properties (IE: "length"; Safari: ) matching + // elements by id. (see trac-14142) + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { if ( byElement && elem ) { j = 0; - if ( !context && elem.ownerDocument !== document ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { setDocument( elem ); xml = !documentIsHTML; } - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context || document, xml) ) { - results.push( elem ); + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + push.call( results, elem ); break; } } @@ -2530,8 +2485,9 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { // Track unmatched elements for set filters if ( bySet ) { + // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { + if ( ( elem = !matcher && elem ) ) { matchedCount--; } @@ -2555,16 +2511,17 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { // numerically zero. if ( bySet && i !== matchedCount ) { j = 0; - while ( (matcher = setMatchers[j++]) ) { + while ( ( matcher = setMatchers[ j++ ] ) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); } } } @@ -2580,7 +2537,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { - Sizzle.uniqueSort( results ); + jQuery.uniqueSort( results ); } } @@ -2598,20 +2555,21 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { superMatcher; } -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { +function compile( selector, match /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ selector + " " ]; if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element if ( !match ) { match = tokenize( selector ); } i = match.length; while ( i-- ) { - cached = matcherFromTokens( match[i] ); + cached = matcherFromTokens( match[ i ] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { @@ -2620,27 +2578,28 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { } // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + cached = compilerCache( selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) ); // Save selector and tokenization cached.selector = selector; } return cached; -}; +} /** - * A low-level selection function that works with Sizzle's compiled + * A low-level selection function that works with jQuery's compiled * selector functions * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile + * selector function built with jQuery selector compile * @param {Element} context * @param {Array} [results] * @param {Array} [seed] A set of elements to match against */ -select = Sizzle.select = function( selector, context, results, seed ) { +function select( selector, context, results, seed ) { var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); results = results || []; @@ -2649,11 +2608,14 @@ select = Sizzle.select = function( selector, context, results, seed ) { if ( match.length === 1 ) { // Reduce context if the leading compound selector is an ID - tokens = match[0] = match[0].slice( 0 ); - if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find.ID( + token.matches[ 0 ].replace( runescape, funescape ), + context + ) || [] )[ 0 ]; if ( !context ) { return results; @@ -2666,20 +2628,22 @@ select = Sizzle.select = function( selector, context, results, seed ) { } // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; while ( i-- ) { - token = tokens[i]; + token = tokens[ i ]; // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { + if ( Expr.relative[ ( type = token.type ) ] ) { break; } - if ( (find = Expr.find[ type ]) ) { + if ( ( find = Expr.find[ type ] ) ) { + // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && + testContext( context.parentNode ) || context + ) ) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); @@ -2705,89 +2669,48 @@ select = Sizzle.select = function( selector, context, results, seed ) { !context || rsibling.test( selector ) && testContext( context.parentNode ) || context ); return results; -}; +} // One-time assignments +// Support: Android <=4.0 - 4.1+ // Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; // Initialize against the default document setDocument(); -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Support: Android <=4.0 - 4.1+ // Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( el ) { - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( el ) { - return el.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - +support.sortDetached = assert( function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; +jQuery.find = find; // Deprecated jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; +jQuery.unique = jQuery.uniqueSort; + +// These have always been private, but they used to be documented +// as part of Sizzle so let's maintain them in the 3.x line +// for backwards compatibility purposes. +find.compile = compile; +find.select = select; +find.setDocument = setDocument; + +find.escape = jQuery.escapeSelector; +find.getText = jQuery.text; +find.isXML = jQuery.isXMLDoc; +find.selectors = jQuery.expr; +find.support = jQuery.support; +find.uniqueSort = jQuery.uniqueSort; + /* eslint-enable */ +} )(); var dir = function( elem, dir, until ) { @@ -2821,13 +2744,6 @@ var siblings = function( n, elem ) { var rneedsContext = jQuery.expr.match.needsContext; - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); @@ -2926,8 +2842,8 @@ jQuery.fn.extend( { var rootjQuery, // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) + // Prioritize #id over to avoid XSS via location.hash (trac-9521) + // Strict HTML recognition (trac-11290: must start with <) // Shortcut simple #id case for speed rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, @@ -3078,7 +2994,7 @@ jQuery.fn.extend( { if ( cur.nodeType < 11 && ( targets ? targets.index( cur ) > -1 : - // Don't pass non-elements to Sizzle + // Don't pass non-elements to jQuery#find cur.nodeType === 1 && jQuery.find.matchesSelector( cur, selectors ) ) ) { @@ -3141,7 +3057,7 @@ jQuery.each( { parents: function( elem ) { return dir( elem, "parentNode" ); }, - parentsUntil: function( elem, i, until ) { + parentsUntil: function( elem, _i, until ) { return dir( elem, "parentNode", until ); }, next: function( elem ) { @@ -3156,10 +3072,10 @@ jQuery.each( { prevAll: function( elem ) { return dir( elem, "previousSibling" ); }, - nextUntil: function( elem, i, until ) { + nextUntil: function( elem, _i, until ) { return dir( elem, "nextSibling", until ); }, - prevUntil: function( elem, i, until ) { + prevUntil: function( elem, _i, until ) { return dir( elem, "previousSibling", until ); }, siblings: function( elem ) { @@ -3169,7 +3085,13 @@ jQuery.each( { return siblings( elem.firstChild ); }, contents: function( elem ) { - if ( typeof elem.contentDocument !== "undefined" ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + return elem.contentDocument; } @@ -3512,7 +3434,7 @@ jQuery.extend( { var fns = arguments; return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( i, tuple ) { + jQuery.each( tuples, function( _i, tuple ) { // Map tuples (progress, done, fail) to arguments (done, fail, progress) var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; @@ -3627,7 +3549,7 @@ jQuery.extend( { if ( jQuery.Deferred.exceptionHook ) { jQuery.Deferred.exceptionHook( e, - process.stackTrace ); + process.error ); } // Support: Promises/A+ section 2.3.3.3.4.1 @@ -3655,10 +3577,17 @@ jQuery.extend( { process(); } else { - // Call an optional hook to record the stack, in case of exception + // Call an optional hook to record the error, in case of exception // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); + if ( jQuery.Deferred.getErrorHook ) { + process.error = jQuery.Deferred.getErrorHook(); + + // The deprecated alias of the above. While the name suggests + // returning the stack, not an error instance, jQuery just passes + // it directly to `console.warn` so both will work; an instance + // just better cooperates with source maps. + } else if ( jQuery.Deferred.getStackHook ) { + process.error = jQuery.Deferred.getStackHook(); } window.setTimeout( process ); } @@ -3792,8 +3721,8 @@ jQuery.extend( { resolveContexts = Array( i ), resolveValues = slice.call( arguments ), - // the master Deferred - master = jQuery.Deferred(), + // the primary Deferred + primary = jQuery.Deferred(), // subordinate callback factory updateFunc = function( i ) { @@ -3801,30 +3730,30 @@ jQuery.extend( { resolveContexts[ i ] = this; resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); + primary.resolveWith( resolveContexts, resolveValues ); } }; }; // Single- and empty arguments are adopted like Promise.resolve if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, !remaining ); // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || + if ( primary.state() === "pending" || isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - return master.then(); + return primary.then(); } } // Multiple arguments are aggregated like Promise.all array elements while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); } - return master.promise(); + return primary.promise(); } } ); @@ -3833,12 +3762,16 @@ jQuery.extend( { // warn about them ASAP rather than swallowing them by default. var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; -jQuery.Deferred.exceptionHook = function( error, stack ) { +// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error +// captured before the async barrier to get the original error cause +// which may otherwise be hidden. +jQuery.Deferred.exceptionHook = function( error, asyncError ) { // Support: IE 8 - 9 only // Console exists when dev tools are open, which can happen at any time if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + window.console.warn( "jQuery.Deferred exception: " + error.message, + error.stack, asyncError ); } }; @@ -3878,7 +3811,7 @@ jQuery.extend( { isReady: false, // A counter to track how many items to wait for before - // the ready event fires. See #6781 + // the ready event fires. See trac-6781 readyWait: 1, // Handle when the DOM is ready @@ -3965,7 +3898,7 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { // ...except when executing function values } else { bulk = fn; - fn = function( elem, key, value ) { + fn = function( elem, _key, value ) { return bulk.call( jQuery( elem ), value ); }; } @@ -3975,8 +3908,8 @@ var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { for ( ; i < len; i++ ) { fn( elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) ); } } @@ -4000,13 +3933,13 @@ var rmsPrefix = /^-ms-/, rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace() -function fcamelCase( all, letter ) { +function fcamelCase( _all, letter ) { return letter.toUpperCase(); } // Convert dashed to camelCase; used by the css and data modules // Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) +// Microsoft forgot to hump their vendor prefix (trac-9572) function camelCase( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); } @@ -4042,7 +3975,7 @@ Data.prototype = { value = {}; // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. + // but we should not, see trac-8335. // Always return an empty object. if ( acceptData( owner ) ) { @@ -4281,7 +4214,7 @@ jQuery.fn.extend( { while ( i-- ) { // Support: IE 11 only - // The attrs elements can be null (#14894) + // The attrs elements can be null (trac-14894) if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { @@ -4528,27 +4461,6 @@ var isHiddenWithinTree = function( elem, el ) { jQuery.css( elem, "display" ) === "none"; }; -var swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - function adjustCSS( elem, prop, valueParts, tween ) { @@ -4719,11 +4631,40 @@ var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); -// We have to close these tags to support XHTML (#13200) -var wrapMap = { +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (trac-11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (trac-14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; // Support: IE <=9 only - option: [ 1, "" ], + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (trac-13200) +var wrapMap = { // XHTML parsers do not magically insert elements in the // same way that tag soup parsers do. So we cannot shorten @@ -4736,17 +4677,19 @@ var wrapMap = { _default: [ 0, "", "" ] }; -// Support: IE <=9 only -wrapMap.optgroup = wrapMap.option; - wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + function getAll( context, tag ) { // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) + // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) var ret; if ( typeof context.getElementsByTagName !== "undefined" ) { @@ -4829,7 +4772,7 @@ function buildFragment( elems, context, scripts, selection, ignored ) { // Remember the top-level container tmp = fragment.firstChild; - // Ensure the created nodes are orphaned (#12392) + // Ensure the created nodes are orphaned (trac-12392) tmp.textContent = ""; } } @@ -4870,40 +4813,11 @@ function buildFragment( elems, context, scripts, selection, ignored ) { } } - return fragment; -} - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -} )(); - + return fragment; +} -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; function returnTrue() { return true; @@ -4913,25 +4827,6 @@ function returnFalse() { return false; } -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - function on( elem, types, selector, data, fn, one ) { var origFn, type; @@ -5008,8 +4903,8 @@ jQuery.event = { special, handlers, type, namespaces, origType, elemData = dataPriv.get( elem ); - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { return; } @@ -5033,7 +4928,7 @@ jQuery.event = { // Init the element's event structure and main handler, if this is the first if ( !( events = elemData.events ) ) { - events = elemData.events = {}; + events = elemData.events = Object.create( null ); } if ( !( eventHandle = elemData.handle ) ) { eventHandle = elemData.handle = function( e ) { @@ -5191,12 +5086,15 @@ jQuery.event = { dispatch: function( nativeEvent ) { - // Make a writable jQuery.Event from the native event object - var event = jQuery.event.fix( nativeEvent ); - var i, j, ret, matched, handleObj, handlerQueue, args = new Array( arguments.length ), - handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event @@ -5276,15 +5174,15 @@ jQuery.event = { for ( ; cur !== this; cur = cur.parentNode || this ) { - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + // Don't check non-elements (trac-13208) + // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { matchedHandlers = []; matchedSelectors = {}; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; - // Don't conflict with Object.prototype properties (#13203) + // Don't conflict with Object.prototype properties (trac-13203) sel = handleObj.selector + " "; if ( matchedSelectors[ sel ] === undefined ) { @@ -5320,12 +5218,12 @@ jQuery.event = { get: isFunction( hook ) ? function() { if ( this.originalEvent ) { - return hook( this.originalEvent ); + return hook( this.originalEvent ); } } : function() { if ( this.originalEvent ) { - return this.originalEvent[ name ]; + return this.originalEvent[ name ]; } }, @@ -5366,7 +5264,7 @@ jQuery.event = { el.click && nodeName( el, "input" ) ) { // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); + leverageNative( el, "click", true ); } // Return false to allow normal processing in the caller @@ -5417,10 +5315,10 @@ jQuery.event = { // synthetic events by interrupting progress until reinvoked in response to // *native* events that it fires directly, ensuring that state changes have // already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { +function leverageNative( el, type, isSetup ) { - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { + // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add + if ( !isSetup ) { if ( dataPriv.get( el, type ) === undefined ) { jQuery.event.add( el, type, returnTrue ); } @@ -5432,15 +5330,13 @@ function leverageNative( el, type, expectSync ) { jQuery.event.add( el, type, { namespace: false, handler: function( event ) { - var notAsync, result, + var result, saved = dataPriv.get( this, type ); if ( ( event.isTrigger & 1 ) && this[ type ] ) { // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { + if ( !saved ) { // Store arguments for use when handling the inner native event // There will always be at least one argument (an event object), so this array @@ -5449,27 +5345,22 @@ function leverageNative( el, type, expectSync ) { dataPriv.set( this, type, saved ); // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); this[ type ](); result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } + dataPriv.set( this, type, false ); + if ( saved !== result ) { // Cancel the outer synthetic event event.stopImmediatePropagation(); event.preventDefault(); - return result.value; + + return result; } // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. + // (focus or blur), assume that the surrogate already propagated from triggering + // the native event and prevent that from happening again here. // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the // bubbling surrogate propagates *after* the non-bubbling base), but that seems // less bad than duplication. @@ -5479,22 +5370,25 @@ function leverageNative( el, type, expectSync ) { // If this is a native event triggered above, everything is now in order // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { + } else if ( saved ) { // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); + dataPriv.set( this, type, jQuery.event.trigger( + saved[ 0 ], + saved.slice( 1 ), + this + ) ); + + // Abort handling of the native event by all jQuery handlers while allowing + // native handlers on the same element to run. On target, this is achieved + // by stopping immediate propagation just on the jQuery event. However, + // the native event is re-wrapped by a jQuery one on each level of the + // propagation so the only way to stop it for jQuery is to stop it for + // everyone via native `stopPropagation()`. This is not a problem for + // focus/blur which don't bubble, but it does also stop click on checkboxes + // and radios. We accept this limitation. + event.stopPropagation(); + event.isImmediatePropagationStopped = returnTrue; } } } ); @@ -5532,7 +5426,7 @@ jQuery.Event = function( src, props ) { // Create target properties // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) + // Target should not be a text node (trac-504, trac-13143) this.target = ( src.target && src.target.nodeType === 3 ) ? src.target.parentNode : src.target; @@ -5629,49 +5523,77 @@ jQuery.each( { targetTouches: true, toElement: true, touches: true, + which: true +}, jQuery.event.addProp ); - which: function( event ) { - var button = event.button; +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } + function focusMappedHandler( nativeEvent ) { + if ( document.documentMode ) { - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } + // Support: IE 11+ + // Attach a single focusin/focusout handler on the document while someone wants + // focus/blur. This is because the former are synchronous in IE while the latter + // are async. In other browsers, all those handlers are invoked synchronously. - if ( button & 2 ) { - return 3; - } + // `handle` from private data would already wrap the event, but we need + // to change the `type` here. + var handle = dataPriv.get( this, "handle" ), + event = jQuery.event.fix( nativeEvent ); + event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; + event.isSimulated = true; + + // First, handle focusin/focusout + handle( nativeEvent ); + + // ...then, handle focus/blur + // + // focus/blur don't bubble while focusin/focusout do; simulate the former by only + // invoking the handler at the lower level. + if ( event.target === event.currentTarget ) { - if ( button & 4 ) { - return 2; + // The setup part calls `leverageNative`, which, in turn, calls + // `jQuery.event.add`, so event handle will already have been set + // by this point. + handle( event ); } + } else { - return 0; + // For non-IE browsers, attach a single capturing handler on the document + // while someone wants focusin/focusout. + jQuery.event.simulate( delegateType, nativeEvent.target, + jQuery.event.fix( nativeEvent ) ); } - - return event.which; } -}, jQuery.event.addProp ); -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { jQuery.event.special[ type ] = { // Utilize native event if possible so blur/focus sequence is correct setup: function() { + var attaches; + // Claim the first handler // dataPriv.set( this, "focus", ... ) // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); + leverageNative( this, type, true ); - // Return false to allow normal processing in the caller - return false; + if ( document.documentMode ) { + + // Support: IE 9 - 11+ + // We use the same native handler for focusin & focus (and focusout & blur) + // so we need to coordinate setup & teardown parts between those events. + // Use `delegateType` as the key as `type` is already used by `leverageNative`. + attaches = dataPriv.get( this, delegateType ); + if ( !attaches ) { + this.addEventListener( delegateType, focusMappedHandler ); + } + dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); + } else { + + // Return false to allow normal processing in the caller + return false; + } }, trigger: function() { @@ -5682,8 +5604,84 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp return true; }, + teardown: function() { + var attaches; + + if ( document.documentMode ) { + attaches = dataPriv.get( this, delegateType ) - 1; + if ( !attaches ) { + this.removeEventListener( delegateType, focusMappedHandler ); + dataPriv.remove( this, delegateType ); + } else { + dataPriv.set( this, delegateType, attaches ); + } + } else { + + // Return false to indicate standard teardown should be applied + return false; + } + }, + + // Suppress native focus or blur if we're currently inside + // a leveraged native-event stack + _default: function( event ) { + return dataPriv.get( event.target, type ); + }, + delegateType: delegateType }; + + // Support: Firefox <=44 + // Firefox doesn't have focus(in | out) events + // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 + // + // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 + // focus(in | out) events fire after focus & blur events, + // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order + // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 + // + // Support: IE 9 - 11+ + // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, + // attach a single handler for both events in IE. + jQuery.event.special[ delegateType ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + dataHolder = document.documentMode ? this : doc, + attaches = dataPriv.get( dataHolder, delegateType ); + + // Support: IE 9 - 11+ + // We use the same native handler for focusin & focus (and focusout & blur) + // so we need to coordinate setup & teardown parts between those events. + // Use `delegateType` as the key as `type` is already used by `leverageNative`. + if ( !attaches ) { + if ( document.documentMode ) { + this.addEventListener( delegateType, focusMappedHandler ); + } else { + doc.addEventListener( type, focusMappedHandler, true ); + } + } + dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + dataHolder = document.documentMode ? this : doc, + attaches = dataPriv.get( dataHolder, delegateType ) - 1; + + if ( !attaches ) { + if ( document.documentMode ) { + this.removeEventListener( delegateType, focusMappedHandler ); + } else { + doc.removeEventListener( type, focusMappedHandler, true ); + } + dataPriv.remove( dataHolder, delegateType ); + } else { + dataPriv.set( dataHolder, delegateType, attaches ); + } + } + }; } ); // Create mouseenter/leave events using mouseover/out and event-time checks @@ -5771,13 +5769,6 @@ jQuery.fn.extend( { var - /* eslint-disable max-len */ - - // See https://github.com/eslint/eslint/issues/3229 - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, - - /* eslint-enable */ - // Support: IE <=10 - 11, Edge 12 - 13 only // In IE/Edge using regex groups here causes severe slowdowns. // See https://connect.microsoft.com/IE/feedback/details/1736512/ @@ -5785,7 +5776,8 @@ var // checked="checked" or checked rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rcleanScript = /^\s*\s*$/g; + + rcleanScript = /^\s*\s*$/g; // Prefer a tbody over its parent table for containing new rows function manipulationTarget( elem, content ) { @@ -5814,7 +5806,7 @@ function restoreScript( elem ) { } function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + var i, l, type, pdataOld, udataOld, udataCur, events; if ( dest.nodeType !== 1 ) { return; @@ -5822,13 +5814,11 @@ function cloneCopyEvent( src, dest ) { // 1. Copy private data: events, handlers, etc. if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.access( src ); - pdataCur = dataPriv.set( dest, pdataOld ); + pdataOld = dataPriv.get( src ); events = pdataOld.events; if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; + dataPriv.remove( dest, "handle events" ); for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { @@ -5864,7 +5854,7 @@ function fixInput( src, dest ) { function domManip( collection, args, callback, ignored ) { // Flatten any nested arrays - args = concat.apply( [], args ); + args = flat( args ); var fragment, first, scripts, hasScripts, node, doc, i = 0, @@ -5901,7 +5891,7 @@ function domManip( collection, args, callback, ignored ) { // Use the original fragment for the last item // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). + // being emptied incorrectly in certain situations (trac-8070). for ( ; i < l; i++ ) { node = fragment; @@ -5939,9 +5929,15 @@ function domManip( collection, args, callback, ignored ) { if ( jQuery._evalUrl && !node.noModule ) { jQuery._evalUrl( node.src, { nonce: node.nonce || node.getAttribute( "nonce" ) - } ); + }, doc ); } } else { + + // Unwrap a CDATA section containing script contents. This shouldn't be + // needed as in XML documents they're already not visible when + // inspecting element contents and in HTML documents they have no + // meaning but we're preserving that logic for backwards compatibility. + // This will be removed completely in 4.0. See gh-4904. DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); } } @@ -5976,7 +5972,7 @@ function remove( elem, selector, keepData ) { jQuery.extend( { htmlPrefilter: function( html ) { - return html.replace( rxhtmlTag, "<$1>" ); + return html; }, clone: function( elem, dataAndEvents, deepDataAndEvents ) { @@ -5988,7 +5984,8 @@ jQuery.extend( { if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + // We eschew jQuery#find here for performance reasons: + // https://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); @@ -6224,9 +6221,12 @@ jQuery.each( { } ); var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); +var rcustomProp = /^--/; + + var getStyles = function( elem ) { - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) // IE throws on elements created in popups // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" var view = elem.ownerDocument.defaultView; @@ -6238,6 +6238,27 @@ var getStyles = function( elem ) { return view.getComputedStyle( elem ); }; +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); @@ -6295,7 +6316,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); } var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableMarginLeftVal, + reliableTrDimensionsVal, reliableMarginLeftVal, container = document.createElement( "div" ), div = document.createElement( "div" ); @@ -6305,7 +6326,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); } // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) + // Style of cloned element affects source element cloned (trac-8908) div.style.backgroundClip = "content-box"; div.cloneNode( true ).style.backgroundClip = ""; support.clearCloneStyle = div.style.backgroundClip === "content-box"; @@ -6330,6 +6351,54 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); scrollboxSize: function() { computeStyleTests(); return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; } } ); } )(); @@ -6337,6 +6406,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); function curCSS( elem, name, computed ) { var width, minWidth, maxWidth, ret, + isCustomProp = rcustomProp.test( name ), // Support: Firefox 51+ // Retrieving style before computed somehow @@ -6347,11 +6417,42 @@ function curCSS( elem, name, computed ) { computed = computed || getStyles( elem ); // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) + // .css('filter') (IE 9 only, trac-12537) + // .css('--customProperty) (gh-3144) if ( computed ) { + + // Support: IE <=9 - 11+ + // IE only supports `"float"` in `getPropertyValue`; in computed styles + // it's only available as `"cssFloat"`. We no longer modify properties + // sent to `.css()` apart from camelCasing, so we need to check both. + // Normally, this would create difference in behavior: if + // `getPropertyValue` returns an empty string, the value returned + // by `.css()` would be `undefined`. This is usually the case for + // disconnected elements. However, in IE even disconnected elements + // with no styles return `"none"` for `getPropertyValue( "float" )` ret = computed.getPropertyValue( name ) || computed[ name ]; + if ( isCustomProp && ret ) { + + // Support: Firefox 105+, Chrome <=105+ + // Spec requires trimming whitespace for custom properties (gh-4926). + // Firefox only trims leading whitespace. Chrome just collapses + // both leading & trailing whitespace to a single space. + // + // Fall back to `undefined` if empty string returned. + // This collapses a missing definition with property defined + // and set to an empty string but there's no standard API + // allowing us to differentiate them without a performance penalty + // and returning `undefined` aligns with older jQuery. + // + // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED + // as whitespace while CSS does not, but this is not a problem + // because CSS preprocessing replaces them with U+000A LINE FEED + // (which *is* CSS whitespace) + // https://www.w3.org/TR/css-syntax-3/#input-preprocessing + ret = ret.replace( rtrimCSS, "$1" ) || undefined; + } + if ( ret === "" && !isAttached( elem ) ) { ret = jQuery.style( elem, name ); } @@ -6447,14 +6548,13 @@ var // except "table", "table-cell", or "table-caption" // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssNormalTransform = { letterSpacing: "0", fontWeight: "400" }; -function setPositiveNumber( elem, value, subtract ) { +function setPositiveNumber( _elem, value, subtract ) { // Any relative (+/-) values have already been // normalized at this point @@ -6469,7 +6569,8 @@ function setPositiveNumber( elem, value, subtract ) { function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { var i = dimension === "width" ? 1 : 0, extra = 0, - delta = 0; + delta = 0, + marginDelta = 0; // Adjustment may not be necessary if ( box === ( isBorderBox ? "border" : "content" ) ) { @@ -6479,8 +6580,10 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed for ( ; i < 4; i += 2 ) { // Both box models exclude margin + // Count margin delta separately to only add it after scroll gutter adjustment. + // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); } // If we get here with a content-box, we're seeking "padding" or "border" or "margin" @@ -6531,7 +6634,7 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed ) ) || 0; } - return delta; + return delta + marginDelta; } function getWidthOrHeight( elem, dimension, extra ) { @@ -6559,17 +6662,26 @@ function getWidthOrHeight( elem, dimension, extra ) { } - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - // Support: IE 9-11 only - // Also use offsetWidth/offsetHeight for when box sizing is unreliable - // We use getClientRects() to check for hidden/disconnected. - // In those cases, the computed value can be trusted to be border-box + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected elem.getClientRects().length ) { isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; @@ -6620,26 +6732,35 @@ jQuery.extend( { // Don't automatically add "px" to these possibly-unitless properties cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true + animationIterationCount: true, + aspectRatio: true, + borderImageSlice: true, + columnCount: true, + flexGrow: true, + flexShrink: true, + fontWeight: true, + gridArea: true, + gridColumn: true, + gridColumnEnd: true, + gridColumnStart: true, + gridRow: true, + gridRowEnd: true, + gridRowStart: true, + lineHeight: true, + opacity: true, + order: true, + orphans: true, + scale: true, + widows: true, + zIndex: true, + zoom: true, + + // SVG-related + fillOpacity: true, + floodOpacity: true, + stopOpacity: true, + strokeMiterlimit: true, + strokeOpacity: true }, // Add in properties whose names you wish to fix before @@ -6674,15 +6795,15 @@ jQuery.extend( { if ( value !== undefined ) { type = typeof value; - // Convert "+=" or "-=" to relative numbers (#7345) + // Convert "+=" or "-=" to relative numbers (trac-7345) if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { value = adjustCSS( elem, name, ret ); - // Fixes bug #9237 + // Fixes bug trac-9237 type = "number"; } - // Make sure that null and NaN values aren't set (#7116) + // Make sure that null and NaN values aren't set (trac-7116) if ( value == null || value !== value ) { return; } @@ -6764,7 +6885,7 @@ jQuery.extend( { } } ); -jQuery.each( [ "height", "width" ], function( i, dimension ) { +jQuery.each( [ "height", "width" ], function( _i, dimension ) { jQuery.cssHooks[ dimension ] = { get: function( elem, computed, extra ) { if ( computed ) { @@ -6780,10 +6901,10 @@ jQuery.each( [ "height", "width" ], function( i, dimension ) { // Running getBoundingClientRect on a disconnected node // in IE throws an error. ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); } }, @@ -6842,7 +6963,7 @@ jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, swap( elem, { marginLeft: 0 }, function() { return elem.getBoundingClientRect().left; } ) - ) + "px"; + ) + "px"; } } ); @@ -6981,7 +7102,7 @@ Tween.propHooks = { if ( jQuery.fx.step[ tween.prop ] ) { jQuery.fx.step[ tween.prop ]( tween ); } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || + jQuery.cssHooks[ tween.prop ] || tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); } else { @@ -7226,7 +7347,7 @@ function defaultPrefilter( elem, props, opts ) { anim.done( function() { - /* eslint-enable no-loop-func */ + /* eslint-enable no-loop-func */ // The final step of a "hide" animation is actually hiding the element if ( !hidden ) { @@ -7306,7 +7427,7 @@ function Animation( elem, properties, options ) { remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) temp = remaining / animation.duration || 0, percent = 1 - temp, index = 0, @@ -7346,7 +7467,7 @@ function Animation( elem, properties, options ) { tweens: [], createTween: function( prop, end ) { var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.opts.specialEasing[ prop ] || animation.opts.easing ); animation.tweens.push( tween ); return tween; }, @@ -7519,7 +7640,8 @@ jQuery.fn.extend( { anim.stop( true ); } }; - doAnimation.finish = doAnimation; + + doAnimation.finish = doAnimation; return empty || optall.queue === false ? this.each( doAnimation ) : @@ -7537,7 +7659,7 @@ jQuery.fn.extend( { clearQueue = type; type = undefined; } - if ( clearQueue && type !== false ) { + if ( clearQueue ) { this.queue( type || "fx", [] ); } @@ -7620,7 +7742,7 @@ jQuery.fn.extend( { } } ); -jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { var cssFn = jQuery.fn[ name ]; jQuery.fn[ name ] = function( speed, easing, callback ) { return speed == null || typeof speed === "boolean" ? @@ -7695,7 +7817,6 @@ jQuery.fx.speeds = { // Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ jQuery.fn.delay = function( time, type ) { time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; type = type || "fx"; @@ -7841,7 +7962,7 @@ boolHook = { } }; -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { var getter = attrHandle[ name ] || jQuery.find.attr; attrHandle[ name ] = function( elem, name, isXML ) { @@ -7920,8 +8041,7 @@ jQuery.extend( { // Support: IE <=9 - 11 only // elem.tabIndex doesn't always return the // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) + // Use proper attribute retrieval (trac-12072) var tabindex = jQuery.find.attr( elem, "tabindex" ); if ( tabindex ) { @@ -8025,8 +8145,7 @@ function classesToArray( value ) { jQuery.fn.extend( { addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; + var classNames, cur, curValue, className, i, finalValue; if ( isFunction( value ) ) { return this.each( function( j ) { @@ -8034,36 +8153,35 @@ jQuery.fn.extend( { } ); } - classes = classesToArray( value ); + classNames = classesToArray( value ); - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + if ( classNames.length ) { + return this.each( function() { + curValue = getClass( this ); + cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; + if ( cur.indexOf( " " + className + " " ) < 0 ) { + cur += className + " "; } } // Only assign if different to avoid unneeded rendering. finalValue = stripAndCollapse( cur ); if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); + this.setAttribute( "class", finalValue ); } } - } + } ); } return this; }, removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; + var classNames, cur, curValue, className, i, finalValue; if ( isFunction( value ) ) { return this.each( function( j ) { @@ -8075,45 +8193,42 @@ jQuery.fn.extend( { return this.attr( "class", "" ); } - classes = classesToArray( value ); + classNames = classesToArray( value ); - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); + if ( classNames.length ) { + return this.each( function() { + curValue = getClass( this ); // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); + while ( cur.indexOf( " " + className + " " ) > -1 ) { + cur = cur.replace( " " + className + " ", " " ); } } // Only assign if different to avoid unneeded rendering. finalValue = stripAndCollapse( cur ); if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); + this.setAttribute( "class", finalValue ); } } - } + } ); } return this; }, toggleClass: function( value, stateVal ) { - var type = typeof value, + var classNames, className, i, self, + type = typeof value, isValidValue = type === "string" || Array.isArray( value ); - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - if ( isFunction( value ) ) { return this.each( function( i ) { jQuery( this ).toggleClass( @@ -8123,17 +8238,20 @@ jQuery.fn.extend( { } ); } - return this.each( function() { - var className, i, self, classNames; + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + classNames = classesToArray( value ); + return this.each( function() { if ( isValidValue ) { // Toggle individual class names - i = 0; self = jQuery( this ); - classNames = classesToArray( value ); - while ( ( className = classNames[ i++ ] ) ) { + for ( i = 0; i < classNames.length; i++ ) { + className = classNames[ i ]; // Check each className given, space separated list if ( self.hasClass( className ) ) { @@ -8159,8 +8277,8 @@ jQuery.fn.extend( { if ( this.setAttribute ) { this.setAttribute( "class", className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" + "" : + dataPriv.get( this, "__className__" ) || "" ); } } @@ -8175,7 +8293,7 @@ jQuery.fn.extend( { while ( ( elem = this[ i++ ] ) ) { if ( elem.nodeType === 1 && ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; + return true; } } @@ -8267,7 +8385,7 @@ jQuery.extend( { val : // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) + // option.text throws exceptions (trac-14686, trac-14858) // Strip and collapse whitespace // https://html.spec.whatwg.org/#strip-and-collapse-whitespace stripAndCollapse( jQuery.text( elem ) ); @@ -8294,7 +8412,7 @@ jQuery.extend( { option = options[ i ]; // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) + // IE8-9 doesn't update selected after form reset (trac-2551) if ( ( option.selected || i === index ) && // Don't return options that are disabled or in a disabled optgroup @@ -8368,9 +8486,39 @@ jQuery.each( [ "radio", "checkbox" ], function() { // Return jQuery for attributes-only inclusion +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} -support.focusin = "onfocusin" in window; + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, @@ -8437,8 +8585,8 @@ jQuery.extend( jQuery.event, { return; } - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + // Determine event propagation path in advance, per W3C events spec (trac-9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { bubbleType = special.delegateType || type; @@ -8465,7 +8613,7 @@ jQuery.extend( jQuery.event, { special.bindType || type; // jQuery handler - handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && dataPriv.get( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); @@ -8490,7 +8638,7 @@ jQuery.extend( jQuery.event, { acceptData( elem ) ) { // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) + // Don't do default actions on window, that's where global variables be (trac-6170) if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method @@ -8558,77 +8706,6 @@ jQuery.fn.extend( { } ); -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = Date.now(); - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - var rbracket = /\[\]$/, rCRLF = /\r?\n/g, @@ -8724,16 +8801,14 @@ jQuery.fn.extend( { // Can add propHook for "elements" to filter or add form elements var elements = jQuery.prop( this, "elements" ); return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { + } ).filter( function() { var type = this.type; // Use .is( ":disabled" ) so that fieldset[disabled] works return this.name && !jQuery( this ).is( ":disabled" ) && rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( i, elem ) { + } ).map( function( _i, elem ) { var val = jQuery( this ).val(); if ( val == null ) { @@ -8758,7 +8833,7 @@ var rantiCache = /([?&])_=[^&]*/, rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - // #7653, #8125, #8152: local protocol detection + // trac-7653, trac-8125, trac-8152: local protocol detection rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\/\//, @@ -8781,12 +8856,13 @@ var */ transports = {}, - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression allTypes = "*/".concat( "*" ), // Anchor tag for parsing the document origin originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; + +originAnchor.href = location.href; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport function addToPrefiltersOrTransports( structure ) { @@ -8851,7 +8927,7 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX // A special extend for ajax options // that takes "flat" options (not to be deep extended) -// Fixes #9887 +// Fixes trac-9887 function ajaxExtend( target, src ) { var key, deep, flatOptions = jQuery.ajaxSettings.flatOptions || {}; @@ -9167,8 +9243,8 @@ jQuery.extend( { // Context for global events is callbackContext if it is a DOM node or jQuery collection globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, + jQuery( callbackContext ) : + jQuery.event, // Deferreds deferred = jQuery.Deferred(), @@ -9262,12 +9338,12 @@ jQuery.extend( { deferred.promise( jqXHR ); // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) + // Handle falsy url in the settings object (trac-10093: consistency with old signature) // We also use the url parameter if available s.url = ( ( url || s.url || location.href ) + "" ) .replace( rprotocol, location.protocol + "//" ); - // Alias method option to type as per ticket #12004 + // Alias method option to type as per ticket trac-12004 s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list @@ -9310,7 +9386,7 @@ jQuery.extend( { } // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) fireGlobals = jQuery.event && s.global; // Watch for a new set of requests @@ -9339,14 +9415,15 @@ jQuery.extend( { if ( s.data && ( s.processData || typeof s.data === "string" ) ) { cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - // #9682: remove data so that it's not used in an eventual retry + // trac-9682: remove data so that it's not used in an eventual retry delete s.data; } // Add or update anti-cache param if needed if ( s.cache === false ) { cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; } // Put hash and anti-cache on the URL that will be requested (gh-1732) @@ -9479,6 +9556,13 @@ jQuery.extend( { response = ajaxHandleResponses( s, jqXHR, responses ); } + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + // Convert no matter what (that way responseXXX fields are always set) response = ajaxConvert( s, response, jqXHR, isSuccess ); @@ -9569,7 +9653,7 @@ jQuery.extend( { } } ); -jQuery.each( [ "get", "post" ], function( i, method ) { +jQuery.each( [ "get", "post" ], function( _i, method ) { jQuery[ method ] = function( url, data, callback, type ) { // Shift arguments if data argument was omitted @@ -9590,12 +9674,21 @@ jQuery.each( [ "get", "post" ], function( i, method ) { }; } ); +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + -jQuery._evalUrl = function( url, options ) { +jQuery._evalUrl = function( url, options, doc ) { return jQuery.ajax( { url: url, - // Make this explicit, since user can override this through ajaxSetup (#11264) + // Make this explicit, since user can override this through ajaxSetup (trac-11264) type: "GET", dataType: "script", cache: true, @@ -9609,7 +9702,7 @@ jQuery._evalUrl = function( url, options ) { "text script": function() {} }, dataFilter: function( response ) { - jQuery.globalEval( response, options ); + jQuery.globalEval( response, options, doc ); } } ); }; @@ -9704,7 +9797,7 @@ var xhrSuccessStatus = { 0: 200, // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 + // trac-1450: sometimes IE returns 1223 when it should be 204 1223: 204 }, xhrSupported = jQuery.ajaxSettings.xhr(); @@ -9776,7 +9869,7 @@ jQuery.ajaxTransport( function( options ) { } else { complete( - // File: protocol always yields status 0; see #8605, #14207 + // File: protocol always yields status 0; see trac-8605, trac-14207 xhr.status, xhr.statusText ); @@ -9837,7 +9930,7 @@ jQuery.ajaxTransport( function( options ) { xhr.send( options.hasContent && options.data || null ); } catch ( e ) { - // #14683: Only rethrow if this hasn't been notified as an error yet + // trac-14683: Only rethrow if this hasn't been notified as an error yet if ( callback ) { throw e; } @@ -9931,7 +10024,7 @@ var oldCallbacks = [], jQuery.ajaxSetup( { jsonp: "callback", jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); + var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); this[ callback ] = true; return callback; } @@ -10148,23 +10241,6 @@ jQuery.fn.load = function( url, params, callback ) { -// Attach a bunch of functions for handling common AJAX events -jQuery.each( [ - "ajaxStart", - "ajaxStop", - "ajaxComplete", - "ajaxError", - "ajaxSuccess", - "ajaxSend" -], function( i, type ) { - jQuery.fn[ type ] = function( fn ) { - return this.on( type, fn ); - }; -} ); - - - - jQuery.expr.pseudos.animated = function( elem ) { return jQuery.grep( jQuery.timers, function( fn ) { return elem === fn.elem; @@ -10371,7 +10447,7 @@ jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 // getComputedStyle returns percent when specified for top/left/bottom/right; // rather than make the css module depend on the offset module, just check for it here -jQuery.each( [ "top", "left" ], function( i, prop ) { +jQuery.each( [ "top", "left" ], function( _i, prop ) { jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, function( elem, computed ) { if ( computed ) { @@ -10389,8 +10465,11 @@ jQuery.each( [ "top", "left" ], function( i, prop ) { // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, - function( defaultExtra, funcName ) { + jQuery.each( { + padding: "inner" + name, + content: type, + "": "outer" + name + }, function( defaultExtra, funcName ) { // Margin is only for outerHeight, outerWidth jQuery.fn[ funcName ] = function( margin, value ) { @@ -10434,25 +10513,19 @@ jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { } ); -jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup contextmenu" ).split( " " ), - function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); +jQuery.each( [ + "ajaxStart", + "ajaxStop", + "ajaxComplete", + "ajaxError", + "ajaxSuccess", + "ajaxSend" +], function( _i, type ) { + jQuery.fn[ type ] = function( fn ) { + return this.on( type, fn ); }; } ); -jQuery.fn.extend( { - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -} ); - @@ -10474,9 +10547,37 @@ jQuery.fn.extend( { return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); } } ); +jQuery.each( + ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( _i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + } +); + + + + +// Support: Android <=4.0 only +// Make sure we trim BOM and NBSP +// Require that the "whitespace run" starts from a non-whitespace +// to avoid O(N^2) behavior when the engine would try matching "\s+$" at each space position. +var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g; + // Bind a function to a context, optionally partially applying any // arguments. // jQuery.proxy is deprecated to promote standards (specifically Function#bind) @@ -10539,6 +10640,11 @@ jQuery.isNumeric = function( obj ) { !isNaN( obj - parseFloat( obj ) ); }; +jQuery.trim = function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "$1" ); +}; @@ -10585,9 +10691,9 @@ jQuery.noConflict = function( deep ) { }; // Expose jQuery and $ identifiers, even in AMD -// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) -// and CommonJS for browser emulators (#13566) -if ( !noGlobal ) { +// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557) +// and CommonJS for browser emulators (trac-13566) +if ( typeof noGlobal === "undefined" ) { window.jQuery = window.$ = jQuery; } diff --git a/aspnet-samples/AspNetForm/Scripts/jquery.signalR-2.4.1.min.js b/aspnet-samples/AspNetForm/Scripts/jquery.signalR-2.4.1.min.js deleted file mode 100644 index 86c5b086..00000000 --- a/aspnet-samples/AspNetForm/Scripts/jquery.signalR-2.4.1.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/*! - * ASP.NET SignalR JavaScript Library 2.4.1 - * http://signalr.net/ - * - * Copyright (c) .NET Foundation. All rights reserved. - * Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - * - */ -(function(n,t,i){function w(t,i){var u,f;if(n.isArray(t)){for(u=t.length-1;u>=0;u--)f=t[u],n.type(f)==="string"&&r.transports[f]||(i.log("Invalid transport: "+f+", removing it from the transports list."),t.splice(u,1));t.length===0&&(i.log("No transports remain within the specified transport array."),t=null)}else if(r.transports[t]||t==="auto"){if(t==="auto"&&r._.ieVersion<=8)return["longPolling"]}else i.log("Invalid transport: "+t.toString()+"."),t=null;return t}function b(n){return n==="http:"?80:n==="https:"?443:void 0}function a(n,t){return t.match(/:\d+$/)?t:t+":"+b(n)}function k(t,i){var u=this,r=[];u.tryBuffer=function(i){return t.state===n.signalR.connectionState.connecting?(r.push(i),!0):!1};u.drain=function(){if(t.state===n.signalR.connectionState.connected)while(r.length>0)i(r.shift())};u.clear=function(){r=[]}}var f={nojQuery:"jQuery was not found. Please ensure jQuery is referenced before the SignalR client JavaScript file.",noTransportOnInit:"No transport could be initialized successfully. Try specifying a different transport or none at all for auto initialization.",errorOnNegotiate:"Error during negotiation request.",stoppedWhileLoading:"The connection was stopped during page load.",stoppedWhileNegotiating:"The connection was stopped during the negotiate request.",errorParsingNegotiateResponse:"Error parsing negotiate response.",errorRedirectionExceedsLimit:"Negotiate redirection limit exceeded.",errorDuringStartRequest:"Error during start request. Stopping the connection.",errorFromServer:"Error message received from the server: '{0}'.",stoppedDuringStartRequest:"The connection was stopped during the start request.",errorParsingStartResponse:"Error parsing start response: '{0}'. Stopping the connection.",invalidStartResponse:"Invalid start response: '{0}'. Stopping the connection.",protocolIncompatible:"You are using a version of the client that isn't compatible with the server. Client version {0}, server version {1}.",aspnetCoreSignalrServer:"Detected a connection attempt to an ASP.NET Core SignalR Server. This client only supports connecting to an ASP.NET SignalR Server. See https://aka.ms/signalr-core-differences for details.",sendFailed:"Send failed.",parseFailed:"Failed at parsing response: {0}",longPollFailed:"Long polling request failed.",eventSourceFailedToConnect:"EventSource failed to connect.",eventSourceError:"Error raised by EventSource",webSocketClosed:"WebSocket closed.",pingServerFailedInvalidResponse:"Invalid ping response when pinging server: '{0}'.",pingServerFailed:"Failed to ping server.",pingServerFailedStatusCode:"Failed to ping server. Server responded with status code {0}, stopping the connection.",pingServerFailedParse:"Failed to parse ping server response, stopping the connection.",noConnectionTransport:"Connection is in an invalid state, there is no transport active.",webSocketsInvalidState:"The Web Socket transport is in an invalid state, transitioning into reconnecting.",reconnectTimeout:"Couldn't reconnect within the configured timeout of {0} ms, disconnecting.",reconnectWindowTimeout:"The client has been inactive since {0} and it has exceeded the inactivity timeout of {1} ms. Stopping the connection.",jsonpNotSupportedWithAccessToken:"The JSONP protocol does not support connections that require a Bearer token to connect, such as the Azure SignalR Service."};if(typeof n!="function")throw new Error(f.nojQuery);var r,h,o=t.document.readyState==="complete",e=n(t),c="__Negotiate Aborted__",u={onStart:"onStart",onStarting:"onStarting",onReceived:"onReceived",onError:"onError",onConnectionSlow:"onConnectionSlow",onReconnecting:"onReconnecting",onReconnect:"onReconnect",onStateChanged:"onStateChanged",onDisconnect:"onDisconnect"},v=function(n,i){if(i!==!1){var r;typeof t.console!="undefined"&&(r="["+(new Date).toTimeString()+"] SignalR: "+n,t.console.debug?t.console.debug(r):t.console.log&&t.console.log(r))}},s=function(t,i,r){return i===t.state?(t.state=r,n(t).triggerHandler(u.onStateChanged,[{oldState:i,newState:r}]),!0):!1},y=function(n){return n.state===r.connectionState.disconnected},l=function(n){return n._.keepAliveData.activated&&n.transport.supportsKeepAlive(n)},p=function(i){var f,e;i._.configuredStopReconnectingTimeout||(e=function(t){var i=r._.format(r.resources.reconnectTimeout,t.disconnectTimeout);t.log(i);n(t).triggerHandler(u.onError,[r._.error(i,"TimeoutException")]);t.stop(!1,!1)},i.reconnecting(function(){var n=this;n.state===r.connectionState.reconnecting&&(f=t.setTimeout(function(){e(n)},n.disconnectTimeout))}),i.stateChanged(function(n){n.oldState===r.connectionState.reconnecting&&t.clearTimeout(f)}),i._.configuredStopReconnectingTimeout=!0)};if(r=function(n,t,i){return new r.fn.init(n,t,i)},r._={defaultContentType:"application/x-www-form-urlencoded; charset=UTF-8",ieVersion:function(){var i,n;return t.navigator.appName==="Microsoft Internet Explorer"&&(n=/MSIE ([0-9]+\.[0-9]+)/.exec(t.navigator.userAgent),n&&(i=t.parseFloat(n[1]))),i}(),error:function(n,t,i){var r=new Error(n);return r.source=t,typeof i!="undefined"&&(r.context=i),r},transportError:function(n,t,r,u){var f=this.error(n,r,u);return f.transport=t?t.name:i,f},format:function(){for(var t=arguments[0],n=0;n<\/script>.");}},typeof e.on=="function")e.on("load",function(){o=!0});else e.load(function(){o=!0});r.fn=r.prototype={init:function(t,i,r){var f=n(this);this.url=t;this.qs=i;this.lastError=null;this._={keepAliveData:{},connectingMessageBuffer:new k(this,function(n){f.triggerHandler(u.onReceived,[n])}),lastMessageAt:(new Date).getTime(),lastActiveAt:(new Date).getTime(),beatInterval:5e3,beatHandle:null,totalTransportConnectTimeout:0,redirectQs:null};typeof r=="boolean"&&(this.logging=r)},_parseResponse:function(n){var t=this;return n?typeof n=="string"?t.json.parse(n):n:n},_originalJson:t.JSON,json:t.JSON,isCrossDomain:function(i,r){var u;return(i=n.trim(i),r=r||t.location,i.indexOf("http")!==0)?!1:(u=t.document.createElement("a"),u.href=i,u.protocol+a(u.protocol,u.host)!==r.protocol+a(r.protocol,r.host))},ajaxDataType:"text",contentType:"application/json; charset=UTF-8",logging:!1,state:r.connectionState.disconnected,clientProtocol:"2.1",supportedProtocols:["1.5","2.0","2.1"],negotiateRedirectSupportedProtocols:["2.0","2.1"],reconnectDelay:2e3,transportConnectTimeout:0,disconnectTimeout:3e4,reconnectWindow:3e4,keepAliveWarnAt:2/3,start:function(i,h){var a=this,v={pingInterval:3e5,waitForPageLoad:!0,transport:"auto",jsonp:!1},g,y=a._deferral||n.Deferred(),b=t.document.createElement("a"),nt=function(i,u){i.url===u&&i.baseUrl||(i.url=u,b.href=i.url,b.protocol&&b.protocol!==":"?(i.protocol=b.protocol,i.host=b.host):(i.protocol=t.document.location.protocol,i.host=b.host||t.document.location.host),i.baseUrl=i.protocol+"//"+i.host,i.wsProtocol=i.protocol==="https:"?"wss://":"ws://",i.url.indexOf("//")===0&&(i.url=t.location.protocol+i.url,i.log("Protocol relative URL detected, normalizing it to '"+i.url+"'.")),i.isCrossDomain(i.url)&&(i.log("Auto detected cross domain url."),v.transport==="auto"&&(v.transport=["webSockets","serverSentEvents","longPolling"]),typeof i.withCredentials=="undefined"&&(i.withCredentials=!0),n.support.cors||(i.ajaxDataType="jsonp",i.log("Using jsonp because this browser doesn't support CORS.")),i.contentType=r._.defaultContentType))},d,k;if(a.lastError=null,a._deferral=y,!a.json)throw new Error("SignalR: No JSON parser found. Please ensure json2.js is referenced before the SignalR.js file if you need to support clients without native JSON parsing support, e.g. IE<8.");if(n.type(i)==="function"?h=i:n.type(i)==="object"&&(n.extend(v,i),n.type(v.callback)==="function"&&(h=v.callback)),v.transport=w(v.transport,a),!v.transport)throw new Error("SignalR: Invalid transport(s) specified, aborting start.");return(a._.config=v,!o&&v.waitForPageLoad===!0)?(a._.deferredStartHandler=function(){a.start(i,h)},e.bind("load",a._.deferredStartHandler),y.promise()):a.state===r.connectionState.connecting?y.promise():s(a,r.connectionState.disconnected,r.connectionState.connecting)===!1?(y.resolve(a),y.promise()):(p(a),v.transport==="auto"&&v.jsonp===!0&&(v.transport="longPolling"),a.withCredentials=v.withCredentials,a._originalUrl=a.url,a.ajaxDataType=v.jsonp?"jsonp":"text",nt(a,a.url),n(a).bind(u.onStart,function(){n.type(h)==="function"&&h.call(a);y.resolve(a)}),a._.initHandler=r.transports._logic.initHandler(a),g=function(i,o){var c=r._.error(f.noTransportOnInit);if(o=o||0,o>=i.length){o===0?a.log("No transports supported by the server were selected."):o===1?a.log("No fallback transports were selected."):a.log("Fallback transports exhausted.");n(a).triggerHandler(u.onError,[c]);y.reject(c);a.stop();return}if(a.state!==r.connectionState.disconnected){var p=i[o],h=r.transports[p],v=function(){g(i,o+1)};a.transport=h;try{a._.initHandler.start(h,function(){var f=r._.firefoxMajorVersion(t.navigator.userAgent)>=11,i=!0;a.log("The start request succeeded. Transitioning to the connected state.");l(a)&&r.transports._logic.monitorKeepAlive(a);r.transports._logic.startHeartbeat(a);r._.configurePingInterval(a);s(a,r.connectionState.connecting,r.connectionState.connected)||a.log("WARNING! The connection was not in the connecting state.");a._.connectingMessageBuffer.drain();n(a).triggerHandler(u.onStart);e.bind("unload",function(){a.log("Window unloading, stopping the connection.");a.stop(i)});f&&e.bind("beforeunload",function(){t.setTimeout(function(){a.stop(i)},0)})},v)}catch(w){a.log(h.name+" transport threw '"+w.message+"' when attempting to start.");v()}}},d=a.url+"/negotiate",k=function(t,i){var e=r._.error(f.errorOnNegotiate,t,i._.negotiateRequest);n(i).triggerHandler(u.onError,e);y.reject(e);i.stop()},n(a).triggerHandler(u.onStarting),d=r.transports._logic.prepareQueryString(a,d),a.log("Negotiating with '"+d+"'."),a._.negotiateRequest=function(){var t,h=0,w=100,i,e,o=[],s=[],l=function(n,t){var u=r.transports._logic.prepareQueryString(n,n.url+"/negotiate"),i;return n.log("Negotiating with '"+u+"'."),i={url:u,error:function(t,i){i!==c?k(t,n):y.reject(r._.error(f.stoppedWhileNegotiating,null,n._.negotiateRequest))},success:t},n.accessToken&&(i.headers={Authorization:"Bearer "+n.accessToken}),r.transports._logic.ajax(n,i)},p=function(c){try{t=a._parseResponse(c)}catch(d){k(r._.error(f.errorParsingNegotiateResponse,d),a);return}if(t.availableTransports){e=r._.error(f.aspnetCoreSignalrServer);n(a).triggerHandler(u.onError,[e]);y.reject(e);return}if(!t.ProtocolVersion||a.supportedProtocols.indexOf(t.ProtocolVersion)===-1){e=r._.error(r._.format(f.protocolIncompatible,a.clientProtocol,t.ProtocolVersion));n(a).triggerHandler(u.onError,[e]);y.reject(e);return}if(a.negotiateRedirectSupportedProtocols.indexOf(t.ProtocolVersion)!==-1){if(t.Error){e=r._.error(r._.format(f.errorFromServer,t.Error));n(a).triggerHandler(u.onError,[e]);y.reject(e);return}if(t.RedirectUrl){if(h===w){k(r._.error(f.errorRedirectionExceedsLimit),a);return}v.transport==="auto"&&(v.transport=["webSockets","serverSentEvents","longPolling"]);a.log("Received redirect to: "+t.RedirectUrl);a.accessToken=t.AccessToken;var b=t.RedirectUrl.split("?",2);if(nt(a,b[0]),a._.redirectQs=b.length===2?b[1]:null,a.ajaxDataType==="jsonp"&&a.accessToken){k(r._.error(f.jsonpNotSupportedWithAccessToken),a);return}h++;l(a,p);return}}i=a._.keepAliveData;a.appRelativeUrl=t.Url;a.id=t.ConnectionId;a.token=t.ConnectionToken;a.webSocketServerUrl=t.WebSocketServerUrl;a._.pollTimeout=t.ConnectionTimeout*1e3+1e4;a.disconnectTimeout=t.DisconnectTimeout*1e3;a._.totalTransportConnectTimeout=a.transportConnectTimeout+t.TransportConnectTimeout*1e3;t.KeepAliveTimeout?(i.activated=!0,i.timeout=t.KeepAliveTimeout*1e3,i.timeoutWarning=i.timeout*a.keepAliveWarnAt,a._.beatInterval=(i.timeout-i.timeoutWarning)/3):i.activated=!1;a.reconnectWindow=a.disconnectTimeout+(i.timeout||0);n.each(r.transports,function(n){if(n.indexOf("_")===0||n==="webSockets"&&!t.TryWebSockets)return!0;s.push(n)});n.isArray(v.transport)?n.each(v.transport,function(t,i){n.inArray(i,s)>=0&&o.push(i)}):v.transport==="auto"?o=s:n.inArray(v.transport,s)>=0&&o.push(v.transport);g(o)};return l(a,p)}(),y.promise())},starting:function(t){var i=this;return n(i).bind(u.onStarting,function(){t.call(i)}),i},send:function(n){var t=this;if(t.state===r.connectionState.disconnected)throw new Error("SignalR: Connection must be started before data can be sent. Call .start() before .send()");if(t.state===r.connectionState.connecting)throw new Error("SignalR: Connection has not been fully initialized. Use .start().done() or .start().fail() to run logic after the connection has started.");return t.transport.send(t,n),t},received:function(t){var i=this;return n(i).bind(u.onReceived,function(n,r){t.call(i,r)}),i},stateChanged:function(t){var i=this;return n(i).bind(u.onStateChanged,function(n,r){t.call(i,r)}),i},error:function(t){var i=this;return n(i).bind(u.onError,function(n,r,u){i.lastError=r;t.call(i,r,u)}),i},disconnected:function(t){var i=this;return n(i).bind(u.onDisconnect,function(){t.call(i)}),i},connectionSlow:function(t){var i=this;return n(i).bind(u.onConnectionSlow,function(){t.call(i)}),i},reconnecting:function(t){var i=this;return n(i).bind(u.onReconnecting,function(){t.call(i)}),i},reconnected:function(t){var i=this;return n(i).bind(u.onReconnect,function(){t.call(i)}),i},stop:function(i,h){var a=this,v=a._deferral;if(a._.deferredStartHandler&&e.unbind("load",a._.deferredStartHandler),delete a._.config,delete a._.deferredStartHandler,!o&&(!a._.config||a._.config.waitForPageLoad===!0)){a.log("Stopping connection prior to negotiate.");v&&v.reject(r._.error(f.stoppedWhileLoading));return}if(a.state!==r.connectionState.disconnected)return a.log("Stopping connection."),t.clearTimeout(a._.beatHandle),t.clearInterval(a._.pingIntervalId),a.transport&&(a.transport.stop(a),h!==!1&&a.transport.abort(a,i),l(a)&&r.transports._logic.stopMonitoringKeepAlive(a),a.transport=null),a._.negotiateRequest&&(a._.negotiateRequest.abort(c),delete a._.negotiateRequest),a._.initHandler&&a._.initHandler.stop(),delete a._deferral,delete a.messageId,delete a.groupsToken,delete a.id,delete a._.pingIntervalId,delete a._.lastMessageAt,delete a._.lastActiveAt,a._.connectingMessageBuffer.clear(),n(a).unbind(u.onStart),delete a.accessToken,delete a.protocol,delete a.host,delete a.baseUrl,delete a.wsProtocol,delete a.contentType,a.url=a._originalUrl,a._.redirectQs=null,s(a,a.state,r.connectionState.disconnected),n(a).triggerHandler(u.onDisconnect),a},log:function(n){v(n,this.logging)}};r.fn.init.prototype=r.fn;r.noConflict=function(){return n.connection===r&&(n.connection=h),r};n.connection&&(h=n.connection);n.connection=n.signalR=r})(window.jQuery,window),function(n,t,i){function s(n){n._.keepAliveData.monitoring&&l(n);u.markActive(n)&&(n._.beatHandle=t.setTimeout(function(){s(n)},n._.beatInterval))}function l(t){var i=t._.keepAliveData,u;t.state===r.connectionState.connected&&(u=(new Date).getTime()-t._.lastMessageAt,u>=i.timeout?(t.log("Keep alive timed out. Notifying transport that connection has been lost."),t.transport.lostConnection(t)):u>=i.timeoutWarning?i.userNotified||(t.log("Keep alive has been missed, connection may be dead/slow."),n(t).triggerHandler(f.onConnectionSlow),i.userNotified=!0):i.userNotified=!1)}function e(n,t){var i=n.url+t;return n.transport&&(i+="?transport="+n.transport.name),u.prepareQueryString(n,i)}function h(n){this.connection=n;this.startRequested=!1;this.startCompleted=!1;this.connectionStopped=!1}var r=n.signalR,f=n.signalR.events,c=n.signalR.changeState,o="__Start Aborted__",u;r.transports={};h.prototype={start:function(n,r,u){var f=this,e=f.connection,o=!1;if(f.startRequested||f.connectionStopped){e.log("WARNING! "+n.name+" transport cannot be started. Initialization ongoing or completed.");return}e.log(n.name+" transport starting.");n.start(e,function(){o||f.initReceived(n,r)},function(t){return o||(o=!0,f.transportFailed(n,t,u)),!f.startCompleted||f.connectionStopped});f.transportTimeoutHandle=t.setTimeout(function(){o||(o=!0,e.log(n.name+" transport timed out when trying to connect."),f.transportFailed(n,i,u))},e._.totalTransportConnectTimeout)},stop:function(){this.connectionStopped=!0;t.clearTimeout(this.transportTimeoutHandle);r.transports._logic.tryAbortStartRequest(this.connection)},initReceived:function(n,i){var u=this,f=u.connection;if(u.startRequested){f.log("WARNING! The client received multiple init messages.");return}u.connectionStopped||(u.startRequested=!0,t.clearTimeout(u.transportTimeoutHandle),f.log(n.name+" transport connected. Initiating start request."),r.transports._logic.ajaxStart(f,function(){u.startCompleted=!0;i()}))},transportFailed:function(i,u,e){var o=this.connection,h=o._deferral,s;this.connectionStopped||(t.clearTimeout(this.transportTimeoutHandle),this.startRequested?this.startCompleted||(s=r._.error(r.resources.errorDuringStartRequest,u),o.log(i.name+" transport failed during the start request. Stopping the connection."),n(o).triggerHandler(f.onError,[s]),h&&h.reject(s),o.stop()):(i.stop(o),o.log(i.name+" transport failed to connect. Attempting to fall back."),e()))}};u=r.transports._logic={ajax:function(t,i){return n.ajax(n.extend(!0,{},n.signalR.ajaxDefaults,{type:"GET",data:{},xhrFields:{withCredentials:t.withCredentials},contentType:t.contentType,dataType:t.ajaxDataType},i))},pingServer:function(t){var e,f,i=n.Deferred();return t.transport?(e=t.url+"/ping",e=u.addQs(e,t.qs),f=u.ajax(t,{url:e,headers:t.accessToken?{Authorization:"Bearer "+t.accessToken}:{},success:function(n){var u;try{u=t._parseResponse(n)}catch(e){i.reject(r._.transportError(r.resources.pingServerFailedParse,t.transport,e,f));t.stop();return}u.Response==="pong"?i.resolve():i.reject(r._.transportError(r._.format(r.resources.pingServerFailedInvalidResponse,n),t.transport,null,f))},error:function(n){n.status===401||n.status===403?(i.reject(r._.transportError(r._.format(r.resources.pingServerFailedStatusCode,n.status),t.transport,n,f)),t.stop()):i.reject(r._.transportError(r.resources.pingServerFailed,t.transport,n,f))}})):i.reject(r._.transportError(r.resources.noConnectionTransport,t.transport)),i.promise()},prepareQueryString:function(n,i){var r;return r=u.addQs(i,"clientProtocol="+n.clientProtocol),r=typeof n._.redirectQs=="string"?u.addQs(r,n._.redirectQs):u.addQs(r,n.qs),n.token&&(r+="&connectionToken="+t.encodeURIComponent(n.token)),n.data&&(r+="&connectionData="+t.encodeURIComponent(n.data)),r},addQs:function(t,i){var r=t.indexOf("?")!==-1?"&":"?",u;if(!i)return t;if(typeof i=="object")return t+r+n.param(i);if(typeof i=="string")return u=i.charAt(0),(u==="?"||u==="&")&&(r=""),t+r+i;throw new Error("Query string property must be either a string or object.");},getUrl:function(n,i,r,f,e){var h=i==="webSockets"?"":n.baseUrl,o=h+n.appRelativeUrl,s="transport="+i;return!e&&n.groupsToken&&(s+="&groupsToken="+t.encodeURIComponent(n.groupsToken)),r?(o+=f?"/poll":"/reconnect",!e&&n.messageId&&(s+="&messageId="+t.encodeURIComponent(n.messageId))):o+="/connect",o+="?"+s,o=u.prepareQueryString(n,o),n.transport&&n.accessToken&&(n.transport.name==="serverSentEvents"||n.transport.name==="webSockets")&&(o+="&access_token="+t.encodeURIComponent(n.accessToken)),e||(o+="&tid="+Math.floor(Math.random()*11)),o},maximizePersistentResponse:function(n){return{MessageId:n.C,Messages:n.M,Initialized:typeof n.S!="undefined"?!0:!1,ShouldReconnect:typeof n.T!="undefined"?!0:!1,LongPollDelay:n.L,GroupsToken:n.G,Error:n.E}},updateGroups:function(n,t){t&&(n.groupsToken=t)},stringifySend:function(n,t){return typeof t=="string"||typeof t=="undefined"||t===null?t:n.json.stringify(t)},ajaxSend:function(t,i){var h=u.stringifySend(t,i),c=e(t,"/send"),o,s=function(t,u){n(u).triggerHandler(f.onError,[r._.transportError(r.resources.sendFailed,u.transport,t,o),i])};return o=u.ajax(t,{url:c,type:t.ajaxDataType==="jsonp"?"GET":"POST",contentType:r._.defaultContentType,headers:t.accessToken?{Authorization:"Bearer "+t.accessToken}:{},data:{data:h},success:function(n){var i;if(n){try{i=t._parseResponse(n)}catch(r){s(r,t);t.stop();return}u.triggerReceived(t,i)}},error:function(n,i){i!=="abort"&&i!=="parsererror"&&s(n,t)}})},ajaxAbort:function(n,t){if(typeof n.transport!="undefined"){t=typeof t=="undefined"?!0:t;var i=e(n,"/abort");u.ajax(n,{url:i,async:t,timeout:1e3,type:"POST",headers:n.accessToken?{Authorization:"Bearer "+n.accessToken}:{},dataType:"text"});n.log("Fired ajax abort async = "+t+".")}},ajaxStart:function(t,i){var h=function(n){var i=t._deferral;i&&i.reject(n)},s=function(i){t.log("The start request failed. Stopping the connection.");n(t).triggerHandler(f.onError,[i]);h(i);t.stop()};t._.startRequest=u.ajax(t,{url:e(t,"/start"),headers:t.accessToken?{Authorization:"Bearer "+t.accessToken}:{},success:function(n,u,f){var e;try{e=t._parseResponse(n)}catch(o){s(r._.error(r._.format(r.resources.errorParsingStartResponse,n),o,f));return}e.Response==="started"?i():s(r._.error(r._.format(r.resources.invalidStartResponse,n),null,f))},error:function(n,i,u){i!==o?s(r._.error(r.resources.errorDuringStartRequest,u,n)):(t.log("The start request aborted because connection.stop() was called."),h(r._.error(r.resources.stoppedDuringStartRequest,null,n)))}})},tryAbortStartRequest:function(n){n._.startRequest&&(n._.startRequest.abort(o),delete n._.startRequest)},tryInitialize:function(n,t,i){t.Initialized&&i?i():t.Initialized&&n.log("WARNING! The client received an init message after reconnecting.")},triggerReceived:function(t,i){t._.connectingMessageBuffer.tryBuffer(i)||n(t).triggerHandler(f.onReceived,[i])},processMessages:function(t,i,f){var e;if(i&&typeof i.I!="undefined"){u.triggerReceived(t,i);return}if(u.markLastMessage(t),i){if(e=u.maximizePersistentResponse(i),e.Error){t.log("Received an error message from the server: "+i.E);n(t).triggerHandler(r.events.onError,[r._.error(i.E,"ServerError")]);t.stop(!1,!1);return}u.updateGroups(t,e.GroupsToken);e.MessageId&&(t.messageId=e.MessageId);e.Messages&&(n.each(e.Messages,function(n,i){u.triggerReceived(t,i)}),u.tryInitialize(t,e,f))}},monitorKeepAlive:function(t){var i=t._.keepAliveData;i.monitoring?t.log("Tried to monitor keep alive but it's already being monitored."):(i.monitoring=!0,u.markLastMessage(t),t._.keepAliveData.reconnectKeepAliveUpdate=function(){u.markLastMessage(t)},n(t).bind(f.onReconnect,t._.keepAliveData.reconnectKeepAliveUpdate),t.log("Now monitoring keep alive with a warning timeout of "+i.timeoutWarning+", keep alive timeout of "+i.timeout+" and disconnecting timeout of "+t.disconnectTimeout))},stopMonitoringKeepAlive:function(t){var i=t._.keepAliveData;i.monitoring&&(i.monitoring=!1,n(t).unbind(f.onReconnect,t._.keepAliveData.reconnectKeepAliveUpdate),t._.keepAliveData={},t.log("Stopping the monitoring of the keep alive."))},startHeartbeat:function(n){n._.lastActiveAt=(new Date).getTime();s(n)},markLastMessage:function(n){n._.lastMessageAt=(new Date).getTime()},markActive:function(n){return u.verifyLastActive(n)?(n._.lastActiveAt=(new Date).getTime(),!0):!1},isConnectedOrReconnecting:function(n){return n.state===r.connectionState.connected||n.state===r.connectionState.reconnecting},ensureReconnectingState:function(t){return c(t,r.connectionState.connected,r.connectionState.reconnecting)===!0&&n(t).triggerHandler(f.onReconnecting),t.state===r.connectionState.reconnecting},clearReconnectTimeout:function(n){n&&n._.reconnectTimeout&&(t.clearTimeout(n._.reconnectTimeout),delete n._.reconnectTimeout)},verifyLastActive:function(t){if((new Date).getTime()-t._.lastActiveAt>=t.reconnectWindow){var i=r._.format(r.resources.reconnectWindowTimeout,new Date(t._.lastActiveAt),t.reconnectWindow);return t.log(i),n(t).triggerHandler(f.onError,[r._.error(i,"TimeoutException")]),t.stop(!1,!1),!1}return!0},reconnect:function(n,i){var f=r.transports[i];if(u.isConnectedOrReconnecting(n)&&!n._.reconnectTimeout){if(!u.verifyLastActive(n))return;n._.reconnectTimeout=t.setTimeout(function(){u.verifyLastActive(n)&&(f.stop(n),u.ensureReconnectingState(n)&&(n.log(i+" reconnecting."),f.start(n)))},n.reconnectDelay)}},handleParseFailure:function(t,i,u,e,o){var s=r._.transportError(r._.format(r.resources.parseFailed,i),t.transport,u,o);e&&e(s)?t.log("Failed to parse server response while attempting to connect."):(n(t).triggerHandler(f.onError,[s]),t.stop())},initHandler:function(n){return new h(n)},foreverFrame:{count:0,connections:{}}}}(window.jQuery,window),function(n,t){var i=n.signalR,u=n.signalR.events,f=n.signalR.changeState,r=i.transports._logic;i.transports.webSockets={name:"webSockets",supportsKeepAlive:function(){return!0},send:function(t,f){var e=r.stringifySend(t,f);try{t.socket.send(e)}catch(o){n(t).triggerHandler(u.onError,[i._.transportError(i.resources.webSocketsInvalidState,t.transport,o,t.socket),f])}},start:function(e,o,s){var h,c=!1,l=this,a=!o,v=n(e);if(!t.WebSocket){s();return}e.socket||(h=e.webSocketServerUrl?e.webSocketServerUrl:e.wsProtocol+e.host,h+=r.getUrl(e,this.name,a),e.log("Connecting to websocket endpoint '"+h+"'."),e.socket=new t.WebSocket(h),e.socket.onopen=function(){c=!0;e.log("Websocket opened.");r.clearReconnectTimeout(e);f(e,i.connectionState.reconnecting,i.connectionState.connected)===!0&&v.triggerHandler(u.onReconnect)},e.socket.onclose=function(t){var r;this===e.socket&&(c&&typeof t.wasClean!="undefined"&&t.wasClean===!1?(r=i._.transportError(i.resources.webSocketClosed,e.transport,t),e.log("Unclean disconnect from websocket: "+(t.reason||"[no reason given]."))):e.log("Websocket closed."),s&&s(r)||(r&&n(e).triggerHandler(u.onError,[r]),l.reconnect(e)))},e.socket.onmessage=function(n){var t;try{t=e._parseResponse(n.data)}catch(i){r.handleParseFailure(e,n.data,i,s,n);return}t&&r.processMessages(e,t,o)})},reconnect:function(n){r.reconnect(n,this.name)},lostConnection:function(n){this.reconnect(n)},stop:function(n){r.clearReconnectTimeout(n);n.socket&&(n.log("Closing the Websocket."),n.socket.close(),n.socket=null)},abort:function(n,t){r.ajaxAbort(n,t)}}}(window.jQuery,window),function(n,t){var i=n.signalR,u=n.signalR.events,e=n.signalR.changeState,r=i.transports._logic,f=function(n){t.clearTimeout(n._.reconnectAttemptTimeoutHandle);delete n._.reconnectAttemptTimeoutHandle};i.transports.serverSentEvents={name:"serverSentEvents",supportsKeepAlive:function(){return!0},timeOut:3e3,start:function(o,s,h){var c=this,l=!1,a=n(o),v=!s,y;if(o.eventSource&&(o.log("The connection already has an event source. Stopping it."),o.stop()),!t.EventSource){h&&(o.log("This browser doesn't support SSE."),h());return}y=r.getUrl(o,this.name,v);try{o.log("Attempting to connect to SSE endpoint '"+y+"'.");o.eventSource=new t.EventSource(y,{withCredentials:o.withCredentials})}catch(p){o.log("EventSource failed trying to connect with error "+p.Message+".");h?h():(a.triggerHandler(u.onError,[i._.transportError(i.resources.eventSourceFailedToConnect,o.transport,p)]),v&&c.reconnect(o));return}v&&(o._.reconnectAttemptTimeoutHandle=t.setTimeout(function(){l===!1&&o.eventSource.readyState!==t.EventSource.OPEN&&c.reconnect(o)},c.timeOut));o.eventSource.addEventListener("open",function(){o.log("EventSource connected.");f(o);r.clearReconnectTimeout(o);l===!1&&(l=!0,e(o,i.connectionState.reconnecting,i.connectionState.connected)===!0&&a.triggerHandler(u.onReconnect))},!1);o.eventSource.addEventListener("message",function(n){var t;if(n.data!=="initialized"){try{t=o._parseResponse(n.data)}catch(i){r.handleParseFailure(o,n.data,i,h,n);return}r.processMessages(o,t,s)}},!1);o.eventSource.addEventListener("error",function(n){var r=i._.transportError(i.resources.eventSourceError,o.transport,n);this===o.eventSource&&(h&&h(r)||(o.log("EventSource readyState: "+o.eventSource.readyState+"."),n.eventPhase===t.EventSource.CLOSED?(o.log("EventSource reconnecting due to the server connection ending."),c.reconnect(o)):(o.log("EventSource error."),a.triggerHandler(u.onError,[r]))))},!1)},reconnect:function(n){r.reconnect(n,this.name)},lostConnection:function(n){this.reconnect(n)},send:function(n,t){r.ajaxSend(n,t)},stop:function(n){f(n);r.clearReconnectTimeout(n);n&&n.eventSource&&(n.log("EventSource calling close()."),n.eventSource.close(),n.eventSource=null,delete n.eventSource)},abort:function(n,t){r.ajaxAbort(n,t)}}}(window.jQuery,window),function(n,t){var r=n.signalR,e=n.signalR.events,o=n.signalR.changeState,i=r.transports._logic,u=function(){var n=t.document.createElement("iframe");return n.setAttribute("style","position:absolute;top:0;left:0;width:0;height:0;visibility:hidden;"),n},f=function(){var i=null,f=1e3,n=0;return{prevent:function(){r._.ieVersion<=8&&(n===0&&(i=t.setInterval(function(){var n=u();t.document.body.appendChild(n);t.document.body.removeChild(n);n=null},f)),n++)},cancel:function(){n===1&&t.clearInterval(i);n>0&&n--}}}();r.transports.foreverFrame={name:"foreverFrame",supportsKeepAlive:function(){return!0},iframeClearThreshold:50,start:function(n,r,e){if(n.accessToken){e&&(n.log("Forever Frame does not support connections that require a Bearer token to connect, such as the Azure SignalR Service."),e());return}var l=this,s=i.foreverFrame.count+=1,h,o=u(),c=function(){n.log("Forever frame iframe finished loading and is no longer receiving messages.");e&&e()||l.reconnect(n)};if(t.EventSource){e&&(n.log("Forever Frame is not supported by SignalR on browsers with SSE support."),e());return}o.setAttribute("data-signalr-connection-id",n.id);f.prevent();h=i.getUrl(n,this.name);h+="&frameId="+s;t.document.documentElement.appendChild(o);n.log("Binding to iframe's load event.");o.addEventListener?o.addEventListener("load",c,!1):o.attachEvent&&o.attachEvent("onload",c);o.src=h;i.foreverFrame.connections[s]=n;n.frame=o;n.frameId=s;r&&(n.onSuccess=function(){n.log("Iframe transport started.");r()})},reconnect:function(n){var r=this;i.isConnectedOrReconnecting(n)&&i.verifyLastActive(n)&&t.setTimeout(function(){if(i.verifyLastActive(n)&&n.frame&&i.ensureReconnectingState(n)){var u=n.frame,t=i.getUrl(n,r.name,!0)+"&frameId="+n.frameId;n.log("Updating iframe src to '"+t+"'.");u.src=t}},n.reconnectDelay)},lostConnection:function(n){this.reconnect(n)},send:function(n,t){i.ajaxSend(n,t)},receive:function(t,u){var f,e,o;if(t.json!==t._originalJson&&(u=t._originalJson.stringify(u)),o=t._parseResponse(u),i.processMessages(t,o,t.onSuccess),t.state===n.signalR.connectionState.connected&&(t.frameMessageCount=(t.frameMessageCount||0)+1,t.frameMessageCount>r.transports.foreverFrame.iframeClearThreshold&&(t.frameMessageCount=0,f=t.frame.contentWindow||t.frame.contentDocument,f&&f.document&&f.document.body)))for(e=f.document.body;e.firstChild;)e.removeChild(e.firstChild)},stop:function(n){var r=null;if(f.cancel(),n.frame){if(n.frame.stop)n.frame.stop();else try{r=n.frame.contentWindow||n.frame.contentDocument;r.document&&r.document.execCommand&&r.document.execCommand("Stop")}catch(u){n.log("Error occurred when stopping foreverFrame transport. Message = "+u.message+".")}n.frame.parentNode===t.document.documentElement&&t.document.documentElement.removeChild(n.frame);delete i.foreverFrame.connections[n.frameId];n.frame=null;n.frameId=null;delete n.frame;delete n.frameId;delete n.onSuccess;delete n.frameMessageCount;n.log("Stopping forever frame.")}},abort:function(n,t){i.ajaxAbort(n,t)},getConnection:function(n){return i.foreverFrame.connections[n]},started:function(t){o(t,r.connectionState.reconnecting,r.connectionState.connected)===!0&&n(t).triggerHandler(e.onReconnect)}}}(window.jQuery,window),function(n,t){var r=n.signalR,u=n.signalR.events,e=n.signalR.changeState,f=n.signalR.isDisconnecting,i=r.transports._logic;r.transports.longPolling={name:"longPolling",supportsKeepAlive:function(){return!1},reconnectDelay:3e3,start:function(o,s,h){var a=this,v=function(){v=n.noop;o.log("LongPolling connected.");s?s():o.log("WARNING! The client received an init message after reconnecting.")},y=function(n){return h(n)?(o.log("LongPolling failed to connect."),!0):!1},c=o._,l=0,p=function(i){t.clearTimeout(c.reconnectTimeoutId);c.reconnectTimeoutId=null;e(i,r.connectionState.reconnecting,r.connectionState.connected)===!0&&(i.log("Raising the reconnect event"),n(i).triggerHandler(u.onReconnect))},w=36e5;o.pollXhr&&(o.log("Polling xhr requests already exists, aborting."),o.stop());o.messageId=null;c.reconnectTimeoutId=null;c.pollTimeoutId=t.setTimeout(function(){(function e(s,h){var g=s.messageId,nt=g===null,k=!nt,tt=!h,d=i.getUrl(s,a.name,k,tt,!0),b={};(s.messageId&&(b.messageId=s.messageId),s.groupsToken&&(b.groupsToken=s.groupsToken),f(s)!==!0)&&(o.log("Opening long polling request to '"+d+"'."),s.pollXhr=i.ajax(o,{xhrFields:{onprogress:function(){i.markLastMessage(o)}},url:d,type:"POST",contentType:r._.defaultContentType,data:b,timeout:o._.pollTimeout,headers:o.accessToken?{Authorization:"Bearer "+o.accessToken}:{},success:function(r){var h,w=0,u,a;o.log("Long poll complete.");l=0;try{h=o._parseResponse(r)}catch(b){i.handleParseFailure(s,r,b,y,s.pollXhr);return}(c.reconnectTimeoutId!==null&&p(s),h&&(u=i.maximizePersistentResponse(h)),i.processMessages(s,h,v),u&&n.type(u.LongPollDelay)==="number"&&(w=u.LongPollDelay),f(s)!==!0)&&(a=u&&u.ShouldReconnect,!a||i.ensureReconnectingState(s))&&(w>0?c.pollTimeoutId=t.setTimeout(function(){e(s,a)},w):e(s,a))},error:function(f,h){var v=r._.transportError(r.resources.longPollFailed,o.transport,f,s.pollXhr);if(t.clearTimeout(c.reconnectTimeoutId),c.reconnectTimeoutId=null,h==="abort"){o.log("Aborted xhr request.");return}if(!y(v)){if(l++,o.state!==r.connectionState.reconnecting&&(o.log("An error occurred using longPolling. Status = "+h+". Response = "+f.responseText+"."),n(s).triggerHandler(u.onError,[v])),(o.state===r.connectionState.connected||o.state===r.connectionState.reconnecting)&&!i.verifyLastActive(o))return;if(!i.ensureReconnectingState(s))return;c.pollTimeoutId=t.setTimeout(function(){e(s,!0)},a.reconnectDelay)}}}),k&&h===!0&&(c.reconnectTimeoutId=t.setTimeout(function(){p(s)},Math.min(1e3*(Math.pow(2,l)-1),w))))})(o)},250)},lostConnection:function(n){n.pollXhr&&n.pollXhr.abort("lostConnection")},send:function(n,t){i.ajaxSend(n,t)},stop:function(n){t.clearTimeout(n._.pollTimeoutId);t.clearTimeout(n._.reconnectTimeoutId);delete n._.pollTimeoutId;delete n._.reconnectTimeoutId;n.pollXhr&&(n.pollXhr.abort(),n.pollXhr=null,delete n.pollXhr)},abort:function(n,t){i.ajaxAbort(n,t)}}}(window.jQuery,window),function(n){function r(n){return n+s}function c(n,t,i){for(var f=n.length,u=[],r=0;r=0}function i(n,t){return new i.fn.init(n,t)}function t(i,r){var u={qs:null,logging:!1,useDefaultPath:!0};return n.extend(u,r),(!i||u.useDefaultPath)&&(i=(i||"")+"/signalr"),new t.fn.init(i,u)}var o=0,s=".hubProxy",h=n.signalR;i.fn=i.prototype={init:function(n,t){this.state={};this.connection=n;this.hubName=t;this._={callbackMap:{}}},constructor:i,hasSubscriptions:function(){return u(this._.callbackMap)},on:function(t,i,u){var c=this,l=c._.callbackMap,v=!u&&e(i),f,h,s,a;for(u=u||i,u._signalRGuid||(u._signalRGuid=o++),t=t.toLowerCase(),f=l[t],f||(f=[],l[t]=f),s=0;s= connection.reconnectWindow) { - var message = signalR._.format(signalR.resources.reconnectWindowTimeout, new Date(connection._.lastActiveAt), connection.reconnectWindow); - connection.log(message); - $(connection).triggerHandler(events.onError, [signalR._.error(message, /* source */ "TimeoutException")]); - connection.stop(/* async */ false, /* notifyServer */ false); - return false; + // If there is no keep alive configured, we cannot assume that timer callbacks will + // run frequently enough to keep lastActiveAt updated. + // https://github.com/SignalR/SignalR/issues/4536 + if (!connection._.keepAliveData.activated || + new Date().getTime() - connection._.lastActiveAt < connection.reconnectWindow) { + return true; } - return true; + var message = signalR._.format(signalR.resources.reconnectWindowTimeout, new Date(connection._.lastActiveAt), connection.reconnectWindow); + connection.log(message); + $(connection).triggerHandler(events.onError, [signalR._.error(message, /* source */ "TimeoutException")]); + connection.stop(/* async */ false, /* notifyServer */ false); + return false; }, reconnect: function (connection, transportName) { @@ -3148,5 +3170,5 @@ /// (function ($, undefined) { // This will be modified by the build script - $.signalR.version = "2.4.1"; + $.signalR.version = "2.4.3"; }(window.jQuery)); diff --git a/aspnet-samples/AspNetForm/Scripts/jquery.signalR-2.4.3.min.js b/aspnet-samples/AspNetForm/Scripts/jquery.signalR-2.4.3.min.js new file mode 100644 index 00000000..3b60a2fa --- /dev/null +++ b/aspnet-samples/AspNetForm/Scripts/jquery.signalR-2.4.3.min.js @@ -0,0 +1,9 @@ +/*! + * ASP.NET SignalR JavaScript Library 2.4.3 + * http://signalr.net/ + * + * Copyright (c) .NET Foundation. All rights reserved. + * Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + * + */ +(function(n,t,i){function w(t,i){var u,f;if(n.isArray(t)){for(u=t.length-1;u>=0;u--)f=t[u],n.type(f)==="string"&&r.transports[f]||(i.log("Invalid transport: "+f+", removing it from the transports list."),t.splice(u,1));t.length===0&&(i.log("No transports remain within the specified transport array."),t=null)}else if(r.transports[t]||t==="auto"){if(t==="auto"&&r._.ieVersion<=8)return["longPolling"]}else i.log("Invalid transport: "+t.toString()+"."),t=null;return t}function b(n){return n==="http:"?80:n==="https:"?443:void 0}function a(n,t){return t.match(/:\d+$/)?t:t+":"+b(n)}function k(t,i){var u=this,r=[];u.tryBuffer=function(i){return t.state===n.signalR.connectionState.connecting?(r.push(i),!0):!1};u.drain=function(){if(t.state===n.signalR.connectionState.connected)while(r.length>0)i(r.shift())};u.clear=function(){r=[]}}var f={nojQuery:"jQuery was not found. Please ensure jQuery is referenced before the SignalR client JavaScript file.",noTransportOnInit:"No transport could be initialized successfully. Try specifying a different transport or none at all for auto initialization.",errorOnNegotiate:"Error during negotiation request.",stoppedWhileLoading:"The connection was stopped during page load.",stoppedWhileNegotiating:"The connection was stopped during the negotiate request.",errorParsingNegotiateResponse:"Error parsing negotiate response.",errorRedirectionExceedsLimit:"Negotiate redirection limit exceeded.",errorDuringStartRequest:"Error during start request. Stopping the connection.",errorFromServer:"Error message received from the server: '{0}'.",stoppedDuringStartRequest:"The connection was stopped during the start request.",errorParsingStartResponse:"Error parsing start response: '{0}'. Stopping the connection.",invalidStartResponse:"Invalid start response: '{0}'. Stopping the connection.",protocolIncompatible:"You are using a version of the client that isn't compatible with the server. Client version {0}, server version {1}.",aspnetCoreSignalrServer:"Detected a connection attempt to an ASP.NET Core SignalR Server. This client only supports connecting to an ASP.NET SignalR Server. See https://aka.ms/signalr-core-differences for details.",sendFailed:"Send failed.",parseFailed:"Failed at parsing response: {0}",longPollFailed:"Long polling request failed.",eventSourceFailedToConnect:"EventSource failed to connect.",eventSourceError:"Error raised by EventSource",webSocketClosed:"WebSocket closed.",pingServerFailedInvalidResponse:"Invalid ping response when pinging server: '{0}'.",pingServerFailed:"Failed to ping server.",pingServerFailedStatusCode:"Failed to ping server. Server responded with status code {0}, stopping the connection.",pingServerFailedParse:"Failed to parse ping server response, stopping the connection.",noConnectionTransport:"Connection is in an invalid state, there is no transport active.",webSocketsInvalidState:"The Web Socket transport is in an invalid state, transitioning into reconnecting.",reconnectTimeout:"Couldn't reconnect within the configured timeout of {0} ms, disconnecting.",reconnectWindowTimeout:"The client has been inactive since {0} and it has exceeded the inactivity timeout of {1} ms. Stopping the connection.",jsonpNotSupportedWithAccessToken:"The JSONP protocol does not support connections that require a Bearer token to connect, such as the Azure SignalR Service."};if(typeof n!="function")throw new Error(f.nojQuery);var r,h,o=t.document.readyState==="complete",e=n(t),c="__Negotiate Aborted__",u={onStart:"onStart",onStarting:"onStarting",onReceived:"onReceived",onError:"onError",onConnectionSlow:"onConnectionSlow",onReconnecting:"onReconnecting",onReconnect:"onReconnect",onStateChanged:"onStateChanged",onDisconnect:"onDisconnect"},v=function(n,i){if(i!==!1){var r;typeof t.console!="undefined"&&(r="["+(new Date).toTimeString()+"] SignalR: "+n,t.console.debug?t.console.debug(r):t.console.log&&t.console.log(r))}},s=function(t,i,r){return i===t.state?(t.state=r,n(t).triggerHandler(u.onStateChanged,[{oldState:i,newState:r}]),!0):!1},y=function(n){return n.state===r.connectionState.disconnected},l=function(n){return n._.keepAliveData.activated&&n.transport.supportsKeepAlive(n)},p=function(i){var f,e;i._.configuredStopReconnectingTimeout||(e=function(t){var i=r._.format(r.resources.reconnectTimeout,t.disconnectTimeout);t.log(i);n(t).triggerHandler(u.onError,[r._.error(i,"TimeoutException")]);t.stop(!1,!1)},i.reconnecting(function(){var n=this;n.state===r.connectionState.reconnecting&&(f=t.setTimeout(function(){e(n)},n.disconnectTimeout))}),i.stateChanged(function(n){n.oldState===r.connectionState.reconnecting&&t.clearTimeout(f)}),i._.configuredStopReconnectingTimeout=!0)};if(r=function(n,t,i){return new r.fn.init(n,t,i)},r._={defaultContentType:"application/x-www-form-urlencoded; charset=UTF-8",ieVersion:function(){var i,n;return t.navigator.appName==="Microsoft Internet Explorer"&&(n=/MSIE ([0-9]+\.[0-9]+)/.exec(t.navigator.userAgent),n&&(i=t.parseFloat(n[1]))),i}(),error:function(n,t,i){var r=new Error(n);return r.source=t,typeof i!="undefined"&&(r.context=i),r},transportError:function(n,t,r,u){var f=this.error(n,r,u);return f.transport=t?t.name:i,f},format:function(){for(var t=arguments[0],n=0;n<\/script>.");}},typeof e.on=="function")e.on("load",function(){o=!0});else e.load(function(){o=!0});r.fn=r.prototype={init:function(t,i,r){var f=n(this);this.url=t;this.qs=i;this.lastError=null;this._={keepAliveData:{},connectingMessageBuffer:new k(this,function(n){f.triggerHandler(u.onReceived,[n])}),lastMessageAt:(new Date).getTime(),lastActiveAt:(new Date).getTime(),beatInterval:5e3,beatHandle:null,totalTransportConnectTimeout:0,redirectQs:null};typeof r=="boolean"&&(this.logging=r)},_parseResponse:function(n){var t=this;return n?typeof n=="string"?t.json.parse(n):n:n},_originalJson:t.JSON,json:t.JSON,isCrossDomain:function(i,r){var u;return(i=n.trim(i),r=r||t.location,i.indexOf("http")!==0)?!1:(u=t.document.createElement("a"),u.href=i,u.protocol+a(u.protocol,u.host)!==r.protocol+a(r.protocol,r.host))},ajaxDataType:"text",contentType:"application/json; charset=UTF-8",logging:!1,state:r.connectionState.disconnected,clientProtocol:"2.1",supportedProtocols:["1.5","2.0","2.1"],negotiateRedirectSupportedProtocols:["2.0","2.1"],reconnectDelay:2e3,transportConnectTimeout:0,disconnectTimeout:3e4,reconnectWindow:3e4,keepAliveWarnAt:2/3,start:function(i,h){var a=this,v={pingInterval:3e5,waitForPageLoad:!0,transport:"auto",jsonp:!1},g,y=a._deferral||n.Deferred(),b=t.document.createElement("a"),nt=function(i,u){i.url===u&&i.baseUrl||(i.url=u,b.href=i.url,b.protocol&&b.protocol!==":"?(i.protocol=b.protocol,i.host=b.host):(i.protocol=t.document.location.protocol,i.host=b.host||t.document.location.host),i.baseUrl=i.protocol+"//"+i.host,i.wsProtocol=i.protocol==="https:"?"wss://":"ws://",i.url.indexOf("//")===0&&(i.url=t.location.protocol+i.url,i.log("Protocol relative URL detected, normalizing it to '"+i.url+"'.")),i.isCrossDomain(i.url)&&(i.log("Auto detected cross domain url."),v.transport==="auto"&&(v.transport=["webSockets","serverSentEvents","longPolling"]),typeof i.withCredentials=="undefined"&&(i.withCredentials=!0),n.support.cors||(i.ajaxDataType="jsonp",i.log("Using jsonp because this browser doesn't support CORS.")),i.contentType=r._.defaultContentType))},d,k;if(a.lastError=null,a._deferral=y,!a.json)throw new Error("SignalR: No JSON parser found. Please ensure json2.js is referenced before the SignalR.js file if you need to support clients without native JSON parsing support, e.g. IE<8.");if(n.type(i)==="function"?h=i:n.type(i)==="object"&&(n.extend(v,i),n.type(v.callback)==="function"&&(h=v.callback)),v.transport=w(v.transport,a),!v.transport)throw new Error("SignalR: Invalid transport(s) specified, aborting start.");return(a._.config=v,!o&&v.waitForPageLoad===!0)?(a._.deferredStartHandler=function(){a.start(i,h)},e.bind("load",a._.deferredStartHandler),y.promise()):a.state===r.connectionState.connecting?y.promise():s(a,r.connectionState.disconnected,r.connectionState.connecting)===!1?(y.resolve(a),y.promise()):(p(a),v.transport==="auto"&&v.jsonp===!0&&(v.transport="longPolling"),a.withCredentials=v.withCredentials,a._originalUrl=a.url,a.ajaxDataType=v.jsonp?"jsonp":"text",nt(a,a.url),n(a).bind(u.onStart,function(){n.type(h)==="function"&&h.call(a);y.resolve(a)}),a._.initHandler=r.transports._logic.initHandler(a),g=function(i,o){var c=r._.error(f.noTransportOnInit);if(o=o||0,o>=i.length){o===0?a.log("No transports supported by the server were selected."):o===1?a.log("No fallback transports were selected."):a.log("Fallback transports exhausted.");n(a).triggerHandler(u.onError,[c]);y.reject(c);a.stop();return}if(a.state!==r.connectionState.disconnected){var p=i[o],h=r.transports[p],v=function(){g(i,o+1)};a.transport=h;try{a._.initHandler.start(h,function(){var f=r._.firefoxMajorVersion(t.navigator.userAgent)>=11,i=!0;a.log("The start request succeeded. Transitioning to the connected state.");l(a)&&r.transports._logic.monitorKeepAlive(a);a._.keepAliveData.activated&&r.transports._logic.startHeartbeat(a);r._.configurePingInterval(a);s(a,r.connectionState.connecting,r.connectionState.connected)||a.log("WARNING! The connection was not in the connecting state.");a._.connectingMessageBuffer.drain();n(a).triggerHandler(u.onStart);e.bind("unload",function(){a.log("Window unloading, stopping the connection.");a.stop(i)});f&&e.bind("beforeunload",function(){t.setTimeout(function(){a.stop(i)},0)})},v)}catch(w){a.log(h.name+" transport threw '"+w.message+"' when attempting to start.");v()}}},d=a.url+"/negotiate",k=function(t,i){var e=r._.error(f.errorOnNegotiate,t,i._.negotiateRequest);n(i).triggerHandler(u.onError,e);y.reject(e);i.stop()},n(a).triggerHandler(u.onStarting),d=r.transports._logic.prepareQueryString(a,d),a.log("Negotiating with '"+d+"'."),a._.negotiateRequest=function(){var t,h=0,w=100,i,e,o=[],s=[],l=function(n,t){var u=r.transports._logic.prepareQueryString(n,n.url+"/negotiate"),i;return n.log("Negotiating with '"+u+"'."),i={url:u,error:function(t,i){i!==c?k(t,n):y.reject(r._.error(f.stoppedWhileNegotiating,null,n._.negotiateRequest))},success:t},n.accessToken&&(i.headers={Authorization:"Bearer "+n.accessToken}),r.transports._logic.ajax(n,i)},p=function(c){try{t=a._parseResponse(c)}catch(d){k(r._.error(f.errorParsingNegotiateResponse,d),a);return}if(t.availableTransports){e=r._.error(f.aspnetCoreSignalrServer);n(a).triggerHandler(u.onError,[e]);y.reject(e);return}if(!t.ProtocolVersion||a.supportedProtocols.indexOf(t.ProtocolVersion)===-1){e=r._.error(r._.format(f.protocolIncompatible,a.clientProtocol,t.ProtocolVersion));n(a).triggerHandler(u.onError,[e]);y.reject(e);return}if(a.negotiateRedirectSupportedProtocols.indexOf(t.ProtocolVersion)!==-1){if(t.Error){e=r._.error(r._.format(f.errorFromServer,t.Error));n(a).triggerHandler(u.onError,[e]);y.reject(e);return}if(t.RedirectUrl){if(h===w){k(r._.error(f.errorRedirectionExceedsLimit),a);return}v.transport==="auto"&&(v.transport=["webSockets","serverSentEvents","longPolling"]);a.log("Received redirect to: "+t.RedirectUrl);a.accessToken=t.AccessToken;var b=t.RedirectUrl.split("?",2);if(nt(a,b[0]),a._.redirectQs=b.length===2?b[1]:null,a.ajaxDataType==="jsonp"&&a.accessToken){k(r._.error(f.jsonpNotSupportedWithAccessToken),a);return}h++;l(a,p);return}}i=a._.keepAliveData;a.appRelativeUrl=t.Url;a.id=t.ConnectionId;a.token=t.ConnectionToken;a.webSocketServerUrl=t.WebSocketServerUrl;a._.pollTimeout=t.ConnectionTimeout*1e3+1e4;a.disconnectTimeout=t.DisconnectTimeout*1e3;a._.totalTransportConnectTimeout=a.transportConnectTimeout+t.TransportConnectTimeout*1e3;t.KeepAliveTimeout?(i.activated=!0,i.timeout=t.KeepAliveTimeout*1e3,i.timeoutWarning=i.timeout*a.keepAliveWarnAt,a._.beatInterval=(i.timeout-i.timeoutWarning)/3):i.activated=!1;a.reconnectWindow=a.disconnectTimeout+(i.timeout||0);n.each(r.transports,function(n){if(n.indexOf("_")===0||n==="webSockets"&&!t.TryWebSockets)return!0;s.push(n)});n.isArray(v.transport)?n.each(v.transport,function(t,i){n.inArray(i,s)>=0&&o.push(i)}):v.transport==="auto"?o=s:n.inArray(v.transport,s)>=0&&o.push(v.transport);g(o)};return l(a,p)}(),y.promise())},starting:function(t){var i=this;return n(i).bind(u.onStarting,function(){t.call(i)}),i},send:function(n){var t=this;if(t.state===r.connectionState.disconnected)throw new Error("SignalR: Connection must be started before data can be sent. Call .start() before .send()");if(t.state===r.connectionState.connecting)throw new Error("SignalR: Connection has not been fully initialized. Use .start().done() or .start().fail() to run logic after the connection has started.");return t.transport.send(t,n),t},received:function(t){var i=this;return n(i).bind(u.onReceived,function(n,r){t.call(i,r)}),i},stateChanged:function(t){var i=this;return n(i).bind(u.onStateChanged,function(n,r){t.call(i,r)}),i},error:function(t){var i=this;return n(i).bind(u.onError,function(n,r,u){i.lastError=r;t.call(i,r,u)}),i},disconnected:function(t){var i=this;return n(i).bind(u.onDisconnect,function(){t.call(i)}),i},connectionSlow:function(t){var i=this;return n(i).bind(u.onConnectionSlow,function(){t.call(i)}),i},reconnecting:function(t){var i=this;return n(i).bind(u.onReconnecting,function(){t.call(i)}),i},reconnected:function(t){var i=this;return n(i).bind(u.onReconnect,function(){t.call(i)}),i},stop:function(i,h){var a=this,v=a._deferral;if(a._.deferredStartHandler&&e.unbind("load",a._.deferredStartHandler),delete a._.config,delete a._.deferredStartHandler,!o&&(!a._.config||a._.config.waitForPageLoad===!0)){a.log("Stopping connection prior to negotiate.");v&&v.reject(r._.error(f.stoppedWhileLoading));return}if(a.state!==r.connectionState.disconnected)return a.log("Stopping connection."),t.clearTimeout(a._.beatHandle),t.clearInterval(a._.pingIntervalId),a.transport&&(a.transport.stop(a),h!==!1&&a.transport.abort(a,i),l(a)&&r.transports._logic.stopMonitoringKeepAlive(a),a.transport=null),a._.negotiateRequest&&(a._.negotiateRequest.abort(c),delete a._.negotiateRequest),a._.initHandler&&a._.initHandler.stop(),delete a._deferral,delete a.messageId,delete a.groupsToken,delete a.id,delete a._.pingIntervalId,delete a._.lastMessageAt,delete a._.lastActiveAt,a._.connectingMessageBuffer.clear(),n(a).unbind(u.onStart),delete a.accessToken,delete a.protocol,delete a.host,delete a.baseUrl,delete a.wsProtocol,delete a.contentType,a.url=a._originalUrl,a._.redirectQs=null,s(a,a.state,r.connectionState.disconnected),n(a).triggerHandler(u.onDisconnect),a},log:function(n){v(n,this.logging)}};r.fn.init.prototype=r.fn;r.noConflict=function(){return n.connection===r&&(n.connection=h),r};n.connection&&(h=n.connection);n.connection=n.signalR=r})(window.jQuery,window),function(n,t,i){function s(n){n._.keepAliveData.monitoring&&l(n);u.markActive(n)&&(n._.beatHandle=t.setTimeout(function(){s(n)},n._.beatInterval))}function l(t){var i=t._.keepAliveData,u;t.state===r.connectionState.connected&&(u=(new Date).getTime()-t._.lastMessageAt,u>=i.timeout?(t.log("Keep alive timed out. Notifying transport that connection has been lost."),t.transport.lostConnection(t)):u>=i.timeoutWarning?i.userNotified||(t.log("Keep alive has been missed, connection may be dead/slow."),n(t).triggerHandler(f.onConnectionSlow),i.userNotified=!0):i.userNotified=!1)}function e(n,t){var i=n.url+t;return n.transport&&(i+="?transport="+n.transport.name),u.prepareQueryString(n,i)}function h(n){this.connection=n;this.startRequested=!1;this.startCompleted=!1;this.connectionStopped=!1}var r=n.signalR,f=n.signalR.events,c=n.signalR.changeState,o="__Start Aborted__",u;r.transports={};h.prototype={start:function(n,r,u){var f=this,e=f.connection,o=!1;if(f.startRequested||f.connectionStopped){e.log("WARNING! "+n.name+" transport cannot be started. Initialization ongoing or completed.");return}e.log(n.name+" transport starting.");n.start(e,function(){o||f.initReceived(n,r)},function(t){return o||(o=!0,f.transportFailed(n,t,u)),!f.startCompleted||f.connectionStopped});f.transportTimeoutHandle=t.setTimeout(function(){o||(o=!0,e.log(n.name+" transport timed out when trying to connect."),f.transportFailed(n,i,u))},e._.totalTransportConnectTimeout)},stop:function(){this.connectionStopped=!0;t.clearTimeout(this.transportTimeoutHandle);r.transports._logic.tryAbortStartRequest(this.connection)},initReceived:function(n,i){var u=this,f=u.connection;if(u.startRequested){f.log("WARNING! The client received multiple init messages.");return}u.connectionStopped||(u.startRequested=!0,t.clearTimeout(u.transportTimeoutHandle),f.log(n.name+" transport connected. Initiating start request."),r.transports._logic.ajaxStart(f,function(){u.startCompleted=!0;i()}))},transportFailed:function(i,u,e){var o=this.connection,h=o._deferral,s;this.connectionStopped||(t.clearTimeout(this.transportTimeoutHandle),this.startRequested?this.startCompleted||(s=r._.error(r.resources.errorDuringStartRequest,u),o.log(i.name+" transport failed during the start request. Stopping the connection."),n(o).triggerHandler(f.onError,[s]),h&&h.reject(s),o.stop()):(i.stop(o),o.log(i.name+" transport failed to connect. Attempting to fall back."),e()))}};u=r.transports._logic={ajax:function(t,i){return n.ajax(n.extend(!0,{},n.signalR.ajaxDefaults,{type:"GET",data:{},xhrFields:{withCredentials:t.withCredentials},contentType:t.contentType,dataType:t.ajaxDataType},i))},pingServer:function(t){var e,f,i=n.Deferred();return t.transport?(e=t.url+"/ping",e=u.addQs(e,t.qs),f=u.ajax(t,{url:e,headers:t.accessToken?{Authorization:"Bearer "+t.accessToken}:{},success:function(n){var u;try{u=t._parseResponse(n)}catch(e){i.reject(r._.transportError(r.resources.pingServerFailedParse,t.transport,e,f));t.stop();return}u.Response==="pong"?i.resolve():i.reject(r._.transportError(r._.format(r.resources.pingServerFailedInvalidResponse,n),t.transport,null,f))},error:function(n){n.status===401||n.status===403?(i.reject(r._.transportError(r._.format(r.resources.pingServerFailedStatusCode,n.status),t.transport,n,f)),t.stop()):i.reject(r._.transportError(r.resources.pingServerFailed,t.transport,n,f))}})):i.reject(r._.transportError(r.resources.noConnectionTransport,t.transport)),i.promise()},prepareQueryString:function(n,i){var r;return r=u.addQs(i,"clientProtocol="+n.clientProtocol),r=typeof n._.redirectQs=="string"?u.addQs(r,n._.redirectQs):u.addQs(r,n.qs),n.token&&(r+="&connectionToken="+t.encodeURIComponent(n.token)),n.data&&(r+="&connectionData="+t.encodeURIComponent(n.data)),r},addQs:function(t,i){var r=t.indexOf("?")!==-1?"&":"?",u;if(!i)return t;if(typeof i=="object")return t+r+n.param(i);if(typeof i=="string")return u=i.charAt(0),(u==="?"||u==="&")&&(r=""),t+r+i;throw new Error("Query string property must be either a string or object.");},getUrl:function(n,i,r,f,e){var h=i==="webSockets"?"":n.baseUrl,o=h+n.appRelativeUrl,s="transport="+i;return!e&&n.groupsToken&&(s+="&groupsToken="+t.encodeURIComponent(n.groupsToken)),r?(o+=f?"/poll":"/reconnect",!e&&n.messageId&&(s+="&messageId="+t.encodeURIComponent(n.messageId))):o+="/connect",o+="?"+s,o=u.prepareQueryString(n,o),n.transport&&n.accessToken&&(n.transport.name==="serverSentEvents"||n.transport.name==="webSockets")&&(o+="&access_token="+t.encodeURIComponent(n.accessToken)),e||(o+="&tid="+Math.floor(Math.random()*11)),o},maximizePersistentResponse:function(n){return{MessageId:n.C,Messages:n.M,Initialized:typeof n.S!="undefined"?!0:!1,ShouldReconnect:typeof n.T!="undefined"?!0:!1,LongPollDelay:n.L,GroupsToken:n.G,Error:n.E}},updateGroups:function(n,t){t&&(n.groupsToken=t)},stringifySend:function(n,t){return typeof t=="string"||typeof t=="undefined"||t===null?t:n.json.stringify(t)},ajaxSend:function(t,i){var h=u.stringifySend(t,i),c=e(t,"/send"),o,s=function(t,u){n(u).triggerHandler(f.onError,[r._.transportError(r.resources.sendFailed,u.transport,t,o),i])};return o=u.ajax(t,{url:c,type:t.ajaxDataType==="jsonp"?"GET":"POST",contentType:r._.defaultContentType,headers:t.accessToken?{Authorization:"Bearer "+t.accessToken}:{},data:{data:h},success:function(n){var i;if(n){try{i=t._parseResponse(n)}catch(r){s(r,t);t.stop();return}u.triggerReceived(t,i)}},error:function(n,i){i!=="abort"&&i!=="parsererror"&&s(n,t)}})},ajaxAbort:function(n,i){if(typeof n.transport!="undefined"){i=typeof i=="undefined"?!0:i;var r=e(n,"/abort"),f=n.accessToken?{Authorization:"Bearer "+n.accessToken}:{};t.fetch?t.fetch(r,{method:"POST",keepalive:!0,headers:f,credentials:n.withCredentials===!0?"include":"same-origin"}):u.ajax(n,{url:r,async:i,timeout:1e3,type:"POST",headers:f,dataType:"text"});n.log("Fired ajax abort async = "+i+".")}},ajaxStart:function(t,i){var h=function(n){var i=t._deferral;i&&i.reject(n)},s=function(i){t.log("The start request failed. Stopping the connection.");n(t).triggerHandler(f.onError,[i]);h(i);t.stop()};t._.startRequest=u.ajax(t,{url:e(t,"/start"),headers:t.accessToken?{Authorization:"Bearer "+t.accessToken}:{},success:function(n,u,f){var e;try{e=t._parseResponse(n)}catch(o){s(r._.error(r._.format(r.resources.errorParsingStartResponse,n),o,f));return}e.Response==="started"?i():s(r._.error(r._.format(r.resources.invalidStartResponse,n),null,f))},error:function(n,i,u){i!==o?s(r._.error(r.resources.errorDuringStartRequest,u,n)):(t.log("The start request aborted because connection.stop() was called."),h(r._.error(r.resources.stoppedDuringStartRequest,null,n)))}})},tryAbortStartRequest:function(n){n._.startRequest&&(n._.startRequest.abort(o),delete n._.startRequest)},tryInitialize:function(n,t,i){t.Initialized&&i?i():t.Initialized&&n.log("WARNING! The client received an init message after reconnecting.")},triggerReceived:function(t,i){t._.connectingMessageBuffer.tryBuffer(i)||n(t).triggerHandler(f.onReceived,[i])},processMessages:function(t,i,f){var e;if(i&&typeof i.I!="undefined"){u.triggerReceived(t,i);return}if(u.markLastMessage(t),i){if(e=u.maximizePersistentResponse(i),e.Error){t.log("Received an error message from the server: "+i.E);n(t).triggerHandler(r.events.onError,[r._.error(i.E,"ServerError")]);t.stop(!1,!1);return}u.updateGroups(t,e.GroupsToken);e.MessageId&&(t.messageId=e.MessageId);e.Messages&&(n.each(e.Messages,function(n,i){u.triggerReceived(t,i)}),u.tryInitialize(t,e,f))}},monitorKeepAlive:function(t){var i=t._.keepAliveData;i.monitoring?t.log("Tried to monitor keep alive but it's already being monitored."):(i.monitoring=!0,u.markLastMessage(t),t._.keepAliveData.reconnectKeepAliveUpdate=function(){u.markLastMessage(t)},n(t).bind(f.onReconnect,t._.keepAliveData.reconnectKeepAliveUpdate),t.log("Now monitoring keep alive with a warning timeout of "+i.timeoutWarning+", keep alive timeout of "+i.timeout+" and disconnecting timeout of "+t.disconnectTimeout))},stopMonitoringKeepAlive:function(t){var i=t._.keepAliveData;i.monitoring&&(i.monitoring=!1,n(t).unbind(f.onReconnect,t._.keepAliveData.reconnectKeepAliveUpdate),t._.keepAliveData={},t.log("Stopping the monitoring of the keep alive."))},startHeartbeat:function(n){n._.lastActiveAt=(new Date).getTime();s(n)},markLastMessage:function(n){n._.lastMessageAt=(new Date).getTime();n._.lastActiveAt=n._.lastMessageAt},markActive:function(n){return u.verifyLastActive(n)?(n._.lastActiveAt=(new Date).getTime(),!0):!1},isConnectedOrReconnecting:function(n){return n.state===r.connectionState.connected||n.state===r.connectionState.reconnecting},ensureReconnectingState:function(t){return c(t,r.connectionState.connected,r.connectionState.reconnecting)===!0&&n(t).triggerHandler(f.onReconnecting),t.state===r.connectionState.reconnecting},clearReconnectTimeout:function(n){n&&n._.reconnectTimeout&&(t.clearTimeout(n._.reconnectTimeout),delete n._.reconnectTimeout)},verifyLastActive:function(t){if(!t._.keepAliveData.activated||(new Date).getTime()-t._.lastActiveAt0&&n--}}}();r.transports.foreverFrame={name:"foreverFrame",supportsKeepAlive:function(){return!0},iframeClearThreshold:50,start:function(n,r,e){if(n.accessToken){e&&(n.log("Forever Frame does not support connections that require a Bearer token to connect, such as the Azure SignalR Service."),e());return}var l=this,s=i.foreverFrame.count+=1,h,o=u(),c=function(){n.log("Forever frame iframe finished loading and is no longer receiving messages.");e&&e()||l.reconnect(n)};if(t.EventSource){e&&(n.log("Forever Frame is not supported by SignalR on browsers with SSE support."),e());return}o.setAttribute("data-signalr-connection-id",n.id);f.prevent();h=i.getUrl(n,this.name);h+="&frameId="+s;t.document.documentElement.appendChild(o);n.log("Binding to iframe's load event.");o.addEventListener?o.addEventListener("load",c,!1):o.attachEvent&&o.attachEvent("onload",c);o.src=h;i.foreverFrame.connections[s]=n;n.frame=o;n.frameId=s;r&&(n.onSuccess=function(){n.log("Iframe transport started.");r()})},reconnect:function(n){var r=this;i.isConnectedOrReconnecting(n)&&i.verifyLastActive(n)&&t.setTimeout(function(){if(i.verifyLastActive(n)&&n.frame&&i.ensureReconnectingState(n)){var u=n.frame,t=i.getUrl(n,r.name,!0)+"&frameId="+n.frameId;n.log("Updating iframe src to '"+t+"'.");u.src=t}},n.reconnectDelay)},lostConnection:function(n){this.reconnect(n)},send:function(n,t){i.ajaxSend(n,t)},receive:function(t,u){var f,e,o;if(t.json!==t._originalJson&&(u=t._originalJson.stringify(u)),o=t._parseResponse(u),i.processMessages(t,o,t.onSuccess),t.state===n.signalR.connectionState.connected&&(t.frameMessageCount=(t.frameMessageCount||0)+1,t.frameMessageCount>r.transports.foreverFrame.iframeClearThreshold&&(t.frameMessageCount=0,f=t.frame.contentWindow||t.frame.contentDocument,f&&f.document&&f.document.body)))for(e=f.document.body;e.firstChild;)e.removeChild(e.firstChild)},stop:function(n){var r=null;if(f.cancel(),n.frame){if(n.frame.stop)n.frame.stop();else try{r=n.frame.contentWindow||n.frame.contentDocument;r.document&&r.document.execCommand&&r.document.execCommand("Stop")}catch(u){n.log("Error occurred when stopping foreverFrame transport. Message = "+u.message+".")}n.frame.parentNode===t.document.documentElement&&t.document.documentElement.removeChild(n.frame);delete i.foreverFrame.connections[n.frameId];n.frame=null;n.frameId=null;delete n.frame;delete n.frameId;delete n.onSuccess;delete n.frameMessageCount;n.log("Stopping forever frame.")}},abort:function(n,t){i.ajaxAbort(n,t)},getConnection:function(n){return i.foreverFrame.connections[n]},started:function(t){o(t,r.connectionState.reconnecting,r.connectionState.connected)===!0&&n(t).triggerHandler(e.onReconnect)}}}(window.jQuery,window),function(n,t){var r=n.signalR,u=n.signalR.events,e=n.signalR.changeState,f=n.signalR.isDisconnecting,i=r.transports._logic;r.transports.longPolling={name:"longPolling",supportsKeepAlive:function(){return!1},reconnectDelay:3e3,start:function(o,s,h){var a=this,v=function(){v=n.noop;o.log("LongPolling connected.");s?s():o.log("WARNING! The client received an init message after reconnecting.")},y=function(n){return h(n)?(o.log("LongPolling failed to connect."),!0):!1},c=o._,l=0,p=function(i){t.clearTimeout(c.reconnectTimeoutId);c.reconnectTimeoutId=null;e(i,r.connectionState.reconnecting,r.connectionState.connected)===!0&&(i.log("Raising the reconnect event"),n(i).triggerHandler(u.onReconnect))},w=36e5;o.pollXhr&&(o.log("Polling xhr requests already exists, aborting."),o.stop());o.messageId=null;c.reconnectTimeoutId=null;c.pollTimeoutId=t.setTimeout(function(){(function e(s,h){var g=s.messageId,nt=g===null,k=!nt,tt=!h,d=i.getUrl(s,a.name,k,tt,!0),b={};(s.messageId&&(b.messageId=s.messageId),s.groupsToken&&(b.groupsToken=s.groupsToken),f(s)!==!0)&&(o.log("Opening long polling request to '"+d+"'."),s.pollXhr=i.ajax(o,{xhrFields:{onprogress:function(){i.markLastMessage(o)}},url:d,type:"POST",contentType:r._.defaultContentType,data:b,timeout:o._.pollTimeout,headers:o.accessToken?{Authorization:"Bearer "+o.accessToken}:{},success:function(r){var h,w=0,u,a;o.log("Long poll complete.");l=0;try{h=o._parseResponse(r)}catch(b){i.handleParseFailure(s,r,b,y,s.pollXhr);return}(c.reconnectTimeoutId!==null&&p(s),h&&(u=i.maximizePersistentResponse(h)),i.processMessages(s,h,v),u&&n.type(u.LongPollDelay)==="number"&&(w=u.LongPollDelay),f(s)!==!0)&&(a=u&&u.ShouldReconnect,!a||i.ensureReconnectingState(s))&&(w>0?c.pollTimeoutId=t.setTimeout(function(){e(s,a)},w):e(s,a))},error:function(f,h){var v=r._.transportError(r.resources.longPollFailed,o.transport,f,s.pollXhr);if(t.clearTimeout(c.reconnectTimeoutId),c.reconnectTimeoutId=null,h==="abort"){o.log("Aborted xhr request.");return}if(!y(v)){if(l++,o.state!==r.connectionState.reconnecting&&(o.log("An error occurred using longPolling. Status = "+h+". Response = "+f.responseText+"."),n(s).triggerHandler(u.onError,[v])),(o.state===r.connectionState.connected||o.state===r.connectionState.reconnecting)&&!i.verifyLastActive(o))return;if(!i.ensureReconnectingState(s))return;c.pollTimeoutId=t.setTimeout(function(){e(s,!0)},a.reconnectDelay)}}}),k&&h===!0&&(c.reconnectTimeoutId=t.setTimeout(function(){p(s)},Math.min(1e3*(Math.pow(2,l)-1),w))))})(o)},250)},lostConnection:function(n){n.pollXhr&&n.pollXhr.abort("lostConnection")},send:function(n,t){i.ajaxSend(n,t)},stop:function(n){t.clearTimeout(n._.pollTimeoutId);t.clearTimeout(n._.reconnectTimeoutId);delete n._.pollTimeoutId;delete n._.reconnectTimeoutId;n.pollXhr&&(n.pollXhr.abort(),n.pollXhr=null,delete n.pollXhr)},abort:function(n,t){i.ajaxAbort(n,t)}}}(window.jQuery,window),function(n){function r(n){return n+s}function c(n,t,i){for(var f=n.length,u=[],r=0;r=0}function i(n,t){return new i.fn.init(n,t)}function t(i,r){var u={qs:null,logging:!1,useDefaultPath:!0};return n.extend(u,r),(!i||u.useDefaultPath)&&(i=(i||"")+"/signalr"),new t.fn.init(i,u)}var o=0,s=".hubProxy",h=n.signalR;i.fn=i.prototype={init:function(n,t){this.state={};this.connection=n;this.hubName=t;this._={callbackMap:{}}},constructor:i,hasSubscriptions:function(){return u(this._.callbackMap)},on:function(t,i,u){var c=this,l=c._.callbackMap,v=!u&&e(i),f,h,s,a;for(u=u||i,u._signalRGuid||(u._signalRGuid=o++),t=t.toLowerCase(),f=l[t],f||(f=[],l[t]=f),s=0;s - <%: Scripts.Render("~/Scripts/bootstrap.js") %> + <%: Scripts.Render("~/Scripts/bootstrap.min.js") %> diff --git a/aspnet-samples/AspNetForm/Web.config b/aspnet-samples/AspNetForm/Web.config index 8523e736..be43d13c 100644 --- a/aspnet-samples/AspNetForm/Web.config +++ b/aspnet-samples/AspNetForm/Web.config @@ -6,10 +6,18 @@ - + + - + @@ -22,6 +30,10 @@ + + + + @@ -40,35 +52,35 @@ - + - + - + - + - + - + - + - + @@ -76,11 +88,11 @@ - + - + @@ -88,11 +100,11 @@ - + - + @@ -102,6 +114,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aspnet-samples/AspNetForm/packages.config b/aspnet-samples/AspNetForm/packages.config index 41eb5b4b..123397c3 100644 --- a/aspnet-samples/AspNetForm/packages.config +++ b/aspnet-samples/AspNetForm/packages.config @@ -1,92 +1,92 @@ - + - - - - - - + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - - - + + + - + - - - - - - - - - - + + + + + + + + + + - + - - + - + + - + - - + + - - + + - - + + - - + + \ No newline at end of file diff --git a/aspnet-samples/ChatRoom/ChatRoom.csproj b/aspnet-samples/ChatRoom/ChatRoom.csproj index 18d4b798..05040bb9 100644 --- a/aspnet-samples/ChatRoom/ChatRoom.csproj +++ b/aspnet-samples/ChatRoom/ChatRoom.csproj @@ -1,6 +1,6 @@  - - + + Debug @@ -8,13 +8,13 @@ 2.0 - {1833E2BF-4D58-4288-8CBA-869981888972} + {CFCC85DB-21A1-4370-915C-4ADF7BFAE205} {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} Library Properties ChatRoom ChatRoom - v4.6.1 + v4.7.2 true @@ -24,6 +24,7 @@ + true @@ -44,237 +45,254 @@ 4 - - packages\Azure.Core.1.36.0\lib\net461\Azure.Core.dll + + ..\packages\Azure.Core.1.40.0\lib\net472\Azure.Core.dll - - packages\Azure.Identity.1.10.4\lib\netstandard2.0\Azure.Identity.dll + + ..\packages\Azure.Identity.1.11.4\lib\netstandard2.0\Azure.Identity.dll - packages\Microsoft.AspNet.SignalR.Core.2.4.3\lib\net45\Microsoft.AspNet.SignalR.Core.dll + ..\packages\Microsoft.AspNet.SignalR.Core.2.4.3\lib\net45\Microsoft.AspNet.SignalR.Core.dll - packages\Microsoft.AspNet.SignalR.SystemWeb.2.4.3\lib\net45\Microsoft.AspNet.SignalR.SystemWeb.dll + ..\packages\Microsoft.AspNet.SignalR.SystemWeb.2.4.3\lib\net45\Microsoft.AspNet.SignalR.SystemWeb.dll - - packages\Microsoft.AspNetCore.Authentication.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Authentication.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Authentication.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Authentication.Abstractions.dll - - packages\Microsoft.AspNetCore.Authorization.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Authorization.dll + + ..\packages\Microsoft.AspNetCore.Authorization.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Authorization.dll - - packages\Microsoft.AspNetCore.Authorization.Policy.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Authorization.Policy.dll + + ..\packages\Microsoft.AspNetCore.Authorization.Policy.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Authorization.Policy.dll - - packages\Microsoft.AspNetCore.Connections.Abstractions.2.1.2\lib\netstandard2.0\Microsoft.AspNetCore.Connections.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Connections.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Connections.Abstractions.dll - - packages\Microsoft.AspNetCore.Hosting.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Hosting.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Abstractions.dll - - packages\Microsoft.AspNetCore.Hosting.Server.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Server.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Hosting.Server.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Hosting.Server.Abstractions.dll - - packages\Microsoft.AspNetCore.Http.2.1.22\lib\netstandard2.0\Microsoft.AspNetCore.Http.dll + + ..\packages\Microsoft.AspNetCore.Http.2.2.2\lib\netstandard2.0\Microsoft.AspNetCore.Http.dll - - packages\Microsoft.AspNetCore.Http.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Http.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Http.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Abstractions.dll - - packages\Microsoft.AspNetCore.Http.Connections.1.0.15\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.dll + + ..\packages\Microsoft.AspNetCore.Http.Connections.1.1.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.dll - - packages\Microsoft.AspNetCore.Http.Connections.Common.1.0.4\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.Common.dll + + ..\packages\Microsoft.AspNetCore.Http.Connections.Common.1.1.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Connections.Common.dll - - packages\Microsoft.AspNetCore.Http.Extensions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Http.Extensions.dll + + ..\packages\Microsoft.AspNetCore.Http.Extensions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Http.Extensions.dll - - packages\Microsoft.AspNetCore.Http.Features.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Http.Features.dll + + ..\packages\Microsoft.AspNetCore.Http.Features.5.0.17\lib\net461\Microsoft.AspNetCore.Http.Features.dll - - packages\Microsoft.AspNetCore.Routing.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Routing.dll + + ..\packages\Microsoft.AspNetCore.Routing.2.2.2\lib\netstandard2.0\Microsoft.AspNetCore.Routing.dll - - packages\Microsoft.AspNetCore.Routing.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.Routing.Abstractions.dll + + ..\packages\Microsoft.AspNetCore.Routing.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.Routing.Abstractions.dll - - packages\Microsoft.AspNetCore.WebSockets.2.1.7\lib\netstandard2.0\Microsoft.AspNetCore.WebSockets.dll + + ..\packages\Microsoft.AspNetCore.WebSockets.2.2.1\lib\netstandard2.0\Microsoft.AspNetCore.WebSockets.dll - - packages\Microsoft.AspNetCore.WebUtilities.2.1.1\lib\netstandard2.0\Microsoft.AspNetCore.WebUtilities.dll + + ..\packages\Microsoft.AspNetCore.WebUtilities.2.2.0\lib\netstandard2.0\Microsoft.AspNetCore.WebUtilities.dll - packages\Microsoft.Azure.SignalR.AspNet.1.25.2\lib\net461\Microsoft.Azure.SignalR.AspNet.dll + ..\packages\Microsoft.Azure.SignalR.AspNet.1.25.2\lib\net461\Microsoft.Azure.SignalR.AspNet.dll - packages\Microsoft.Azure.SignalR.AspNet.1.25.2\lib\net461\Microsoft.Azure.SignalR.Common.dll + ..\packages\Microsoft.Azure.SignalR.AspNet.1.25.2\lib\net461\Microsoft.Azure.SignalR.Common.dll - packages\Microsoft.Azure.SignalR.Protocols.1.25.2\lib\netstandard2.0\Microsoft.Azure.SignalR.Protocols.dll + ..\packages\Microsoft.Azure.SignalR.Protocols.1.25.2\lib\netstandard2.0\Microsoft.Azure.SignalR.Protocols.dll - - packages\Microsoft.Bcl.AsyncInterfaces.1.1.1\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll + + ..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll - - packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll + + ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll - packages\Microsoft.Extensions.Configuration.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll + ..\packages\Microsoft.Extensions.Configuration.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll - - packages\Microsoft.Extensions.Configuration.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll + + ..\packages\Microsoft.Extensions.Configuration.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll - packages\Microsoft.Extensions.Configuration.Binder.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll + ..\packages\Microsoft.Extensions.Configuration.Binder.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll - packages\Microsoft.Extensions.DependencyInjection.2.1.0\lib\net461\Microsoft.Extensions.DependencyInjection.dll + ..\packages\Microsoft.Extensions.DependencyInjection.2.1.0\lib\net461\Microsoft.Extensions.DependencyInjection.dll - - packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll + + ..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - packages\Microsoft.Extensions.FileProviders.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Abstractions.dll + + ..\packages\Microsoft.Extensions.FileProviders.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.FileProviders.Abstractions.dll - - packages\Microsoft.Extensions.Hosting.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Hosting.Abstractions.dll + + ..\packages\Microsoft.Extensions.Hosting.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Hosting.Abstractions.dll - packages\Microsoft.Extensions.Http.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Http.dll + ..\packages\Microsoft.Extensions.Http.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Http.dll - packages\Microsoft.Extensions.Logging.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll + ..\packages\Microsoft.Extensions.Logging.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll - - packages\Microsoft.Extensions.Logging.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll + + ..\packages\Microsoft.Extensions.Logging.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - packages\Microsoft.Extensions.Logging.EventSource.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.EventSource.dll + ..\packages\Microsoft.Extensions.Logging.EventSource.2.1.0\lib\netstandard2.0\Microsoft.Extensions.Logging.EventSource.dll - - packages\Microsoft.Extensions.ObjectPool.2.1.1\lib\netstandard2.0\Microsoft.Extensions.ObjectPool.dll + + ..\packages\Microsoft.Extensions.ObjectPool.2.2.0\lib\netstandard2.0\Microsoft.Extensions.ObjectPool.dll - - packages\Microsoft.Extensions.Options.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Options.dll + + ..\packages\Microsoft.Extensions.Options.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Options.dll - - packages\Microsoft.Extensions.Primitives.2.1.1\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll + + ..\packages\Microsoft.Extensions.Primitives.5.0.1\lib\net461\Microsoft.Extensions.Primitives.dll - - packages\Microsoft.Identity.Client.4.56.0\lib\net461\Microsoft.Identity.Client.dll + + ..\packages\Microsoft.Identity.Client.4.61.3\lib\net462\Microsoft.Identity.Client.dll - - packages\Microsoft.Identity.Client.Extensions.Msal.4.56.0\lib\netstandard2.0\Microsoft.Identity.Client.Extensions.Msal.dll + + ..\packages\Microsoft.Identity.Client.Extensions.Msal.4.61.3\lib\netstandard2.0\Microsoft.Identity.Client.Extensions.Msal.dll - - packages\Microsoft.IdentityModel.Abstractions.6.22.0\lib\net461\Microsoft.IdentityModel.Abstractions.dll + + ..\packages\Microsoft.IdentityModel.Abstractions.7.6.0\lib\net472\Microsoft.IdentityModel.Abstractions.dll - - packages\Microsoft.Net.Http.Headers.2.1.1\lib\netstandard2.0\Microsoft.Net.Http.Headers.dll + + ..\packages\Microsoft.Net.Http.Headers.2.2.0\lib\netstandard2.0\Microsoft.Net.Http.Headers.dll - packages\Microsoft.Owin.4.2.2\lib\net45\Microsoft.Owin.dll + ..\packages\Microsoft.Owin.4.2.2\lib\net45\Microsoft.Owin.dll - packages\Microsoft.Owin.Host.SystemWeb.4.2.2\lib\net45\Microsoft.Owin.Host.SystemWeb.dll + ..\packages\Microsoft.Owin.Host.SystemWeb.4.2.2\lib\net45\Microsoft.Owin.Host.SystemWeb.dll - packages\Microsoft.Owin.Security.4.2.2\lib\net45\Microsoft.Owin.Security.dll + ..\packages\Microsoft.Owin.Security.4.2.2\lib\net45\Microsoft.Owin.Security.dll - - packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + + ..\packages\Microsoft.Web.Infrastructure.2.0.1\lib\net40\Microsoft.Web.Infrastructure.dll - - packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll - packages\Owin.1.0\lib\net40\Owin.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll - packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll + ..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll - - packages\System.Diagnostics.DiagnosticSource.6.0.1\lib\net461\System.Diagnostics.DiagnosticSource.dll + + ..\packages\System.ClientModel.1.0.0\lib\netstandard2.0\System.ClientModel.dll + + + ..\packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll + + + + + ..\packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll + + ..\packages\System.IO.4.3.0\lib\net462\System.IO.dll + True + True + - packages\System.IO.FileSystem.AccessControl.5.0.0\lib\net461\System.IO.FileSystem.AccessControl.dll + ..\packages\System.IO.FileSystem.AccessControl.5.0.0\lib\net461\System.IO.FileSystem.AccessControl.dll - - packages\System.IO.Pipelines.4.6.0\lib\netstandard2.0\System.IO.Pipelines.dll + + ..\packages\System.IO.Pipelines.5.0.2\lib\net461\System.IO.Pipelines.dll - - packages\System.Memory.4.5.4\lib\net461\System.Memory.dll + + ..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll - packages\System.Memory.Data.1.0.2\lib\net461\System.Memory.Data.dll + ..\packages\System.Memory.Data.1.0.2\lib\net461\System.Memory.Data.dll - packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll + ..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll True True - packages\System.Net.WebSockets.WebSocketProtocol.4.5.3\lib\netstandard2.0\System.Net.WebSockets.WebSocketProtocol.dll + ..\packages\System.Net.WebSockets.WebSocketProtocol.4.5.3\lib\netstandard2.0\System.Net.WebSockets.WebSocketProtocol.dll - packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + ..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll + True + True - packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll + ..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll - packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll - True + ..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll True - - packages\System.Security.AccessControl.5.0.0\lib\net461\System.Security.AccessControl.dll + + ..\packages\System.Security.AccessControl.6.0.1\lib\net461\System.Security.AccessControl.dll - - packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net461\System.Security.Cryptography.Algorithms.dll + + ..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll True True - packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll + ..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll True True - packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll + ..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll True True - - packages\System.Security.Cryptography.ProtectedData.4.7.0\lib\net461\System.Security.Cryptography.ProtectedData.dll + + ..\packages\System.Security.Cryptography.ProtectedData.8.0.0\lib\net462\System.Security.Cryptography.ProtectedData.dll - - packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll + + ..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll True True - packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll + ..\packages\System.Security.Principal.Windows.5.0.0\lib\net461\System.Security.Principal.Windows.dll - - packages\System.Text.Encodings.Web.4.7.2\lib\net461\System.Text.Encodings.Web.dll + + ..\packages\System.Text.Encodings.Web.8.0.0\lib\net462\System.Text.Encodings.Web.dll - - packages\System.Text.Json.4.7.2\lib\net461\System.Text.Json.dll + + ..\packages\System.Text.Json.8.0.3\lib\net462\System.Text.Json.dll - packages\System.Threading.Channels.4.6.0\lib\netstandard2.0\System.Threading.Channels.dll + ..\packages\System.Threading.Channels.4.6.0\lib\netstandard2.0\System.Threading.Channels.dll - packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll + ..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll - packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll + ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll @@ -282,21 +300,24 @@ - - - + + + + + + @@ -308,6 +329,8 @@ + + @@ -339,8 +362,8 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - + + - + + - - + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -41,7 +243,7 @@ - + @@ -53,23 +255,23 @@ - + - + - + - + - + @@ -77,11 +279,11 @@ - + - + @@ -89,7 +291,7 @@ - + @@ -97,11 +299,11 @@ - + - + @@ -109,7 +311,7 @@ - + @@ -117,12 +319,70 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + \ No newline at end of file diff --git a/aspnet-samples/ChatRoom/index.html b/aspnet-samples/ChatRoom/index.html index 19bd633c..e28c9a6c 100644 --- a/aspnet-samples/ChatRoom/index.html +++ b/aspnet-samples/ChatRoom/index.html @@ -20,7 +20,7 @@ - + diff --git a/aspnet-samples/ChatRoom/packages.config b/aspnet-samples/ChatRoom/packages.config index d8ec9f82..7cc35edf 100644 --- a/aspnet-samples/ChatRoom/packages.config +++ b/aspnet-samples/ChatRoom/packages.config @@ -1,78 +1,82 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/aspnet-samples/ChatRoomLocal/ChatRoom.sln b/aspnet-samples/ChatRoomLocal/ChatRoom.sln deleted file mode 100644 index ddc27620..00000000 --- a/aspnet-samples/ChatRoomLocal/ChatRoom.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.27703.2042 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChatRoom", "ChatRoom.csproj", "{1833E2BF-4D58-4288-8CBA-869981888972}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1833E2BF-4D58-4288-8CBA-869981888972}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1833E2BF-4D58-4288-8CBA-869981888972}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1833E2BF-4D58-4288-8CBA-869981888972}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1833E2BF-4D58-4288-8CBA-869981888972}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {60F85549-2AC6-4E69-ABDB-A93D95929942} - EndGlobalSection -EndGlobal diff --git a/aspnet-samples/ChatRoomLocal/ChatRoom.csproj b/aspnet-samples/ChatRoomLocal/ChatRoomLocal.csproj similarity index 69% rename from aspnet-samples/ChatRoomLocal/ChatRoom.csproj rename to aspnet-samples/ChatRoomLocal/ChatRoomLocal.csproj index 1f524418..71d6b3bd 100644 --- a/aspnet-samples/ChatRoomLocal/ChatRoom.csproj +++ b/aspnet-samples/ChatRoomLocal/ChatRoomLocal.csproj @@ -1,6 +1,6 @@  - - + + Debug @@ -14,7 +14,7 @@ Properties ChatRoom ChatRoom - v4.6.1 + v4.7.2 true @@ -24,6 +24,7 @@ + true @@ -45,33 +46,34 @@ - packages\Microsoft.AspNet.SignalR.Core.2.4.3\lib\net45\Microsoft.AspNet.SignalR.Core.dll + ..\packages\Microsoft.AspNet.SignalR.Core.2.4.3\lib\net45\Microsoft.AspNet.SignalR.Core.dll - packages\Microsoft.AspNet.SignalR.SystemWeb.2.4.3\lib\net45\Microsoft.AspNet.SignalR.SystemWeb.dll + ..\packages\Microsoft.AspNet.SignalR.SystemWeb.2.4.3\lib\net45\Microsoft.AspNet.SignalR.SystemWeb.dll - - packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll + + ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.2.0.1\lib\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll - packages\Microsoft.Owin.4.2.2\lib\net45\Microsoft.Owin.dll + ..\packages\Microsoft.Owin.4.2.2\lib\net45\Microsoft.Owin.dll - packages\Microsoft.Owin.Host.SystemWeb.4.2.2\lib\net45\Microsoft.Owin.Host.SystemWeb.dll + ..\packages\Microsoft.Owin.Host.SystemWeb.4.2.2\lib\net45\Microsoft.Owin.Host.SystemWeb.dll - packages\Microsoft.Owin.Security.4.2.2\lib\net45\Microsoft.Owin.Security.dll + ..\packages\Microsoft.Owin.Security.4.2.2\lib\net45\Microsoft.Owin.Security.dll - - packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll + + ..\packages\Microsoft.Web.Infrastructure.2.0.1\lib\net40\Microsoft.Web.Infrastructure.dll - - packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll - packages\Owin.1.0\lib\net40\Owin.dll + ..\packages\Owin.1.0\lib\net40\Owin.dll + @@ -79,20 +81,23 @@ - - - - + + + + + + + @@ -104,6 +109,8 @@ + + @@ -135,8 +142,8 @@ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - + + + - - + + - - - - - - - - - - - - - - + + + + + + + + - + @@ -38,4 +40,10 @@ - + + + + + + + \ No newline at end of file diff --git a/aspnet-samples/ChatRoomLocal/index.html b/aspnet-samples/ChatRoomLocal/index.html index 19bd633c..e28c9a6c 100644 --- a/aspnet-samples/ChatRoomLocal/index.html +++ b/aspnet-samples/ChatRoomLocal/index.html @@ -20,7 +20,7 @@ - + diff --git a/aspnet-samples/ChatRoomLocal/packages.config b/aspnet-samples/ChatRoomLocal/packages.config index 26cc23f3..9f59655f 100644 --- a/aspnet-samples/ChatRoomLocal/packages.config +++ b/aspnet-samples/ChatRoomLocal/packages.config @@ -1,16 +1,16 @@  - - - - - - - - - - - - - + + + + + + + + + + + + + \ No newline at end of file diff --git a/aspnet-samples/aspnet-samples.sln b/aspnet-samples/aspnet-samples.sln new file mode 100644 index 00000000..45a8794b --- /dev/null +++ b/aspnet-samples/aspnet-samples.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.10.34916.146 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChatRoomLocal", "ChatRoomLocal\ChatRoomLocal.csproj", "{1833E2BF-4D58-4288-8CBA-869981888972}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdvancedChatRoom", "AdvancedChatRoom\AdvancedChatRoom.csproj", "{1C995B5D-D0FA-42C6-BF36-55894E18C629}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AspNetForm", "AspNetForm\AspNetForm.csproj", "{8EB9F27A-F5A3-4C8B-B52A-7F610939FC08}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChatRoom", "ChatRoom\ChatRoom.csproj", "{CFCC85DB-21A1-4370-915C-4ADF7BFAE205}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1833E2BF-4D58-4288-8CBA-869981888972}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1833E2BF-4D58-4288-8CBA-869981888972}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1833E2BF-4D58-4288-8CBA-869981888972}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1833E2BF-4D58-4288-8CBA-869981888972}.Release|Any CPU.Build.0 = Release|Any CPU + {1C995B5D-D0FA-42C6-BF36-55894E18C629}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C995B5D-D0FA-42C6-BF36-55894E18C629}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C995B5D-D0FA-42C6-BF36-55894E18C629}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C995B5D-D0FA-42C6-BF36-55894E18C629}.Release|Any CPU.Build.0 = Release|Any CPU + {8EB9F27A-F5A3-4C8B-B52A-7F610939FC08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8EB9F27A-F5A3-4C8B-B52A-7F610939FC08}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8EB9F27A-F5A3-4C8B-B52A-7F610939FC08}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8EB9F27A-F5A3-4C8B-B52A-7F610939FC08}.Release|Any CPU.Build.0 = Release|Any CPU + {CFCC85DB-21A1-4370-915C-4ADF7BFAE205}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CFCC85DB-21A1-4370-915C-4ADF7BFAE205}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CFCC85DB-21A1-4370-915C-4ADF7BFAE205}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CFCC85DB-21A1-4370-915C-4ADF7BFAE205}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {30781DC9-152B-46F4-882E-F649FAB35668} + EndGlobalSection +EndGlobal diff --git a/aspnet-samples/images/1-1.create.png b/aspnet-samples/images/1-1.create.png index b5c2fa87c5baeeca66730a4c9567da19fe9ea6a9..5f0a11193ebc507e3c19fd7128bffbce08f41388 100644 GIT binary patch literal 100890 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 literal 82064 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 VTOu42LDk*p@By!XRPPT>|35L>F2w)< diff --git a/aspnet-samples/images/1-2.select.template.png b/aspnet-samples/images/1-2.select.template.png index 71445f291db9ab7a8e1ccae4d59b3407b9807cf8..aab20096a821c9ae2cff772638cf030a9975d68c 100644 GIT binary patch literal 79726 zcmdqJ2T)Vn+cz2uVng&Oq9R0(iUHJ3b@(osBNGP0u_bt zTD>m--0ygJ-P{WVIy|uPyXjDO3j+jN&%AL(`>wCe41ZUY#8(s(No;dEdHm7a%E3VQ z=b>AR_m;nG2*VwE|MA=3Zi3qfn`BNutu6R^d?sQLN0dwyA80YR_u4Zt*SJH~t^91N z?LwWr`Y7o5(Z3GfuDn?HWk=ody|(p#4Q_L*51j3}eu25_kH3<8mu!tfrl1|_zy$+~ zy~OFfX*7P_P?Np;&6_s{M*u>9jjqF=r=b72*|(Ls>CesNp(mVwK8NpaK>l;B_IyP_~$y!ZaZbmpX;vk|6`{Qr1EO17dkaq`U*}OhVd}F zUtG!>`$IWM@d0DF%)!m=EJ|eJdk9z=Yg%vyhZ3$gTAy!? z(rx_@w-luI;sR@=E-@?eJWo87|9AZbmE37;drzib#&b)Ls#DfjS{9uvr_`{5(-xg{{ENsTLmWFMb%`? z3ia2f5xqgk|9hz%dqQgBM;dCyuOfK$o`3z9Cjg`_Jz8h3kqM-1;nl1y%m0%6Z5~PB zAdy=*9$?^SIRQ7GaQR>P@80>1RQUKn&Uz@o2>X#9SFw8HV*`P?9sd#kUZVq*6~o&{ zg*O!N|An>f9{)af@({lLAFce~M4kTkHirLo>Z2aFoXL)JO!0Fd+;2}%n)<80P7Xi$ z-Zr@k(E8p}pH|t6N5_rnlVaV!7^D-9`?oJT?MgvPv zzE%-ch64->Mi5+={K>e`C?INOJ5XR5TQ>|PGvuxDisIPQ^5O=y*CvC7pl#*s^u^O! z^Dh@oG}StAXg0RF(!zm?AX+#3l3q<~rx+Qv=HbaTc0R0}*ZIh|c_ge1{gC4)O+(7c z@Icu^Xg5q?3KEF|IS)J z)t@Iop!(6jeZgtRc53rHO30#{oSr|K@*`@ryGqyRn-P5|0Jwx|n@G3?%Q&*oTT`PPDkhi^e&-wj-MM?X>8hlKUHr^JF+~C<@jWUtTU! z(^rllckUdyAqMWq%Txh#m#z&6D#Pdj`l(AWZf&PaGj!s!%v1KX1;9uk)&QQ+OmEaK zxUi#cOI-8i0{{MOj~s}*tYxOFXhCE@ku#yiseDkl9vlQN0YVMnPN$r@`(so*JxciSo*kiOvUqe#7uSMgJU}zxX~u z&T7|&+pbrk2XoBH<2jjDW}7)XkK~NUs^^=RNG4mJEv-{m)D^BvXOPmd5H%8ZHP^+6 zWpa6{-$-S2YTADVVV%RSWQ6HxvyHIdB`uPK-_;y*9$M={4SP$4_vgiGl_6!Yb$V{9 zSnMgN>8_Qo;^XO~wLRubIyf{`20{I6*wc*i86O}!<48f&j^s(HiRMX=j!|(YZ%tHY zBG^IqdN1<^x_;J5f|LB{)@53#uBLu+l^q7qghP-&sW}vZKUyTSx zzXw0OOV_P-OEIdmN1Pv(cMLgH`znqD!Lg{^n2ko(QcK&13#WBKS$gC9*de z=#Q$(6V>0TBv-1cI>IkTIeRwIh?_)qcRaKopECaWQjP=N5Cc7u`e*UWsW=;0wHJ4e?7FwE0cz6 z=5o`E!zx+?<&M|liGYSqzA_iD>BPTeehROjYAkgbt?StGYU!|-mpBixuAwWNI@}Wq zC{YB343oR5#rw6(pPZe>JmL}yNTt5$mMz|ZMWs86yeo#$L-oRkZ$!Q>**sv>L+HyD9@+k#c{lV4m;2rjsctG4nNa}&(PYC8RG zXLVhPfBSbm1fT3re$qqVa~yxB-9;p0Y@y;&gMjD3P%@ zV-q6FWK|7Yv(%e-I*U0`4y;D+XO1ggF7H~iE$)4KC{?veO#94S@^@MSb8>PTsDDWjy*a7;n^BucvV*a$A#WbylDDPdOO znLA~4@o^IpCjszB){3rxKiX8K0NG63h2OM?{Ik%aOjXcJpz z*saBSl3*b4C3KN)aqkKT!*AJe1!vNcj;-60N@BVZ_gHpMmh*%yOmzl$-lDU?SR;J# zbh+lNk;L%gM1Q0j_2NgK2iIml2$Y6(K%{bxTkoXM(^cr&^|Ad5cS+mHBlu#8u2&NE z3xNA7_V|(L|Lt3E_=asQ^qWP^=GTAtiMY{?U1(KXXGturjv^;FsWS&JgHJBKZ%vA* zq4J!HtG7qrFg^B(*cr2|R$haCOyYV!okm?S+0iDgpgGX@x@h6EI=~XsqAcI$dp1ulKiI<21^kEXbBbWe=9yI9$V5-k z0|R2DGE)iIKJl+&IO5U7>DE{TE0H}Gay*?sUZ#-$x6H%tt9wV3qyW<+EcA==_9mKC zl=P5V0f9WPsadSZ2=NkVwKAvEzgOz3B}A|?)jOalLsyG7f!cMBb@|1JIPG@7z$67(`{P=9 zkESEgTZi#*S@?$2P9J%dv%7fO&E{B@DE=|w;0f$Ae2WJCVzE8S2s*w6S3dh|A+JYK z*P?e&V45d2H)4i+2n6_wi2lRi2mG$_)!e*YE7Q_Dy(?R2NL;Ht{A@ZXe7QkE0KRBM z7aTlreLF*D@u8KZJoX#+p!Ps;p$xYAMUAKA7o)?m&bJFk{Y}$~MO)yJM%PU1Gt8)$ z;@XQT!8$=pM%Ha=;da4e=4^G`xQ7{qK7;u9dV_S|jgUa-W|c^@bZ|Mh_tZ!Wq=NGc!JAKob?+e}{uocMSE zBibew8joi3LoCI*b_gh5=Izux+O#!n`kTwR7%S+$>F7DvM3~b$?8&lpZ$8M;67Jry zGooC(>5xC9E96G)MepcmVJhBItaR3~?c*q^E(x{plEM?_n@$llqEqYMkGcSK=WXQ_ zFJ!ts#J!fY*~N?Z3BKc@Tf9VGLellCp{*@V($?#HuLCug9LIre%o2$^+?D$K(Wt;_ z#{|Le-#_evSq!8>7L{^|EyVlR?Eia7b&X+4CZVpL@ zmDHIVJrnu?eb^u{73Ef|0f|bnDXa8>v1QxJ(osba{Ug5!R13Kb-nrbsHQHM_NwM8a zrE_6>3!mjk(lwmuwTN;uE}HNC+`eGHnjoOYA0baT5)$aK!Gl+w4z3Ji%o~)}hxhJW z8$6hp?*1ho+E-j&m_NJK4Z3h%$5iw(qB?Z$4ER9TS?+C;a&<&^UGz2~_ZU41Ml2A< zo{#}Cw+)v(srO@_T1*cF=L@@+Fk(KJ+%UsEGqE73WTx_FpJm~`U*Mw)rt1AC>o#h6 zj~v|RwCK+*Rj{Q%$|x8E5aKb{D&%X6`RVHO^oc7vtx>pZx!@e%eVG_zq;kMq7M0jT z3r{XDb5GvyS1@NHXHqz{rh4EAzUSSYsqF$;-rumyl9MmVN%}@b&LD;Nq63 z!qW*CUJx(C1v#$3V<$5=_Eh9{54?agp;CC4Nr({@XD)np=e=dRgRAK7IsUH0J4 z3#XvSubq+7I;JZyROQ6B{?(X8GWEjr!~C!Ef;ny^$&cZCk6H*@d`!%jk4--w?SoW2rp zl90)t=z^Lo%LSk+*Ctt_?28K-&Br|);5QT%I%ViO420is;pUlOd(48<-vItza@-YH zYK}G!l2*x~Rea$<_U?B7EHoJM1Z{vRpo(xmra8OM>i9+WzgLZlz3?Us(uWG${I@w# zxGz@ZMMcAq5%J7<*`GQb@Y3pz{s}c|%Ty22Iz|EV!qO}jkXIqhVB8wQA@4HCM3j%< zV45eC{4|?~H_C@gO29__j(twUsUaf&;4OEJyU(-+jV={H3l<(MDq!-Cd;x3^9SxN- zatjtiV_Wh~i`Ig3t)apMv`lG!J>2-Rc4JmqZFoN3=+va*i(-q1d5K}#+q?F>&%ab- z(f8cK%+Y#RKsry@GF)fkwmx+@c+MvFl+0io)0hFo;3ZK0I)xzNlw-Wxx=nA?LLIMtCUuNaeG;1W?U0=`oRk2 zV`GAwinX>cW@D2O);ly;%UA58%)wWsyPOEaQ15Rp=T&;?b_7^-Ccd*-djH+*O94_) z5htSGXlSiR2>x3!F(e|c-u9OpC@dLxxzhFibs==a4Oq)nC=_=DXVsagTh0;_YEmXO zcD!s?0pj~14^u(rsXn0~porm>#A-f=5a`fC2#tQ~x+wopGp!E-1J7aIKVSH4v?((+AB7>+vY72tm81FuXHciJ5C zBdKhoN<8B_Ajk|wU%y!pf|nR==e=bHi#EY$`4G?BlQYldLOi8Z3LDOR+%2a zMsryY5i3^k2Xp7$2E@3^M;hX%rRza6Abcn7i#jS zr*TUkQ?8cyOlxs&Jaej1%u~N9p*z#{{@b|XmR72oAF&gq0%K42PYtdu+WaLp7gmb_ zKjn=|7cZP&@_*0C%{S%v!GJs}5Vfx+^}QggX4dP9N~*Gv@f8)U_fUS~K-ReCfk{bA z=Vs*gqA6JyktkxqnFIPgT8WcrDJ-mDfrzo)Dej0{$j(EL)6*u+R-Qd^7*56JBgg*iC%qRIMjWV0Yq=7~}Z+ zlCO5O#q#&cE!D^y6RMYNvfZCiKF^@uVKmEzFXF0wW!oOKO2bj5ezBPz6t)-DpqqW3 znbgmZ3_Bt70#{#33+V{ft`#o)TORDLxkJ2U!Gu+u5_H$FSnB}Lim6}QPRWM%S|6yd zfa@fvEK1ulcabkuFYf*8Chqw?zlI&+6$EQe!)axV&I11H+!lRv?GT%vh9>+LqIOUC zLg#R1W>LZvp4tZ|O8`D)*-sR&b#UCe-}M3D^qxn{0NKxw z+g>WTc>2}u1=K^4-|^qauJfX(d)h=#K>x<~*7!`)d?L1_`}?}7^II~c7me;AtexM( z9?Soh!?7u|m2rX2sCC^S&U=tGWs9G+IV8;N)Umizu9h1O3blchU2>Jj#OcX3b#Lsr znjY__2aXXOh2F(+(xkOV-?Ioev2$nwaVl|)Z&O##fCuM+}ld6U~INVr`se5z-$fAlst(buWd)xc`JQ9VoGu7swB;(P=dNW}BN zD{4;M+i1Url0grJh0SmS_)x?tEZaJg*EVb#DZ73dp6sDkFM0xZmPISmowz~?(Q&$Z z+ZxMVy9<{yMd7A6$mAvHDZ>Mx!iD44-)iFzE?r>aO+5e>yN{)yBbdS1uDZnScn%#U z1_If3?W^fb6Kj+7xQoaj({Ulw-?1*k?2k~mmo-h&MmsZ0A}K1|K%=rW8DhegfeIP` zp{D$?eWbtS~&It0`N3ZpC|qZ$>O>|q7HI9^#6ka~5UCpI@_ zEda8#RX%b=Oe|5q>8%bbrg3dF%43qQF{f+*v5F=xU^@hN`>piQ-r&*tXR(Go#XR>5 zn7nDTx;^jZV!%J7_CotYis6g|=~<=g4e>)uvWIr3plxJImNYFplk+*tMu!!XH}WLW z1LV$F&GPt%V5?|uMdv5p-#~TC>vtPY^NwU7r4&62a0_(F51#l>Ywo|bW%s4pJ6 z_D{(~zOEShn^eAPD#O!`@j0qO@wHPcXZqscs_r0e=zqR{@mKSw;%SzWcEiu=S-cEN zsq$5r9T|^snCi)FPMf!x1|F~o{?j-P-1KO`-0>796|=VT6F2A#wC$e#GZ)B+BW-7A z*Ss7otmPzuUjA-x)jK?+CJ5>R|7QV#yx>fr(Zke2r8y#!z1aO`O#UO1QR;O13KvTR z0$A$>3&oTQ@mBtMYav}o4tZ>@+Dj`8QV04Q^!xMq2cfa() z)@Tr%XA+8JV+tF*Q@y4#VTpvU%A;E6T&bvfA67D}A<9zQAnpzP8A4 zteCxztY!IG@e4N+N?Nq(D#^+`oeH$py#%uZFPJc`%~Ii`{M`zk6b-K*FHa{J8*29F zUtF>Gs$bpGquLv$KI_YRD~vg5?$G^Sck1phI=T=Ztqeg4-(%v5vsz7$V{^x_P`=B; zmRyffv$3TRVKAWrN0$5yM2EInxoR7bsRt!<~*I?VQ{8jrD0z;ABZsnIlxZF#gj z0-x5|UtLJBZiQYA?uQSLfbj?-f~Dg(K2d8@-UeEfXy6^bB0EiGrEn62lh!tQ^;8=w zliI9Ut28q0n(^lj%}CmyUAPi><=eGC?fi4L9a_8@xSQIXYp!m^xLmLB2IQbgf1v;* z_CmD65)82|fXRx7^Ody+gy&t*l)90DIYi}D-;!B@MRZ+4*5ik*mz@`4_xY$BWVX8> z#xbg=jL?-qz7^G{%y0|)E+Muu9ru>iKp%hFL3?q6;y@Wuy}!10jnrO7CEKq}A`{yT zD;PIoe_L~KqqqA5%!dJ3_7IGFJW8&jAK$udTts6}*|`d;fFBf19MAXh*}pU?P_A`aOY&!NtDIhw!*lH^ye{}-CHVbh z8AFf4pA!JJ90RPw-PdkpwbjrkE|nQKNc!;`)U#UxA!cW3j)goH+q)!4GOLPVaE0Ft z&sr_2z|YR^o&GC}_`qNOBlY0NramluBJ+)nXkf#&xw`w)#xv!lwU8A$X?=Kv68t>{ zxi%26&ZAzCuUmdURPLS_9~XCyuEJ1;B4M$r{<9IPk0o?>Z%|vG_82p%gj0_}GHX@D zTWzjs!=Uk|e1jr#6`UWujbt6xbC@K4I|rMfjJ{qewq{B{{v@v=QW!Q;~zgUnl}4UiQV3;_30%7pjs;5(E&t+hB21jhdFTL;x(-&!6SN zn(o-a8V7qQLDz>m;00%N8ehMDx`p?PsI>KwSyKt$(IEKQ#Ok(aGn@D@13_<{P4`3L$I7VuFR5Qx$Cq>FC*Hba{ind}HQ`wRx@nEfj z>8W7oPH`_c)EC8W<|H@Jkt6D^z!HINOXryz`QPN*cF#RuJ%a`uS41Nn1qQ{ z#%dy$;*!;qwdVAef1ZXoOQ06JM}DmWkidp#I{c#u5gu<@w;;lD#H{JEsAg2R*;uy! zU-;1S>Q&a4vGCKqhBoPo`PUmgtH$NqWuZgsu{1j=5V~E7_yPCnmO7&pp1(fgx!DTI zD5IqyXKz4%k#+73I9~t+7Xo~yy#Nz}n9pv@)?!cD*FZf8d|W%jXC&oy^^~);@A?>c zeJ}}#5So3>_Wcg{4{V^*CXe9TwXtifo$CRfkmVzt36kZmV(Mq1bsEVRWJ@VzA8Ku< znp|~_9$0OVO-7L6FGx5-%%8+1(B^O7@RU2pR!@Leu5(*Xj_n+FU2b#KioBJ)WQJjz z@dW0qhX<-D?83!J*ZEW`j)_7fW;iEsvN7E3sXph~@FDb! z9ayjFb=CSBulM|)Sto^_a3*u9YYghGClgCPoANya#>AT8kU=eF<(M!==e8e8PN-H- z-P9)Q&hm1zRur!xkh=&apiv5Y{!CE|pzJg=E>#IV;cSw_7-B}9?_ne06a+DL zu+U2)V6Fi^Q!udP;flex{ZW=K;jK(d1q}_i=Zd@I;fEHUPfZ2ilI?Y;`>5yWC8(tU zf&i?Tpx-|*&jnp-I_BbzOCykmQ{@2c>aVf5rGa-)>LJ8u*6M+}vy*cYWQ(BJyA5!Ek%mBUe(j z_*3?)>uaq9Ma)X^Q--$4?<(G)J}};yRPH`? zuV#LJ9-c4Wbks{9NF~TipLWTAuyguLmMP}F*nKTg7`6PFM(p4tyxQKuXl3I2XdweRxXf8ds6)ZWs{nFje2$^zQL zJMa)Inc@HQ)Nc+aw6yQDqsgALoH%M8n%8 zZfjH565B&9IdRGRbsU`TK^)Xg&TgICl}kDryLmQUF5p0$ndrsBeymxxUGL)OGC4@x zKRH@)?#}ZNvWABQ(l2oZlj2X-DEA9rnfelO*yIx0#XPaw zJ0RdePmP^#Pt8QyJ{G<8U?Qi+Jw?_3`-{T~N$2+O-|z6)1#Rt-%9&PZTspNrE{{CBa}GPqI6fK~cBreDp1)0}&MBIU*f#SgPy+ea&=SgGp)bAq0HImACtAOcT- zf7)?6?rW&963NFf0U_^sp|iHA)h*?mgZ=DLuel(v_9p@vw9_Q-L^E%L1oDX!%^O;w zA)5g!3mfQHE)O?68N~bkVVwuRHo1fSrc=28&n`8o@`R(5yI!SpP+nR6bVz%nig*0! ziWy}p>3$oernq&LNvE7!pBKZ$DM5x^JbZr`umq{Ae*f|&1EEq^*E=(E;XL`gRuC@* zzclO`39i_H!viA_eZm*oOQNoMdyNJOCW!CXq2;>occ9PS@ahRVK{M79R!&u&xAhuO z7ma(ynn;M;ljtd@@jcDHt1`&%(#u?T15YH^(c|T)B{#@| zACdoD5}gm|c(tYwXT-}8NG*R4AfH7Ugo?^5vnD!KswLkH#jSl?bryURCle#DfbpHa zPb(e|ZGWdTkysM0D&<$8J(iH==g+Th6+X|jzWAVT6g?&v>9*_7Z0C@FHZ9;j&2A%T zaWGM5c6WFGWIhqt^^Snxw^LW&sQPw4V7*f9TFt&@qmPC!jjo)aZDDG39o6vsQd8&p zX|*?0z5NkD0|%_EVm_gcVd}*rKb_+H$&HLxGRM7Y${xV{c-a&=-x)x=(0mNKwh$Zn+wmVNaVM3-&r+6s zxgx7ElRirz+r2e&pLPMj%qw$sS&1I_=A-N|pZMlrs>d3s0;(*$9soeqnm)v^Fd@a{RSPHC-AeXs z!-=0Ku6{og+P2Pqd!j9GOf*40Dd5FQi7-L-uwtQeLN=^4f1n#b+*tGWyM3aIA9d-? zA9;Y%kQ>(QxkmF$5XSt>pw)txKbmt`; z_nO?~1prlxP!&TpUZ0K@Jq+{X_KVX5BQtc?-a~fVhgEAa^ou&;?57e;z&%&-kDGDCwI_K;myj_LrgYP-2 z$mZiTvs)Jjk6u)`-y`8|@#ly|UDrDS*j-#F~`%j%Vug`5tP8_sLmg2M%C@ zt3h6EIC)FATblmqssRm0FStn>v=$**WF}hW@GoXxD!a7$<;xYdfiRstswc&_1bP^Y zjyg#Io8eq5VYQW(U(%t_l>G6_QU9OnZ7C}uan~@#Ujuj(>TSX{RG1B^oK#ce+EY{R z=)dy$>TA`eVhtRi-9+FK%+MpO9pQrqEgrn~Alq-% zk<{Ku^hwArH%xdlh2$0)-?&$9dvWE_u!yI6eNv@w-|N?a_gtGh!+loqG0rji9Kr#!+R_q)QMbSD_Jt^~HK5-m?CR!;Fx3p4F#qpTY28V#hgMgXb z_tp=Kv)1XgUTPCpa9I0zo^|zkTh5TXw;Qmtm95R6e7MeMVyLT&*$^dl?-?gP-RBo` zZI1xPk`p$HQlDhiZHkPHbm&acyit$p%`%{g;%XhrJ%-%MJ%<$8x9Z4k;9b75ws;S+lF(?j=Dg+Pod`W78P^X4FdXCRb@I=uq9r#=}Z9En#`S92FdnsJ#PAbPG zB1ZzW=+hb_JJp8*4q=?akY?VAg3fYlJOvwg&!qx!DqJEILtdS6gy^BadGnSS&0Fn$_)zo;4me=qX*+NJ(cLf-a$lzPKa^Sq@qO(vB229n$apr1rw~2IN=8 zzGt`}LN|S+7@-GcZypi+t46SE*Kc3&d*K6OA3VGc^j`e&;>0^@i}Bv|m5Efti5gv5 zCe?RLXtN8*|A~j!u=bxLCT;$~hic5aY_$Ca=Al466h5m698hYxI9oZ^Hs1tJtsAC> zqZdz<0L7KXexUJJVRw=L+jj?U$^g|`P@BAk1D3ysoDM?y%sIyc`MC5@R<%`*7#MT7 zK+twh>KqP)x_*09g7MFhnR97<#b{!o^^N-47frt40wu?iy(+bxbmTKglh!~kgtY^mB+|1VR z#V1I(m@vJ+W_Ua+O{x}lH*UaGxJtZ+P(%yDGXaZ?G*J82YVFBIo)WP@P`1rZFY_cS1FAM)oyAd2CdOZOH;`MLo6G%#xu z7>|vxchLlMMmAiF>!bjh99U8P_N|GJ&@^1sn%hVlQ3B}_Tk7lFWLAuJasNi3ea*m! zDp3@ym^did&>EJ$zMYbxyg4*jN4Qes=bk+R&RPp^!{avMtiui&g?&SV^rRk_*s@?T zHy)6=R#5{m@q4RnY;2ZE&BL+V9zhPZ9NDHVProkDF)`^KSKHpS8+0CkEIe|*5}V8P zW9vc7`;p0}3p?kA)@I4avC$CFF^OL(Sp-8+Z>%I}Gq_~@o?UcvWPB3F08DDqS~|~q z;~8)QrNly%c}N-P5>*Y%xa%va>we4-*&~IuOT+M&DE^Y?`Vs}ExE9|TAh`p7(2rP6 zF;NR2K@Dl6*Etvr(^dAwO&npwO(}<%R~REhL`P|-bR4afYAx&&otDM_&1`b*FSuoz zx(uAOg5{LeQ3bU?Y35s*w_BO39n6yr(gKH+w0dQMd{tabe*mlchAJ|0~H&y;9f^@AG-u-`rCHL(qg5YVm366X&!wFy6Iy4$Xr~@xPCKAiZFfy*rrS^9!*1yp2 z(JBFbk>%JPIfx1+hiAFg5v<#Nh{VxdnPpNKSqN%rP{;4DJEd-BEvkBx%LVu*S_v#a z@FU)MzT&h$!^1cj2*jc02+5Q5i>z`HuK;tB$Q#G;R5A_*&#bu_AVN58MZNB*2>-ho^gX&Ju*s z{;Q}Vcy-GMLssRIq3~MK_&f*e4(rw;!<3$W`Orj-L24XNz%iCdd-`3^+{Dr*#+_r{ z`ybPV#hYj)%ywWc3jKJZi2(lcY-GpT^HUEeT<5-Km36Fif6)r?PBd-PDy}3+C+e{^_L2X^csr$}Wy_XL>UB#`l z39}4OGd|O0=)IsLS)cB3uR*#3N9htO@`z$6Oi!3K$dd26qA>oGSyuG**!2bIk{lK_ zy=^4xwyX_*Em*0&ypbKQ>r7n41&qr8$Ua?Od1-A)hnkFeBR{Wj078qiTPnn9H(W6= zQ!D=R6NgIk`~FOHX{gSA{Kj=kv9h`PA5IQykG`{ULnurct{Cz zGjsH&qLiHYpA-bDMNwhmrE4k>SU6c@?h~iaRv3V|Mh*nz^Cg zy)RXMgzg)|D4<7Q1V73D^<# zYtAhT?_0_;@4IPApL(vLXbssq-P>MHvmDNjk)3XZ(C@j0lH+Wx;!!-|E&g5I=+*lC znBK)!x$3jY#e}%ke(rD>fhq~UiMQ#H)=_bPSB8Sd+lAiFtg&m6E>GeU&o`N!UN1gi zZCD)ERB&3i#b#phW8tNz(;1t^i?jpW^@29{x8GAkGfva}>30IJOcm+ejyQ8QUP0EY z!=!dk^{eT}k?f+DUkoc$3$a=&QalqSf$G=Pi<}x8CJ+>eg$itWNlipcd5#US%IxLs zyWycN3Q-R8%<;S!*X}iIKfl9?9TD$c?Zk*BXJHFP(^@T)U$p@4ElwQdfoPA8}Xa1Q9qY8@bA^j-RW*;ihjm;mhf}H0SJP>Bg?onhz@v zyzX5*RKzpY;+9hL`A>UbUun1j4w#mxczrzIHeV>vVH}H{Df%j9Nl91R|Ce#cT6v2E zbZE8pFE7pJmeZJ84H(Yr{iUbiFJ@XRBY}8}b?I}Wd5PvxdjzyfJ@x?!j+7f-$yPr; z=9f*I>RZQ1PTQGkM&`4Ma%No)N4w@w6lEnf>#};xmbl-uy|Qe0CDT!uq`v^Q=`}8M zvzxx{W`UJ54rc)j*~76Zyj5kPi#S8O_o^pem;TdQObOyDmX3;P_A!eO$j65(_!j|j zRG`|1){yJzjU=tWLG4~e+)OZ3Li0MFXVistb!$CN+BvYswlrrCdv$8YhQV4}sgkWl z*JE4F3%a8uHEV`JIh(VK{1I;F$HnhdB!!0IJl5EH$@C1FJ97Z_}j{ z$LH2sjGLmQT;DOSsT-OtRA9&R1#JXeqU-X&jf>NR4_c~){F;bY*4R46L{-veg6wde zh1GyiTh#d+m~^c^GMRN7+%|~MTFfi+h*gZQv#|!Z9{J#kxt_E3^+Profn#tA2aEec za?W!e!&=MU&~M?GswAllbP53t zrq-=tk0o1NnmX>j0c%TofLJPk6)&h~cbO=#Vw_6s%D(ke2dfAfhOgSYq4S1Hp$gi zJYC45PJh64urpq1S1mbOTV5s>4sy*-X&Mk~%R8f`FT>(}~%(vx+m7 z4>6bh4|Nj**+e<96Ao1K#riB5U*qM_RsFSLSgB?#DmnIaT|TVZv_me@fpfgKaBRB2 zsQ(O8Lw7tWb8>l_1~s`EyYxK^N<5jIs+(suu^5d>UAW?xF)$B1v;Kho0`1h<*{S?B zCf9_Pg!PgwU6_8{%PxAu>Nc$CnXb!@$`x~$x(U5*iaux!Nl=s`uKnXDOj?vp<4YaJ zolS~hXO?Vk6%6Y%*<@O^&Ol6~k+%}P2}umPa-pL+%$&Wty?OW=4wk9Yba%WG5aZb= z9I5e*4&xdPmD%4>(mIgto;w~(mCy3vCT8JYRP(xYp4HXSjs5!!p2f_A1N&lgc`Bwe zbvlb5ZDSD?=?ATKNiUkAvKb61gINU++Y9oB0qL;ndmVBlRG{@W$m2sUK?9+7SYwLc zgBI13wB_la8+;%@%Wj1?XXFu8tHJ70hEdPUs~vAAe{K6Yh2Ei#{ z7q_Ih6`KPt({0#p+D>dDBh|xQ5B1hZw||lSgBzE9lbmO4mM4)oz~Uq#7}CbT?$YZ( zmO&OiT__D3EIvT~eCD3GG&XPC!ePCrh2ka6XmJG?QdU&J3zh5)KWjjY&BMO~D)#3} z{wpM9!3TgAG(#_;Ea_LPJAz-Dcv~9Gsy~-FnGkRYe6qH~6&@>*#||tQ-85`WOB!3f zVwqzZmzzVnq+ae$iV6EF1_m284X012fDUbyubI27_FS@iLBh$1z;%CW@uxHBSTLNC0vsrxzBNOc?u1MGutT<@RNtIoCTC&^OwnnueRi3i~4f zZ}#ukff7T`4Pm3{=NVY2^+34&8PraTyiSuRF>yk(g!Q$bNq5N=!J2}@v%wOeKxH^T z1voVXYR~BW{g#7s^zMm`Tv?@^kv9JS?bQ&=4Hm#m0MqD*c|q4rpb|0J|FQ3%IQ$#9 z=lBdL`N4lRt3he_jV{4%P#_Hu%CCh0d&GYy`su$Bt@KZq_C6f0D4tkF;nZ>BfgqqY z$*V(^24G|LvX7K_Gaw1bwOI)k02YZau&l^3{#8u5Br-NOHgyP488P!xr*3feSjnev z->$1Ev)WQ2)U)QrUjpWW!HU_b-grMADSS~Y|B!-LwvFd-P4moP(TP7bC?%la|7(&A zQqp02z^rH}rh0$CWGuvv>pEz8@^+SFXM z{-=)Hr34^LBK%mi_{dut-8Bq%PZiJEq;r_{37jsGtTmuzla@Z{{jLN7duW&z zQ|#feb9Q{MAw&}eYx{XO?A9%PeLll|KqBDVaoUz_O#M;6pKodXFRN(ltFw}-u-W&qSY!-&^UZnfZ-F) zobsEa3>P7LH0HULE1$1X6~hUt9*uhvN>qG3QB!)@_Sk`dGr!AXpq7nye>m+Y)7mbH zQ4XoBFZ7DjCe$U{)WNsy0V;K)CyyZ7jgyZbV zpKP+2Pn>!R$w8Tsa87Und6cL+F;_)v20$sU`y+V*Ok#lFo0WyWkB-6+`(Ki{ zB(j12a(_=s+LSGPB1~=CiM3P#j^8@V^!Etyn~6?#=uSHBwQ%2i*pYSwu6;B-N<$}!>ad{Wg^xW zZn65Z$bX<=fNjg2@Pz~)t+E|lo#2SOnPPk&^)%H!r}`2%(ZqLMZA(q^fB2uS?WEQd z&K8dixhGOrv-|+ySKCs1Vw?J&bF?oyw3Coq*zYP~@t$a(q06kG&l3rsCkQ4Z)lEK$ z$?DYUtByt^0j&0oDjv|o`Asb-?&Zd+0iao&Cz_r}1NteVtj}OAcc7K)$NCW}pFp%h z_RmmiNdb!tR-0q2+{o#N^2nu`+ygZ}!4n)R2BU_6dZSGPYh^Yq?~<>1m|FULo9v%P zI;i&Q9QwI0uy|SwF5v6xP%5T-mD8`12q1BYH7hi+sS%pnNacC)3qYC}c3#Fb|2ouw z6-;(adURE7DP}B8T~3_j^Ls}CIOVJZVE!Vfmh;c4sU?IdO)Rv^8*ckm>CnEV<@e0| z(L!^xue|uf`c1UC6Jh6=s^gjtV=S@u{o#-leTd()o(tk`>piiiiSh+2cNA=%KVkcf zJi5khiE}NiY8>&KNS?w@nX=LKYrwjd!?T_DmN`|d`st1^APe74AX&9LQC$xiWx&~t zPpf0UR#<;zV=D!LoB*)f{}WIl_ehN>A~wU6^O#;xkwC{0v<{2Rgr39iS=LsP=O zI$!XGD$8z&Byi{rP$W(>fF}m`D7y_t0O+8ZqNXgn-XK4*N(_)Xza#vR^Xj>AI@7MV z!G~yKW^Iz&>4&l%EgbV1?>*^GBAZdP$ndE__}L>B1d+YdJcy#fYRwLYd=$pK^`F+9 zG7ww2Z@dg;unsj`9kdc6;V&glstD)(Iy=DgxVDL*Cs%b6II&#z+RR8zFDH{=u~f0| zqv<&^e;`n=muy>Y2(~?d=+3Zv#4;XJ^A;8k%#5C(4NU{ z13GRWHBUN_yNV_UOP(wM)h&+&Gg&Sf;lAcPMw*Fp-ehj}_>9uJ2ZpDFIOo?H60_-SrZM%D+;%C`b|rrB-Z$Tb&PZ5Mir_(P>B zz?L%=g_>$YDnSYRMju1E9#)a}!EU2tR5y&S@&4&+@Xb+7RUxbM;PJfZ2^x*QWc;pDgDBb-wXq#eDoDg?{&5S4@63{=XY3t%dxu0y0t5)yKswR_ zgn){K5<--aKnQ_%2lc+6dwtKh-e-O9yViI8F>BULNUm#NyPf+y&fl@5KNbwcG#2-7 zW0P_*Oj;vPN`FKss)-`4Fsu15h+M}<%hlj>njznZA*hJl1@sIjmZ!2i!c11KuV>2) z+*-8Q!;!zTKgR*RX|jKE{%DH4F#A^(;{4uxYm~VJJ1nnu$fND+*XMf^wg1_&58uXI z99`X3I#wFaJbi9fYc5dIulBy1*cTdx)z2}L@2F}UW`^@KPwf~%dQ>XtN6cX;CHB#g zoX$tPovPuCK>jIE-YdNBy#iU$>mak5#T#tyI_4{FBGfxPtl>{v&>I9)FFGVdAj5W) zwvgUO(dlqpoKdepbpd6^C8%Mq+Pp;W5xJ_dptiNL{_d#CWkw<4u1uzaj|>4LjjFH- zBgPXTW^6VlhG?;Td#pryXAxcF$Ik*$@>oJ<;mCeXx6zFisLoS#FUTlzm0P1m?<{PP zUI~upQ7BD9vB&xk*Ybxt=;@fsp}J~R)R4go|6*+&+oPh}8l^do3PAtBbUJr>!<;pi zndO0gH5sl!J`R8e6BQVDqI&N4Q)Q;v^pwN%tLV(&A6fZhcmHEg=hXz#*zGqVe0#Qn zNp0)@C3QyC*eZq2J%O}pg0K_24uuvd@Jh%(gt2A+-aV7^qAd+u_5*deoAaF>?;%37 z(Q>rf`H!oyrQ>cb53c)u_`vR1EB|uRm)9fOQM6;1;=i>MQRHetsk)zdF6*a~>*V-% zH3m?5xcy&HWBgbl8@+}3^IWs|BvWbQcJDD`kAeES4x_~;^$PUsgcmiw?XM&{bvN&N zmXz*IMK}%VdiX~@`>z@gD0R@p>v61HkmF>=COZ>BR-TnoMRw^L-L1eZaR}( zf;awz_8n8*UWcD9$d1&Kkn?*!q^Wr$ZCLL*aV|~gh}>~!6T-qZcH$0cy_@yE_wA2k zaR$>bdGyyiwq6jA@Jgb4B!xM?!}0rY0Bh;bG#B^}a@sn2dV0mf=%~oZJeQ7Y7Mb6E5U5`838Ed?z%TE< zoVzKV25~m|+9}%cihZ`7QLESvsju$cAJF|bdhNPzG>Xg~R(UON+?uQ( zFsnHhc)en%+$+kSbQi~im;^pFc#bfVRMpnsT~4omz-!FZC{ zsjP(c{T864wFIJmWDqk9er}bM*0*|~?DNolp3CkoZI;QcNCOmEv%&xERd!hZQLQz~ zxyWP1k#KkNt@(rWE|V4Ff9)oovLGi7a=7Hg%DTz3KU!YIO~GN5vM_Ch9S)uyznK7E z?rv@;rL&Gn3*4i5bK#EBIN#BrFQ=~Bt2(h1gP%j15*c6;{jJ>Q&E=FzKI;XS0qUR`V$d)ArgvNZ|PykARq#jjVL{bk@+ zwnj2HfmLsUloz~HXQvi6j9E16mQX9Hv!liyk&s)FJdSI4N8vdQoiL3Am&YAB9tQqC zLfP((?=9SKZf>6A@?Cf=we&>@FGiRhs05>sMQ@=jXHD2a(%7z3p{AjjtbV?f?QEOZK-Y>`3rO5HMQ?FSfWjcLuZHz-M)$ z*1T(nmX<-N!#!W28Da(TSNXMV*Ons?%i7NfiG&@yqmn+s96O}b9eh?f@U{M6rWafr z!fUZ=2SX+w`u!nOg))_HMXeB`0Ue*H;*lfKm^tAY*~0y`;bMGJ zsiR&pB6&=Z>`3(Wvb>i-u$P`h^|rkzT7LR>JTiBrITkga$SXyBH%edVJI06Ih5oV@=N(G!TTnI zl{lxqXf0l8rILkhKTKh$IuFFXSdhI=Moy71Hu+%^@`K`G@;f_^k8i06=FQ(oh#+0M z>C)ws+pq2=v3P13C|^f>$PMOy!!$HBR+u-KW}(#zTU@0M`qw`Pf&U?PdE_~EB}U_m zTmwCGZ@tmEpc=g5P$2ZrX8M4Q)K$o67Wyir8xk2%O5SS0K7q)04b<4s%gJ zkHvzW9S1_v^Ovn>Ks2hHdTx$9dmtW;;f+!p&c--l4aSBEUeOJieknn7H7)RdSo%g^ zX9_E}``ef>cD(A>Z;r-yYu*yv-AsvkrEAl9J|p~i12~TXuZmCta8T$eyA0cLm{9qB z$TWIZ6!lE2ZEF%S5;5KsF+JEG7mG#o4V62C`=hJ~gTz!Vi&OI0Bocgu;j;|Aca{sx09cKWfIbdoR*>G|D!eB|K%>Gp zF+L#5#%(Pr-qtQ@u8Un&`YIoFn%|z3cBZYC|BZ2e76W3DGf%nD9CtyTpF1h_W;~m5 za%y;r)!P+C;uxrQoZ%BrGpHfU&Dj$p%q5S_xo_rs$0zIEsh}v4JmTkBH>dsQC|N`# z;XFtnYKcK<5*H%89QKkvEWh4Oepv;vHNMIa@03oOx(=1DbZ8Qgat9zl*R-CE7qO70 zSvw@<%bsO+;f`b`H%ZCr%~ph5R5fY9J5tNL;;X#P4Ugu&Q_p5j-*?h4cNj~T5B&Of zhgUqk@G8@A-w0D5UtjK@1EOlr1WQLaRVO= zCgU=Vf`khh;S{_0u=`)g4B@ciJ%xcLnDX|)hr{TTI&#+T#>-u1x% zFdE&U$!U^It#Ht1rKn{Wvd_0sIc-;yE1xy2{eEULMim@qQ0hREziiTJfRLlabj3>y zLlfs!N&c6WqmEvMyspM9EG~aiZSAV_EuURw>RYd@K=PmkRyS4dbM<9@i~;8YnrYVh%Cp{i?V zcpY0+5oU1}?Be$91oPgL`im9PSEjgF3ig~viQD)) za`=!JpRCoqEBgYvImXu8fRA^H#9OYqeh7`uWvVhIpI)(V9v_JQ-L=cd_}KIYGtNcn zfWVBWnTY9w_9*SRNI3sVP3P1rE0F7-x?XuS)fAJ)`1C8erQsRG$#^rIvK>p}}P$ghfoP1$X(Q-T!wCAc+pq3P@L=V<&{a{)fa<8iu z3LOIa2x6TnQ26Af2oSNx#QWrKzpVZOQ0)`4Wh$&#gJmUw9S%##@7 z^c9j!5TZxVHZn8t(jj_^N;DS5c8G~gSbV04ldx^=(vV&ozL;-x^(tikwqOuCWq2@i z8ad1upp^5bi_6!nN0-JfDJNHfc3Piy?4rClb7 zhFR^uaWayFj>C`FUKNr{Z*(>5;gnHbW=|}jJNO$#u33Wu&6T>O(lz_0wtvFcsVL3LRe4VV`&2VN z_-~J)k$ztlxq~XfaW(cysi_TLPsfPPPGxQQX(krNW1zsmQYn2P5FC=w%dMyI|%ELH94#38E_r zCuis+n*+6mp9+!-#}y;sHc7`d4ud&^`ST%0@VEJWuT9mAE6tyEhx(3kVGfF35KWIt zHR@^SxWeMy{9FAkUeKxHw`9G@Qcv_`VN$1I^KQ_olwg^`<@Ymw*POJpGpHWHBdbnH zf4E>)fI@00Mfp7oyt2?Rj8J%H3yC>9ksMR1Z;@JY5RqbqQu0~Iz%`zps%GCvwQ-%t zBb}i2ikIu`DM;C=Xda5l&~S()tuSoGicbku%W^tQP(3oyw$xJrOU~UQS<9h$z#yT7@3q#GWfHj@x<0ZwJm*V7E(?YP}ET z!WjEnOD%6(g1@Q6Gdq0D%?e6fU3xyml%o;7v!g~-)YW=JqTxhpenCpbPGQF_zA)Wm zGP1z9+DC~BziiOJv2{%kv9@Cjl*eGpP;Xb4Za@lDH_K%Y4j|*yY&xLbZ*1vx1->Ci zdj@!yA7dk@uih5jOdj-Y1%ub(3u=^*GtD?9J29D0)riXSjb@xP!YOcM`YC%fd5I{% zz-@4l@-nDD5*DWsT?I~>pO&uKnHzgJL!7&?`YdOb)q3N|y}|9^lY4hM>eF0g)(BRm zOd0EdC{Rgg*f)vorR;=+oSA%->NK%8YZk2Mdv1UQrBw!c^~FjDUnLi83_7y$2E*hn zx>IK@;MixG$=bCgwNiw~%EOO)3U=)yWd>0CJF;?JE9G)qU`xghu0z>KJHqYz5|E=6XJp#xbCaY*saxq6Pm{Q@I(A4*y-wp?MFZ9wOo9tX2 zD_xD1hW&UPrM%HAww*&)5UEzKOOq+wQWJ0X+ccX?ifc*ly<$rTzD2bS+#jrLzA8Pe z1cA^rCq8{%-X6s`7Xrr1Tl&qZl#&Xp>`9Jj;Uz_%SWL+Ki9EOmwEn4#jaAZMl>3QQ z)G_YrpG76<@szTa5PCgJ=S*|a_&me@LwzAmO|pRB>;>mHBxeY8&=%i%Wqq9zN*B{|9D-{GI?M*4wM}1dCAQz71g#CUkPsO)me0fs_rFw2* zD>}kyuP}=vPC2t1b^`~v6gO7l9FapOoN{IY<7&y5haUIiT|};040tqVfrOHn*qi{L zE?V&fp*a)q0R*anNAT&lbi(VJ%=3NzFar66mTk*Te^Qh?e$h?7Eu>DAZuUP8YCL*s zretPxhC$t>cG`ouWy!+j?P6|*1g+k60fjunirzA}8Oc1<1 zV)BBl)v|Oz%!{_Lj)E7$GERQ1FhUig07@bcKY9n$j~_l2vLKGy2eQ6Vd(9x8ImpvM zqXCKdMNLz-pur{tB(Ws=(nJx92LWh_n}4!=G-~>FZpas1w{VcI(2xr9I~?|SXn!^9j8pcB*(e%M zRKe*wQR#c5?w%z)W?1mwd$sQpg6Zce;vVlT-^_j*2>p)0uYTo1>e?XwZ^}o;wGsqE z@G(?62~=<%-%HWiNT@IyU@aGNjPE6eg2NTz)hJRu->TZH=_0I3_65!u0FYMOdGXfR z8tBvNB&F2k(wRUL{+l9XfcgwLpYNSqRl=XRd~tHmX~-to8LLrRSgH@a*e5XFiHi1D z;=g$V7=_Zv5tlMvv9!OC;r|Sp%UquB+qRrhV2+M$QGKEoYJ`~WRo~&5??O~YOhh@R z`IF(uOwLu;nLoWrC5oNliGTm=?p{KkdWcr+b6!3UZ8V2C&)8&q6H1rhO#DnBYOpbv zpIxWkp(=TdG_yaHE7J>A@yP>ik_leC1jB=_J^f$Mnmc~h2233nt1kI3 zn2)lZS5cwvy8+Z=R6)OfBF^!_2JJ$U(=IW=EGg~*$v-(x);(a-Yb~xv#&eoc?7Kx$ z(P1?(3sv!;$3NXa6{G|e@ighpBM8re&%WvWtA^YGi4zy#{Y?A0GDhg{`l+j$6g7NF z-9Lt|&+`jIng*uzX8!4;;Y?P_7}XQGq%ZN%M8k`EFpKov+EPE^E|DkrvlYFX6CnOVUV1@25st;M%YSn5Og4N=20#?6qDo?|#-{qEQcqYd?e6dbJ(!bYJ z*&79=%_x{NP&d)Vp@6c{P%M0f z>RRR8!p1bI)kl&2P|hCjYnoohe1wFUoT*x?tvqJiCGTN^lO5%d=FXkA2QKe4M~UVk zi*G7ZnSaY(Ch*_){E2p*u%&6e?`;bq+Q!cyDV+f|sAdGmDG%I5e4LC$v9DA6_Ft16QB5d1;9(~+24;aPvd-~U z3Y#W8vg*p|6k%5!xk*EC|G)%WctRPz>k;6h1M^p?Q^MUBt+21>TM~dBsoI&WeBBm5#YZ zPrR9QP9A+IL@Z-$=gWFfpx6sdh`788RBo?FZ!gHRBBq|=C}&11x_tz=&=k@BLQWx~ zqv&Ia;NUsz%lnRMvYurQME*|U8~?(rxDeQibE*B-J!b7xYg*v-{P!8{s|->|V)47% z167JwxmUdR!6fOmoJQiE&Y8f&R*6Plq`DlY)+P^^bcEbFM{36on>bXD?POg-3y9Hu zz`0M#jXgTD`bhKUz>15L+=cQ1ucsSlkc_)x>ft+cJET5_&u6rU+_|{7I!Rpvif?V~Z!)18Mmo{05)D86 zNh(U&t-V(`K#x7&x#>8NWVDAY(&B^Fu8jWz^3sjwU$j4Jj<^}@RYGfS1k@Mj@)MJ*Uqg@2Djx1W|4>xB5HqqyF!4lYk8Bv*4a%9NER$Y zxHIRT24_ysMLqVoHOYtg-GHlp{fvv|WZTVY?VAnMggnRPykjMCa+MX7_Uf&N&u^L+Ny71%1b zeCAAC!a_A$cPU2i1P#`SY=i8=D$Ffo0x!EA)ST|oDnn0eWOJ@+QhT(}ix!w98XDBX z*jHk|*xYLqPjGQiuT{H&D29ry&``{%Q=ZoGJCUjgXg_D>tK*1@wfkb>$&6fAXVU$` zz%A(MTNDkmiGK)kx!SBZdsSHpE6kw@oet@0w{KA}g^O^bE6vY zMX1+XF+cl=djxW@Pa#h5;bnrt)?QNzkPf^I-~oY;B6^drPb4!Ull0fEDumCbaCgTU z=T|T&1R2Nqcu-Q(!$9mYvYs<=V?`({qQ?%U^&sMFmOh6^PsCVVsD&777@u+O%~^4( zx#Ow@!Jm*wo?KpzuI(r>l1At&TAQw7KlFv zYfEPE@<}5u&oU9JrNmXQZTyd}j>ddye_#^MYJkb8V_rGqn$5PFeCnPSS2lSgEwA;} z4CnUl4`oBBHYXQnhFzl3Gvm3U7=1&E8aU^BmKT*h8`w1Ro3ly?w?8M3}x z?0s9p>f2dI=lM!=pV!ofA%u(xQ;2DVKk3e#h!1gb~t&rm2JhFns$j>`ozfs%DTldA4>Rq~66Q{pwJewX)VVM-_M^$MoM zX|S2`T62n?gPq6bGIWmX2twtfXS&tXK^N&vIcaNn0sOG&Y#n$R2jd> z@yJ^%s0~=GLG5Ab2aBAwrft5_d9p5T#GF3S2-G_n=%L;f#E|Uk--qcO3OpUqz>+-$ z@9kw=iIbpK=?o!dURkH!GcdLK?rVDW?!QpggYE zkNGBF;!wY`8853&2{5}PPM1#7i#vUczs%fMiwSUcJnKc?iDGp%Q|`Jb|;y=Nrj5 z2dpy}6d)KMs7!Z>GS*AIkwbjQ9GzemKv%o((1FF0)S@_SRTOW74U zSQ#1Qa?}%*J#ZinxsetZ7uVplouGA5b&u4r8%&eR?sdmrR?~s$_n>5Q&-3K6z0)QU z`WhCl+;L>{R&v7lVihc(Jds=Y#HfAvv3uau9?n;~s$+xSRxfme0x3ToW5^2v;D^DpzE8y>a$gJA~9Z{4YVrV`zEiN0r{uYR&Tcf}yr0v{FNPN9SR86`{GA^s`sIOd!jRd1_w{o;4fGU9^ z)5^1@mVFyd;hBA+_Z+hQ?)PLaOeqdyN^Pb~il&*m*Y$GFbK1aT+ciW&G%OH7;Ly9b zj63zplIJP0#$aKJZ}KTVEzrtTQXp(A%wUe#SL%q6t9o!ia#uBVAj2aGs=Mh$?$mM8 zavBBiCj$#}Y0JMLn5G0Zn)iL-QT<>gfrz3Y#MC=J;zgFugyHTxjLwCOF`FL{y98- zB`7AJdw*2U+e?SA)bl1?;F;q936oz5Cu+O9E#IbqJKSHzj5=Nkql%p#QoyPG=DQyj z)Kw9fic`eDabd zVdjV`VKl>X%xO9^fevliB+%O7KH zIFqCvMw*W7SS#W`F*ujgPEfXMFC&zVl_y;=^>zwd7_Xc5oS(oMw;vR|IJoiT&- z2pbzj|G71%R8;#6->kLfBB%UZ@@4A``y}$XEF@e%e!0kPd#%qR{Sx&9x5zy($in>( z3)K8o=ibW!ke-Ea`Y#kcoKHw@@{(QUxkXu(<^``p<4oH;lag`Ua^a^u)?QJq!X2Q~ zMo`s-Zk~K?>K=cpt3!pZZ5r80K0vm$uT%?tWujVF!-vex74SnCB=3C$@3_3EH;^zt zsn(z_)rvL4r#&+KG^fWj|8`wCZzlf(IkF`HK1+7t6s3TNR_u`zt|Q~>f1H{8`!aeg z{CZS}Rdfig3B$bIM84U7J`{WP44Ot@=P69s9HL{2BK+Q^gq4-gWTba#PUdMSrn+_k z-NZ4Va=l>ld}hGW#{$`iNPkSa-fNL&rhg0B5awB*Z6d?yS!F^EnM9xJPmjNNC2Fpq zI4(9Qhbdu))Je@Fq181#Je?suU%u(b<|z`h!{lr0XphBH9qp;Y(pmx*Yj4rE`Qg(Z zeB6~eH2%~i*-9`mb5K_Y-|p}1?znvW3gQiRX^TgZk!c`$#6s1ks`blt+2#=8LV_hQ zkNT&<^m3-hZ&hVyP8s9dR~bqd;(NBU)12b4-u9GWIehxrAmgVki_a56nrCbcbYWX9 za!x3&waqqbOeXMOtFVGJW00k+{FZ@wBDZ+uSx8q=^kWq?Etj1KpNKx!JU(aU!Cve? zOLFdfqjehf@mYo%L zhVanFtDGqBzagfXvsHw2kc*M5p#Gat8@2Zh#)3VapKiJ8OwaJ9W-D+mds&Il8o`Ib zb!~fHbK}L$d!*FGPAuqJh#lm_+HO&7B`)F`R+n#xbUR*U2|p%sW=c;&wAr8i$p#+t z%L#E=SL%K-FHw=6rgI}F~dW%qjQ2FG?LC8t5AF86CsyUJWLmKh@$EEOw(W|I_ z+i6u7VPxzJiqG@$MZJ0ire5s%Vr&Ym=W<%tpTM)g>7u~e1Y}`IPIx8it3JE>taXJ) z<3|u0{%L*9RZ%?j=FIJPo-<1~gG{#mCZ^r>Q=Ql{9 zpT|K-`#;z75(}GUif6wS$NK#x%S#|=^i{2kbp1WE$;1vT_JI_I&;&Q!3E|gwtNqZ| zfPWV{g;`_$0^{4~g`F+x&aP^1NE_zy%pB(04a9(FDuXOJjX{#;fI+_znIL z6Ks8!UAR4UyG2*hr0Ou99yZ^Zo)#|;1&%`Q3Uj1PKVF;r*H~o@vuVG0_M)8OYRSS3 zOPF~zc8x-T7V)cB=lnc=D>zLE_Rr-H^WklH+Md63hQL05;<&DvrO zFtvz9(zWI&1Nt7{mc#Lf#{H95xuqr3u#C!~amqFos!`yR z%nGjt=|FWw)rIgzLLB`S(5QZx)i~N?7lgLDVl*68izCW>)|i~jR*FC~=ucpH_nJDM zMGX2wu&{lmBtV+AI0HvN3$=^=__u01)6S-ru~o2c~EJ5>P!txYtD$>|4LU zVC2a7 za2(yk;V(O~{TYt74}6$74{t_LVyzDpd)Bx<=?GGTUe4oQz16lf;@f4hS_BV_kL#WP z&37dWHNtqE8ZesptO1-+1W`Iv8q`%CiNNd98Gqh&o(5qpTtEMTqfB?W-fs+Poi!^O zu!TA$9gguiLs3<>QJA?J@N}T#w+g2L%`2L0MjUzwESBIBLj7`;MDjkyKRBf>rlkX8 zpONkeWJ-kZ+|<3GimU!TwP%a|rr$3#|JWga%v5mSE~YFG>Y5f}&kyvL3r`;NXRW3w zx0m>Y`%y>Bc=7oc0*i|RQ{rS-Dn<~tg-2W?;rHFz=z_9l`DDu>_{BgM*NNm1SRQ71 z=f~dix#bHL8=dv4uT+hIYX1=L#9r5zdnjWr%cgCHtr9{}{rvmMD8lGtR6s>L$ z>E0}aVib#tWH^E?f({|8*R;$`O;wlH6TC=Jt;EO$7Ib9|_<5G)AM{GkJQ6~c5Tjh*q7AE21qnXUo-Tv;;3J*I;iiAX#MM{v}Md3Yq!kGUUQc{Z;yGo&c z_0Od8C~9m)h63nkcYtO{-w;%>fr($`gDH-wVoE#s*66LHUiXJx#D?|3@BcHgDugL4 zoVcd~`oeEwM|T!jA25}!(Wm*@7~V|U2tlS3)hz-W#eTe#*wi(RH4dUtPXVV>E zk0ZN?SJW=WfCG;n>gBWnW6SuB4<%nJNpbhI_U$OXfVSO!!DmZpez46w{Ije%%|rfF zi@0P}MOIr(p|QLe2PHq)n7=W%HGs+@#YGpP9dlZ|o{v4Hx#su(`ju!)1d2=Iym2^} zQtYeY5BH~*p$O2Kfv^OIWn2-1#E^-#r|}Lt9KpAT(?vz@jS8KNJA@bn^2U2Z!nVEW zrDuGMQ9QF;90rTu2nqbkal}m*PbJ}YA>(9q%4aI?R(RZ2pffS1D|kv+&y>wtEs*+n z*2~YwDri2P*RV1VOm6KZHBaM?sO(t0+qV8p?^G_}1&#})A`{6QgIBo=hD3}Tvkgg= z?yNyy$s4JBmJUE8XgJZl|AGChbC7h7;ez8f&1OJAryR(IDOfAvX^rU}*p7;3`!h6O zt?+uqLQcKoE<0J?+&m)#JI9+{P?~u!mGabhY;hhjiN1M)*>r)>`t@QG}M573p{=!U#L0+ z-YbnqVI;rwPeO>h;cgKU;y+TLePGW7JuJOs@k_*V=Ge5t!U{uoz8LM9S)6g_V%k4K zMgPe`;f8TQRydW;S4}GP7NSK)D8@u;w=;Nq`Nt%mIeo}{B|gyPXdA?QTuu!Jr`J{MGG->K)u-@-$-C}?g7NRBm)02B;^}PRb zpiptQ-ikB&hhe9d!TfhZDA)@r6O2<2;!jw0_{O6aslSA{G}6f8>2Vhg{Zf*AdKs%P zakXS-Qy0XtDhSdxhIQX7QX#BI%gU%&4$a*h;rSjS{DsDhT98kOZUE#mv(={$IFiHR z5BQ!QK10`PH}+;x0%#~`4=0it=5+d$S1G%uD+I~91Ii*EFOT3)Q=tw_uI^N_SkfH! zuMFvi>LROk0V|6N@)gR&{gJRfY45{1zx4wFo>w} zt}@o#X%yf{s0GYdRfYIG>UhPh{^rvwkQ=GD`GBA|Kj?G2QY)qj2 zN1@b@au8&2u#p@ig53py@Pfb^djy-@GvE(US>68w7Qhr+e!cB89$+}=v0cjm?TF0$ zukeH)wGsCu18Lyvj@AB8zVzo~f+$7vKckfIFB-texBTo-A|i%v|1k%xf8^dwQ*(1~ z+30b=Q|>ME9|1WfP;#HKSqQrPew}Roc_-l333WcCN5PI%F_HE1@E;%f@59Is>ZGaP zf#RYoL1>v~Q(g)j!0qiA)p)i$IgSkjK))6v?7H^iu*fyHp9sEtJ%F>y6`wHOd3kMJ zU6I6X6qP=Ntr(~P=iYG-gz&6FKr@>*dGkgZlA^vrMEl=khP%SBle z(~rmK@{$Q@smS;pVskP%(3hiCp8YBnNE&HDMx-4O^4B-#BG$vett6qcq-%zFR&9dt z%#J`3OZRU+}8MjQ#v&p*`Db ztNqQ?GnC^ZZfZZrTfrBgSvl`8$XBnOEpN{VvZELTmLmPV^^bdg0J;l(P)S@TesAdU zk2qaKrL2@ivs=)cnj>Z`Do?QjQnM+UNdGOPXSc`@C%lB31re$#8M_vUaQ;!r+2Zj1R8-`cYvkZJP}io2-EfWgua+Q4&G)#V#9c$a;NTZL>VBCgCEcJkQ{*rPUpG_tDO6) zl)mC|fg;xwgkRpw8!z7wfxH&~$q`pi^ju$pv09><8U$?ZXH=U@-w`@Y{tH-PG?!3q^Z`lA^$I z&{?cjM?sHo8Oy6Az(h_OSJtJU5@J8&)EwPL*H#yk7gO#$wZGN)z^}7%JPPtEc*RA* zD$c&{?rlSv^*aRvZyhcnwt1Hj6MC7Q315AVUTn!vK)B)17~rjty-s=dUHR6W9EDv0 zkhhJh!4Ppwwr#nnO$-IcR*V zZ?iA8JrA~n{s=(VGk89zWS5_1a`K=#*DIdx$<{Rpp^BN%T^df_n28d&kXLZ*T!U}> zvncgr#py%WSKY?-d^b|IYm)%aq}piH@}ZPQFy&e9`k0d28T$R{!1xENqu^~Q+XYFXjl`P_i_vJk!bT+iV}T|mk2xd39W^{d3z}fLs@k%&+ITI%A^V`Rzb}N~ z%qKFltgNgB6x3OdeYL0sN!g#~9Rz9Y)EoLU?apIia{hPcO)F<4)}EX0N;L4L=a|hh z%-{|PawXkty7-PdfE)R)0~_*;*9i`d0boy@xK1|EWrE`zO^|WVuK^`b(SB`!U2$z) zpfR$$;;K7jV1AfB&P}NTGJy5<8!qv%VyyCezNU95GH8htyE9Q<-5sWgg4Nu7fhG#QQ-l!|Fep+iyEyt32g}PJ(C(5K&9lMQJTDsokQ>(h}^-YlL=R2B_j`xt?w|l)%l#X z`?_kg8`~N@W0P*##Gl{_t#&ZY%$Dlpw7dtPO1+u*R2r2!?(dpChwLLcjeM-99=2@P z^Nu&jlomhz3X2fRgnvx2?mNL`eli&xAV>U)N_DAizu0XYPDNRc>b+%ZO+Hn{0UpA% z=my9wjpbwa8o#UjLdR!{@p?jcGGJKab_C!mElMZU2(49pTBF3uMSfub55~NKFdg|= zCp!h*x58Y1j(cvxbzi#x1Dwnbv3K5;{$Nx(COsT58n$6K%&Pp}uApZQ@*=~+ zN~{{SN#PkG0Bg+EOoEp(0uFDcuO#p{oE*>_aa~c!K=rPFt;q1V^=*OaD~52P=LN01 zk-;Pb!(k2aF$2P&iFH?Kfhi2bboT0CfEbg@6qOJG6%4~8yI4rCyH#x|SxB#uk9?pH ziT_FR;Qz#Tq+yn)e?XrqC)S;~psx_=X_GRCfcnxbzwVtlH$8Bs@QaTI3^;_)Ur8wF zNJCa`X~}y5%QQMz?={nx-X7s%mcW4wkg!F3t?him)M~y15$O&jy4Lfr->ZG5P_h`x zTYsDkImriM4iwe*r3Y%3)J723;2XX>%hJga zc@18PqgDkw1ymi%#HWtph%dvr0vLHN~t zpU=a2Lq zOqx^$7?ftC!k2MXeK+g*nfIH3pvWSbslG}05Q3vxI!4}S&*n))=yxFG;KIjY88(Mx z2Ta>yP6g^1V6t^aWM76K0X61MYJm7q0Ts)riKn^Ayo z2q+tT&IWf8z#; zgg+vWzpew-={lfvTFcbbbh|0(PHQUVjAWkb72GGG3Mb#P*Xx88ZMfR|In31QSg>OjyJSLf=zuX2ls-(J8VPX(?p zEk~-cUnQ{DOt{~o5)HEd@R6GF!rVB%cUHRDbC10IsBB4F z6p!RTE^N>{3Hh=`a`ecl6`ki0Z&6-LdGC*DhV+(*3ve8$^==D*{Efri?kkNLW7Th* zG0}bQ7k{xE4jcPY1GLZ44QSZcLA1ZU$W#_s8a3a=+>8)X<4O!>RGOG3prqN@4Iukl z#$LSGUUBQwX>A=N=cXgic<*q(R)loj&{EHS({waJ+Z$jDyy;t|6Q4W@p%_nPgtmA0 zH9UFpq%br1A`QcbCsSF~#{Vs-;QuW$&8ZcWBx8m3+gO0UPG13&Q}K|?<8~_|Q?odI z*x6*Ul+xj2yl_FwJ(v@n+!0kZr#BAxU8Tj8^9=rWQup_l3HECbfVBo#FY^qzgD!xe zBP^0$H-SI{cbsSw+RkcdG4F^I(8(c2+~k9A*P<8tQ|T@GP0^>u*K~B5ol?~HaT}ql zN;Zlhg<#~y!?QMjA6%eH^331AP!?LOFg*a?c66Ff2i9xH7!*8!n`r>|toi8lLxKSX z|H12Sohb%%31Fdtt+<|yo(KL0bX;Xuin5S2!JjKWk$>R^z~rxcpH!+L*b(|;$D(c4 z`j*pnfq8iSI#vOy$t~b(%ao2fG`pS4q(&o=eGX2i7I#=4e-%7ss-Tsh>hI7qDOlq_ zQKK)j8a(_h&G$7h0^fa}v=A)T9#QbdT_HBM%Z(w)Ycy7ZkiAc@nM~7W1y7!cW(Kc} zE9i%Bwbvo6_UUnFpUjA+3xRLoazEDqu=|@sMnz9nb62e9*yFFQYzI7!ZxT_8rvlT3-Yx5R5>MITIAUR=V5G*kW3gdPP=7y2?I(^e z0eyCtn!`dfK!s(fdnZ-;PFiZmhON6<2r&XA(nYfsurZ=-k(NG!kAke;)yB@SR$d%r zhr@QbQRmKA*wDV18{C+CX>j{Pfx+6K82yb;y3f|Mk?WvR;HFa$Q+M5S23P}R3kA+} zaLQ?gd20uoJbLBjfuX#-^gFG}xsR(F1k4r;Co^` zLTwPp(&+2oZY{dLDFiHp*-(X*3|>E6V9Wj_jUC(%+{WC5?i7G)=l0t}=+{-?Ytdi; zGPuzS>9Md{|3u*;ESwE2f2)Ij9EC3`tbJ4H5H|4*^!itKgLK(<>fuY^H@_w zU(UG!9h0puI7&+v8UO}O7Wda_M>+xE6pX!aCI9d%SXa{jc&qEoiL&U+|BqP5+9+|MP_G zUq>(iN%ODcp8qG|^ChK2A9(NqQtGf1&D1MOGvyg;(oWLUU7txQd_)+)#IT8Rg@kmiFaU@``;4X zw%h6MCk$KQdU`exjsE0w#0$RfPwAXY^xX5qipFuYsDaz?$q&J5lfBHH%A?*AO{EQ5b|D_l*>T2SiFm(IBAMZsCD(kF5UCyq|w=UXh&9}oFO z-bhrY*vg4cI_#O;SCV*#oV~}D=J-WlL_`SASf?@kdT8pE-M?rIt(C8nThzG2hQtV2 z{X7?KN4r(R#hYzU4H|S|Y&=lK__bD^VAc6Hc#xYFup=XZjMDQTOAF*Z6aXL*v0Sva z(;Wts!C+$qFm-dI*Gh7YUX*ZV{c2OD?mINgOWsjAR%EpQm-;&KfKMaJ;l66JllyW? zgCg{{eAX=}(u+hX!l-Rily6c!HJ}PwD9VeScC%9Z45CeP4kxLpX2UOTj|bU~y^L<| zL{7Bjg;lqUU(KBzwk|%{Sc<-HO&IOhG7*yy*u9Pe76`7jN6MNb6QB70FYewvF6r$5 zAGLCFoGG18HEnKfYL;f1OKwo(SeaX8YN)7XXog6sXsAfbd~zmJ%QZ!%%q3TH!`x8E z(v%Q$LqWk(Aw?uXFvaB_oX_|7{oVVx%kSPlZ+}!O(K+XRIOnxI7XvLG;FN*8^$BPu zR+WwR?{zF=0Of%bLBz`3RSlD1r8Oksr+qiqRmIg&kd)!GYeNtldAZ#vRrGNcNRP$L4mEvhx5f^BqtJzA!0<4dvGEGd=HW;H<3% z+cR@&QSl8O0X`jhun~mu4frlE=DAOGlR^&BaMft`4p`nL(0Dd#t|5T8*)lqYlLNk4 zq|%L>>#_4%J9m5>V2so}k)>WP!vm&(0Pgcpv&95%mIO0)HY;Hg;m#v!m!l5W%i$Pzvr>5{?KhM$i2^0Cmsc+hicBc4S95 z5-ow!0`lA^Y(f1jnslVQ=K9GgFY0y|XB$rU8?B(PHb17PRcT#MDXR*Hu3}MQClizK6~aEmwCC5iZ^_Pv3~9}%JA!p0kc=%K53kj5 zAwCvaR^yw?1J{`8(?CQ*Gz%o?PXqNTAi4m!(qG;sq}O#a9ADt>?fhX&n0U{$n9+=7 zIKI?uSy{JESckn-LP!6+1r0`8TmL!zsGmK9#GyJkq_z44u*6cXM@oQ)v)RDQsnt!5 zDV<3BR@MJYV}-A+%wB0~xY?;xj8(9;-eu|X;KNK!<`pf8!XCA&{p9&yitG2-caT=z zc?HZLFPa~EIi=KjG3WJ6Dx}txVq8bS*RFF4sr_c<0@?IHjdk8MIqD84UAGz!2Pjz~Shp77VFb(ujHkJ@ zrcTCNybbJkv-^;mm{6_Lwk!$4`d(atOm!v=H&$ErsdOD}jcnN21N0Tb|D&%!PW8Q6 zPsDE{F!ulS%kT>aH%fh%rstE&NsZ!@`%g^HpaJA9mDa4kYOZ^0v>?sP%?+~1pDYTA z;lHG*>OazCj_f0P%ujtbx?)y!SR?X$f4yxriuIF&jf?77nq!>WP>)S@!Q^DE)}Ph* zQH9{->+1`Yjr{A^P&szSY0!K>jG@xJyexL0zE*iOeRoe5@=lP4|KD|K`3}|tcN$tx z(!`0boa&3#mBszTJ&P|@?~jC~*+r;jGV$9PHCJJQ-6hohUaW>Flxk6>;JIsO^}qk^_HY0`clr#i>u#N zD+)8NRprgU@e$>36u#s6rWT7fauKE`>6rgz+IIlsWa}Cp3;D53DV{ zEE2PXf4>Z5QatXpEB?&9@$liTA7&zSpPjq^vs!eYkJ$%MYj3{bzR~El#5poUYQa$X zfh@qjoG;c61kYpgBR7;rDkQs>JeXQK{kLZFgCz@!PnU|ua93(K7Q-n{??7dvHYRfv5Uv|p=ITbvEZRG z)9&s+LG2%i!@UKP3)Ge3;I#iUjRXUoxOZ8Wu*tEIhOnCtHJ4M}SK%6t`22Ri z^%u1(RR+S}M(+-#wL6j{yNmINa#ajT+m%i%<~gY`RDg@a{hwJ!tlZcXbH?BQ*<&>l zn++ExW36=n_(xsZw$)(Q<$~_%O&bgf7k&{?*W&LRO-UPMZ>m>{yJn!yA2DS`^8wi` zaKwR4x8SNX3cF5EJ|fBeXnr*>erZR^tqg$s2>~ub`x9xB@TPwa?U#)7kVzEn-%01xPjmB9s3#~4(U%wBAbu|xJT*qIm;sjBR^0mn( zFT3EXja|AcHIkP6z(|m4^T4t7q^i8CLP9?hihCV8N)~lD3{|rxA9rV)mTSb+r@Gau z$4#H$d6=C1>_xpy&Y5oe`G=Vizsip31$#qVjA@+6i#la}s5&|$tO0n?R$zK&8Bh+v zqS>z;iRl#o0QNM&Q7LG8#GzUAqBO{TC3d<$vW*CoPzq zx1=8Xt$LVjgjM}6D6QwGee zRvqgMtAUhJ=4EY?fDtJGmTHw3?F+osJ+npK+g-Z%uiNE-Ra#ytejntZ>1y39h?#j| zb!jhi)uVCxcWHIto?uq9V@(@e99q{m%zfi&~`hZ~oV zCI?SebkT8~{-}bD&rkd&hqy(6JrlfSfa)Nf1iR*P0p-1Vx~u=NzSJtDukf0V56h2l zn~Lgq?Mck*#=Vx3B%|Yui;@`7BAP+}@4D~v$&}1;!nONBWxaFN$Rn2n2FSD}906F>qKq|4-jUA;gTAG&f6#b9N?Pq%SD*#uu zuTb^V=sUm)tmPx{f;gEI>@67xk;E&147+uvur)vQv`@ewqh4Ge1F$vu3(3VRv72sc zEr7D>$7n_23BRe>q(zJ}p-zh})|0e9w+8{W7J|B8Aa* z9GJ{WEl|c-&!(=NCaz2L{VzZu{;Mthe~(t!QYzsy2qoq9M{vLLxCFGRT*iFqr-y$V z)}A?bZhBu&qiJ`^5#fod?5;D51sh}p0|q|ZtOE05%Ic+xTcH)+)tRjlKMOFw`?QKT4jn?c=IN&ym@+5KUuAUL z6nyXsV+_*5Lc-Wa`%f@V<1Jyb-hHzVk%Le3yG`n5YPww~Eo_={>aJ-04;4Ly$asq( zHLs3Ohq^r#6dub(*MOJwN4CPnKR2GL-=p^XdM4zrK?Fzy{u0xosk?)Xe+ z-iNYUcBW!ooXA%87I*~rxv#iSW_n3IbTQ>8;dO4g8taVfOp}{J!>04X7n63R>Pt%e z2@GMfpJdU3QO6edQ^{-q#eXipa*TfH5pDFkm0E<@och28#!>GHqY1aMY-1k;v^eA; z<2}+jpkribe>*<59GdAJOE%Qa4!aDT@2nZuJ*F0Z8$gC+AT=0!*7t5CPzOCywc%I| zcYc_3fm;(&gEMHb*(oWTI+p%x7VwIzv%rP;V|1_iZ~z~v)8|vgcUhOcJzHdY%0IB~ z`Iv7iDZ4%8zGDgAD%hgt<2q))M7xs9GG<9q(V4Sa5e|E=??}a6vWU(U2GcbYU8|dN zB`fp(C{9AaBx#36!><=y*yNhV1}!SF{Ep+#leR(3>qBYdw}#8o#`dbh@j=HuWaYVs zZweoy@;N`dk~$IP7)&!enEx2~-$~vzt9W<}!jD~n+EV|`opg+-CAj9Ckib|G>75r| z<@*hUZ1bRV0vwiB5c3|?iODLs&hLFy++ne|R_4^E1NgNQ*n&VHShuuSxL|UD-$4CC z8W`x!mUv931%8A?+jbO5Obkc~SFwTOMJiyXUhjJ6dPT{vwyg=#qOPC{N*kDrzR&tW{NvDz5x0IODwu-*z; zXgb5fq}K@PZrgte;W?_cexN8PICRWxQ*`hpGCvLM=QT_ zr{$ai66uB`NFosEUjTIG4ZTv@-jk0ofd^Jn?FJqFo|VoXnrCkQrD_N8f4Viad1Qxr zXrOs>b0CrYYO*U@U`*cfJBtE9r_y7El((+4($8ngZm-1DkEYdm_$(Go&AOLS^Y%Mm zit&U^eVcmQ|J!h|{lksbtDA1zi~>4N-SxjM?qO0=)0q~K?sCjYE)ET* z-jVM*(-me!YV6x}`Nz@n>y?Lhm-Fv;RsEd8K#)2s7#698U3F8W+SqQTg(aX8<@zg( zh^okFP*3d%qSa8X-WoxL<*v2nvXSZ|ed|&Rn zp6+HG=wi3SW;k!=$_2fOBcm=UeeXL8zRvYYk89NnLJAs+5=Wym_cUZz9)73!TO{-G z?waj{9f*JR%)UF69C2oc_Jemfy^kOHapSI8jTl}I1{P68H;*Ew^M>g-iqFsj=rl5s zq#7we#IFIH;M~fA5C=KdC$o{IT_Q0+qSz;f3LC}JxgK&k%`;-a4?P@$Xuy%M zpD^tHC2zAq?3VC7mr1q=SVT7Sa`*lP3Y>Ro<2W3ZRILq9NL1(JRuksSsJSaAC*A_l zh4!c67wWhgg$i%_l-X5Dy?s@b`}$_J7&OfzSTXd~Af>Krt7n=I=wJ3}({4bhOtYBD z_BUyS&XIoLofrBrTdlvG@EHmRXKP8+bk;S7M5ozmWLV4;{4^Gsf0 zvM}R3#a*0;w|OQy1h*VAbB@wF=JE*kXhs%pUY{2u(Cq4LUTM8hEhb<-l8F&D0SWhC zF7-E|Gu#Hc(b>Ek=DWH~bnDBZw(OQvu^xI}#H~r3NHxpF_6@sB5#&DC1ahOf6Sk}R ztK;fLs#mh#hnjLB#{W-SM!KU$Ta^edMLRIfskd;{tLT$j&u@5kl8{)O!QPOjOhz|c zpgE~#h{e5zpiJ|YOFX!HYq}uWh))vyD9UKUqw%Yk`em}$Ievl)%rG!u#oMk_EId1} zC)AP79bjQ*w$^cf6_bZCPkxuxS9JTmp<0k839nr$J~j!Tif;}#A0)7$HU@o8;sh6k zp(#Zn%&u-jDSBV1O)5eX?{8rCpy~k!mcxjH1+uWbb|bSwf#x*u@aUMhGkAQr^4Ed; z)ebe``%0|_H@qWL5O!(<=s_2TRNA}glv&aHT#?k|hSu+0J;CDn;0uY*A=4H+Y^cYn zPjMXA1njhQ_6WTckbr_}%a}Q~ocaa5zG5b-V#eIup1qsQG7!T|`Hp_$!Vs zTy#d08#@hvtn_*F5J(50U@*D}Ry(dA%PR}oI zan-dj%IBUMD?}haw8^8t8_r-yKR4lfSkrruEx97n5eW(P9wO)sfbQVmOx`cMHj3ca zCv;oH_|cXj?8%6-$XYdo!_$)7B)K6f8r|NlSDxPWZTk4hQ!U3+m|4H~jjrkEL8z57TCOly@)Qsa-1N<6Nl z310VwbMT3Q0NVFxK~Le$0N7J7<)yp`-Vq;CqU*!o5Yg|Y)j`+;=#r>9|^W@pHXg6(fED3qh=jK)^}5_9RIr^a)BrNf@V8lnB0lZ$2B-Y_o^PR%k9 z8i=DC=E|eH+*|qkU;78D+SdekLaoJQ%b~^@lRA1$Fr1N*T}+?LQVprp@9<}yX!12f zY-g0rjEiXT%cw4~>qlhO2`_X+8zdeg@w!nWWmt6Wwdra|mA(DyLKhrnTwEmd@#?{f z)~m#IRcc_Evohfc0TJ8&4f2BmIdjY!d8yqtXkmvi38YZ1M12xEVSCv01<%Nq9okn@ z34F}aR&nom;HBeDXxN4Nkv|Fq7bwcpx-C~91luvrO`%wYJmFK^8$JG!Hk}1r8QuLs zZLz*BQBZcd0Os@W+3gBG0iGW%HM_$7HSB8;F)qG;D#l(;D`&5GqCS|^eGM&B3(1D1 z1LP&8W46>UKm+er>GWX#u>XTUJp)tsZxL+>>B=(waKczvyNwH*+}l&T?1_tK{v``b zUFl(zR$^){5&4Tc)V*S6$WiHBxMtLFFcHbVC@xp?tniTyBG1E2FBKwYaj`k)Y*6w& zoe{qA-m47xydx14IuVzI1>2Sb7c?)l9HvsgZGWb4C2hdx*KWrk3Uk=)fvZ4G;u@uw zN?=Z8cUbx4p<&yuP#te(qlei&cOF%Fvxg8(tEtKS^PFZi z>fyy>V8bW*=^~ueNA-vpZ(y3bFyD+^R2^2bNqONdD(0NV zzykIRHVIiBUNJ)@XhUM9>a^q}?PtiszyJj|%`SAP5_MzYyzFSP4mlAslfGqTTPHG2 zoGA!q?7zB)aPX<|(k)dX-TIHf{y!{6+ts6wF2UX8e#r|7L{_rfz0!)v?B z`;qX)qOod*(~P%JQs5T?(6vJB9+%x*s&Lz+C&+!@1j?I-4tceOC;oknvZa+gb!|vN zVV}Ig8D6I-I9c%Kn!Kyi-u8SQ>uZ0UYpp=YlfMo4^#rtf{$KrN#uo^@yUIoNoQNk9 z$ril@ESo5Fx1g58_5#4Oz5qg%D@)$=uUBS=_Md-oyH@Gv+RClfpqZwi5R@=xZFxEJ z4`3p(*cTAQbV3Tt4hx-bZAVz&$i@ouOy$Nf;X18R;aLC;5M>dO2f%b_BY{8R=ELkk zc2!q{lV?Rd=F*_eV8(*eEf?@=U*0y*g9g9uJ^NQ@gIHgE0W|z&>39*lR*uS6E!x`V9=JUg`HOh`QnH1;x6^hgVa~q zWb66%r`0Hd>0xdvnvKj5ve>q1j77w)qkQSGnP9m~+AvWAn>1juX1dVBrc+6c{-{?? zR`dXr*-{p?rnEUhy1RZ9<`&3+AkHsYIKuFk*zhzO(p%#oJ-Gl*gfTM0V_+nEjvySK z{z@30UUPEok0R55$Do?p%d;i`qzfD<6PaRDbdTi?*8onn_6&GJnh3oE0W#$hxb;%FuO9&sVbR#5Sm zKn2C1Ag=N%DsOqmO%L%-Wnmz+hGUZ9VAfMXX;r*@Ro{bMb7SCz<3_0VTfj9nwuwXs zU?12au0ERIr%_drR!65Wi!0^M1ATSZdgGvzop+K#2HWz2y21r?2nHUu8q{S$Zn)KO z>`0qMVk$z+EcXj2Avb974ua{=_&-<(Dl$477Inc;tVrnl**K7CbNb1ElYVGLDgwGP z-&YvghPaxbesE9w!AVEq7suh*mAcpE;%=g&2d0646MPE5_>GK70*i2RWP>Lb0*ohG zf_3lG_wBi`-$u9J@8m+oOynn%yiSXJFSwr#1FC7>UuvY=Gnj^okR)j&k*Sp^N>Egx z7hJI0rpwxXI#~hn=;G8Z0ywjGXPM~J8$Ty9G4RP{*!zN7Rv|oHPd*Pqz7oY({C7M77Lh#TjH4L^OpL_?lAJ}1e~PlSXuoj zh4q)MAZg{q#9J^x1+ILATU?%9+rG_#`nCgcYwg7i&p~@6ptPp(gvkKM`Z8qSR%he5G$aA-e=2 zx}+x!O&^YQbXc$sRjRI^CQ zHF#kVaYeS^%v11PnQx5U)Ab7|Pk~%)9TVzX@*}&7pI;bN;IVOGPwv6C?3B4I`6Z%2 zemrK~zy`W(x9`qO8)@Gr-g!ZK`{i-q5%~}AmHB;)lK-i_TdaA{vG+fewzHrQApfz# z|F8byn;ywxu?M3kkNRXd2(k320{e_}gbkhm`~jxwt5gTPNmP^)PpY2kUb?4820oTmT?q{*5DTyvA`2;d85SyL(I90j7O^ zc)Q#R*hCI@ETrdr12$5T7L1jbr!`tAfFNHON;~uvTB1JewoxoTbjo{eH~LUBjIWIo z2||DZs1r}cj#*xbfXO!fxtr;)K=_9!c02^r(x_4%@I5QH#Qkn$BI69dmLe&m+50T@ zc7_3#h^FSFLTN=JF35smowG_{&lgOMJPSOirJu4)y>jR{v_u!*^<4EpmxW%yryB1E zbGA_g0ec?93|~2jx=5;WAZ!SFupW7}e4zdGoMBDp8{1mlvc%Dlz>Acvs>blSm>if zwHK~7x-FbfTd>j7RRZp%w;N~yfZI3YAFekmT_Wf4WlciH2Bq<18 z!2!xiX1B&qL5!v)J|lPD*Ew-Hr4acx1H*SI6bbHMF2}kwe56+IX|YgdYyI0>QtWO5 z{G9NE%LKf5iW`CFEvPuJjpAh-6H?SDKeG@bDe6lBJFVsUz&I`7c{*&`H?qk|*_-~; zG@W1Mqne%kIi%~U`JVCu>l;p=O!^%ds#E2;Thfy)XnS>DAD+x`T{~9tpa0I*39y(t zbw5Lw+n^)MmWgY3%%}8p9evCvv<(-LH0RZK&Q85nd>B3RnEd!`FV-{)@J355o_mu* z0b9|Tm&uiH>#*6UPc9J^Bvy#KSzG>ciOi+TS_kt=Hn9bt!v!#vbOlb6@`fh`Rgf0%U+;~{UYi*M z-kU#w*%#$DR$rnNJwMuhQTdIouw2#Ta_!QlM@i%@v3+SFwa}+mYrrPEMhEAViW4v5 z-%U{qPP{>$2?+}@84ODJQfZ(Hgq^FTs(yF*4w4|<15PpVLDI@IE;vcOLxuOp34mWI zM6M=AX$3l2eSXg6;g^*%PZF_S;+9PuBm~bdqZzJ=0LKZmUiwVrLDx&EkOR%$bWgIq z(dQvxOx-p5RhbE`U#l=sW$#k8j(oHDckP1N+M+O~wocF>BLHKw+1uYJ-+N-qgCSwG z*aAA3`n{JRQ5!nc##R6K>{9nCw{~^@CD%~XqQ@%4xBeIK0)=}THguWE>nJua_9A3$ z(UY)ANkx4xG@xyLqp7yv$dV;HL$IRd4J60i#p!RO|(Ae=<7pSzX3}z za8JkQEGPsejjinMZ;wsR7C#Pvt}`QG)E%@?$KBi>p^B?LO1`uyGQm$hdd z5j-ti06vtlpoyFv#lNXrG}H>5eY^IF%Z^nw)>;*9qLJ1X+xluWeT2`gX%!veO49W> zVaWTz!ntSGQBva$%?O83kzI$WF7d8|I8{j#Nm=}MpS!9kTATUIwO_Eda9lTDZFvsP z2HTv7-V-$ZTycQ0``S>Ij^9YYQiEa41@Yg>38>ZK65@%Be@412AE}b&cW=42L-`^w zP3nnWTa{(*g5(E!OFxe5K%EFv!km!nV(0GYTjGOsa|*WmFXx%ra|=+W)$+IPZC_`0 ztY^+LL9KJa$Mt5ldc6Eyg*agpjTa*hrOD0nOng>F8Z-t)TEkW2d_OBLLyxko4D*X7k-#Eq?7`Xa84q0~uvc*>&IY6sYxqUn-MXKzho^d+u=+p~`3Oap$sIWS2`$uN6-T|7J15dr@c{ffvkjf36)hg{?lW za>=o2m8#;tPIGM-(Kn5tzdr!NQ}~s6SYIQcGNT}?bBWGGjp-(~N~F*2)*oo7KBM19 zk2b9^4`5d1aBbCES+VG4+hn>A1SkE2U*1q&2ON|N=sCxa;?gg7gtNAmfv&B>cqM*q zbxK{Kln6cwAAe#uuRN$VLxa13_z|5BK>E7~iQa3UI-}t^h=&W$K8N)3A1`%ewZd41D9q{(zVdtGwau+ z39YCw$0FNu$8*E`GR3Ai3psD$1o-+83Grt}q{DXy!L_^f6PtiXU5ejpi=ow4)tK8L zv@q^Dz+XE3&kk<_Io=GQOoE$l&wTkNaqUP5HEj07iCH=b5#-P2kb>Ou+lgqszlp_* zSK|!yL7P~yiX;4G@%`T-+ZbAq#zh)Br+fYFf`GXG<_6#;P!JlMavH1goPPWSNU|5a zNt+h6iHdZ41xTxS%bDb&QsRpk_u~*P_3BLv??K{jl$&^Ct$emwiPYL- zS{M%c^G-bZaiy>X>M(D@>GQqg6ir>o^k>Y4%xyu=nMUlWQShCR0+ko^>6IL*!Om%Wl&gY*4ROMI0kR~+P|%ov}s&&RZ?+yOj8oO5%UcXx8a4Y46Qq*w;Xt| zpr5buG2m*3#asBJzlt{T_Z%zK+}>R3W2iO_aML;68kZwQs+Uy%O4bxhVwEt7%P(zs zUVyEbjQ$5%qHpspC%=E3t@{BtT~z2q)YwyP*u+RK0B>R)9CPVWOQ7=}o8~gM|NK;- zkNuLxX{d8=_Ijbqd9bi?eQ9ul;aW7Ob!xf%O@xp=HL`RgOKRjMI|mUx>)e5E9uv@5 zoYe(gF>CUb*2;VCD+WHyXl-F_6?${El>@z!gU3n+XanwR)XwF~VDQOrYZWR^og}^l zQiXi6Up3-8AxS3@aVkTxM-D>ojIL(T`HOSImHN=lo{4(+)*p7M&)(r2qv!5NGO-4i z(+%z~%R%x+TFOI)z2!)FI2dJk&U%_=I&KY;jIiL7^5EK$r?C5=wJ_qDU&3&odelfo zvYxo4xTDGNj97Zn6!ByB;lOFhw#M>~OtdQ8MX8}-LQ;M$cv`C=J6~la{aP^7r6Fj2 z0X)xuH5?dc?~*@h5aLAsn4R0?J=z!Zr^Op@dy>qyZLm7FB{03=W;%x5V-Eh!8)bkV z>{h;)edb#XO@8BX|7{rk`9|~t@V}h|7l7u;4C(yWsT^Z%T!CLDJ7*y31Ns8vtpwiI za_G4?|EI6DQFXf{7fs+s^9}}6ySAopmwcD$aY{cUnTRsR`jZ{n;m0POc|g@}$r_u} zT5i=chAzDVr#8==9+)GoE_BpP91e955BVu+qUV-5Dj&3hR3MaHMp?A`n-WccERb+K zPz#v=UH#78QYEUk*0W+7cfq6QavYs*Bl=H=$qkWkJFM=*etGyi>)x6QA0xl=@WQ>morN#pnaHyV_~ zb$j3sM)z>Z$WxpOelfM6QGh}d8t|1?BwhHS1Xm%WyvRB8Fe})3^5HA;43!di&Fo)b zAX^CF(;z3O5r9R=3+z%K5u)6EE^>qyd;O&LKA(a{i1HVqxiJwV=bmt>K8vD5&)0fv zR2>K9*XEFlasdS-Yp2x1j`amV#2JB)Y1nZ!&RcEP@K1i_R8X}GyW0%%Ds;BKy+RY4 zgX`^2DsUqD9oACVq5T05tdF&x#kN?hAGq7>p9opHDVFnm7P})TeITY>xhOXCUNOr| z&I!4kdm1JW4vKt~3Es-(I%8QcZh1balc$*T!`u;|Xw_F|BO-)ZN+PD1m|=sEEV+?pGFmeQ zy-7|(%~JOi?9YOL6manlh|tGYGPUon0hLdO_Sg8iIG>Tmr2$fK0`&7A{%iLO7TepD z2qn$mo4BLRivljRanexNg-crfvO*(TeY+|C_DV@7u*zxBQL~f(sY4U>ZdM*%mbpcq z);+IUveaJ)F~Q2cf^-u>rG;R%aa2*rICNjSd{KUFk9J-(Q~nb0V|JnS$`lQ7#~CB5 z*()^N*%%N#5jg0W1$HdK5VC6J!o>^JIA}-=;~`DJVMFZ*n95+$d2ev#bH>Gqh@-Kl za_-riAJX=4^O0WjI?Vo) zw>SAx*CjLwK3iVd&mGABAhw`8pu}C(+f!cPp81u`{-vsJ_btXzMg7$AJ;!+T)fsvw z@I(!$)W84z!|nzAykLc9I4bcKzwgj$Cd`Evfa(I)ATY_atG<&@Uz?#5Vl`vF&Y}KE z3q22R7*Hg{ZV@Nl69ocha%02#A%hQBL4v65joYEDdHnNl*&OLJK6p?TOWb$V> zBPd@@LHoHkXzKRqLgxMod_0-=1RdE&(7~o&i>xf0@a#&_W43;0=GJck0ZvBv;}r8= z%}dOEg1SD)pZCi4-EG#H(q1b=<4P94>}o!>r;RVKf{5n}p?=%?ok@$$cfWn&mMjR+ znzKK)1i-xQGxKN`Ff;5Sl3~nLoP5XC>a?xjjzRf~Pi5!7S+q`tpElpX)W6_?!PWvHreyGrV~(F}?i>9c1j4h=O_W9NhqQ4I-CF~y1P%p2F`jHb`_@mFs# zov3(7ThJobThRZfp{6X0T3eb|8O_Y-`B%-SZq^Ha_IVyG&rp3sw>46L>_s6xA!QQV zl-3d^>j>_nLalpZGiwB{cn32?srD)2K5-#*WojzPhBBXT=%~qR`+L5^p<(MY5EG$S zBRx8l)Z+TJ)F;{!f=+7nR!`QX6sdeM6rcG~9RHb43XvN9a|gkU!C4WtFq^&nVJ0+3oMq>{3|zF{V!yR2ZHq&DFV1Yw6gyiMEf(#v%E!_| zoo;%^h}fMe|1~IGzE0wV1mt%S+Zxw~i7Uh1FQPgB)EajmXq{G^72CXmLl0$Yc^b?; z+V&M)XrHOCB|2DQGpXcP6(3Y`zRqZiy=QxgGt=S?bmH7)YGNN5y8Eg$)~&W`lq0d~U!cr*ia3 z2D@f7&(Zg-W-VmHA_b~QkcjV}jT(_nR6G#`)t-3G&(afQ;)W%yKhK!{k0d8AV!6JF zYeEY22BlIbZs;ZJ#ffABUP4-Rtpd3P7hxC$3k9*3!=u*4lIEon?t8>oPf4 zU3W_Ssv30X7BZoW$Y3vE4!;Vg5_2=dP) z4Z7N~c2^YpMRo0)DnV=YvsRAcRNpIzoLXsjacv<+xRB}IH0_!^wiXLr{>%k7Qs|tu zWu6%+Mp8oXk=6JhV;0l#*d%!|cDGWiY>xVieo;VVNILpQg_#{-o2ONL*mj$)`nYlI z2gB!z!jr)(Yog|5Lz?08--gEW{8G1R_T(Wab*sC#du6Nll{9azg8Eo24gXDRS&7!P zz_wIo1H(T+JjaU8oaT^%<)33un{P2z_0v~2E+GC?zn6U$#D6)WltN?ZybaWN%64rg z0NP;w`H$^7RM{367uDuutdcLQ3Yzvq#bYZ4U*lDd2X{Egdz0YR&wAE-2)@dMS*&WyY{CCpm;CmSt2=x^ZfVpP zz&eVkTamJKx9^~8?((xB4|_;gq(cee%`=tM@P5vd6ca=N%VKs@*4jDd?@>=CPq71e zYr$VUloU!p-h?QjR4{+SzWPFAbw5*E23=hV4S=*vGQwX8Ed1pppBx#gVR-drNf>tZ0*KAzj+bZt^4b-G0}Y^~1@urPRA|`^V42m8cHk&?$y5t| z`?7ATfS@DZsCGNda=n?kGEv_m3c^|iu`Vnl58BLHr0#DHx@r@5z^D2&p%#Q&u ztv%H0Ev?V)oH*%I5Kd={#ytSqkTrfYJYH|qP4s&5;iJfG*mx+Jn%-yxm*Wl?0Cpg1 zqc-SYXn3uT@f?`Cpec~BCU^G^!t1AfNz^ za>Sx(muA@FS#Cg$&v5XioZ4D*q{F<0V?iambUrR+?2fX|LaO&diBz2!;g#pu6^$Ac zWf!1(AQ%H#eK7I*r;5yZn41<40ZZ36B+)LUBP6DLBZ+xL62-}d#7P5Yy2&g#n875|?#l(+16ZxVyvpN}@*l^T$S zo%E^}R0ea#3!Om8fZ@dHCLQZL5XZ!@B{4a+s7ooPMFz#r#Bhg9EF< z#1xrPAU~{%oE`=z(L4cANK{?sA^p$1;5$>RQUZs?&G3%ruHAX|OS#z*D<0LXqLQGh zF3MryF&Lh0fr!E__*gcFvogA8jl}Y+<2*yNK$-=cFXJ&pLHKp>{Q7reWUC!d0;6E=DgPLO=n!n2(|8mofGWFE- zxwe1_F}#IK7`Um$n^bcZAb%H8MZlNJzkcF8=yzkBBzp8*iy8xq^!n~>X-&u|kDnWU z6`=X)Sg3sz5UZ97UC6eQIEa9qk7j*L3aMFR=XVQC`L~E4mT;?srM*si&OY$T8P-`` z0`YP?1aG#a4y~FGWV~d^U;>sqXG#B72Y6I38C3vGOhvH#(qM~H>jVZ)y*t^;6t^0I z8-E+-+a)yVPdYZ`=Yl8sWsK{iDrfm0jxa0~UVsLay`C8oV>n{Op_u3Bn&C0WkNf%Z zHrFASm!*W-kq=xN9M`5{mp+;9719~jnLN4Km{rs<;OqEXx%v4U~mBlsw6`W`fIl4yPkKy}etc(WuNJi-b9&Wn!f{b>#JtuL3 zSjpS!b)p0!xzl@&9W?29wcsOf>rkn*w9o%mbLYo;?7_@&6B2JL_jwK9rJyWkQzkNy ztS@))vPAL_1>7?^0=#X(nZVddAXX_p*ZjK^6_mx?G|?zQ6@9o3la0?5sxw1Br)?P`DT<&7kiLhXp<28 z+?@=Oc;?Sk%ut4=qvC7@)zc<*C0Xw+5{MLpdgOAyKkA@=4N?n8??%mwj0pWL)|xEtWYY&X?{f8qcq8m+L`%kT@YwgdNTI%!IK7!^0^YRO0&HRUH2>Sc* zeYsZTsOevE^dj5IDVIWwCvTBis6iGly_v2-_TdlKR-w3oYh}aTAqk7$_uOh&eYA^T z?#yz7(@k;Sv*Chq<1^B2U%NT&+s3*n$86a7N>SaPt|#M3>E_*JvBgG(d4QksMX0|E zNp^S654gqADj!V=>9ca)m;}dM?WbZ!+b;w3zVb&xQVQDbMewt-Vo%~qld^caHbDxK zFZz=A!rAU|o!`rL>l77q8E zvC4vzPxx5!n@w1-?h{&2>QH&}=lAveKEzQ{K+sv)DFf>-+uzc`sPmjJLeI#u3hU^B zYdvcPtKJ}G7CDP2bF(v3J?2PQ; zvpD^|;(8LSZRgCO>gJFjZv5S8VrYy8@A}4nbsBbDWPeTfdr8d|7`WtwXOnv?dHhNN zWs2W+q{9YIb``+}pOS|YqT+Jl-PL_M<(=>}>zJjqJE<#>0x-#N^^Rd~L3seRzfj2O z0lV(VU`>3P#hQJT?rUOmy!LreDQA+FAr8HmK&_vtGtDq2R<&Y^|D(e3tTF3{6Pu5l zJrK<8M(#mY32E15B`+42{0ANB&uq7yzQ7D8B|)%xPwGAeb1n{IQ;h|r>@?n_f1`6^ z1uRgO;s<|3#^{Bv=;W5Vu!`%;Dw}z*YGMHFO0z2q4byWcUrLAaz7#icUAh|sX?J-x z6Z|1mU{y6dl0zz1(ceWlg>Ns#m2#h#Y}#Cs6E`JDU+$H~c<;--8urg!f`LtX9pRUY zqq7+*xY}CfIA$|?c&C7eD0_t>e_>xgZ;6179xL%qX5f~$=#A%&2c%W3Y&A?Pb55`H zVKQRFVU?UEFZ=Wp)z(X^TQx$S=p*5*p{|9UQz+s+OcPZ6oCj}K?PIG7{H~>r-?_v_ zAr`~E&Ru2eLKi!0oD^n&6zvwkh)H+Qm!e$Y)9ROIbv|a!I%2csZvk3t^sy%dzw#v{Nu)=cq!q75#^Tk0NRR0$_MucCfd~-E*tslpx$#$BlEnYWrz=|r!prAI|W*)H1nq< zUtY=F;)PQRJ63~_Z%(io+QVKNtTmNayAz+Y=Mo|u9()JbAXY)qkll>sZfI*%g2$e8 zOP?y5Bfi}?tdAc2bk3c6w*hg4*J9EBTxsm<7vW~Vu~UC!AKkD_kLI4Ffh?M0r-}<# zk^LOL*>4?;q<_uq36{7|D9`uo=rT`q6Q+Lt{8Vf9zSVV*XeFe*k@KX|r;nl~8|o;q zzhCibJ>|QXuYG&%ky+!lr5R;FZl!&mo1+?20ahvO_xe&x`_5X;&}M5>yr=|`txr9E z0#2%}p?at5^21X}O;(fC`e%&kWoFyJ7CX;s>hmH{zVv|$_3g(XqO!mAg~h6GR^)hW z(1mBhBSuZKqkh}?Hz-~*|K&HK`++zqd1|2jHOFeYy6Vt}EY+Vxj`tLEUd~- ztIZlu*|lgNae-M=plGQvXIc4nEtT@PUpNXdEuR}Ncc(NRJP31OYr=DdbfOaKsoKXHHU{Nl{HI*dCaS6umxF0va&)xQx6#EUk zCgb4m&a8X^%BneeD5Xl7V$t@Q?xh;n2Q0k^I6LL!B#vjvF$V=pNMLL=y5hp(eF1RH z0uyWLy3k{OMl4U^jW}tOl3y${&`MnmhhDEFL^O`uwF(q@+k@6X#nc*LztTaCuyY*9 zJDFpjD3WF8>lJCN`)deHydDv~H*W-m>s1NleDy@j0Rro*=J5zUrM9p8%`scf*xii` z<&i?ArBW?-$2Zp4^r9zIlqd5y>ExtyBBtGVD?{+}O!Pk~zP|Q`?^x?rmJwy?;-c@1 zEg8uj$6(&=G5;HTUmn)fwYQ5(<z6af*?LO^7Q3IPHH z9D2YO1(|2!z#uY2rXVCFaHz~7%z*?53M4=XXhH%>Ah~N}zwe%NpZnbV-RIsvZ~vk# z>}0RK_FBL7{@wvo=Fuj$G3av`BY$f#5!%s4m%ZXYvv4em{2FpkB>^_OCCaGpzn|*! zQ)^3}fV+Hq7={;szf1LIL2S7%kf?>hrsEhXrCc}dXskuJlfG&SOjQ!B*COdP{>tEq zBOzp9?2MdKII8`5XyP?=J&L9urc%a3(>q&mmx^|V)G9aPjG*Y~Jhb!GJ&@6#@F(B&Zv6o8aH|#WDNk`fuSrz zV_QIS3eW_f^neFzQb>CujTzq6;^1XXue?2I6bb@$x_uQ*%gnQ;MIoq1>?CZyw@5MX z1i-1HxnLwtc`qswyJhd+1-$29oB*91Y)pRRInjOV2327va&2fAQnsWA^_mx6c5{Jf zAd(a7idxFLiKx}KUMx0_PuP~5NOjnLD$>b5hv|MWw0 zl#zV~F2GnBpdyN`grjJ99Me}4D-1T=H!!`vWPF;qRzx)RszuUVne5jrbI5}tj2c+> z^rQLA!pkpEt#jIqEr_f9Kt%PV3&$8GpxXGLN#JB+9Fzm|oW)jg)q+oE-eG^PQ6zk; z+v3j+L|TE^H$EnBX~AI36h6xDHAxHGJ@%!oabE)owz~ZEc_+Lm$gk}Sp^g)QUs=_OoS1O-{qhy+b*=YB@+Z)W2OJ_oP)>ozMZMVO zsWpk1=&0nRxIfo2 z=ATWHY)PEKpY|4{G?m*`!>}ojiv-2vgbOKa(OZ0ZqCY5T?ihMuVw<6_Ew4g5_4^&&cPqogm zANQvpi(I<L|A7lQOwUFBGRzyY;$1<$$Qo32Bp)#(7F#iRqHu5#~>wjyM4XOygeJgZ30 zIopV2BKa&*KfkoEFU4w;F1AXqXFo@{5h_jy)-|my&AV!;m7KmeENyElzDq_5F|8T1 z^yy8!L}Kp6k#39m&-rL~hhV>R83A95ND)dCKy$|#ApRUM%L6&?3FCIp@f88_i!DT5 z_KSF7mL5y(ozFu7>*~%nS<`s7yrp3-yqAOb_9G|_tfbxG`$%Y#1-l(g>5l#15k>2v zxw&7I^*p;7T&vywK{bV+LgkmUF7?(UbvnPPO#f?Abjf$~c@N}c zZ*X$%MZ)%m0mNw|4wyh zv@_;23KQ49HjxS_Hns`BbvFzCK4G&@%K4I6%Mj~1|C#w%i5C;r^9*qXy;cv8-*poh z0x!}S4b^bVzKdpalMigZl)h(w-1*F_ji)OcTDHDr22M@gT+S?peJ*w?%p!1~96TkP zzS5?mh_(!5ZC+jcie47WzIkuovhzTEuD)RZ25CTVP@FnqwJ{&0ett0m!;#ycKF>?3 z&r(5z$R8U%Q|$1N8oyRyB`JO$(LKASBBBkeCDu0*-yjhyE(sBZ(3OZm*F_!(oj_X4 zVq!gVP?;NY^NFfjCc|BnM@L*2*QIhl<+WFO&((jYj%$=po9p-8 zatxDQEY&ZEp!AHQRrY84gX5WDe>U2<|5bCF!v6NmpwxUohxz!!y>aQk4yqq+sQ}dy zyX3#tW8B`l|BuzW|MkD>D?*9*N(KF^Uqb|eex;Ue)daJE+W|3LgNn9xk&ARg^72E4 zjerN=qi2i;9b$+TcBA<_Xut2+-tVQ}#&s3}E`?+?JkISb=yrn=0KMPYyv79d)$&!g z230`gD34-9My+tKsa#zSOpf0apw{UW$W|&H;$^${KiDNx8U`+uKr;EGAbiM8A zVjv_dth{XE$4t^A(q|H71#rBUW{2BTl!CoEY1yYiFC7E#2P7$m2RV8ye4Fzr)$#Ku z@rir?l+`#LfM14@eZmfs-^Qj@Yyb(ft=yCMlbXk5U|6wj02wB02z4J8r)z4buDKd0HB_wVfmkd#r!=}8K@tL zX#=L_=DB}JvsI=f<5@DRNr}o9)40YOLafqo%WEVL#i0<&5!Z`EoHzm~gQ`MnMGJb?F!e1>un?0gI8@6Kf#^9ofyaBy_`1w!bKleKaE7KFx@2)so3g)`G&eL0$!nRbb#wXXi9x#d$_nvmP z`uzLNu&=ileRq({E|squMcj?}BtEVp=<=hU1fySE`x+{1OV z$s&u+(;5YLHdP->x@K|Q6ha-bi4_B=o-1G=HnUSsM@~v^g{=ZXi+sG`0fQph{IGZ} z1rrIlO5?t`T_W&7QeM-1Y~vY7Ot+UDcEPf5K$)dqtV7@EFgAiprBZSP;TVEGr_YR1 zmTwci>MF8`$@5JyD>V@m`{t)Ro0kfDpfQTwI2RVbQxMO;!z~dh7nVXZ=+H{xYHUCl zRA}xj%`FS`2DjwIjL4Qts$Y4Lnibd!^x;9Kjdk@j_=PEBWFLEM7Fh|2g2-lzISgXd zs9|13{IW;7{)*w&l!8?W@&iyyNR~&*Ioq-X?c?WLz*=wyDm?R?})S}XAlx+ajTu+bZalBOSzd;sDw87T~wWII*fMFX3&*_OP=ttfM_ zIBLnP0)@tMds{a@gYpMBAl)*hoMr-YJ=j1m$=nKXH1kqAK|alpKi3gnsYL1o2kp0J zY8Ud3h5gYNF!6(|a!~{|Ffsm@dRC&%{=Ws6bq|<(6y2CJS98z(;IhOElI0K<9pQPv zHy{)E2Auq|*Ou=}lU*t;n&&wP9*pdJOo|~w%Eoj+@?yR@t%2Ec5+E2}T=wH1kg%<4`iWbO-6usaolzjr!&TcQ z5fMu4k~v``D7|Q@I$mrkx-lp?+gr=3`MyoGC;Gisf9P~v8?DhVnoExh;|kH6-3+*R zoF44WZ3m38hz>=PtVY53B>x|@JVb;*AlBE++8`9CzhQcXZ z`AYoZn`N)9N~&4DhYo?lYD#SfS$enqsitiYsIS&I(*`XM3=3?>%8BLp3q$0(+eh`= zx|%IDeRW_Yjx?(G(y?-TpCry|?UIqP8tj^%H>&g7HMUD)Vd$WKUHY+wY`v|R~V*rgHc2|_jTDdI~OQ~JDol$#G#+od@%nhmH5s=>VZknyxLfIeeLTfB})&9*b|d>E_i1tE6Y6KsUrQreXs31C^TwWfdh8baXtzS-&d^7K9+Ux ztGsNFvXmn}b#Y}Mw!JI%PFeNlxn*hlfNr3L8`xvUj`>!Rmjqr3{flPGF+&>fa+F0S z8WEhL1~ERwmi{7!n&qV@lta~C6niDeH4croqb{2r>|IH+nX-P7f9hgsS49l0xwTM`ardf#6+M;( zZmHg$KKqI+?ruEExu(-@1DmLXU;hr(lSWCew)f6&5LY6=y=7&#Uf&tczFQxp*dFWs zEk?=q!X5qd9nw;>yHqw>{k9_XrYp1Olj6QJq&e%&@FNcHVO<^zlFWo^+G_eJ$?3q} zWQH%MUiZw1&nD0c$}Ai%(j%U@^1=G3OLeQG-h1qtQs!}QuisX49G5?T$$E*eege};BLc!*slBLz`({@) z;(qkPSzdX3?vhkc&$Wd8wn^)cT& z%of+J!$Gp*%yT!*ywKA#IOWDn8_gi$qh%A2@ zkwad{b&nJt?cbW1O+342_0kuuIH@TPrBR}<;ONc!%Mro_+xWX2--gTCOly_qX2HN2 zmApR8%b<(hMc)5ZdzSlr9=Mzs=cZI6_MNCs+->)*nRU~5b=YAIjK>hG zS*foIc0?d&TX#XpuW;1gW=PkCf*93YLb)`;M%tvrKeIo~2 z|3Mn!7GjT)|ffGwW z;gUC96TbEIVY96mKmCDi(Em-2LT_c=1)LXSzG+$PaTTYHTEg`~4^fJh)rt~XoP^4G zxv?|V5tK`&i#B*W_NJSnf$9!^b>L-r9u~yMmnty@z^)YG`s~dT(tY^x@?E9e!%H?X0sovN(9_(SBb!G1e z!VB@eu>EZvK{?xCtZhLHgTH4Qd21oN+M5C0U`%1OdtO)K<-p-%qB3B^MfA#Qj;l!) zf*WluolA5!oJMy1LLL{!Reon=|0zxZd<{qftYnsJKztK@BGZAb@^SK~8GVbFNz&21 zSkV(RANvXa`OI>q8Lz}`v&_gjz5yL}%ZuV#)@%+NNApLf`?V+hC*r2^iQ*koSm>qE zg=cIUX3j<|h<`uAv=Lki8kA8D9R7i)MeF{B5}B(q4-SgSPKvMM3isQVNsky?OruOc z!4Bt2uiWGUfd8?*UQ4)XqqoZDj7(XW^Hmue(fE=IzcRkB-l$>{jKQdBLt<+auzM{H zv+dDfH}Ine_vR?bMv=d74#-6aFW^R8lO8KbNf}?U`|12I5BR#)>(1Ihz`3MfQDozd zc7;gTQV}wcArYD7v2US|mH++9aRIgw{X95J$B==-DIil}`F~q!>~totO80&JOwW_z zy7Y_ugY*y*HHF>EseBPef( z7Ean1%jKWtgDFtROh<3dL8P6KfA2MnX*|I03+`1R`Uo<8ARYH_3{t#^L_#vR*8Bvq zGWm~2y~pdAzaI6!-hoz0!$^ibpJsM!xUZTDUBDkP5FwbjN(JYBF7xwlHR;aj9Jj*$`XH~6y$G^FFA z-aML6ByQgNJ_2Su3b`goMLnF^+C3RB*&>0Sf@GD15ien!lvSc;9x!VBow+<2m7r?z z(0X2^gwdEU`IJR0aL6SJlh%#nIjyfq;$1T6`p_chXu3+!-wJ_`F^~c~XQ>FUcgp7{ zzYl$*1%1RFRV#PgOW?s3uMYQEwdp)Ep(6A^rEa(OlLkb?KeL}=7@vHQp70XZc z47zx6J>PkXdxP7#Zb6M*Pu-QiMm87cFfbOg?-&72CglQ8z1WLkOZxO6F^MQJCIP8p zrd`U`8s3ssS(nGOS``3YrHnFquamNf>S*N-34lGj<;QluwTqs{ECj^!1M&^Y=5^Lg4{$a;n?xNRAum0t0V7H0AJf%v=yTg7n^c~w%I!S zmr$haSU7Z>Qcz>rZH+|~v!L=EX#0U4TrO-|cai>F0-ydh)=69~zaj3i{e zSWMGLc_Picpom*_&{zfrqUD6F=xw&R_ed&rjPP4dYK7*YQ?>l@0)~*(|!h9~c#%LBpcYPwYMc z01_O@R-K~h8qXvdWk8|BFhrXmx5j-_Likn@Zw2C67dN~G&`5=Sy1^ZpP06p!)&vT) zxmYMxB9%F)b>awA1oJj&>v?qp!nG^I%?f9%){Y}w*n+o`KHR zzv#Qv$kHnyY;S`BiB{xgR?@!&V!tBSXrN;`@n?YDl)-N#Q;W?{?WEZd;F}853)(is zxMaNeyMzso$ARs^SDowwp@SNh;;4@`F?q!3xpUl^S2FpDh7SF+Kysx|>UEl?;pa!v z^HgG1ekU33wH$%cy1u-&fzC14xU*K`SxAF13h9A!Hy?*2^ml7q>ox>p*B-aMc}1d0 zrV}<_UdaFg5PMDT%(Md0v_WxbaC4$nYi-X74Mk2q&oH?E`|Giv-=~*%9pWkes38*~ z9w@aH+d*<+@~#vk3D-^eR-9zoHVuo=a2P_$tXkH}Nt(_U)yPlcRm;Gs z*t2g#6G-5*?vDZ}dYmnnU*`d^yn(&bWs#d(>vSumgR?}g9Arm#8l@aLJ08pWu!gr9 zSVqU4C4%I6dCqKdU=iw{`lQdD%Yl23L~)u~V(htXZDs3i>D32QPM_lHfFkdxl{&z# z2oVPHfbMJr1ycho4}ZfT)+u4MJ7)v1MGh4z5I5eZf4Fn;oaK4pwu=Qg?4lhAq1iW3 zF;fuDiv*QAc0^qw*No^p4*5{HKbWz2OOu_3X93CV)@X}E zgc6pwF($ijE!#wpS}Al}BgL7m`wRrOr{j5U@uQp5t6S5mQRr6iLGdEEB!o)?xJ&vP z_=MK8;AU`zGh6=9>h1ziEW1_FHlsu(7buNl@*!Rc2`v$zRpKmKR=BfucR$Uvf!~3! zY>v6r37WTY%Stcnf4CI<+|D(CX!7S~NGjtraJr5Bgvvxf&!GwspdhhdzS?#V;4Ns^ z-Dup8rvn*43b+XPMi;(FSEX9J{);~(dI4OF1VTs8qOdJjvS@H3%AkfD%yIvI_-?bN z$%-CsxpvX8qhI_IGj(U{VO16jBYID|L)v+t4LHF)5kKBPV_X<&9+`}njoD)P&nN9@Uo;E)ZKCA^ER90}WXOi!DM@wZ)_c*e#v2YP` zk}Mr>IYOZw42@e!AkvyuBx0jH44ImqB^(p`NZPf%mJisz~io9fn|F8xsIqPj8LD$VmHxKl#$@wO!)0aJhoo=(OUiB!$+>c9$ur8~ zi!naLaoKHL$wN*y?ao%Yz$`%a;vWUwE!7 z8HwbT(<@_-bL*&>;KmbV8Z9^lb8RHhAd}}`qSq5a<%MLIb=5|jm2AF$IU81FgH-T> zdDg>wOu1CUKw%Nn#v8+}7|ssCHn4IH5P-n^f=Xk%jCFB@4M@RHJB_WQf9UVQWCRY@ zOswZ+^Ac9*x0n;I7)w}4HV)7_gOd2D?h1gd2?z%+o~mGppD(8%Vt4tzu6LWd%0|)G z&;D^Nkmj!>!|gF%ZRlIy!d>x07W$N8YeUh#m4!YNV(somEk_Cmi3}iA`yi*+@vn#d zPO^9wDMDbH)uN8wBP)lg(AYT1aqNls7H_#e?8JsMM;>h5T5XTEYMgH{Wj|}iaHiF- z?x8B6Qc~HbjKpPmtP@CMXemH{eiCqG?@FVO-h(ZmY>sO7+p2vkooWBclDiYfLTrBS zG>!*KRue!3BYcoL;srfNT;ug^vDhasC={aeUSIwb{6sKu0+5hHm(xqd(YMCPly*SI zzSo{V&kc>@UYnlukAbzkrb}lX9*(`{%~V+=jVN>L*6!TS&j!@oBTqg!Soev6a-wg!0}z_ro4uQ zaczseEMKiF$=XC<2&qn1nBNZ=?P4VSlW2L}veQ2m&j9AsEA(R`t%I2j@Wbm<>mC7v zyqmb zU7*miU}KB74D$5wW@eXHRnn$4yy(}v5T`{^g~B7>u%kzKMWgEaK^Bn5Z`PGisop)v z3<1HoEA?=XP^$)+o_e^uT3?+8w+u_qIV_2|q`FwUnP#t>tBb6i9Pu|pz=_fqIlJHC z1G|LXWi3;DuIrkn?d9nwwp4A_{O*<@B!!ZmSdU0GRzXbsdQ}`^y)@QoAi@D`42PzX zMUWaHUk!c{I0e@-9q)WmtaZM`vS^`R^CZd#rU!5G@V#Z7+vH>SEd9+IkTB(1%oxg2 z$J8jG!DcZthvIwL(q?*+`81AtV#lNE8-La^KWg`0=Q2DPlX-4qgb=)IXV^o1;96bo zd@3NdTJ$KxqO*M))K0s3g}CqRNf#5s!Nr)#j%TyClsYG0a&KIiQ1D=^F1_>(UO?P= z4C7A!LCm*aO%h$-k5k1+{~A`w%M=Efp;pK=$^(S7Uzk%p&HViHeX4MIXP4;a0H62I zf@V%KX9iH?*gisTz=W@=5wZ^>iu;YHd46N}lTQ%tZelTFQ}6kDYx!WR)ackr)v*@e+d#{U%ea4jT6?7DT~kTG zr7<|s?s^$v{=^bCne(XHtCz-BK+&4*r%z=V->aiG7}bZO?S?$a7XQ>`_VunRm*bESDWu@%0egv`pAs&+U%+LBhK^9S9i{q=*|P?_sc8Ohwklp z;@aN^<9~P~@=qmnUIIm+IX z8b>|l8`8r)8mF}IEl*Ey>vj&HxXHko*p6E7X*T0sRE9_7|Aeh^kg{l74c21%>Ck#O z)%Td~zyAOWT%C1<9-RB_Mtj^I9OyhjrM9-3F=}4Dwy0Jcqtje7Sr2?Kk@wQQvRhWX z-eu0C-ICc^%5Iu2p`UsWH*pf)q--nSreLF6_}6h2Sh{-%XVcwnns(Q_Wc@ZDj?E0I ze%1MFNFib=EEpSeB&)NzamoO2_kR8<`qTRe329sxMLpZG8Tk^k_Lgk%BOg&Zsa3!0 z9P3%@=u7ze6CQPvX+Hj@R!W_*MR4#?6P`S-nl^8tnAJqk!2fG z`qryr9dZ)K8Vf6YIp=Estp#%AN|tm!ODcxJ{OY-gp#)s1)9%$j>h|L7aF6Z`$OGMo zT5q@9~NJ(LA$aGIF zhVx~p7%i2EDFwJNFK3fWDmr58SyjLaOpJXuM(Ce!f4xlR?C`e;cMKMO|8D;@?N4`c zsPdlp^yI6EQ-n1+%p)RVzNot&fcX4p@Q1ls^GGILzk@i2KL?={zRN2+M%rcGtWWDY7jU2@r zdti@UNyayk@|Qgxq!C27l@J$A4)X4;m>NOmPPzNs7Y!|ubYJ|6Qp@jK*y@>m|yWH&Dr28T#yl*5uz| zGlq`55dQ{~WjnKG*ZVflw-5Q5eh*Cu3EgFV-mlN(U_F$eQ z68Z)VJvBpe_!n_&i-p8L*y5wFs>n6ZK7`h4iwxN#>v7OzG6s|B+2nW3r$hLom%vD( z3`fOzFv8A4gy>0)2jL-o1u?3TvhUn2dhr)+BP^Ra|I`LO9auNS*X#tYOROsl;qI3I zg|_im!biMQFV<6~g3)q|E~oD&sqdxi{jq)z=u?kqT72!2JaoKzwMNlHgH;+3h0{fG zyWN&(S5ihaTK<-VP;o(3Bdz(X&$iC|i3j=V%4AyAkw<}@t})5XccJtEKXln1=Dfw+ zM#`~xGqyl#WuYFP0t4$0iEZ(>w$_&n_Q zY7=z@@t$cTD`V#Mh7R1SPW+wBvWl;(9MOQE85PI9KZH-dgrp=Nshugt7J7logx981Fkos*{^=>m4aCwws{MFT@1@ z9DRZ57)QYh87|&>E=#Eh)=^e-O8J}*Gd&hZ#jc8#YKaMXln$0&pO4UG`zTpo9tLbRi52a) z)T|!*BVT~$Vo*-7+cJUKuF({-u(c$k0!4Bb@mhB4hV88uwUC-ecwP1VzN$PAevV45 z)wr_kbk@muQ-+dh`^SpDxMdWXO4v6tOPqRT% zKsj78g0qOVFQTwrGeSl#Hrwo2xWbIc*L7KW0VMFKi4t?N2SISIec?etfIb0YG-C^f4&2|?3`e;HrA&UH^b)|u+NvM|4@j(h4G zXChi(MfZpNY&nx6qY`_EbJqD`iR^8Sqg1iFy=qk6{lIAR#>95Jw?@8&l%;URuYu3% zCmD_Q!unlI#oZ+*Xs@#o-8oFzPa3zTj8_k(8NuwF1w%mMYtwT@i>J%>*qrwf&-;0p zr8KiI76Rnv?(e{rvl?|KXv(8EX|C{|hLn%igLQs%NgR9j<{)&3)u!PMc4*#su9N9v zaknpy`xOhE;IZRN#?6c6*;Zfo#(ouBw*Qx-Lt)ix)TO1*yKTRrn2!Nh_ju!pkR#mQ z!!DoV%1-VO*zAxTN;^3IJpj>Q<42OCoBmGPj;vKzd+?`XqxFgS(=rDg|e9gTX;1_jY$8&3sD9!QYc*3Djimb2HYKew)Y1X&5TAo_K;nPiiz zVVuAY)R;VxRU6tUZG}B4RSQ70#pDEREiv+-h;_kpLYW$eFss_r_zG`U^)w4nPYJ^< zxvexoY_Y|(<1nPRb90wW@Vs~A*mr6mVCp0?E99pYfxUN~>S`@1I?pxRvL`}eexiY0 zy{?HGYVdIe4$#4B;D8eWe5p=v6O4K`|DoW0cIhw`zxWQYEccRCo^nb*-l{q*1+p?E z`9@MkNOEQq>>W`=gdt_N0b6MG$ilWoFkD) z%wYd&9WdiP{eHj7Mc_}XV_R%zavL?Q_RNQJEF_QrZL5qFHVve3r5^qaL_wkVtZ^4p z@*IJ*D@omWv8kK98SxkXMY_H27|gnbI9;E))lxU^V@vJf5AZ8!euqOpdjD$17u3>@ zuv$h!TPSC*v9g_XAfo8nM0yKwxV4=83^P+3C=#tp570OdYy{_yuCLogzCYmRP^17v zbe$>gW5!;9QTUn;B0Yl-0C@!?;c#e`7?tIdk)I~*j^I~cDraS%6F3^51 zap}b;8!rN%QR~dj70@i}o;}%f%1CxdFHIz}6qd5?K?bQww+p zhJlyOq#U!xg5l@kU1~WSez1gjDY~y%2BI|T&>W@*b>l@r@2!WhB|6PLRu~d=bY)?P zaR%{%`D~TX!pacXUjPb@O%th81(|HJLGji_lO9R|jpy-8c5U2$So$EQ>!#o8#5}=r zeMTbmD;$MmFIt{POo%d$AtOpy*NT{24)`B-XjonH11wUI>5D-Xz&tc51KgMiPWF5Q z0ogE&D9lc+M>JpQbg!?%BIiTkR*Op^HZd`53XYS4L_D?;L)L@OAbL6c2!+gwN<&Oxy8jrx-X^WOztI~LjH~jZyHfF0EhJ8C zrf@xEwweWFun?@+Ag@J6CNT8@+NM~8hD-#r!EUf06C9s4N6Rb?65#QMJ`{}kstaQq zDfQIYZLoOw3; zrjTv`xC9}yxiRPxJ&*NYciY^H10!5-u4=FhG)GG^rzqvi?As7NVZRo52-I=6%>&5RF+uFV2ALs-6HTs6U%Y zO;`5<4Hc#^fZiOQX#%*woapSTvp>5{H6~G!gEg+<>{%CQ3q-TunWW^DV#Pt5~Ec^lVt+yhmU$d-zUXI#a*t(INuJ%SXJxWSST>xcF!tgNfV)C#`1iNK=PvgWy=@ z6Cv!wA33{UuCyt_j*x78mzn;?#_te>TsZx26e{oWn$XUK3aS~kkiod&ahP`u|4hZy zUuVXlVGWCsKZ?8c-#SRWf{S2>0dO_s+88@?I%q2=Q_`F==|b| zM8?Vm;w*VeX+Ar-$m2yf+^1U`X-5w#p;_9J0sKLB9a0q6g{AHbe!XjU!pUsICE>tp zo@N;BstU0J%Q~61YKk!~?;T)qP9i+lKbzU3s3~rYY_Mg*GB&2yY1a=s5E&3QPQ*zidz(;G$!}x>Ce>;M4=soe+UC3cbEKg^`n4 zCO;cD!5c;6y22wWy+!o8wQju!0{pRL*OW(ytav3PZ)&|aSnEOizB^sWUv}=9=!9+5 zucoeUw~V)%PlSl{k^gs=V-~_N&xrGXcD-eYb2It&DBUt4X0l}9;D{*65Et$=6#X$~6qeWg> zsIc!!0B)A`Sj%@?Wh zy7SYA9tEYkQsK9}_FZ>qx;PLq=w9u4_eq3D1RYz2yB<=PfXrF%Xhg+U;+|M@>{mxK z)U1ElVOz z8adOin2h?jfvf77lY z<`o?NSbg*w(t41fSxC`(gSX3BZ=hdE;OE!z-3IIh!&(&~U>Uu*wS;|azDg@nn|i4n zGVgc^$IjA>9Mp~M$umA!;=rvOinC^=dHZR)Mbp7^-y1X08RZgQ3Ds7k_jUc3-^ z1u9m1ID!kNHSFT26P-Vq=r&V}$)B70Iq)Aa5iKB~7Mt1Xv{Qx`*XLWLC)D}<*ul}8 zW^y_%bgrtPnj1Z=>x^b`-ms_2uA?&V?OiOf*j_vld9D&z?`4kX+PeRs{y-%0$-K9( zSA1F4nYlx>(2_Ec-FtiWlQb2#QZ-zPm=4U2pf$o&=GrqhLvkBdd$0!Dj-Gr}^5WVX zJy4QSy~}O4NWavHZvQ2PfvW z1h9)B)N@{!I`8DIXoXDy^D4Jl^>vQ1IXAiR*Wu1vYg3KAV5O}30m*a>^=5@Ut|3ub0WNh7NNRm3v_D7jMpbpIuheX8EU zj?OfSb$#(xm8G+Vz9k>=y)*x5gu9*g(U~)^ej2_vEUYmiOGHAO!x z7Ercm2#ndmMa?29iIc=Erheqn=)WYHzH%W@ug84{GT@RAt|0QeS6>w?h@2wpM|Mda z(rb&sI!0st-^`O72-v**8KKr&z}ZWGM=8{4AFedTiVq#p;Q{jl`%gt7>H6uwbqAJr zMpq4(b*ioaVupLB{N@|MMTRA|SJA5aBYqHo?E37)spY zA1{SuOu{8j8eAPZWZq{VjUp$9iv>*QojefFVIMZ;5uj8w4Qz^>T!JwfIxtASCFKql zU9%zJMl=GstcFwrJ5ykr4M{(&0w)Y0T4s0s6Oi2!W4e7BeR~Atp%%M1nZUmM`<*pl z6kA309iaGr42T;$%VFy?nDhG=5x}OONQl&1_Yh%Ri3p#HmDX1ns1wi6neWZofEu_{RmP;i_Fz8 zdCN@D(js>*0Kx#}?}E`)mBl z(w}F0v@iwcd?k4(PC@EMFz6B|N%su*TD14nC*sRtUAfUYxpFUDWEdibq5a|m$o>dS zOvrpxx|@5vo?8H9SwP}GVs$7-aX&B*J!t zj?}5&fMF(tA|!95PH>J_Bc20gc{uN(9=HbZ6{(Du!on>Tua;HC9(p#tZqtDy*UnuI zvRY*cSr{~kF6p@{nF%RxUo1mgBDDjH`KKX|aGdpn5c(=cu7-8An_@u$7 z_pMdnt6~rSqwP!ISf~CQZQo=;kAC{XDT3A|Fd(ff^$ZHu4({{!$j`u~IQe>({LWm@CvO!zi+-rsbaUwfw*%Ahbco(!~FQ*mU@T!`Fy zFF9RED_r|8VSxV?obdm_@7&+hyzwz9-)G|=J~@`V7QV!H-uGgb#S6=}o!MiC!aEcL z99&vsC7*F|Zv<=bO{R06cLal5s(Itg7ssFFYrqrU3K1n_)5UCt&t_8mvHRp7Wrv77 zHYQ|x%~*mvUMiu(#h*{VAG=`EFItxf0j_!Y%SIVB2}z{8fsl2hqx*O`@KXX+Jc}k? zEKvy}Y?fH%Thg>GHdBCZ8hU4?Ec{*0UW-O=Dgwhm=p&;h;{`tA?DV^<5*`S!0R9zm<9y?Iu5rqt|2FCW z?)6{X`#E;0znJd;K22Tu(%DG|YCru@|NmsZ38*qJ(M+D+@Pj+<%bI7ezyG;fax%&D z|Kt3Mn<*W0>%V+kt$uovKhyj9KVH0-k<+$+^`M&R-~O-C<#Khlm;3j;TQ7U@^MCuF z{dILl|NsBW|Nr&L*H5_(c0V^8Ll$~&$i8a(6u8P-+zhmd?aNeWp%eM+H-sP51DBGU z*IqLLR$GamL2=oB{EYss^U99@g?8)*EyVY}>G|&8tG&Rh#%?*k+4Fq=znh-#{{r`# z$IsTwoE86Petovk9RCNldBBroUVv`NUh@3EQthYobjUd=3D;LupHg4&PygT1{V!zR zEt3;cKlnXr-v8D0U)L`?pXUAG-}}FN_g{~xd^(ls`|cy=`~JOsc}H>S_kZi_pPdGV zU(MHZ_VaD_J^Aw7Pp-QPc#-RUamiWskJZ5ITN(Pj9sW+QdpTY0;18pJwUV><$yuq} zzVDutH}T6W{|EbQb@;81Pv8F~ee&_(_)l{{^z$#K z`t@aekcgjQ_4P`yI&cTu*2;_BaVB%Er|32Qod2V9{tUgDy0-6x5BT%fF#ehQQrzxO zy-(XxO?w&ZkgE6T8gu`2ybaK=`pEC|JS|$a9(ZsVxL}a`e%b!-<;e%C+Rk+f9azu& zS<+42`N0*Vd$m7W3lX=GXqtR)2hPd+LtauJ&BfbvEDj z)c;=(JdG#lllI}yR~Uahna$6ewYlwM

}BwbCXT-Adg${cKsY+J^yB}j4!Zl zm~GDX{^p*$a(m2k_&`~WfrbZ=^gs^YL9zmNBnkMiJODe>MjtWlvW>mvv4FO#oSbSjGSV literal 47509 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 diff --git a/aspnet-samples/images/1-4.new.hub.png b/aspnet-samples/images/1-4.new.hub.png index 42f24c708a7e53a5ff6f5ea5fd7548d2160273c9..0226c20c67c283e921815746bd25b5129a27d9c4 100644 GIT binary patch literal 42153 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 YnxDixJr-U%1gif$UHx3vIVCg!01dxT>;M1& literal 45870 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 EA0Km9Z2$lO diff --git a/samples/ChatRoom.NetCore21/ChatRoom/.gitignore b/samples/ChatRoom.NetCore21/ChatRoom/.gitignore deleted file mode 100644 index d8074abd..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoom/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -bin/ -obj/ -.vs/ -**.csproj.user diff --git a/samples/ChatRoom.NetCore21/ChatRoom/ChatRoom.NetCore21.csproj b/samples/ChatRoom.NetCore21/ChatRoom/ChatRoom.NetCore21.csproj deleted file mode 100644 index 727947d1..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoom/ChatRoom.NetCore21.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - netcoreapp2.1 - chatroom - Microsoft.Azure.SignalR.Samples.ChatRoom - - - - - - - - - - - diff --git a/samples/ChatRoom.NetCore21/ChatRoom/Dockerfile b/samples/ChatRoom.NetCore21/ChatRoom/Dockerfile deleted file mode 100644 index 76f95310..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoom/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) Microsoft. All rights reserved. -# Licensed under the MIT license. See LICENSE file in the project root for full license information. - -FROM microsoft/dotnet:2.1-sdk-stretch AS build-env -WORKDIR /app - -# copy csproj and restore as distinct layers -RUN mkdir ChatRoom && cd ChatRoom/ -COPY *.csproj ./ -RUN dotnet restore - -# copy everything else and build -COPY ./ ./ -RUN dotnet publish -c Release -o out - -# build runtime image -FROM microsoft/dotnet:2.1-aspnetcore-runtime -WORKDIR /app -COPY --from=build-env /app/out . -ENTRYPOINT ["dotnet", "ChatRoom.dll"] diff --git a/samples/ChatRoom.NetCore21/ChatRoom/Hub/ChatSampleHub.cs b/samples/ChatRoom.NetCore21/ChatRoom/Hub/ChatSampleHub.cs deleted file mode 100644 index 3c0e135d..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoom/Hub/ChatSampleHub.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using Microsoft.AspNetCore.SignalR; - -namespace Microsoft.Azure.SignalR.Samples.ChatRoom -{ - public class ChatSampleHub : Hub - { - public void BroadcastMessage(string name, string message) - { - Clients.All.SendAsync("broadcastMessage", name, message); - } - - public void Echo(string name, string message) - { - Clients.Client(Context.ConnectionId).SendAsync("echo", name, message + " (echo from server)"); - } - } -} diff --git a/samples/ChatRoom.NetCore21/ChatRoom/Program.cs b/samples/ChatRoom.NetCore21/ChatRoom/Program.cs deleted file mode 100644 index e24ef841..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoom/Program.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using Microsoft.AspNetCore; -using Microsoft.AspNetCore.Hosting; - -namespace Microsoft.Azure.SignalR.Samples.ChatRoom -{ - public class Program - { - public static void Main(string[] args) - { - CreateWebHostBuilder(args).Build().Run(); - } - - public static IWebHostBuilder CreateWebHostBuilder(string[] args) => - WebHost.CreateDefaultBuilder(args) - .UseStartup(); - } -} diff --git a/samples/ChatRoom.NetCore21/ChatRoom/Properties/launchSettings.json b/samples/ChatRoom.NetCore21/ChatRoom/Properties/launchSettings.json deleted file mode 100644 index eb290f37..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoom/Properties/launchSettings.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5000/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "ChatRoom": { - "commandName": "Project", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - }, - "applicationUrl": "http://localhost:5000/" - } - } -} \ No newline at end of file diff --git a/samples/ChatRoom.NetCore21/ChatRoom/README.md b/samples/ChatRoom.NetCore21/ChatRoom/README.md deleted file mode 100644 index 413f7958..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoom/README.md +++ /dev/null @@ -1,82 +0,0 @@ -# Build Your First Azure SignalR Service Application - -In [ChatRoomLocal sample](../ChatRoomLocal/README.md) you have learned how to use SignalR to build a chat room application. In that sample, the SignalR runtime (which manages the client connections and message routing) is running on your local machine. As the number of the clients increases, you'll eventually hit a limit on your machine and you'll need to scale up your machine to handle more clients. This is usually not an easy task. In this tutorial, you'll learn how to use Azure SignalR Service to offload the connection management part to the service so that you don't need to worry about the scaling problem. - -## Provision a SignalR Service - -First let's provision a SignalR service on Azure. -> If you don't have an Azure subscription, **[start now](https://azure.microsoft.com/en-us/free/)** to create a free account. - -1. Open Azure portal, click "Create a resource" and search "SignalR Service". - - ![signalr-4](../../../docs/images/signalr-4.png) - -2. Navigate to "SignalR Service" and click "Create". - - ![signalr-5](../../../docs/images/signalr-5.png) - -3. Fill in basic information including resource name, resource group and location. - - ![signalr-2](../../../docs/images/signalr-2.png) - - Resource name will also be used as the DNS name of your service endpoint. So you'll get a `.service.signalr.net` that your application can connect to. - - Select a pricing tier. There're two pricing tiers: - - * Free: which can handle 20 connections at the same time and can send and receive 20,000 messages in a day. - * Standard: which has 1000 concurrent connections and one million messages per day limit for *one unit*. You can scale up to 100 units for a single service instance and you'll be charged by the number of units you use. - -4. Click "Create", your SignalR service will be created in a few minutes. - - ![signalr-3](../../../docs/images/signalr-3.png) - -After your service is ready, go to the **Keys** page of your service instance and you'll get two connection strings that your application can use to connect to the service. - -## Update Chat Room to Use Azure SignalR Service - -Then, let's update the chat room sample to use the new service you just created. - -Let's look at the key changes: - -1. In [Startup.cs](Startup.cs), instead of calling `AddSignalR()` and `UseSignalR()`, you need to call `AddAzureSignalR()` and `UseAzureSignalR()` and pass in connection string to make the application connect to the service instead of hosting SignalR by itself. - - ```cs - public void ConfigureServices(IServiceCollection services) - { - ... - services.AddSignalR() - .AddAzureSignalR(); - } - - public void Configure(IApplicationBuilder app) - { - ... - app.UseAzureSignalR(routes => - { - routes.MapHub("/chat"); - }); - } - ``` - - You also need to reference the service SDK before using these APIs. This is how that would look in your ChatRoom.csproj file: - - ```xml - - ``` - -Other than these changes, everything else remains the same, you can still use the hub interface you're already familiar with to write business logic. - -> Under the hood, an endpoint `/chat/negotiate` is exposed for negotiation by Azure SignalR Service SDK. It will return a special negotiation response when clients try to connect and redirect clients to service endpoint from the connection string. Read more details about the redirection at SignalR's [Negotiation Protocol](https://github.com/aspnet/SignalR/blob/master/specs/TransportProtocols.md#post-endpoint-basenegotiate-request). - - -Now set the connection string in the [Secret Manager](https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-2.1&tabs=visual-studio#secret-manager) tool for .NET Core, and run this app. - -``` -dotnet restore -dotnet user-secrets set Azure:SignalR:ConnectionString "" -dotnet run -``` - -When you open http://localhost:5000, you can see the application runs as usual, just instead of hosting a SignalR runtime by itself, it connects to the SignalR service running on Azure. - -In this sample, you have learned how to use Azure SignalR Service to replace your self-hosted SignalR runtime. But you still need a web server to host your hub logic. In the next tutorial you'll learn how to use other Azure services to host your hub logic so you can get everything running in the cloud. diff --git a/samples/ChatRoom.NetCore21/ChatRoom/Startup.cs b/samples/ChatRoom.NetCore21/ChatRoom/Startup.cs deleted file mode 100644 index cf11e969..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoom/Startup.cs +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace Microsoft.Azure.SignalR.Samples.ChatRoom -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - public void ConfigureServices(IServiceCollection services) - { - services.AddMvc(); - services.AddSignalR() - .AddAzureSignalR(); - } - - public void Configure(IApplicationBuilder app) - { - app.UseMvc(); - app.UseFileServer(); - app.UseAzureSignalR(routes => - { - routes.MapHub("/chat"); - }); - } - } -} diff --git a/samples/ChatRoom.NetCore21/ChatRoom/appsettings.json b/samples/ChatRoom.NetCore21/ChatRoom/appsettings.json deleted file mode 100644 index 19b8c152..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoom/appsettings.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "Logging": { - "IncludeScopes": false, - "Debug": { - "LogLevel": { - "Default": "Debug" - } - }, - "Console": { - "LogLevel": { - "Default": "Debug" - } - } - } -} diff --git a/samples/ChatRoom.NetCore21/ChatRoom/wwwroot/css/site.css b/samples/ChatRoom.NetCore21/ChatRoom/wwwroot/css/site.css deleted file mode 100644 index 418828c5..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoom/wwwroot/css/site.css +++ /dev/null @@ -1,82 +0,0 @@ -/*html, body { - font-size: 16px; -} - -@media all and (max-device-width: 720px) { - html, body { - font-size: 20px; - } -}*/ - -html, body { - padding: 0; - height: 100%; -} - -#messages { - width: 100%; - border: 1px solid #ccc; - height: calc(100% - 120px); - float: none; - margin: 0px auto; - padding-left: 0px; - overflow-y: auto; -} - -textarea:focus { - outline: none !important; -} - -.system-message { - background: #87CEFA; -} - -.broadcast-message { - display: inline-block; - background: yellow; - margin: auto; - padding: 5px 10px; -} - -.message-entry { - overflow: auto; - margin: 8px 0; -} - -.message-avatar { - display: inline-block; - padding: 10px; - max-width: 8em; - word-wrap: break-word; -} - -.message-content { - display: inline-block; - background-color: #b2e281; - padding: 10px; - margin: 0 0.5em; - max-width: calc(60%); - word-wrap: break-word; -} - -.message-content.pull-left:before { - width: 0; - height: 0; - display: inline-block; - float: left; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - border-right: 10px solid #b2e281; - margin: 15px 0; -} - -.message-content.pull-right:after { - width: 0; - height: 0; - display: inline-block; - float: right; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - border-left: 10px solid #b2e281; - margin: 15px 0; -} diff --git a/samples/ChatRoom.NetCore21/ChatRoom/wwwroot/favicon.ico b/samples/ChatRoom.NetCore21/ChatRoom/wwwroot/favicon.ico deleted file mode 100644 index a3a799985c43bc7309d701b2cad129023377dc71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32038 zcmeHwX>eTEbtY7aYbrGrkNjgie?1jXjZ#zP%3n{}GObKv$BxI7Sl;Bwl5E+Qtj&t8 z*p|m4DO#HoJC-FyvNnp8NP<{Na0LMnTtO21(rBP}?EAiNjWgeO?z`{3ZoURUQlV2d zY1Pqv{m|X_oO91|?^z!6@@~od!@OH>&BN;>c@O+yUfy5w>LccTKJJ&`-k<%M^Zvi( z<$dKp=jCnNX5Qa+M_%6g|IEv~4R84q9|7E=|Ho(Wz3f-0wPjaRL;W*N^>q%^KGRr7 zxbjSORb_c&eO;oV_DZ7ua!sPH=0c+W;`vzJ#j~-x3uj};50#vqo*0w4!LUqs*UCh9 zvy2S%$#8$K4EOa&e@~aBS65_hc~Mpu=454VT2^KzWqEpBA=ME|O;1cn?8p<+{MKJf zbK#@1wzL44m$k(?85=Obido7=C|xWKe%66$z)NrzRwR>?hK?_bbwT z@Da?lBrBL}Zemo1@!9pYRau&!ld17h{f+UV0sY(R{ET$PBB|-=Nr@l-nY6w8HEAw* zRMIQU`24Jl_IFEPcS=_HdrOP5yf81z_?@M>83Vv65$QFr9nPg(wr`Ke8 zaY4ogdnMA*F7a4Q1_uXadTLUpCk;$ZPRRJ^sMOch;rlbvUGc1R9=u;dr9YANbQ<4Z z#P|Cp9BP$FXNPolgyr1XGt$^lFPF}rmBF5rj1Kh5%dforrP8W}_qJL$2qMBS-#%-|s#BPZBSETsn_EBYcr(W5dq( z@f%}C|iN7)YN`^)h7R?Cg}Do*w-!zwZb9=BMp%Wsh@nb22hA zA{`wa8Q;yz6S)zfo%sl08^GF`9csI9BlGnEy#0^Y3b);M+n<(}6jziM7nhe57a1rj zC@(2ISYBL^UtWChKzVWgf%4LW2Tqg_^7jMw`C$KvU+mcakFjV(BGAW9g%CzSyM;Df z143=mq0oxaK-H;o>F3~zJ<(3-j&?|QBn)WJfP#JR zRuA;`N?L83wQt78QIA$(Z)lGQY9r^SFal;LB^qi`8%8@y+mwcGsf~nv)bBy2S7z~9 z=;X@Gglk)^jpbNz?1;`!J3QUfAOp4U$Uxm5>92iT`mek#$>s`)M>;e4{#%HAAcb^8_Ax%ersk|}# z0bd;ZPu|2}18KtvmIo8`1@H~@2ejwo(5rFS`Z4&O{$$+ch2hC0=06Jh`@p+p8LZzY z&2M~8T6X^*X?yQ$3N5EzRv$(FtSxhW>>ABUyp!{484f8(%C1_y)3D%Qgfl_!sz`LTXOjR&L!zPA0qH_iNS!tY{!^2WfD%uT}P zI<~&?@&))5&hPPHVRl9);TPO>@UI2d!^ksb!$9T96V(F){puTsn(}qt_WXNw4VvHj zf;6A_XCvE`Z@}E-IOaG0rs>K>^=Sr&OgT_p;F@v0VCN0Y$r|Lw1?Wjt`AKK~RT*kJ z2>QPuVgLNcF+XKno;WBv$yj@d_WFJbl*#*V_Cwzo@%3n5%z4g21G*PVZ)wM5$A{klYozmGlB zT@u2+s}=f}25%IA!yNcXUr!!1)z(Nqbhojg0lv@7@0UlvUMT)*r;M$d0-t)Z?B1@qQk()o!4fqvfr_I0r7 zy1(NdkHEj#Yu{K>T#We#b#FD=c1XhS{hdTh9+8gy-vkcdkk*QS@y(xxEMb1w6z<^~ zYcETGfB#ibR#ql0EiD;PR$L&Vrh2uRv5t_$;NxC;>7_S5_OXxsi8udY3BUUdi55Sk zcyKM+PQ9YMA%D1kH1q48OFG(Gbl=FmV;yk8o>k%0$rJ8%-IYsHclnYuTskkaiCGkUlkMY~mx&K}XRlKIW;odWIeuKjtbc^8bBOTqK zjj(ot`_j?A6y_h%vxE9o*ntx#PGrnK7AljD_r58ylE*oy@{IY%+mA^!|2vW_`>`aC{#3`#3;D_$^S^cM zRcF+uTO2sICledvFgNMU@A%M)%8JbSLq{dD|2|2Sg8vvh_uV6*Q?F&rKaV{v_qz&y z`f;stIb?Cb2!Cg7CG91Bhu@D@RaIrq-+o+T2fwFu#|j>lD6ZS9-t^5cx>p|?flqUA z;Cgs#V)O#`Aw4$Kr)L5?|7f4izl!;n0jux}tEW$&&YBXz9o{+~HhoiYDJ`w5BVTl&ARya=M7zdy$FEe}iGBur8XE>rhLj&_yDk5D4n2GJZ07u7%zyAfNtOLn;)M?h*Py-Xtql5aJOtL4U8e|!t? z((sc6&OJXrPdVef^wZV&x=Z&~uA7^ix8rly^rEj?#d&~pQ{HN8Yq|fZ#*bXn-26P^ z5!)xRzYO9{u6vx5@q_{FE4#7BipS#{&J7*>y}lTyV94}dfE%Yk>@@pDe&F7J09(-0|wuI|$of-MRfK51#t@t2+U|*s=W; z!Y&t{dS%!4VEEi$efA!#<<7&04?kB}Soprd8*jYv;-Qj~h~4v>{XX~kjF+@Z7<t?^|i z#>_ag2i-CRAM8Ret^rZt*^K?`G|o>1o(mLkewxyA)38k93`<~4VFI?5VB!kBh%NNU zxb8K(^-MU1ImWQxG~nFB-Un;6n{lQz_FfsW9^H$Xcn{;+W^ZcG$0qLM#eNV=vGE@# z1~k&!h4@T|IiI<47@pS|i?Qcl=XZJL#$JKve;booMqDUYY{(xcdj6STDE=n?;fsS1 ze`h~Q{CT$K{+{t+#*I1=&&-UU8M&}AwAxD-rMa=e!{0gQXP@6azBq9(ji11uJF%@5 zCvV`#*?;ZguQ7o|nH%bm*s&jLej#@B35gy32ZAE0`Pz@#j6R&kN5w{O4~1rhDoU zEBdU)%Nl?8zi|DR((u|gg~r$aLYmGMyK%FO*qLvwxK5+cn*`;O`16c!&&XT{$j~5k zXb^fbh1GT-CI*Nj{-?r7HNg=e3E{6rxuluPXY z5Nm8ktc$o4-^SO0|Es_sp!A$8GVwOX+%)cH<;=u#R#nz;7QsHl;J@a{5NUAmAHq4D zIU5@jT!h?kUp|g~iN*!>jM6K!W5ar0v~fWrSHK@})@6Lh#h)C6F6@)&-+C3(zO! z8+kV|B7LctM3DpI*~EYo>vCj>_?x&H;>y0*vKwE0?vi$CLt zfSJB##P|M2dEUDBPKW=9cY-F;L;h3Fs4E2ERdN#NSL7ctAC z?-}_a{*L@GA7JHJudxtDVA{K5Yh*k(%#x4W7w+^ zcb-+ofbT5ieG+@QG2lx&7!MyE2JWDP@$k`M;0`*d+oQmJ2A^de!3c53HFcfW_Wtv< zKghQ;*FifmI}kE4dc@1y-u;@qs|V75Z^|Q0l0?teobTE8tGl@EB?k#q_wUjypJ*R zyEI=DJ^Z+d*&}B_xoWvs27LtH7972qqMxVFcX9}c&JbeNCXUZM0`nQIkf&C}&skSt z^9fw@b^Hb)!^hE2IJq~~GktG#ZWwWG<`@V&ckVR&r=JAO4YniJewVcG`HF;59}=bf zLyz0uxf6MhuSyH#-^!ZbHxYl^mmBVrx) zyrb8sQ*qBd_WXm9c~Of$&ZP$b^)<~0%nt#7y$1Jg$e}WCK>TeUB{P>|b1FAB?%K7>;XiOfd}JQ`|IP#Vf%kVy zXa4;XFZ+>n;F>uX&3|4zqWK2u3c<>q;tzjsb1;d{u;L$-hq3qe@82(ob<3qom#%`+ z;vzYAs7TIMl_O75BXu|r`Qhc4UT*vN$3Oo0kAC!{f2#HexDy|qUpgTF;k{o6|L>7l z=?`=*LXaow1o;oNNLXsGTrvC)$R&{m=94Tf+2iTT3Y_Or z-!;^0a{kyWtO4vksG_3cyc7HQ0~detf0+2+qxq(e1NS251N}w5iTSrM)`0p8rem!j zZ56hGD=pHI*B+dd)2B`%|9f0goozCSeXPw3 z+58k~sI02Yz#lOneJzYcG)EB0|F+ggC6D|B`6}d0khAK-gz7U3EGT|M_9$ZINqZjwf>P zJCZ=ogSoE`=yV5YXrcTQZx@Un(64*AlLiyxWnCJ9I<5Nc*eK6eV1Mk}ci0*NrJ=t| zCXuJG`#7GBbPceFtFEpl{(lTm`LX=B_!H+& z>$*Hf}}y zkt@nLXFG9%v**s{z&{H4e?aqp%&l#oU8lxUxk2o%K+?aAe6jLojA& z_|J0<-%u^<;NT*%4)n2-OdqfctSl6iCHE?W_Q2zpJken#_xUJlidzs249H=b#g z?}L4-Tnp6)t_5X?_$v)vz`s9@^BME2X@w<>sKZ3=B{%*B$T5Nj%6!-Hr;I!Scj`lH z&2dHFlOISwWJ&S2vf~@I4i~(0*T%OFiuX|eD*nd2utS4$1_JM?zmp>a#CsVy6Er^z zeNNZZDE?R3pM?>~e?H_N`C`hy%m4jb;6L#8=a7l>3eJS2LGgEUxsau-Yh9l~o7=Yh z2mYg3`m5*3Ik|lKQf~euzZlCWzaN&=vHuHtOwK!2@W6)hqq$Zm|7`Nmu%9^F6UH?+ z@2ii+=iJ;ZzhiUKu$QB()nKk3FooI>Jr_IjzY6=qxYy;&mvi7BlQ?t4kRjIhb|2q? zd^K~{-^cxjVSj?!Xs=Da5IHmFzRj!Kzh~b!?`P7c&T9s77VLYB?8_?F zauM^)p;qFG!9PHLfIsnt43UnmV?Wn?Ki7aXSosgq;f?MYUuSIYwOn(5vWhb{f%$pn z4ySN-z}_%7|B);A@PA5k*7kkdr4xZ@s{e9j+9w;*RFm;XPDQwx%~;8iBzSKTIGKO z{53ZZU*OLr@S5=k;?CM^i#zkxs3Sj%z0U`L%q`qM+tP zX$aL;*^g$7UyM2Go+_4A+f)IQcy^G$h2E zb?nT$XlgTEFJI8GN6NQf%-eVn9mPilRqUbT$pN-|;FEjq@Ao&TxpZg=mEgBHB zU@grU;&sfmqlO=6|G3sU;7t8rbK$?X0y_v9$^{X`m4jZ_BR|B|@?ZCLSPPEzz`w1n zP5nA;4(kQFKm%$enjkkBxM%Y}2si&d|62L)U(dCzCGn56HN+i#6|nV-TGIo0;W;`( zW-y=1KF4dp$$mC_|6}pbb>IHoKQeZajXQB>jVR?u`R>%l1o54?6NnS*arpVopdEF; zeC5J3*M0p`*8lif;!irrcjC?(uExejsi~>4wKYwstGY^N@KY}TujLx`S=Cu+T=!dx zKWlPm->I**E{A*q-Z^FFT5$G%7Ij0_*Mo4-y6~RmyTzUB&lfae(WZfO>um}mnsDXPEbau-!13!!xd!qh*{C)6&bz0j1I{>y$D-S)b*)JMCPk!=~KL&6Ngin0p6MCOxF2L_R9t8N!$2Wpced<#`y!F;w zKTi5V_kX&X09wAIJ#anfg9Dhn0s7(C6Nj3S-mVn(i|C6ZAVq0$hE)874co};g z^hR7pe4lU$P;*ggYc4o&UTQC%liCXooIfkI3TNaBV%t~FRr}yHu7kjQ2J*3;e%;iW zvDVCh8=G80KAeyhCuY2LjrC!Od1rvF7h}zszxGV)&!)6ChP5WAjv-zQAMNJIG!JHS zwl?pLxC-V5II#(hQ`l)ZAp&M0xd4%cxmco*MIk?{BD=BK`1vpc}D39|XlV z{c&0oGdDa~TL2FT4lh=~1NL5O-P~0?V2#ie`v^CnANfGUM!b4F=JkCwd7Q`c8Na2q zJGQQk^?6w}Vg9-{|2047((lAV84uN%sK!N2?V(!_1{{v6rdgZl56f0zDMQ+q)jKzzu^ztsVken;=DjAh6G`Cw`Q4G+BjS+n*=KI~^K{W=%t zbD-rN)O4|*Q~@<#@1Vx$E!0W9`B~IZeFn87sHMXD>$M%|Bh93rdGf1lKoX3K651t&nhsl= zXxG|%@8}Bbrlp_u#t*DZX<}_0Yb{A9*1Pd_)LtqNwy6xT4pZrOY{s?N4)pPwT(i#y zT%`lRi8U#Ken4fw>H+N`{f#FF?ZxFlLZg7z7#cr4X>id z{9kUD`d2=w_Zlb{^c`5IOxWCZ1k<0T1D1Z31IU0Q2edsZ1K0xv$pQVYq2KEp&#v#Z z?{m@Lin;*Str(C2sfF^L>{R3cjY`~#)m>Wm$Y|1fzeS0-$(Q^z@} zEO*vlb-^XK9>w&Ef^=Zzo-1AFSP#9zb~X5_+){$(eB4K z8gtW+nl{q+CTh+>v(gWrsP^DB*ge(~Q$AGxJ-eYc1isti%$%nM<_&Ev?%|??PK`$p z{f-PM{Ym8k<$$)(F9)tqzFJ?h&Dk@D?Dt{4CHKJWLs8$zy6+(R)pr@0ur)xY{=uXFFzH_> z-F^tN1y(2hG8V)GpDg%wW0Px_ep~nIjD~*HCSxDi0y`H!`V*~RHs^uQsb1*bK1qGpmd zB1m`Cjw0`nLBF2|umz+a#2X$c?Lj;M?Lj;MUp*d>7j~ayNAyj@SLpeH`)BgRH}byy zyQSat!;U{@O(<<2fp&oQkIy$z`_CQ-)O@RN;QD9T4y|wIJ^%U#(BF%=`i49}j!D-) zkOwPSJaG03SMkE~BzW}b_v>LA&y)EEYO6sbdnTX*$>UF|JhZ&^MSb4}Tgbne_4n+C zwI8U4i~PI>7a3{kVa8|))*%C0|K+bIbmV~a`|G#+`TU#g zXW;bWIcWsQi9c4X*RUDpIfyoPY)2bI-r9)xulm1CJDkQd6u+f)_N=w1ElgEBjprPF z3o?Ly0RVeY_{3~fPVckRMxe2lM8hj!B8F)JO z!`AP6>u>5Y&3o9t0QxBpNE=lJx#NyIbp1gD zzUYBIPYHIv9ngk-Zt~<)62^1Zs1LLYMh@_tP^I7EX-9)Ed0^@y{k65Gp0KRcTmMWw zU|+)qx{#q0SL+4q?Q`i0>COIIF8a0Cf&C`hbMj?LmG9K&iW-?PJt*u)38tTXAP>@R zZL6uH^!RYNq$p>PKz7f-zvg>OKXcZ8h!%Vo@{VUZp|+iUD_xb(N~G|6c#oQK^nHZU zKg#F6<)+`rf~k*Xjjye+syV{bwU2glMMMs-^ss4`bYaVroXzn`YQUd__UlZL_mLs z(vO}k!~(mi|L+(5&;>r<;|OHnbXBE78LruP;{yBxZ6y7K3)nMo-{6PCI7gQi6+rF_ zkPod!Z8n}q46ykrlQS|hVB(}(2Kf7BCZ>Vc;V>ccbk2~NGaf6wGQH@W9&?Zt3v(h*P4xDrN>ex7+jH*+Qg z%^jH$&+*!v{sQ!xkWN4+>|b}qGvEd6ANzgqoVy5Qfws}ef2QqF{iiR5{pT}PS&yjo z>lron#va-p=v;m>WB+XVz|o;UJFdjo5_!RRD|6W{4}A2a#bZv)gS_`b|KsSH)Sd_JIr%<%n06TX&t{&!H#{)?4W9hlJ`R1>FyugOh3=D_{einr zu(Wf`qTkvED+gEULO0I*Hs%f;&=`=X4;N8Ovf28x$A*11`dmfy2=$+PNqX>XcG`h% zJY&A6@&)*WT^rC(Caj}2+|X|6cICm5h0OK0cGB_!wEKFZJU)OQ+TZ1q2bTx9hxnq& z$9ee|f9|0M^)#E&Pr4)f?o&DMM4w>Ksb{hF(0|wh+5_{vPow{V%TFzU2za&gjttNi zIyR9qA56dX52Qbv2aY^g`U7R43-p`#sO1A=KS2aKgfR+Yu^bQ*i-qu z%0mP;Ap)B~zZgO9lG^`325gOf?iUHF{~7jyGC)3L(eL(SQ70VzR~wLN18tnx(Cz2~ zctBl1kI)wAe+cxWHw*NW-d;=pd+>+wd$a@GBju*wFvabSaPtHiT!o#QFC+wBVwYo3s=y;z1jM+M=Fj!FZM>UzpL-eZzOT( zhmZmEfWa=%KE#V3-ZK5#v!Hzd{zc^{ctF~- z>DT-U`}5!fk$aj24`#uGdB7r`>oX5tU|d*b|N3V1lXmv%MGrvE(dXG)^-J*LA>$LE z7kut4`zE)v{@Op|(|@i#c>tM!12FQh?}PfA0`Bp%=%*RiXVzLDXnXtE@4B)5uR}a> zbNU}q+712pIrM`k^odG8dKtG$zwHmQI^c}tfjx5?egx3!e%JRm_64e+>`Ra1IRfLb z1KQ`SxmH{cZfyVS5m(&`{V}Y4j6J{b17`h6KWqZ&hfc(oR zxM%w!$F(mKy05kY&lco3%zvLCxBW+t*rxO+i=qGMvobx0-<7`VUu)ka`){=ew+Ovt zg%52_{&UbkUA8aJPWsk)gYWV4`dnxI%s?7^fGpq{ZQuu=VH{-t7w~K%_E<8`zS;V- zKTho*>;UQQul^1GT^HCt@I-q?)&4!QDgBndn?3sNKYKCQFU4LGKJ$n@Je$&w9@E$X z^p@iJ(v&`1(tq~1zc>0Vow-KR&vm!GUzT?Eqgnc)leZ9p)-Z*C!zqb=-$XG0 z^!8RfuQs5s>Q~qcz92(a_Q+KH?C*vCTr~UdTiR`JGuNH8v(J|FTiSEcPrBpmHRtmd zI2Jng0J=bXK);YY^rM?jzn?~X-Pe`GbAy{D)Y6D&1GY-EBcy%Bq?bKh?A>DD9DD!p z?{q02wno2sraGUkZv5dx+J8)&K$)No43Zr(*S`FEdL!4C)}WE}vJd%{S6-3VUw>Wp z?Aasv`T0^%P$2vE?L+Qhj~qB~K%eW)xH(=b_jU}TLD&BP*Pc9hz@Z=e0nkpLkWl}> z_5J^i(9Z7$(XG9~I3sY)`OGZ#_L06+Dy4E>UstcP-rU@xJ$&rxvo!n1Ao`P~KLU-8 z{zDgN4-&A6N!kPSYbQ&7sLufi`YtE2uN$S?e&5n>Y4(q#|KP!cc1j)T^QrUXMPFaP z_SoYO8S8G}Z$?AL4`;pE?7J5K8yWqy23>cCT2{=-)+A$X^-I9=e!@J@A&-;Ufc)`H}c(VI&;0x zrrGv()5mjP%jXzS{^|29?bLNXS0bC%p!YXI!;O457rjCEEzMkGf~B3$T}dXBO23tP z+Ci>;5UoM?C@bU@f9G1^X3=ly&ZeFH<@|RnOG--A&)fd)AUgjw?%izq{p(KJ`EP0v z2mU)P!+3t@X14DA=E2RR-|p${GZ9ETX=d+kJRZL$nSa0daI@&oUUxnZg0xd_xu>Vz lzF#z5%kSKX?YLH3ll^(hI(_`L*t#Iva2Ede*Z;>H_ - - - - - - - - - Azure SignalR Group Chat - - -

Azure SignalR Group Chat

-
-
-
- -
-
- - -
-
- - - - - - - - - diff --git a/samples/ChatRoom.NetCore21/ChatRoomLocal/ChatRoomLocal.csproj b/samples/ChatRoom.NetCore21/ChatRoomLocal/ChatRoomLocal.csproj deleted file mode 100644 index 00d22687..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoomLocal/ChatRoomLocal.csproj +++ /dev/null @@ -1,15 +0,0 @@ - - - netcoreapp2.1 - chatroom - Microsoft.Azure.SignalR.Samples.ChatRoom - - - - - - - - - - diff --git a/samples/ChatRoom.NetCore21/ChatRoomLocal/Hub/Chat.cs b/samples/ChatRoom.NetCore21/ChatRoomLocal/Hub/Chat.cs deleted file mode 100644 index 397ff9a3..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoomLocal/Hub/Chat.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using Microsoft.AspNetCore.SignalR; - -namespace Microsoft.Azure.SignalR.Samples.ChatRoom -{ - public class Chat : Hub - { - public void BroadcastMessage(string name, string message) - { - Clients.All.SendAsync("broadcastMessage", name, message); - } - - public void Echo(string name, string message) - { - Clients.Client(Context.ConnectionId).SendAsync("echo", name, message + " (echo from server)"); - } - } -} diff --git a/samples/ChatRoom.NetCore21/ChatRoomLocal/Program.cs b/samples/ChatRoom.NetCore21/ChatRoomLocal/Program.cs deleted file mode 100644 index e24ef841..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoomLocal/Program.cs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using Microsoft.AspNetCore; -using Microsoft.AspNetCore.Hosting; - -namespace Microsoft.Azure.SignalR.Samples.ChatRoom -{ - public class Program - { - public static void Main(string[] args) - { - CreateWebHostBuilder(args).Build().Run(); - } - - public static IWebHostBuilder CreateWebHostBuilder(string[] args) => - WebHost.CreateDefaultBuilder(args) - .UseStartup(); - } -} diff --git a/samples/ChatRoom.NetCore21/ChatRoomLocal/Properties/launchSettings.json b/samples/ChatRoom.NetCore21/ChatRoomLocal/Properties/launchSettings.json deleted file mode 100644 index 72a6c347..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoomLocal/Properties/launchSettings.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "iisSettings": { - "windowsAuthentication": false, - "anonymousAuthentication": true, - "iisExpress": { - "applicationUrl": "http://localhost:5000/", - "sslPort": 0 - } - }, - "profiles": { - "IIS Express": { - "commandName": "IISExpress", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "ChatRoomLocal": { - "commandName": "Project", - "launchBrowser": true, - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - }, - "applicationUrl": "http://localhost:5000/" - } - } -} \ No newline at end of file diff --git a/samples/ChatRoom.NetCore21/ChatRoomLocal/README.md b/samples/ChatRoom.NetCore21/ChatRoomLocal/README.md deleted file mode 100644 index 2fad8869..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoomLocal/README.md +++ /dev/null @@ -1,139 +0,0 @@ -# Get Started with SignalR: a Chat Room Example - -In this sample you'll learn how to use ASP.NET Core SignalR to build a chat room application. - -> This tutorial is to give you a brief introduction about how ASP.NET Core SignalR works, if you're already familiar with it, you can skip this sample. -> -> Please be noted this sample, and all other samples in this repo, are based on ASP.NET Core SignalR rather than the ASP.NET version. - -Our chat room is a web page application that anyone can login to and chat with other users in the room. - -The first time you open the application you'll be asked for your name: - -![chat-room-1](../../../docs/images/chat-room-1.png) - -Then you can send a message and everyone in the room can see it: - -![chat-room-2](../../../docs/images/chat-room-2.png) - -Let's implement this feature step by step. - -1. First create a ASP.NET Core web application. - - ``` - dotnet new web - ``` - - > Before you start, make sure you installed the latest [.NET Core 2.1 SDK](https://dotnet.microsoft.com/download/dotnet-core/2.1). - -2. Create a `Chat.cs` that defines a `Chat` hub class. - - ```cs - using Microsoft.AspNetCore.SignalR; - - public class Chat : Hub - { - public void BroadcastMessage(string name, string message) - { - Clients.All.SendAsync("broadcastMessage", name, message); - } - - public void Echo(string name, string message) - { - Clients.Client(Context.ConnectionId).SendAsync("echo", name, message + " (echo from server)"); - } - } - ``` - - > SignalR SDK is already *included* in `Microsoft.AspNetCore.App` package reference in ChatRoomLocal.csproj file. - - Hub is the core concept in SignalR which exposes a set of methods that can be called from clients. Here we define two methods: `Broadcast()` which broadcasts the message to all clients and `Echo()` which sends the message back to the caller. - - In each method you can see there is a `Clients` interface that gives you access to all connected clients so you can directly call back to these clients. - -3. Then we need to initialize the SignalR runtime when the application starts up. Add the following in `Startup.cs`: - - ```cs - public void ConfigureServices(IServiceCollection services) - { - services.AddSignalR(); - } - - public void Configure(IApplicationBuilder app) - { - ... - app.UseSignalR(routes => - { - routes.MapHub("/chat"); - }); - } - ``` - - > Make sure you remove `app.Run(...)` from `Configure()`, which will always give you a Hello World page. - - The key changes here are `AddSignalR()` which initializes the SignalR runtime and `MapHub()` which maps the hub to the `/chat` endpoint so clients can access the hub using this url. - -4. The last step is to create the UI of the chat room. In this sample, we will use HTML and Javascript to build a web application: - - Copy the HTML and script files from [wwwroot](wwwroot/) of the sample project to the `wwwroot` folder of your project. - Add the following code to `Startup.cs` to make the application serve the pages: - - ```cs - public void Configure(IApplicationBuilder app, IHostingEnvironment env) - { - ... - app.UseFileServer(); - } - ``` - - Let's take a look at key changes in [index.html](wwwroot/index.html). First it creates a hub connection to the server: - - ```js - var connection = new signalR.HubConnectionBuilder() - .withUrl('/chat') - .build(); - ``` - - When the user clicks the send button, it calls `broadcastMessage()` to broadcast the message to other clients: - - ```js - document.getElementById('sendmessage').addEventListener('click', function (event) { - // Call the broadcastMessage method on the hub. - if (messageInput.value) { - connection.send('broadcastMessage', username, messageInput.value); - } - ... - }); - ``` - - Also, it registers a callback to receive messages from the server: - - ```js - var messageCallback = function(name, message) { - if (!message) return; - // Html encode display name and message. - var encodedName = name; - var encodedMsg = message.replace(/&/g, "&").replace(//g, ">"); - var messageEntry = createMessageEntry(encodedName, encodedMsg); - - var messageBox = document.getElementById('messages'); - messageBox.appendChild(messageEntry); - messageBox.scrollTop = messageBox.scrollHeight; - }; - // Create a function that the hub can call to broadcast messages. - connection.on('broadcastMessage', messageCallback); - ``` - -Now, build and run the application: - -``` -dotnet build -dotnet run -``` - -> You can also use `dotnet watch run` to watch and reload the code changes. - -Open http://localhost:5000, and you'll see the chat room running on your local machine. - -In this sample you have learned the basics of SignalR and how to use it to build a chat room application. -In other samples you'll learn how to use Azure SignalR service and host your chat room on Azure. diff --git a/samples/ChatRoom.NetCore21/ChatRoomLocal/Startup.cs b/samples/ChatRoom.NetCore21/ChatRoomLocal/Startup.cs deleted file mode 100644 index e94c457b..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoomLocal/Startup.cs +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. - -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -namespace Microsoft.Azure.SignalR.Samples.ChatRoom -{ - public class Startup - { - public Startup(IConfiguration configuration) - { - Configuration = configuration; - } - - public IConfiguration Configuration { get; } - - public void ConfigureServices(IServiceCollection services) - { - services.AddMvc(); - services.AddSignalR(); - } - - public void Configure(IApplicationBuilder app) - { - app.UseMvc(); - app.UseFileServer(); - app.UseSignalR(routes => - { - routes.MapHub("/chat"); - }); - } - } -} diff --git a/samples/ChatRoom.NetCore21/ChatRoomLocal/appsettings.json b/samples/ChatRoom.NetCore21/ChatRoomLocal/appsettings.json deleted file mode 100644 index 19b8c152..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoomLocal/appsettings.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "Logging": { - "IncludeScopes": false, - "Debug": { - "LogLevel": { - "Default": "Debug" - } - }, - "Console": { - "LogLevel": { - "Default": "Debug" - } - } - } -} diff --git a/samples/ChatRoom.NetCore21/ChatRoomLocal/package-lock.json b/samples/ChatRoom.NetCore21/ChatRoomLocal/package-lock.json deleted file mode 100644 index 619a8f41..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoomLocal/package-lock.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "chatsample", - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@aspnet/signalr": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@aspnet/signalr/-/signalr-1.0.0.tgz", - "integrity": "sha512-7fXNdSTnp2y7a3i7BnvBpQpDEoG71DNq1J/Caowr+3v/nzGivnJApRg40VgBp6FlyeJqoBEQO/QuDPE0kTpczg==" - } - } -} diff --git a/samples/ChatRoom.NetCore21/ChatRoomLocal/package.json b/samples/ChatRoom.NetCore21/ChatRoomLocal/package.json deleted file mode 100644 index 7e77955b..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoomLocal/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "chatsample", - "private": true, - "dependencies": { - "@aspnet/signalr": "^1.0.0" - } -} diff --git a/samples/ChatRoom.NetCore21/ChatRoomLocal/wwwroot/css/site.css b/samples/ChatRoom.NetCore21/ChatRoomLocal/wwwroot/css/site.css deleted file mode 100644 index 418828c5..00000000 --- a/samples/ChatRoom.NetCore21/ChatRoomLocal/wwwroot/css/site.css +++ /dev/null @@ -1,82 +0,0 @@ -/*html, body { - font-size: 16px; -} - -@media all and (max-device-width: 720px) { - html, body { - font-size: 20px; - } -}*/ - -html, body { - padding: 0; - height: 100%; -} - -#messages { - width: 100%; - border: 1px solid #ccc; - height: calc(100% - 120px); - float: none; - margin: 0px auto; - padding-left: 0px; - overflow-y: auto; -} - -textarea:focus { - outline: none !important; -} - -.system-message { - background: #87CEFA; -} - -.broadcast-message { - display: inline-block; - background: yellow; - margin: auto; - padding: 5px 10px; -} - -.message-entry { - overflow: auto; - margin: 8px 0; -} - -.message-avatar { - display: inline-block; - padding: 10px; - max-width: 8em; - word-wrap: break-word; -} - -.message-content { - display: inline-block; - background-color: #b2e281; - padding: 10px; - margin: 0 0.5em; - max-width: calc(60%); - word-wrap: break-word; -} - -.message-content.pull-left:before { - width: 0; - height: 0; - display: inline-block; - float: left; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - border-right: 10px solid #b2e281; - margin: 15px 0; -} - -.message-content.pull-right:after { - width: 0; - height: 0; - display: inline-block; - float: right; - border-top: 10px solid transparent; - border-bottom: 10px solid transparent; - border-left: 10px solid #b2e281; - margin: 15px 0; -} diff --git a/samples/ChatRoom.NetCore21/ChatRoomLocal/wwwroot/favicon.ico b/samples/ChatRoom.NetCore21/ChatRoomLocal/wwwroot/favicon.ico deleted file mode 100644 index a3a799985c43bc7309d701b2cad129023377dc71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32038 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 - - - - - - - - - Azure SignalR Group Chat - - -

Azure SignalR Group Chat

-
-
-
- -
-
- - -
-
- - - - - - - - - \ No newline at end of file diff --git a/samples/samples.sln b/samples/samples.sln index 8e0a3394..e7d0b0c4 100644 --- a/samples/samples.sln +++ b/samples/samples.sln @@ -21,8 +21,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ServerSideBlazor", "ServerS EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleEcho", "SimpleEcho\SimpleEcho.csproj", "{485FB16C-0600-41BC-8958-4E65F1283936}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ChatRoom.NetCore21", "ChatRoom.NetCore21\ChatRoom\ChatRoom.NetCore21.csproj", "{C05D2484-8AED-4AA0-919E-EDD734CD51CE}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -65,10 +63,6 @@ Global {485FB16C-0600-41BC-8958-4E65F1283936}.Debug|Any CPU.Build.0 = Debug|Any CPU {485FB16C-0600-41BC-8958-4E65F1283936}.Release|Any CPU.ActiveCfg = Release|Any CPU {485FB16C-0600-41BC-8958-4E65F1283936}.Release|Any CPU.Build.0 = Release|Any CPU - {C05D2484-8AED-4AA0-919E-EDD734CD51CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C05D2484-8AED-4AA0-919E-EDD734CD51CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C05D2484-8AED-4AA0-919E-EDD734CD51CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C05D2484-8AED-4AA0-919E-EDD734CD51CE}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE