[
  {
    "path": ".gitignore",
    "content": "/src/AdminLTE/wwwroot/lib/\n\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n\n# Visual Studio 2015 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# DNX\nproject.lock.json\nartifacts/\n\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# TODO: Comment the next line if you want to checkin your web deploy settings\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n*.nupkg\n# The packages folder can be ignored because of Package Restore\n**/packages/*\n# except build/, which is used as an MSBuild target.\n!**/packages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/packages/repositories.config\n# NuGet v3's project.json files produces more ignoreable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.pfx\n*.publishsettings\nnode_modules/\norleans.codegen.cs\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\n*.mdf\n*.ldf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n"
  },
  {
    "path": "AdminLTE.sln.DotSettings",
    "content": "﻿<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namespace:System;assembly=mscorlib\" xmlns:ss=\"urn:shemas-jetbrains-com:settings-storage-xaml\" xmlns:wpf=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">\n\t<s:String x:Key=\"/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=URL/@EntryIndexedValue\">URL</s:String></wpf:ResourceDictionary>"
  },
  {
    "path": "AdminLTE.slnx",
    "content": "<Solution>\n  <Folder Name=\"/Solution Items/\" />\n  <Folder Name=\"/src/\">\n    <Project Path=\"src/AdminLTE/AdminLTE.csproj\" />\n  </Folder>\n</Solution>\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2016 Baltazar\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# **Admin**LTE - MVC Core\nThis template is based from AdminLTE of http://almsaeedstudio.com.\nConverted as a .Net project.\n\n## Prerequisites\nas a minimum, you should have the following installed\n* Visual Studio 2022+\n\n_built using .NET\n\n## Installation\nJust clone or fork this. Whatever you want. [Restore client side libraries](https://github.com/moemura/AdminLTE.Core/issues/1). Run the solution.\n\n## Features\n### Controls are ViewComponent like a **UserControl**\n\n\nsee below the body of **_Layouts.cshtml**\n```html\n<body class=\"hold-transition sidebar-mini\">\n    <div class=\"wrapper\">\n        <!-- Main Header -->\n        @await Component.InvokeAsync(\"Header\")\n        <!-- Left side column. contains the logo and sidebar -->\n        @await Component.InvokeAsync(\"Sidebar\")\n        <!-- Content Wrapper. Contains page content -->\n        <div class=\"content-wrapper\">\n            <!-- Content Header (Page header) -->\n            <div class=\"content-header\">\n                <div class=\"container-fluid\">\n                    <div class=\"row mb-2\">\n                        <div class=\"col-sm-6\">\n                            @await Component.InvokeAsync(\"PageHeader\")\n                        </div>\n                        <div class=\"col-sm-6\">\n                            @await Component.InvokeAsync(\"Breadcrumb\")\n                        </div>\n                        <br />\n                        @await Component.InvokeAsync(\"PageAlert\")\n                    </div>\n                </div>\n                <!-- Main content -->\n                <section class=\"content\">\n                    <!-- Your Page Content Here -->\n                    @RenderBody()\n                </section>\n                <!-- /.content -->\n            </div>\n        </div>\n        <!-- /.content-wrapper -->\n        <!-- Main Footer -->\n        @await Component.InvokeAsync(\"Footer\")\n        <!-- Control Sidebar -->\n        @await Component.InvokeAsync(\"ControlSidebar\")\n        <!-- /.control-sidebar -->\n        <!-- Add the sidebar's background. This div must be placed\n             immediately after the control sidebar -->\n    <aside class=\"control-sidebar control-sidebar-dark\">\n        <!-- Control sidebar content goes here -->\n    </aside>\n    </div>\n    <!-- ./wrapper -->\n    <!-- Optionally, you can add Slimscroll and FastClick plugins.\n    Both of these plugins are recommended to enhance the\n    user experience. Slimscroll is required when using the\n    fixed layout. -->\n\n    @RenderSection(\"scripts\", required: false)\n    <script>\n        useSubmitClass();\n    </script>\n</body>\n```\n\n### List of ViewComponents\n* Header\n\t* Notification\n\t* Messages\n\t* Task\n\t* User Profile\n* Footer\n* SideBar\n* ControlSideBar (converted to HelpBar)\n* PageHeader\n* Breadcrumb\n* Login & Logout\n* Error Page\n* Registration*\n\n### ViewComponent Usage\nTypically, you should inherit your Controller from `BaseController.cs` to enable convenience helpers.\n\n**PageHeader Title & Description**\n```cs\n\ndeclaration:\nAddPageHeader(string pageHeader = \"\", string pageDescription = \"\")\n\nusage:\nAddPageHeader(\"Dashboard\", \"\");\n```\n\n**Page Alerts**\n```cs\n\ndeclaration:\nAddPageAlerts(PageAlertType pageAlertType, string description)\n\nusage:\nAddPageAlerts(PageAlertType.Info, \"you may view the summary <a href='#'>here</a>\");\n```\n\n**Page Breadcrumb**\n```cs\n\ndeclaration:\nAddBreadcrumb(string displayName, string urlPath)\n\nusage:\nAddBreadcrumb(\"Register\", \"/Account/Register\");\nAddBreadcrumb(\"Contact\", \"/Account/Contact\");\n```\n\n**Sidebar Menus**\n```cs\n\nvar sidebars = new List<SidebarMenu>();\n\nsidebars.Add(ModuleHelper.AddHeader(\"MAIN NAVIGATION\"));\nsidebars.Add(ModuleHelper.AddModule(ModuleHelper.Module.Home));\nsidebars.Add(ModuleHelper.AddModule(ModuleHelper.Module.Error, Tuple.Create(0, 0, 1)));\nsidebars.Add(ModuleHelper.AddModule(ModuleHelper.Module.About, Tuple.Create(0, 1, 0)));\nsidebars.Add(ModuleHelper.AddModule(ModuleHelper.Module.Contact, Tuple.Create(1, 0, 0)));\nsidebars.Add(ModuleHelper.AddTree(\"Account\"));\nsidebars.Last().TreeChild = new List<SidebarMenu>()\n{\n    ModuleHelper.AddModule(ModuleHelper.Module.Login),\n    ModuleHelper.AddModule(ModuleHelper.Module.Register, Tuple.Create(1, 1, 1)),\n};\n```\nThe above code will create a hierarchical sidebar like...\n```\n>\n> LABEL\n> LINK 1\n> LINK 1\n> LINK 1\n> TREE\n> > LINK\n> > LINK 1|1|1\n```\n\n...where 1 is the notification color at the right side of the link via Tuple.\nTuple 0 will not display the notification whereas the position of the items will display its corresponding color notification\n\n\n**Menu Notification**\n\n\nThis implementation is almost the same with Menu Task and Menu Message.\n\n```cs\n\npublic class MenuNotificationViewComponent : ViewComponent\n{\n\n    public MenuNotificationViewComponent()\n    {\n    }\n\n    public IViewComponentResult Invoke(string filter)\n    {\n        var messages = GetData();\n        return View(messages);\n    }\n\n    private List<Message> GetData()\n    {\n        var messages = new List<Message>();\n        messages.Add(new Message\n        {\n            Id = 1,\n            FontAwesomeIcon = \"fa fa-users text-aqua\",\n            ShortDesc = \"5 new members joined today\",\n            URLPath = \"#\",\n        });\n\n        return messages;\n    }\n}\n```\n\n**Help Pane**\n\nYou can add page help or quick links/info by adding `[HelpDefinition]` attribute above the IActionResult method\n```cs\npublic class HomeController : BaseController\n   {\n       [HelpDefinition]\n       public IActionResult Index()\n       {\n           return View();\n       }\n```\n\nYou can still specify a filename as parameter in case you want to retrieve it on the wwwroot/files/Shared folder. \n\n```cs\n[HelpDefinition(\"helpdefault\")]\npublic IActionResult Contact()\n{\n```\n\n> By default, no arguments will get the path via ControllerName\\CallerMethod which have the equivalent path to wwwroot/files/{ControllerName}/{CallerMethod}.html\n\n### List of Global Javascript Events\n* **Submit Button** - disabled when click once. Auto add progress spinner. No additional codes required for that implementation.\n\n> Usage: You just simply declare the submit button. The script name is `useSubmitClass`\n\n```html\n\n<form asp-controller=\"Home\" asp-action=\"Index\" method=\"post\">\n     <button class=\"btn btn-sm btn-primary\" type=\"submit\">Submit</button>\n</form>\n```\n\n\n* Sidebar Collapse/ Expand\n* The sidebar will save the expand & collapse state thru cookie. Using `Mozilla cookie helper`.\n\n> The cookie name is `sidebarstate`\n\n### List of Control Templates\n* DataTable\n* ...more to follow\n\n### User Audit\nThe project implements middleware that audits user login activity upon `login, logout & failed login`\n\n### Extended User Properties\nThe project gives some insight on how to implement extended user properties via Claims\n\n### HTTP Logging\nThe project provides middleware to log `per HTTP request`.\n\n### Authentication\nThis uses templated individual authentication and customized `ErrorPage` & `LoginPage`.\nIt also uses dependency injection that requires controllers by default to be ``[Authorized]``\nwithout typing them on each controller/method\n\n\n\n## Copyrights\nSee MIT License\n"
  },
  {
    "path": "src/AdminLTE/AdminLTE.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk.Web\">\n\n  <PropertyGroup>\n    <TargetFramework>net10.0</TargetFramework>\n    <PreserveCompilationContext>true</PreserveCompilationContext>\n    <AssemblyName>AdminLTE</AssemblyName>\n    <PackageId>AdminLTE</PackageId>\n\t<ImplicitUsings>enable</ImplicitUsings>\n    <UserSecretsId>aspnet-AdminLTE-c9131f1e-93fb-4772-8c8b-1d4c77bf4354</UserSecretsId>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <None Update=\"wwwroot\\**\\*;Views\\**\\*;Areas\\**\\Views\">\n      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>\n    </None>\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"BuildBundlerMinifier\" Version=\"3.2.449\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore\" Version=\"10.*\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Identity.EntityFrameworkCore\" Version=\"10.*\" />\n    <PackageReference Include=\"Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation\" Version=\"10.*\" />\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.SqlServer\" Version=\"10.*\" />\n    <PackageReference Include=\"Microsoft.EntityFrameworkCore.Tools\" Version=\"10.*\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"Microsoft.VisualStudio.Web.CodeGeneration.Design\" Version=\"10.*\">\n      <PrivateAssets>All</PrivateAssets>\n    </PackageReference>\n    <PackageReference Include=\"Microsoft.Web.LibraryManager.Build\" Version=\"3.*\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Folder Include=\"wwwroot\\lib\\\" />\n  </ItemGroup>\n\n</Project>\n"
  },
  {
    "path": "src/AdminLTE/Common/Attributes/HelpDefinitionAttribute.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Mvc.Filters;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.CompilerServices;\nusing System.Threading.Tasks;\n\nnamespace AdminLTE.Common.Attributes\n{\n    [AttributeUsage(AttributeTargets.Method)]\n    public class HelpDefinitionAttribute : ActionFilterAttribute, IActionFilter\n    {\n        private string _fileName { get; set; }\n        private string _memberName { get; set; }\n        private string _pageHelpFileName { get; set; }\n\n\n        public override void OnResultExecuting(ResultExecutingContext filterContext)\n        {\n            var controller = filterContext.Controller as Controller;\n            controller.ViewBag.PageHelpFileName = _pageHelpFileName;\n        }\n\n        /// <summary>\n        /// By declaring this on the IActionResult method, you are enabling \n        /// </summary>\n        /// <param name=\"fileName\">specify specific filename located in wwwroot\\files\\Shared folder</param>\n        /// <param name=\"filePath\">THIS MUST BE EMPTY</param>\n        /// <param name=\"memberName\">THIS MUST BE EMPTY</param>\n        public HelpDefinitionAttribute(string fileName = \"\",[CallerFilePath] string filePath = \"\", [CallerMemberName] string memberName = \"\")\n        {\n            var controllerName = filePath.Split('\\\\').Last().Replace(\"Controller.cs\", string.Empty);\n            if (fileName == string.Empty) //if not specified, will check it on the common help location plus path from class+method.html\n            {\n                _pageHelpFileName = controllerName + @\"\\\" + memberName; //ChildController + ActionMethod\n            }\n            else //if specified, will check it in the common help location\n            {\n                _pageHelpFileName = @\"Shared\\\" + fileName;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Common/CustomClaimTypes.cs",
    "content": "﻿namespace AdminLTE.Common\n{\n    public static class CustomClaimTypes\n    {\n        #region Default ClaimTypes (taken from ClaimTypes class)\n        //\n        // Summary:\n        //     http://schemas.xmlsoap.org/ws/2009/09/identity/claims/actor.\n        public const string Actor = \"http://schemas.xmlsoap.org/ws/2009/09/identity/claims/actor\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the anonymous user; http://schemas.xmlsoap.org/ws/2005/05/identity/claims/anonymous.\n        public const string Anonymous = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/anonymous\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies details about whether an identity is authenticated,\n        //     http://schemas.xmlsoap.org/ws/2005/05/identity/claims/authenticated.\n        public const string Authentication = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/authentication\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the instant at which an entity was authenticated;\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationinstant.\n        public const string AuthenticationInstant = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationinstant\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the method with which an entity was authenticated;\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod.\n        public const string AuthenticationMethod = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies an authorization decision on an entity; http://schemas.xmlsoap.org/ws/2005/05/identity/claims/authorizationdecision.\n        public const string AuthorizationDecision = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/authorizationdecision\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the cookie path; http://schemas.microsoft.com/ws/2008/06/identity/claims/cookiepath.\n        public const string CookiePath = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/cookiepath\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the country/region in which an entity resides,\n        //     http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country.\n        public const string Country = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/country\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the date of birth of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dateofbirth.\n        public const string DateOfBirth = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dateofbirth\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the deny-only primary group SID on an entity;\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarygroupsid.\n        //     A deny-only SID denies the specified entity to a securable object.\n        public const string DenyOnlyPrimaryGroupSid = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarygroupsid\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the deny-only primary SID on an entity; http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarysid.\n        //     A deny-only SID denies the specified entity to a securable object.\n        public const string DenyOnlyPrimarySid = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlyprimarysid\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies a deny-only security identifier (SID) for\n        //     an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/denyonlysid.\n        //     A deny-only SID denies the specified entity to a securable object.\n        public const string DenyOnlySid = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/denyonlysid\";\n        //\n        // Summary:\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlywindowsdevicegroup.\n        public const string DenyOnlyWindowsDeviceGroup = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/denyonlywindowsdevicegroup\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the DNS name associated with the computer\n        //     name or with the alternative name of either the subject or issuer of an X.509\n        //     certificate, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dns.\n        public const string Dns = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/dns\";\n        //\n        // Summary:\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/dsa.\n        public const string Dsa = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/dsa\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the email address of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/email.\n        public const string Email = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress\";\n        //\n        // Summary:\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/expiration.\n        public const string Expiration = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/expiration\";\n        //\n        // Summary:\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/expired.\n        public const string Expired = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/expired\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the gender of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/gender.\n        public const string Gender = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/gender\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the given name of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname.\n        public const string GivenName = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the SID for the group of an entity, http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid.\n        public const string GroupSid = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies a hash value, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/hash.\n        public const string Hash = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/hash\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the home phone number of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/homephone.\n        public const string HomePhone = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/homephone\";\n        //\n        // Summary:\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/ispersistent.\n        public const string IsPersistent = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/ispersistent\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the locale in which an entity resides, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/locality.\n        public const string Locality = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/locality\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the mobile phone number of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/mobilephone.\n        public const string MobilePhone = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/mobilephone\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the name of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name.\n        public const string Name = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the name of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier.\n        public const string NameIdentifier = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the alternative phone number of an entity,\n        //     http://schemas.xmlsoap.org/ws/2005/05/identity/claims/otherphone.\n        public const string OtherPhone = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/otherphone\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the postal code of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/postalcode.\n        public const string PostalCode = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/postalcode\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the primary group SID of an entity, http://schemas.microsoft.com/ws/2008/06/identity/claims/primarygroupsid.\n        public const string PrimaryGroupSid = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/primarygroupsid\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the primary SID of an entity, http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid.\n        public const string PrimarySid = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the role of an entity, http://schemas.microsoft.com/ws/2008/06/identity/claims/role.\n        public const string Role = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/role\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies an RSA key, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/rsa.\n        public const string Rsa = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/rsa\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies a serial number, http://schemas.microsoft.com/ws/2008/06/identity/claims/serialnumber.\n        public const string SerialNumber = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/serialnumber\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies a security identifier (SID), http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid.\n        public const string Sid = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/sid\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies a service principal name (SPN) claim, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/spn.\n        public const string Spn = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/spn\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the state or province in which an entity resides,\n        //     http://schemas.xmlsoap.org/ws/2005/05/identity/claims/stateorprovince.\n        public const string StateOrProvince = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/stateorprovince\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the street address of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/streetaddress.\n        public const string StreetAddress = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/streetaddress\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the surname of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname.\n        public const string Surname = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname\";\n        //\n        // Summary:\n        //     The URI for a claim that identifies the system entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/system.\n        public const string System = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/system\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies a thumbprint, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/thumbprint.\n        //     A thumbprint is a globally unique SHA-1 hash of an X.509 certificate.\n        public const string Thumbprint = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/thumbprint\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies a user principal name (UPN), http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn.\n        public const string Upn = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies a URI, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/uri.\n        public const string Uri = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/uri\";\n        //\n        // Summary:\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/userdata.\n        public const string UserData = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/userdata\";\n        //\n        // Summary:\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/version.\n        public const string Version = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/version\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the webpage of an entity, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/webpage.\n        public const string Webpage = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/webpage\";\n        //\n        // Summary:\n        //     The URI for a claim that specifies the Windows domain account name of an entity,\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname.\n        public const string WindowsAccountName = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname\";\n        //\n        // Summary:\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdeviceclaim.\n        public const string WindowsDeviceClaim = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdeviceclaim\";\n        //\n        // Summary:\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdevicegroup.\n        public const string WindowsDeviceGroup = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsdevicegroup\";\n        //\n        // Summary:\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsfqbnversion.\n        public const string WindowsFqbnVersion = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsfqbnversion\";\n        //\n        // Summary:\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/windowssubauthority.\n        public const string WindowsSubAuthority = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/windowssubauthority\";\n        //\n        // Summary:\n        //     http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsuserclaim.\n        public const string WindowsUserClaim = \"http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsuserclaim\";\n        //\n        // Summary:\n        //     The URI for a distinguished name claim of an X.509 certificate, http://schemas.xmlsoap.org/ws/2005/05/identity/claims/x500distinguishedname.\n        //     The X.500 standard defines the methodology for defining distinguished names that\n        //     are used by X.509 certificates.\n        public const string X500DistinguishedName = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/x500distinguishedname\";\n\n        #endregion\n\n        public const string AvatarURL = \"http://schemas.xmlsoap.org/ws/2009/09/identity/claims/avatarurl\";\n        public const string Position = \"http://schemas.xmlsoap.org/ws/2009/09/identity/claims/position\";\n        public const string NickName = \"http://schemas.xmlsoap.org/ws/2009/09/identity/claims/nickname\";\n        public const string DateRegistered = \"http://schemas.xmlsoap.org/ws/2009/09/identity/claims/dateregistered\";\n\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Common/Extensions/IdentityExtension.cs",
    "content": "﻿using System.Linq;\nusing System.Security.Claims;\n\nnamespace AdminLTE.Common.Extensions\n{\n    public static class IdentityExtension\n    {\n        /// <summary>\n        /// //Use CustomClaimTypes when using this method\n        /// </summary>\n        /// <param name=\"user\"></param>\n        /// <param name=\"claimType\">Use [CustomClaimTypes] when using this method</param>\n        /// <returns></returns>\n        public static string GetUserProperty(this ClaimsPrincipal user, string claimType)\n        {\n            if (user.Identity.IsAuthenticated)\n            {\n                return user.Claims.FirstOrDefault(v => v.Type == claimType)?.Value ?? string.Empty;\n            }\n\n            return string.Empty;\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Common/GlobalHelper.cs",
    "content": "﻿using Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Http.Features;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace AdminLTE.Common\n{\n    public static class GlobalHelper\n    {\n\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Common/ModuleHelper.cs",
    "content": "﻿using AdminLTE.Models;\nusing System;\nusing System.Collections.Generic;\n\nnamespace AdminLTE.Common\n{\n    /// <summary>\n    /// This is where you customize the navigation sidebar\n    /// </summary>\n    public static class ModuleHelper\n    {\n        public enum Module\n        {\n            Home,\n            About,\n            Contact,\n            Error,\n            Login,\n            Register,\n            SuperAdmin,\n            Role,\n            UserLogs\n        }\n\n        public static SidebarMenu AddHeader(string name)\n        {\n            return new SidebarMenu\n            {\n                Type = SidebarMenuType.Header,\n                Name = name,\n            };\n        }\n\n        public static SidebarMenu AddTree(string name, string iconClassName = \"bi bi-link\")\n        {\n            return new SidebarMenu\n            {\n                Type = SidebarMenuType.Tree,\n                IsActive = false,\n                Name = name,\n                IconClassName = iconClassName,\n                URLPath = \"#\",\n            };\n        }\n\n        public static SidebarMenu AddModule(Module module, Tuple<int, int, int> counter = null)\n        {\n            if (counter == null)\n                counter = Tuple.Create(0, 0, 0);\n\n            switch (module)\n            {\n                case Module.Home:\n                    return new SidebarMenu\n                    {\n                        Type = SidebarMenuType.Link,\n                        Name = \"Home\",\n                        IconClassName = \"bi bi-house-door-fill\",\n                        URLPath = \"/\",\n                        LinkCounter = counter,\n                    };\n                case Module.Login:\n                    return new SidebarMenu\n                    {\n                        Type = SidebarMenuType.Link,\n                        Name = \"Login\",\n                        IconClassName = \"bi bi-door-open-fill\",\n                        URLPath = \"/Account/Login\",\n                        LinkCounter = counter,\n                    };\n                case Module.Register:\n                    return new SidebarMenu\n                    {\n                        Type = SidebarMenuType.Link,\n                        Name = \"Register\",\n                        IconClassName = \"bi bi-person-fill-add\",\n                        URLPath = \"/Account/Register\",\n                        LinkCounter = counter,\n                    };\n                case Module.About:\n                    return new SidebarMenu\n                    {\n                        Type = SidebarMenuType.Link,\n                        Name = \"About\",\n                        IconClassName = \"bi bi-people-fill\",\n                        URLPath = \"/Home/About\",\n                        LinkCounter = counter,\n                    };\n                case Module.Contact:\n                    return new SidebarMenu\n                    {\n                        Type = SidebarMenuType.Link,\n                        Name = \"Contact\",\n                        IconClassName = \"bi bi-telephone-fill\",\n                        URLPath = \"/Home/Contact\",\n                        LinkCounter = counter,\n                    };\n                case Module.Error:\n                    return new SidebarMenu\n                    {\n                        Type = SidebarMenuType.Link,\n                        Name = \"Error\",\n                        IconClassName = \"bi bi-exclamation-triangle-fill\",\n                        URLPath = \"/Home/Error\",\n                        LinkCounter = counter,\n                    };\n                case Module.SuperAdmin:\n                    return new SidebarMenu\n                    {\n                        Type = SidebarMenuType.Link,\n                        Name = \"User\",\n                        IconClassName = \"bi bi-people-fill\",\n                        URLPath = \"/SuperAdmin\",\n                        LinkCounter = counter,\n                    };\n                case Module.Role:\n                    return new SidebarMenu\n                    {\n                        Type = SidebarMenuType.Link,\n                        Name = \"Role\",\n                        IconClassName = \"bi bi-person-fill-gear\",\n                        URLPath = \"/Role\",\n                        LinkCounter = counter,\n                    };\n                case Module.UserLogs:\n                    return new SidebarMenu\n                    {\n                        Type = SidebarMenuType.Link,\n                        Name = \"UserLogs\",\n                        IconClassName = \"bi bi-clock-history\",\n                        URLPath = \"/UserLogs\",\n                        LinkCounter = counter,\n                    };\n\n                default:\n                    break;\n            }\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Controllers/AccountController.cs",
    "content": "﻿using System.Linq;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Identity;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.AspNetCore.Mvc.Rendering;\nusing Microsoft.Extensions.Logging;\nusing AdminLTE.Models;\nusing AdminLTE.Models.AccountViewModels;\nusing AdminLTE.Services;\nusing AdminLTE.Common;\nusing System;\n\nnamespace AdminLTE.Controllers\n{\n    [Authorize]\n    public class AccountController : Controller\n    {\n        private readonly UserManager<ApplicationUser> _userManager;\n        private readonly SignInManager<ApplicationUser> _signInManager;\n        private readonly IEmailSender _emailSender;\n        private readonly ISmsSender _smsSender;\n        private readonly ILogger _logger;\n        \n        public AccountController(\n            UserManager<ApplicationUser> userManager,\n            SignInManager<ApplicationUser> signInManager,\n            IEmailSender emailSender,\n            ISmsSender smsSender,\n            ILoggerFactory loggerFactory)\n        {\n            _userManager = userManager;\n            _signInManager = signInManager;\n            _emailSender = emailSender;\n            _smsSender = smsSender;\n            _logger = loggerFactory.CreateLogger<AccountController>();\n        }\n\n        //\n        // GET: /Account/Login\n        [HttpGet]\n        [AllowAnonymous]\n        public IActionResult Login(string returnUrl = null)\n        {\n            ViewData[\"ReturnUrl\"] = returnUrl;\n            return View();\n        }\n\n        //\n        // POST: /Account/Login\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)\n        {\n            ViewData[\"ReturnUrl\"] = returnUrl;\n            if (ModelState.IsValid)\n            {\n                // This doesn't count login failures towards account lockout\n                // To enable password failures to trigger account lockout, set lockoutOnFailure: true\n\n                var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);\n                if (result.Succeeded)\n                {\n                    _logger.LogInformation(1, \"User logged in.\");\n                    return RedirectToLocal(returnUrl);\n                }\n                if (result.RequiresTwoFactor)\n                {\n                    return RedirectToAction(nameof(SendCode), new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });\n                }\n                if (result.IsLockedOut)\n                {\n                    _logger.LogWarning(2, \"User account locked out.\");\n                    return View(\"Lockout\");\n                }\n                else\n                {\n                    ModelState.AddModelError(string.Empty, \"Invalid login attempt.\");\n                    return View(model);\n                }\n            }\n\n            // If we got this far, something failed, redisplay form\n            return View(model);\n        }\n\n        //\n        // GET: /Account/Register\n        [HttpGet]\n        [AllowAnonymous]\n        public IActionResult Register(string returnUrl = null)\n        {\n            ViewData[\"ReturnUrl\"] = returnUrl;\n            return View();\n        }\n\n        //\n        // POST: /Account/Register\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)\n        {\n            ViewData[\"ReturnUrl\"] = returnUrl;\n            if (ModelState.IsValid)\n            {\n                var user = new ApplicationUser\n                {\n                    UserName = model.Email,\n                    Email = model.Email,\n                    //extended properties\n                    FirstName = model.FirstName,\n                    LastName = model.LastName,\n                    AvatarURL = \"/images/user.png\",\n                    DateRegistered = DateTime.UtcNow.ToString(),\n                    Position = \"\",\n                    NickName = \"\",\n                   \n                };\n                var result = await _userManager.CreateAsync(user, model.Password);\n                if (result.Succeeded)\n                {\n                    // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713\n                    // Send an email with this link\n                    //var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);\n                    //var callbackUrl = Url.Action(\"ConfirmEmail\", \"Account\", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme);\n                    //await _emailSender.SendEmailAsync(model.Email, \"Confirm your account\",\n                    //    $\"Please confirm your account by clicking this link: <a href='{callbackUrl}'>link</a>\");\n                    await _signInManager.SignInAsync(user, isPersistent: false);\n                    _logger.LogInformation(3, \"User created a new account with password.\");\n\n                    await _userManager.AddClaimAsync(user, new Claim(CustomClaimTypes.GivenName, user.FirstName));\n                    await _userManager.AddClaimAsync(user, new Claim(CustomClaimTypes.Surname, user.LastName));\n                    await _userManager.AddClaimAsync(user, new Claim(CustomClaimTypes.AvatarURL, user.AvatarURL));\n\n                    return RedirectToLocal(returnUrl);\n                }\n                AddErrors(result);\n            }\n\n            // If we got this far, something failed, redisplay form\n            return View(model);\n        }\n\n        //\n        // POST: /Account/LogOff\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> LogOff()\n        {\n            await _signInManager.SignOutAsync();\n            _logger.LogInformation(4, \"User logged out.\");\n            return RedirectToAction(nameof(HomeController.Index), \"Home\");\n        }\n\n        //\n        // POST: /Account/ExternalLogin\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public IActionResult ExternalLogin(string provider, string returnUrl = null)\n        {\n            // Request a redirect to the external login provider.\n            var redirectUrl = Url.Action(\"ExternalLoginCallback\", \"Account\", new { ReturnUrl = returnUrl });\n            var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);\n            return Challenge(properties, provider);\n        }\n\n        //\n        // GET: /Account/ExternalLoginCallback\n        [HttpGet]\n        [AllowAnonymous]\n        public async Task<IActionResult> ExternalLoginCallback(string returnUrl = null, string remoteError = null)\n        {\n            if (remoteError != null)\n            {\n                ModelState.AddModelError(string.Empty, $\"Error from external provider: {remoteError}\");\n                return View(nameof(Login));\n            }\n            var info = await _signInManager.GetExternalLoginInfoAsync();\n            if (info == null)\n            {\n                return RedirectToAction(nameof(Login));\n            }\n\n            // Sign in the user with this external login provider if the user already has a login.\n            var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, isPersistent: false);\n            if (result.Succeeded)\n            {\n                _logger.LogInformation(5, \"User logged in with {Name} provider.\", info.LoginProvider);\n                return RedirectToLocal(returnUrl);\n            }\n            if (result.RequiresTwoFactor)\n            {\n                return RedirectToAction(nameof(SendCode), new { ReturnUrl = returnUrl });\n            }\n            if (result.IsLockedOut)\n            {\n                return View(\"Lockout\");\n            }\n            else\n            {\n                // If the user does not have an account, then ask the user to create an account.\n                ViewData[\"ReturnUrl\"] = returnUrl;\n                ViewData[\"LoginProvider\"] = info.LoginProvider;\n                var email = info.Principal.FindFirstValue(ClaimTypes.Email);\n                return View(\"ExternalLoginConfirmation\", new ExternalLoginConfirmationViewModel { Email = email });\n            }\n        }\n\n        //\n        // POST: /Account/ExternalLoginConfirmation\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl = null)\n        {\n            if (ModelState.IsValid)\n            {\n                // Get the information about the user from the external login provider\n                var info = await _signInManager.GetExternalLoginInfoAsync();\n                if (info == null)\n                {\n                    return View(\"ExternalLoginFailure\");\n                }\n                var user = new ApplicationUser { UserName = model.Email, Email = model.Email };\n                var result = await _userManager.CreateAsync(user);\n                if (result.Succeeded)\n                {\n                    result = await _userManager.AddLoginAsync(user, info);\n                    if (result.Succeeded)\n                    {\n                        await _signInManager.SignInAsync(user, isPersistent: false);\n                        _logger.LogInformation(6, \"User created an account using {Name} provider.\", info.LoginProvider);\n                        return RedirectToLocal(returnUrl);\n                    }\n                }\n                AddErrors(result);\n            }\n\n            ViewData[\"ReturnUrl\"] = returnUrl;\n            return View(model);\n        }\n\n        // GET: /Account/ConfirmEmail\n        [HttpGet]\n        [AllowAnonymous]\n        public async Task<IActionResult> ConfirmEmail(string userId, string code)\n        {\n            if (userId == null || code == null)\n            {\n                return View(\"Error\");\n            }\n            var user = await _userManager.FindByIdAsync(userId);\n            if (user == null)\n            {\n                return View(\"Error\");\n            }\n            var result = await _userManager.ConfirmEmailAsync(user, code);\n            return View(result.Succeeded ? \"ConfirmEmail\" : \"Error\");\n        }\n\n        //\n        // GET: /Account/ForgotPassword\n        [HttpGet]\n        [AllowAnonymous]\n        public IActionResult ForgotPassword()\n        {\n            return View();\n        }\n\n        //\n        // POST: /Account/ForgotPassword\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> ForgotPassword(ForgotPasswordViewModel model)\n        {\n            if (ModelState.IsValid)\n            {\n                var user = await _userManager.FindByNameAsync(model.Email);\n                if (user == null || !(await _userManager.IsEmailConfirmedAsync(user)))\n                {\n                    // Don't reveal that the user does not exist or is not confirmed\n                    return View(\"ForgotPasswordConfirmation\");\n                }\n\n                // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=532713\n                // Send an email with this link\n                //var code = await _userManager.GeneratePasswordResetTokenAsync(user);\n                //var callbackUrl = Url.Action(\"ResetPassword\", \"Account\", new { userId = user.Id, code = code }, protocol: HttpContext.Request.Scheme);\n                //await _emailSender.SendEmailAsync(model.Email, \"Reset Password\",\n                //   $\"Please reset your password by clicking here: <a href='{callbackUrl}'>link</a>\");\n                //return View(\"ForgotPasswordConfirmation\");\n            }\n\n            // If we got this far, something failed, redisplay form\n            return View(model);\n        }\n\n        //\n        // GET: /Account/ForgotPasswordConfirmation\n        [HttpGet]\n        [AllowAnonymous]\n        public IActionResult ForgotPasswordConfirmation()\n        {\n            return View();\n        }\n\n        //\n        // GET: /Account/ResetPassword\n        [HttpGet]\n        [AllowAnonymous]\n        public IActionResult ResetPassword(string code = null)\n        {\n            return code == null ? View(\"Error\") : View();\n        }\n\n        //\n        // POST: /Account/ResetPassword\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> ResetPassword(ResetPasswordViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n            var user = await _userManager.FindByNameAsync(model.Email);\n            if (user == null)\n            {\n                // Don't reveal that the user does not exist\n                return RedirectToAction(nameof(AccountController.ResetPasswordConfirmation), \"Account\");\n            }\n            var result = await _userManager.ResetPasswordAsync(user, model.Code, model.Password);\n            if (result.Succeeded)\n            {\n                return RedirectToAction(nameof(AccountController.ResetPasswordConfirmation), \"Account\");\n            }\n            AddErrors(result);\n            return View();\n        }\n\n        //\n        // GET: /Account/ResetPasswordConfirmation\n        [HttpGet]\n        [AllowAnonymous]\n        public IActionResult ResetPasswordConfirmation()\n        {\n            return View();\n        }\n\n        //\n        // GET: /Account/SendCode\n        [HttpGet]\n        [AllowAnonymous]\n        public async Task<ActionResult> SendCode(string returnUrl = null, bool rememberMe = false)\n        {\n            var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();\n            if (user == null)\n            {\n                return View(\"Error\");\n            }\n            var userFactors = await _userManager.GetValidTwoFactorProvidersAsync(user);\n            var factorOptions = userFactors.Select(purpose => new SelectListItem { Text = purpose, Value = purpose }).ToList();\n            return View(new SendCodeViewModel { Providers = factorOptions, ReturnUrl = returnUrl, RememberMe = rememberMe });\n        }\n\n        //\n        // POST: /Account/SendCode\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> SendCode(SendCodeViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View();\n            }\n\n            var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();\n            if (user == null)\n            {\n                return View(\"Error\");\n            }\n\n            // Generate the token and send it\n            var code = await _userManager.GenerateTwoFactorTokenAsync(user, model.SelectedProvider);\n            if (string.IsNullOrWhiteSpace(code))\n            {\n                return View(\"Error\");\n            }\n\n            var message = \"Your security code is: \" + code;\n            if (model.SelectedProvider == \"Email\")\n            {\n                await _emailSender.SendEmailAsync(await _userManager.GetEmailAsync(user), \"Security Code\", message);\n            }\n            else if (model.SelectedProvider == \"Phone\")\n            {\n                await _smsSender.SendSmsAsync(await _userManager.GetPhoneNumberAsync(user), message);\n            }\n\n            return RedirectToAction(nameof(VerifyCode), new { Provider = model.SelectedProvider, ReturnUrl = model.ReturnUrl, RememberMe = model.RememberMe });\n        }\n\n        //\n        // GET: /Account/VerifyCode\n        [HttpGet]\n        [AllowAnonymous]\n        public async Task<IActionResult> VerifyCode(string provider, bool rememberMe, string returnUrl = null)\n        {\n            // Require that the user has already logged in via username/password or external login\n            var user = await _signInManager.GetTwoFactorAuthenticationUserAsync();\n            if (user == null)\n            {\n                return View(\"Error\");\n            }\n            return View(new VerifyCodeViewModel { Provider = provider, ReturnUrl = returnUrl, RememberMe = rememberMe });\n        }\n\n        //\n        // POST: /Account/VerifyCode\n        [HttpPost]\n        [AllowAnonymous]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> VerifyCode(VerifyCodeViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n\n            // The following code protects for brute force attacks against the two factor codes.\n            // If a user enters incorrect codes for a specified amount of time then the user account\n            // will be locked out for a specified amount of time.\n            var result = await _signInManager.TwoFactorSignInAsync(model.Provider, model.Code, model.RememberMe, model.RememberBrowser);\n            if (result.Succeeded)\n            {\n                return RedirectToLocal(model.ReturnUrl);\n            }\n            if (result.IsLockedOut)\n            {\n                _logger.LogWarning(7, \"User account locked out.\");\n                return View(\"Lockout\");\n            }\n            else\n            {\n                ModelState.AddModelError(string.Empty, \"Invalid code.\");\n                return View(model);\n            }\n        }\n\n        #region Helpers\n\n        private void AddErrors(IdentityResult result)\n        {\n            foreach (var error in result.Errors)\n            {\n                ModelState.AddModelError(string.Empty, error.Description);\n            }\n        }\n\n        private Task<ApplicationUser> GetCurrentUserAsync()\n        {\n            return _userManager.GetUserAsync(HttpContext.User);\n        }\n\n        private IActionResult RedirectToLocal(string returnUrl)\n        {\n            if (Url.IsLocalUrl(returnUrl))\n            {\n                return Redirect(returnUrl);\n            }\n            else\n            {\n                return RedirectToAction(nameof(HomeController.Index), \"Home\");\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Controllers/BaseController.cs",
    "content": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing AdminLTE.Models;\nusing System.Runtime.CompilerServices;\n\nnamespace AdminLTE.Controllers\n{\n    public class BaseController : Controller\n    {\n        internal void AddBreadcrumb(string displayName, string urlPath)\n        {\n            List<Message> messages;\n\n            if (ViewBag.Breadcrumb == null)\n            {\n                messages = new List<Message>();\n            }\n            else\n            {\n                messages = ViewBag.Breadcrumb as List<Message>;\n            }\n\n            messages.Add(new Message { DisplayName = displayName, URLPath = urlPath });\n            ViewBag.Breadcrumb = messages;\n        }\n\n        internal void AddPageHeader(string pageHeader = \"\", string pageDescription = \"\")\n        {\n            ViewBag.PageHeader = Tuple.Create(pageHeader, pageDescription);\n        }\n\n        internal enum PageAlertType\n        {\n            Error,\n            Info,\n            Warning,\n            Success\n        }\n\n        internal void AddPageAlerts(PageAlertType pageAlertType, string description)\n        {\n            List<Message> messages;\n\n            if (ViewBag.PageAlerts == null)\n            {\n                messages = new List<Message>();\n            }\n            else\n            {\n                messages = ViewBag.PageAlerts as List<Message>;\n            }\n\n            messages.Add(new Message { Type = pageAlertType.ToString().ToLower(), ShortDesc = description });\n            ViewBag.PageAlerts = messages;\n        }\n    }\n}"
  },
  {
    "path": "src/AdminLTE/Controllers/HomeController.cs",
    "content": "﻿using AdminLTE.Common.Attributes;\nusing AdminLTE.Models;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace AdminLTE.Controllers\n{\n    public class HomeController : BaseController\n    {\n        [HelpDefinition]\n        public IActionResult Index()\n        {\n            AddPageHeader(\"Dashboard\", \"\");\n            return View();\n        }\n\n        [HttpPost]\n        public IActionResult Index(object model)\n        {\n            AddPageAlerts(PageAlertType.Info, \"you may view the summary <a href='#'>here</a>\");\n            return View(\"Index\");\n        }\n\n        [HelpDefinition]\n        public IActionResult About()\n        {\n            ViewData[\"Message\"] = \"Your application description page.\";\n            AddBreadcrumb(\"About\", \"/Account/About\");\n\n            return View();\n        }\n\n        [HelpDefinition(\"helpdefault\")]\n        public IActionResult Contact()\n        {\n            AddBreadcrumb(\"Contact\", \"/Account/Contact\");\n            ViewData[\"Message\"] = \"Your contact page.\";\n\n            return View();\n        }\n\n        public IActionResult Error()\n        {\n            return View();\n        }\n\n        #region Get data method.\n\n        /// <summary>\n        /// GET: /Home/GetData\n        /// </summary>\n        /// <returns>Return data</returns>\n        public ActionResult GetData()\n        {\n            try\n            {\n                // Initialization.\n                string search = Request.Form[\"search[value]\"][0];\n                string draw = Request.Form[\"draw\"][0];\n                string order = Request.Form[\"order[0][column]\"][0];\n                string orderDir = Request.Form[\"order[0][dir]\"][0];\n                int startRec = Convert.ToInt32(Request.Form[\"start\"][0]);\n                int pageSize = Convert.ToInt32(Request.Form[\"length\"][0]);\n\n                // Loading.\n                List<SalesOrderDetail> data = this.LoadData();\n\n                // Total record count.\n                int totalRecords = data.Count;\n\n                // Verification.\n                if (!string.IsNullOrEmpty(search) &&\n                    !string.IsNullOrWhiteSpace(search))\n                {\n                    // Apply search\n                    data = data.Where(p => p.sr.ToString().ToLower().Contains(search.ToLower()) ||\n                                           p.ordertracknumber.ToLower().Contains(search.ToLower()) ||\n                                           p.quantity.ToString().ToLower().Contains(search.ToLower()) ||\n                                           p.productname.ToLower().Contains(search.ToLower()) ||\n                                           p.specialoffer.ToLower().Contains(search.ToLower()) ||\n                                           p.unitprice.ToString().ToLower().Contains(search.ToLower()) ||\n                                           p.unitpricediscount.ToString().ToLower().Contains(search.ToLower())).ToList();\n                }\n\n                // Sorting.\n                data = this.SortByColumnWithOrder(order, orderDir, data);\n\n                // Filter record count.\n                int recFilter = data.Count;\n\n                // Apply pagination.\n                data = data.Skip(startRec).Take(pageSize).ToList();\n\n                // Loading drop down lists.\n                var result = this.Json(new { draw = Convert.ToInt32(draw), recordsTotal = totalRecords, recordsFiltered = recFilter, data = data });\n                return result;\n            }\n            catch (Exception ex)\n            {\n                // Info\n                Console.Write(ex);\n                return null;\n            }\n        }\n\n        #endregion\n\n        #region Helpers\n\n        #region Load Data\n\n        /// <summary>\n        /// Load data method.\n        /// </summary>\n        /// <returns>Returns - Data</returns>\n        private List<SalesOrderDetail> LoadData()\n        {\n            // Initialization.\n            List<SalesOrderDetail> lst = new List<SalesOrderDetail>();\n\n            try\n            {\n                // Initialization.\n                string line = string.Empty;\n                //string srcFilePath = \"content/files/SalesOrderDetail.txt\";\n                //var rootPath = Path.GetDirectoryName(AppContext.BaseDirectory);\n                //var fullPath = Path.Combine(rootPath, srcFilePath);\n                //string filePath = new Uri(fullPath).LocalPath;\n                StreamReader sr = new StreamReader(new FileStream(@\"wwwroot\\files\\SalesOrderDetail.txt\", FileMode.Open, FileAccess.Read));\n\n                // Read file.\n                while ((line = sr.ReadLine()) != null)\n                {\n                    // Initialization.\n                    SalesOrderDetail infoObj = new SalesOrderDetail();\n                    string[] info = line.Split(',');\n\n                    // Setting.\n                    infoObj.sr = Convert.ToInt32(info[0].ToString());\n                    infoObj.ordertracknumber = info[1].ToString();\n                    infoObj.quantity = Convert.ToInt32(info[2].ToString());\n                    infoObj.productname = info[3].ToString();\n                    infoObj.specialoffer = info[4].ToString();\n                    infoObj.unitprice = Convert.ToDouble(info[5].ToString());\n                    infoObj.unitpricediscount = Convert.ToDouble(info[6].ToString());\n\n                    // Adding.\n                    lst.Add(infoObj);\n                }\n\n                // Closing.\n                sr.Dispose();\n            }\n            catch (Exception ex)\n            {\n                // info.\n                Console.Write(ex);\n            }\n\n            // info.\n            return lst;\n        }\n\n        #endregion\n\n        #region Sort by column with order method\n\n        /// <summary>\n        /// Sort by column with order method.\n        /// </summary>\n        /// <param name=\"order\">Order parameter</param>\n        /// <param name=\"orderDir\">Order direction parameter</param>\n        /// <param name=\"data\">Data parameter</param>\n        /// <returns>Returns - Data</returns>\n        private List<SalesOrderDetail> SortByColumnWithOrder(string order, string orderDir, List<SalesOrderDetail> data)\n        {\n            // Initialization.\n            List<SalesOrderDetail> lst = new List<SalesOrderDetail>();\n\n            try\n            {\n                // Sorting\n                switch (order)\n                {\n                    case \"0\":\n                        // Setting.\n                        lst = orderDir.Equals(\"DESC\", StringComparison.CurrentCultureIgnoreCase) ? data.OrderByDescending(p => p.sr).ToList()\n                                                                                                 : data.OrderBy(p => p.sr).ToList();\n                        break;\n\n                    case \"1\":\n                        // Setting.\n                        lst = orderDir.Equals(\"DESC\", StringComparison.CurrentCultureIgnoreCase) ? data.OrderByDescending(p => p.ordertracknumber).ToList()\n                                                                                                 : data.OrderBy(p => p.ordertracknumber).ToList();\n                        break;\n\n                    case \"2\":\n                        // Setting.\n                        lst = orderDir.Equals(\"DESC\", StringComparison.CurrentCultureIgnoreCase) ? data.OrderByDescending(p => p.quantity).ToList()\n                                                                                                 : data.OrderBy(p => p.quantity).ToList();\n                        break;\n\n                    case \"3\":\n                        // Setting.\n                        lst = orderDir.Equals(\"DESC\", StringComparison.CurrentCultureIgnoreCase) ? data.OrderByDescending(p => p.productname).ToList()\n                                                                                                 : data.OrderBy(p => p.productname).ToList();\n                        break;\n\n                    case \"4\":\n                        // Setting.\n                        lst = orderDir.Equals(\"DESC\", StringComparison.CurrentCultureIgnoreCase) ? data.OrderByDescending(p => p.specialoffer).ToList()\n                                                                                                   : data.OrderBy(p => p.specialoffer).ToList();\n                        break;\n\n                    case \"5\":\n                        // Setting.\n                        lst = orderDir.Equals(\"DESC\", StringComparison.CurrentCultureIgnoreCase) ? data.OrderByDescending(p => p.unitprice).ToList()\n                                                                                                 : data.OrderBy(p => p.unitprice).ToList();\n                        break;\n\n                    case \"6\":\n                        // Setting.\n                        lst = orderDir.Equals(\"DESC\", StringComparison.CurrentCultureIgnoreCase) ? data.OrderByDescending(p => p.unitpricediscount).ToList()\n                                                                                                 : data.OrderBy(p => p.unitpricediscount).ToList();\n                        break;\n\n                    default:\n\n                        // Setting.\n                        lst = orderDir.Equals(\"DESC\", StringComparison.CurrentCultureIgnoreCase) ? data.OrderByDescending(p => p.sr).ToList()\n                                                                                                 : data.OrderBy(p => p.sr).ToList();\n                        break;\n                }\n            }\n            catch (Exception ex)\n            {\n                // info.\n                Console.Write(ex);\n            }\n\n            // info.\n            return lst;\n        }\n\n        #endregion\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Controllers/ManageController.cs",
    "content": "﻿using System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Identity;\nusing Microsoft.AspNetCore.Mvc;\nusing Microsoft.Extensions.Logging;\nusing AdminLTE.Models;\nusing AdminLTE.Models.ManageViewModels;\nusing AdminLTE.Services;\n\nnamespace AdminLTE.Controllers\n{\n    [Authorize]\n    public class ManageController : Controller\n    {\n        private readonly UserManager<ApplicationUser> _userManager;\n        private readonly SignInManager<ApplicationUser> _signInManager;\n        private readonly IEmailSender _emailSender;\n        private readonly ISmsSender _smsSender;\n        private readonly ILogger _logger;\n\n        public ManageController(\n        UserManager<ApplicationUser> userManager,\n        SignInManager<ApplicationUser> signInManager,\n        IEmailSender emailSender,\n        ISmsSender smsSender,\n        ILoggerFactory loggerFactory)\n        {\n            _userManager = userManager;\n            _signInManager = signInManager;\n            _emailSender = emailSender;\n            _smsSender = smsSender;\n            _logger = loggerFactory.CreateLogger<ManageController>();\n        }\n\n        //\n        // GET: /Manage/Index\n        [HttpGet]\n        public async Task<IActionResult> Index(ManageMessageId? message = null)\n        {\n            ViewData[\"StatusMessage\"] =\n                message == ManageMessageId.ChangePasswordSuccess ? \"Your password has been changed.\"\n                : message == ManageMessageId.SetPasswordSuccess ? \"Your password has been set.\"\n                : message == ManageMessageId.SetTwoFactorSuccess ? \"Your two-factor authentication provider has been set.\"\n                : message == ManageMessageId.Error ? \"An error has occurred.\"\n                : message == ManageMessageId.AddPhoneSuccess ? \"Your phone number was added.\"\n                : message == ManageMessageId.RemovePhoneSuccess ? \"Your phone number was removed.\"\n                : \"\";\n\n            var user = await GetCurrentUserAsync();\n            if (user == null)\n            {\n                return View(\"Error\");\n            }\n            var model = new IndexViewModel\n            {\n                HasPassword = await _userManager.HasPasswordAsync(user),\n                PhoneNumber = await _userManager.GetPhoneNumberAsync(user),\n                TwoFactor = await _userManager.GetTwoFactorEnabledAsync(user),\n                Logins = await _userManager.GetLoginsAsync(user),\n                BrowserRemembered = await _signInManager.IsTwoFactorClientRememberedAsync(user)\n            };\n            return View(model);\n        }\n\n        //\n        // POST: /Manage/RemoveLogin\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> RemoveLogin(RemoveLoginViewModel account)\n        {\n            ManageMessageId? message = ManageMessageId.Error;\n            var user = await GetCurrentUserAsync();\n            if (user != null)\n            {\n                var result = await _userManager.RemoveLoginAsync(user, account.LoginProvider, account.ProviderKey);\n                if (result.Succeeded)\n                {\n                    await _signInManager.SignInAsync(user, isPersistent: false);\n                    message = ManageMessageId.RemoveLoginSuccess;\n                }\n            }\n            return RedirectToAction(nameof(ManageLogins), new { Message = message });\n        }\n\n        //\n        // GET: /Manage/AddPhoneNumber\n        public IActionResult AddPhoneNumber()\n        {\n            return View();\n        }\n\n        //\n        // POST: /Manage/AddPhoneNumber\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> AddPhoneNumber(AddPhoneNumberViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n            // Generate the token and send it\n            var user = await GetCurrentUserAsync();\n            if (user == null)\n            {\n                return View(\"Error\");\n            }\n            var code = await _userManager.GenerateChangePhoneNumberTokenAsync(user, model.PhoneNumber);\n            await _smsSender.SendSmsAsync(model.PhoneNumber, \"Your security code is: \" + code);\n            return RedirectToAction(nameof(VerifyPhoneNumber), new { PhoneNumber = model.PhoneNumber });\n        }\n\n        //\n        // POST: /Manage/EnableTwoFactorAuthentication\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> EnableTwoFactorAuthentication()\n        {\n            var user = await GetCurrentUserAsync();\n            if (user != null)\n            {\n                await _userManager.SetTwoFactorEnabledAsync(user, true);\n                await _signInManager.SignInAsync(user, isPersistent: false);\n                _logger.LogInformation(1, \"User enabled two-factor authentication.\");\n            }\n            return RedirectToAction(nameof(Index), \"Manage\");\n        }\n\n        //\n        // POST: /Manage/DisableTwoFactorAuthentication\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> DisableTwoFactorAuthentication()\n        {\n            var user = await GetCurrentUserAsync();\n            if (user != null)\n            {\n                await _userManager.SetTwoFactorEnabledAsync(user, false);\n                await _signInManager.SignInAsync(user, isPersistent: false);\n                _logger.LogInformation(2, \"User disabled two-factor authentication.\");\n            }\n            return RedirectToAction(nameof(Index), \"Manage\");\n        }\n\n        //\n        // GET: /Manage/VerifyPhoneNumber\n        [HttpGet]\n        public async Task<IActionResult> VerifyPhoneNumber(string phoneNumber)\n        {\n            var user = await GetCurrentUserAsync();\n            if (user == null)\n            {\n                return View(\"Error\");\n            }\n            var code = await _userManager.GenerateChangePhoneNumberTokenAsync(user, phoneNumber);\n            // Send an SMS to verify the phone number\n            return phoneNumber == null ? View(\"Error\") : View(new VerifyPhoneNumberViewModel { PhoneNumber = phoneNumber });\n        }\n\n        //\n        // POST: /Manage/VerifyPhoneNumber\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> VerifyPhoneNumber(VerifyPhoneNumberViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n            var user = await GetCurrentUserAsync();\n            if (user != null)\n            {\n                var result = await _userManager.ChangePhoneNumberAsync(user, model.PhoneNumber, model.Code);\n                if (result.Succeeded)\n                {\n                    await _signInManager.SignInAsync(user, isPersistent: false);\n                    return RedirectToAction(nameof(Index), new { Message = ManageMessageId.AddPhoneSuccess });\n                }\n            }\n            // If we got this far, something failed, redisplay the form\n            ModelState.AddModelError(string.Empty, \"Failed to verify phone number\");\n            return View(model);\n        }\n\n        //\n        // POST: /Manage/RemovePhoneNumber\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> RemovePhoneNumber()\n        {\n            var user = await GetCurrentUserAsync();\n            if (user != null)\n            {\n                var result = await _userManager.SetPhoneNumberAsync(user, null);\n                if (result.Succeeded)\n                {\n                    await _signInManager.SignInAsync(user, isPersistent: false);\n                    return RedirectToAction(nameof(Index), new { Message = ManageMessageId.RemovePhoneSuccess });\n                }\n            }\n            return RedirectToAction(nameof(Index), new { Message = ManageMessageId.Error });\n        }\n\n        //\n        // GET: /Manage/ChangePassword\n        [HttpGet]\n        public IActionResult ChangePassword()\n        {\n            return View();\n        }\n\n        //\n        // POST: /Manage/ChangePassword\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> ChangePassword(ChangePasswordViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n            var user = await GetCurrentUserAsync();\n            if (user != null)\n            {\n                var result = await _userManager.ChangePasswordAsync(user, model.OldPassword, model.NewPassword);\n                if (result.Succeeded)\n                {\n                    await _signInManager.SignInAsync(user, isPersistent: false);\n                    _logger.LogInformation(3, \"User changed their password successfully.\");\n                    return RedirectToAction(nameof(Index), new { Message = ManageMessageId.ChangePasswordSuccess });\n                }\n                AddErrors(result);\n                return View(model);\n            }\n            return RedirectToAction(nameof(Index), new { Message = ManageMessageId.Error });\n        }\n\n        //\n        // GET: /Manage/SetPassword\n        [HttpGet]\n        public IActionResult SetPassword()\n        {\n            return View();\n        }\n\n        //\n        // POST: /Manage/SetPassword\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> SetPassword(SetPasswordViewModel model)\n        {\n            if (!ModelState.IsValid)\n            {\n                return View(model);\n            }\n\n            var user = await GetCurrentUserAsync();\n            if (user != null)\n            {\n                var result = await _userManager.AddPasswordAsync(user, model.NewPassword);\n                if (result.Succeeded)\n                {\n                    await _signInManager.SignInAsync(user, isPersistent: false);\n                    return RedirectToAction(nameof(Index), new { Message = ManageMessageId.SetPasswordSuccess });\n                }\n                AddErrors(result);\n                return View(model);\n            }\n            return RedirectToAction(nameof(Index), new { Message = ManageMessageId.Error });\n        }\n\n        //GET: /Manage/ManageLogins\n        [HttpGet]\n        public async Task<IActionResult> ManageLogins(ManageMessageId? message = null)\n        {\n            ViewData[\"StatusMessage\"] =\n                message == ManageMessageId.RemoveLoginSuccess ? \"The external login was removed.\"\n                : message == ManageMessageId.AddLoginSuccess ? \"The external login was added.\"\n                : message == ManageMessageId.Error ? \"An error has occurred.\"\n                : \"\";\n            var user = await GetCurrentUserAsync();\n            if (user == null)\n            {\n                return View(\"Error\");\n            }\n            var userLogins = await _userManager.GetLoginsAsync(user);\n            var schemes = await _signInManager.GetExternalAuthenticationSchemesAsync();\n            var otherLogins = schemes.Where(auth => userLogins.All(ul => auth.Name != ul.LoginProvider)).ToList();\n            ViewData[\"ShowRemoveButton\"] = user.PasswordHash != null || userLogins.Count > 1;\n            return View(new ManageLoginsViewModel\n            {\n                CurrentLogins = userLogins,\n                OtherLogins = otherLogins\n            });\n        }\n\n        //\n        // POST: /Manage/LinkLogin\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public IActionResult LinkLogin(string provider)\n        {\n            // Request a redirect to the external login provider to link a login for the current user\n            var redirectUrl = Url.Action(\"LinkLoginCallback\", \"Manage\");\n            var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl, _userManager.GetUserId(User));\n            return Challenge(properties, provider);\n        }\n\n        //\n        // GET: /Manage/LinkLoginCallback\n        [HttpGet]\n        public async Task<ActionResult> LinkLoginCallback()\n        {\n            var user = await GetCurrentUserAsync();\n            if (user == null)\n            {\n                return View(\"Error\");\n            }\n            var info = await _signInManager.GetExternalLoginInfoAsync(await _userManager.GetUserIdAsync(user));\n            if (info == null)\n            {\n                return RedirectToAction(nameof(ManageLogins), new { Message = ManageMessageId.Error });\n            }\n            var result = await _userManager.AddLoginAsync(user, info);\n            var message = result.Succeeded ? ManageMessageId.AddLoginSuccess : ManageMessageId.Error;\n            return RedirectToAction(nameof(ManageLogins), new { Message = message });\n        }\n\n        #region Helpers\n\n        private void AddErrors(IdentityResult result)\n        {\n            foreach (var error in result.Errors)\n            {\n                ModelState.AddModelError(string.Empty, error.Description);\n            }\n        }\n\n        public enum ManageMessageId\n        {\n            AddPhoneSuccess,\n            AddLoginSuccess,\n            ChangePasswordSuccess,\n            SetTwoFactorSuccess,\n            SetPasswordSuccess,\n            RemoveLoginSuccess,\n            RemovePhoneSuccess,\n            Error\n        }\n\n        private Task<ApplicationUser> GetCurrentUserAsync()\n        {\n            return _userManager.GetUserAsync(HttpContext.User);\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Controllers/RoleController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Identity;\nusing Microsoft.AspNetCore.Identity.EntityFrameworkCore;\nusing Microsoft.AspNetCore.Mvc;\nusing AdminLTE.Models;\nusing AdminLTE.Models.RoleViewModels;\n\nnamespace AdminLTE.Controllers\n{\n    [Authorize(Roles = \"SuperAdmins\")]\n    public class RoleController : Controller\n    {\n        private RoleManager<IdentityRole> roleManager;\n        private UserManager<ApplicationUser> userManager;\n\n        public RoleController(RoleManager<IdentityRole> roleMgr, UserManager<ApplicationUser> userMgr)\n        {\n            roleManager = roleMgr;\n            userManager = userMgr;\n        }\n\n        public IActionResult Index()\n        {\n            return View(roleManager.Roles);\n        }\n\n        private void AddErrors(IdentityResult result)\n        {\n            foreach (IdentityError error in result.Errors)\n            {\n                ModelState.AddModelError(\"\", error.Description);\n            }\n        }\n\n        public IActionResult Create()\n        {\n            return View();\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> Create([Required] string name)\n        {\n            if (ModelState.IsValid)\n            {\n                IdentityResult result = await roleManager.CreateAsync(new IdentityRole(name));\n\n                if (result.Succeeded)\n                {\n                    return RedirectToAction(\"Index\");\n                }\n                else\n                {\n                    AddErrors(result);\n                }\n            }\n\n            return View(name);\n        }\n\n        public async Task<IActionResult> Edit(string id)\n        {\n            IdentityRole role = await roleManager.FindByIdAsync(id);\n            List<ApplicationUser> members = new List<ApplicationUser>();\n            List<ApplicationUser> nonMember = new List<ApplicationUser>();\n\n            foreach (ApplicationUser user in userManager.Users.ToArray())\n            {\n                var list = await userManager.IsInRoleAsync(user, role.Name)\n                    ? members\n                    : nonMember;\n                list.Add(user);\n            }\n\n            return View(new EditRoleVm\n            {\n                Role = role,\n                Members = members,\n                NonMembers = nonMember\n            });\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> Edit(ModifyRoleVm modifyRole)\n        {\n            IdentityResult result;\n\n            if (ModelState.IsValid)\n            {\n                IdentityRole role = await roleManager.FindByIdAsync(modifyRole.RoleId);\n                role.Name = modifyRole.RoleName;\n                result = await roleManager.UpdateAsync(role);\n                if (!result.Succeeded)\n                {\n                    AddErrors(result);\n                }\n\n                foreach (string userId in modifyRole.IdsToAdd ?? new string[] { })\n                {\n                    ApplicationUser user = await userManager.FindByIdAsync(userId);\n                    if (user != null)\n                    {\n                        result = await userManager.AddToRoleAsync(user, modifyRole.RoleName);\n                        if (!result.Succeeded)\n                        {\n                            AddErrors(result);\n                        }\n                    }\n                }\n\n                foreach (string userId in modifyRole.IdsToRemove ?? new string[] { })\n                {\n                    ApplicationUser user = await userManager.FindByIdAsync(userId);\n                    if (user != null)\n                    {\n                        result = await userManager.RemoveFromRoleAsync(user, modifyRole.RoleName);\n                        if (!result.Succeeded)\n                        {\n                            AddErrors(result);\n                        }\n                    }\n                }\n            }\n\n            if (ModelState.IsValid)\n            {\n                return RedirectToAction(\"Index\");\n            }\n\n            return View(modifyRole.RoleId);\n        }\n\n        public async Task<IActionResult> Delete(string id)\n        {\n            IdentityRole role = await roleManager.FindByIdAsync(id);\n\n            if (role != null)\n            {\n                IdentityResult result = await roleManager.DeleteAsync(role);\n                if (result.Succeeded)\n                {\n                    return RedirectToAction(\"Index\");\n                }\n                else\n                {\n                    AddErrors(result);\n                }\n            }\n            else\n            {\n                ModelState.AddModelError(\"\", \"No role found\");\n            }\n\n            return View(\"Index\", roleManager.Roles);\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Controllers/SuperAdminController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Identity;\nusing Microsoft.AspNetCore.Identity.EntityFrameworkCore;\nusing Microsoft.AspNetCore.Mvc;\nusing AdminLTE.Models;\nusing AdminLTE.Models.SuperAdminViewModels;\n\nnamespace AdminLTE.Controllers\n{\n    [Authorize(Roles = \"SuperAdmins\")]\n    public class SuperAdminController : Controller\n    {\n        private UserManager<ApplicationUser> userManager;\n        private IUserValidator<ApplicationUser> userValidator;\n        private IPasswordValidator<ApplicationUser> passwordValidator;\n        private IPasswordHasher<ApplicationUser> passwordHasher;\n\n        private ApplicationUser testUser = new ApplicationUser\n        {\n            UserName = \"TestTestForPassword\",\n            Email = \"testForPassword@test.test\"\n        };\n\n        public SuperAdminController(UserManager<ApplicationUser> userMgr,\n            IUserValidator<ApplicationUser> userValid, IPasswordValidator<ApplicationUser> passValid,\n            IPasswordHasher<ApplicationUser> passHasher)\n        {\n            userManager = userMgr;\n            userValidator = userValid;\n            passwordValidator = passValid;\n            passwordHasher = passHasher;\n        }\n\n        // GET: /<controller>/\n        public ViewResult Index()\n        {\n            return View(userManager.Users);\n        }\n\n        public ViewResult Create()\n        {\n            return View();\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> Create(CreateVm createVm)\n        {\n            if (ModelState.IsValid)\n            {\n                ApplicationUser user = new ApplicationUser\n                {\n                    UserName = createVm.Email,\n                    Email = createVm.Email,\n                    //extended properties\n                    FirstName = createVm.FirstName,\n                    LastName = createVm.LastName,\n                    AvatarURL = \"/images/user.png\",\n                    DateRegistered = DateTime.UtcNow.ToString(),\n                    Position = \"\",\n                    NickName = \"\",\n                };\n\n                IdentityResult result = await userManager.CreateAsync(user, createVm.Password);\n\n                if (result.Succeeded)\n                {\n                    return RedirectToAction(\"Index\");\n                }\n                else\n                {\n                    foreach (IdentityError error in result.Errors)\n                    {\n                        ModelState.AddModelError(\"\", error.Description);\n                    }\n                }\n            }\n            return View(createVm);\n        }\n\n        private void AddErrors(IdentityResult result)\n        {\n            foreach (IdentityError error in result.Errors)\n            {\n                ModelState.TryAddModelError(\"\", error.Description);\n            }\n        }\n\n        public async Task<IActionResult> Delete(string id)\n        {\n            ApplicationUser user = await userManager.FindByIdAsync(id);\n\n            if (user != null)\n            {\n                IdentityResult result = await userManager.DeleteAsync(user);\n                if (result.Succeeded)\n                {\n                    return RedirectToAction(\"Index\");\n                }\n                else\n                {\n                    AddErrors(result);\n                }\n            }\n            else\n            {\n                ModelState.AddModelError(\"\", \"User Not Found\");\n            }\n\n            return View(\"Index\", userManager.Users);\n        }\n\n        public async Task<IActionResult> Edit(string id)\n        {\n            ApplicationUser user = await userManager.FindByIdAsync(id);\n\n            if (user != null)\n            {\n                return View(user);\n            }\n            else\n            {\n                return RedirectToAction(\"Index\");\n            }\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        // the names of its parameters must be the same as the property of the User class if we use asp-for in the view\n        // otherwise form values won't be passed properly\n        public async Task<IActionResult> Edit(string id, string userName, string email)\n        {\n            ApplicationUser user = await userManager.FindByIdAsync(id);\n\n            if (user != null)\n            {\n                // Validate UserName and Email \n                user.UserName = userName; // UserName won't be changed in the database until UpdateAsync is executed successfully\n                user.Email = email;\n                IdentityResult validUseResult = await userValidator.ValidateAsync(userManager, user);\n                if (!validUseResult.Succeeded)\n                {\n                    AddErrors(validUseResult);\n                }\n\n                // Update user info\n                if (validUseResult.Succeeded)\n                {\n                    // UpdateAsync validates user info such as UserName and Email except password since it's been hashed \n                    IdentityResult result = await userManager.UpdateAsync(user);\n                    if (result.Succeeded)\n                    {\n                        return RedirectToAction(\"Index\", \"SuperAdmin\");\n                    }\n                    else\n                    {\n                        AddErrors(result);\n                    }\n                }\n            }\n            else\n            {\n                ModelState.AddModelError(\"\", \"User Not Found\");\n            }\n            ;\n\n            return View(user);\n        }\n\n        public async Task<IActionResult> ChangePassword(string id)\n        {\n            ApplicationUser user = await userManager.FindByIdAsync(id);\n\n            if (user != null)\n            {\n                return View(user);\n            }\n            else\n            {\n                return RedirectToAction(\"Index\");\n            }\n        }\n\n        [HttpPost]\n        [ValidateAntiForgeryToken]\n        public async Task<IActionResult> ChangePassword(string id, string password)\n        {\n            ApplicationUser user = await userManager.FindByIdAsync(id);\n\n            if (user != null)\n            {\n                // Validate password\n                // Step 1: using built in validations\n                IdentityResult passwordResult = await userManager.CreateAsync(testUser, password);\n                if (passwordResult.Succeeded)\n                {\n                    await userManager.DeleteAsync(testUser);\n                }\n                else\n                {\n                    AddErrors(passwordResult);\n                }\n                /* Step 2: Because of DI, IPasswordValidator<User> is injected into the custom password validator. \n                   So the built in password validation stop working here */\n                IdentityResult validPasswordResult = await passwordValidator.ValidateAsync(userManager, user, password);\n                if (validPasswordResult.Succeeded)\n                {\n                    user.PasswordHash = passwordHasher.HashPassword(user, password);\n                }\n                else\n                {\n                    AddErrors(validPasswordResult);\n                }\n\n                // Update user info\n                if (passwordResult.Succeeded && validPasswordResult.Succeeded)\n                {\n                    // UpdateAsync validates user info such as UserName and Email except password since it's been hashed \n                    IdentityResult result = await userManager.UpdateAsync(user);\n                    if (result.Succeeded)\n                    {\n                        return RedirectToAction(\"Index\", \"SuperAdmin\");\n                    }\n                    else\n                    {\n                        AddErrors(result);\n                    }\n                }\n            }\n            else\n            {\n                ModelState.AddModelError(\"\", \"User Not Found\");\n            }\n\n            return View(user);\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Controllers/UserLogsController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Identity;\nusing Microsoft.AspNetCore.Identity.EntityFrameworkCore;\nusing Microsoft.AspNetCore.Mvc;\nusing AdminLTE.Models;\nusing AdminLTE.Models.SuperAdminViewModels;\nusing AdminLTE.Data;\n\nnamespace AdminLTE.Controllers\n{\n    [Authorize(Roles = \"SuperAdmins\")]\n    public class UserLogsController : Controller\n    {\n        private readonly ApplicationDbContext _context;\n\n        public UserLogsController(ApplicationDbContext context)\n        {\n            _context = context;\n        }\n\n        // GET: /<controller>/\n        public ViewResult Index()\n        {\n            return View(_context.UserAuditEvents.ToList());\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/AppClaimsPrincipalFactory.cs",
    "content": "﻿using System.Security.Claims;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Identity;\nusing Microsoft.AspNetCore.Identity.EntityFrameworkCore;\nusing Microsoft.Extensions.Options;\nusing AdminLTE.Common;\nusing AdminLTE.Models;\n\nnamespace AdminLTE.Data\n{\n    public class AppClaimsPrincipalFactory : UserClaimsPrincipalFactory<ApplicationUser, IdentityRole>\n    {\n        public AppClaimsPrincipalFactory(\n            UserManager<ApplicationUser> userManager,\n            RoleManager<IdentityRole> roleManager,\n            IOptions<IdentityOptions> optionsAccessor) : base(userManager, roleManager, optionsAccessor)\n        {\n        }\n\n        public override async Task<ClaimsPrincipal> CreateAsync(ApplicationUser user)\n        {\n            var principal = await base.CreateAsync(user);\n\n            ((ClaimsIdentity)principal.Identity).AddClaims(new[] {\n                new Claim(CustomClaimTypes.GivenName, user.FirstName),\n                new Claim(CustomClaimTypes.Surname, user.LastName),\n                new Claim(CustomClaimTypes.AvatarURL, user.AvatarURL),\n                new Claim(CustomClaimTypes.Position, user.Position),\n                new Claim(CustomClaimTypes.NickName, user.NickName),\n                new Claim(CustomClaimTypes.DateRegistered, user.DateRegistered),\n            });\n\n            return principal;\n        }\n    }\n}"
  },
  {
    "path": "src/AdminLTE/Data/ApplicationDbContext.cs",
    "content": "﻿using Microsoft.AspNetCore.Identity.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore;\nusing AdminLTE.Models;\n\nnamespace AdminLTE.Data\n{\n    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>\n    {\n        public DbSet<UserAudit> UserAuditEvents { get; set; }\n\n        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)\n            : base(options)\n        {\n        }\n\n        protected override void OnModelCreating(ModelBuilder builder)\n        {\n            base.OnModelCreating(builder);\n            // Customize the ASP.NET Identity model and override the defaults if needed.\n            // For example, you can rename the ASP.NET Identity table names and more.\n            // Add your customizations after calling base.OnModelCreating(builder);\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/AuditableSignInManager.cs",
    "content": "﻿using AdminLTE.Models;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Identity;\nusing Microsoft.AspNetCore.Identity.EntityFrameworkCore;\nusing Microsoft.Extensions.Logging;\nusing Microsoft.Extensions.Options;\nusing System;\nusing System.Threading.Tasks;\nusing AdminLTE.Common;\nusing AdminLTE.Common.Extensions;\nusing Microsoft.AspNetCore.Authentication;\n\nnamespace AdminLTE.Data\n{\n    public class AuditableSignInManager<TUser> : SignInManager<TUser> where TUser : class\n    {\n        private readonly UserManager<TUser> _userManager;\n        private readonly ApplicationDbContext _db;\n        private readonly IHttpContextAccessor _contextAccessor;\n\n        public AuditableSignInManager(UserManager<TUser> userManager, IHttpContextAccessor contextAccessor, IUserClaimsPrincipalFactory<TUser> claimsFactory, IOptions<IdentityOptions> optionsAccessor, ILogger<SignInManager<TUser>> logger, ApplicationDbContext dbContext)\n            : base(userManager, contextAccessor, claimsFactory, optionsAccessor, logger, null, null)\n        {\n            if (userManager == null)\n                throw new ArgumentNullException(nameof(userManager));\n\n            if (dbContext == null)\n                throw new ArgumentNullException(nameof(dbContext));\n\n            if (contextAccessor == null)\n                throw new ArgumentNullException(nameof(contextAccessor));\n\n            _userManager = userManager;\n            _contextAccessor = contextAccessor;\n            _db = dbContext;\n        }\n\n        public override async Task<SignInResult> PasswordSignInAsync(TUser user, string password, bool isPersistent, bool lockoutOnFailure)\n        {\n            var result = await base.PasswordSignInAsync(user, password, isPersistent, lockoutOnFailure);\n\n            var appUser = user as IdentityUser;\n\n            if (appUser != null) // We can only log an audit record if we can access the user object and it's ID\n            {\n                var ip = _contextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();\n\n                UserAudit auditRecord = null;\n\n                switch (result.ToString())\n                {\n                    case \"Succeeded\":\n                        auditRecord = UserAudit.CreateAuditEvent(appUser.Id, UserAuditEventType.Login, ip);\n                        break;\n\n                    case \"Failed\":\n                        auditRecord = UserAudit.CreateAuditEvent(appUser.Id, UserAuditEventType.FailedLogin, ip);\n                        break;\n                }\n\n                if (auditRecord != null)\n                {\n                    _db.UserAuditEvents.Add(auditRecord);\n                    await _db.SaveChangesAsync();\n                }\n            }\n\n            return result;\n        }\n\n        public override async Task SignOutAsync()\n        {\n            await _contextAccessor.HttpContext.SignOutAsync(_contextAccessor.HttpContext.Features.Get<IAuthenticateResultFeature>().AuthenticateResult?.Ticket?.AuthenticationScheme);\n\n            var user = await _userManager.FindByIdAsync(_userManager.GetUserId(_contextAccessor.HttpContext.User)) as IdentityUser;\n\n            if (user != null)\n            {\n                var ip = _contextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();\n\n                var auditRecord = UserAudit.CreateAuditEvent(user.Id, UserAuditEventType.LogOut, ip);\n                _db.UserAuditEvents.Add(auditRecord);\n                await _db.SaveChangesAsync();\n            }\n        }\n    }\n}"
  },
  {
    "path": "src/AdminLTE/Data/DataSeed.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Security.Claims;\nusing System.Threading.Tasks;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Hosting;\nusing Microsoft.AspNetCore.Http;\nusing Microsoft.AspNetCore.Identity;\nusing Microsoft.AspNetCore.Identity.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.Extensions.Configuration;\nusing Microsoft.Extensions.DependencyInjection;\nusing Microsoft.Extensions.Logging;\nusing AdminLTE.Models;\nusing AdminLTE.Common;\n\n\nnamespace AdminLTE.Data\n{\n    public static class DataSeed\n    {\n        public static async Task Seed(IServiceProvider serviceProvider)\n        {\n            IServiceScopeFactory scopeFactory = serviceProvider.GetRequiredService<IServiceScopeFactory>();\n\n            using (IServiceScope scope = scopeFactory.CreateScope())\n            {\n                var context = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();\n                context.Database.Migrate();\n\n                UserManager<ApplicationUser> _userManager = scope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>();\n                RoleManager<IdentityRole> roleManager = scope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole>>();\n\n                // Seed database code goes here\n\n                // User Info\n                //string userName = \"SuperAdmin\";\n                string firstName = \"Super\";\n                string lastName = \"Admin\";\n                string email = \"superadmin@admin.com\";\n                string password = \"Qwaszx123$\";\n                string role = \"SuperAdmins\";\n                string role2 = \"SeniorManagers\";\n                string role3 = \"Managers\";\n\n                if (await _userManager.FindByNameAsync(email) == null)\n                {\n                    // Create SuperAdmins role if it doesn't exist\n                    if (await roleManager.FindByNameAsync(role) == null)\n                    {\n                        await roleManager.CreateAsync(new IdentityRole(role));\n                    }\n                    if (await roleManager.FindByNameAsync(role2) == null)\n                    {\n                        await roleManager.CreateAsync(new IdentityRole(role2));\n                    }\n                    if (await roleManager.FindByNameAsync(role3) == null)\n                    {\n                        await roleManager.CreateAsync(new IdentityRole(role3));\n                    }\n\n                    // Create user account if it doesn't exist\n                    ApplicationUser user = new ApplicationUser\n                    {\n                        UserName = email,\n                        Email = email,\n                        //extended properties\n                        FirstName = firstName,\n                        LastName = lastName,\n                        AvatarURL = \"/images/user.png\",\n                        DateRegistered = DateTime.UtcNow.ToString(),\n                        Position = \"\",\n                        NickName = \"\",\n                    };\n\n                    IdentityResult result = await _userManager.CreateAsync(user, password);\n\n                    // Assign role to the user\n                    if (result.Succeeded)\n                    {\n                        await _userManager.AddClaimAsync(user, new Claim(CustomClaimTypes.GivenName, user.FirstName));\n                        await _userManager.AddClaimAsync(user, new Claim(CustomClaimTypes.Surname, user.LastName));\n                        await _userManager.AddClaimAsync(user, new Claim(CustomClaimTypes.AvatarURL, user.AvatarURL));\n\n                        //SignInManager<ApplicationUser> _signInManager = serviceProvider.GetRequiredService<SignInManager<ApplicationUser>>();\n                        //await _signInManager.SignInAsync(user, isPersistent: false);\n\n                        await _userManager.AddToRoleAsync(user, role);\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/Migrations/00000000000000_CreateIdentitySchema.Designer.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace AdminLTE.Data.Migrations\n{\n    [DbContext(typeof(ApplicationDbContext))]\n    [Migration(\"00000000000000_CreateIdentitySchema\")]\n    partial class CreateIdentitySchema\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.0.0-rc3\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole\", b =>\n                {\n                    b.Property<string>(\"Id\");\n\n                    b.Property<string>(\"ConcurrencyStamp\")\n                        .IsConcurrencyToken();\n\n                    b.Property<string>(\"Name\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<string>(\"NormalizedName\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"NormalizedName\")\n                        .HasDatabaseName(\"RoleNameIndex\");\n\n                    b.ToTable(\"AspNetRoles\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<string>\", b =>\n                {\n                    b.Property<int>(\"Id\")\n                        .ValueGeneratedOnAdd();\n\n                    b.Property<string>(\"ClaimType\");\n\n                    b.Property<string>(\"ClaimValue\");\n\n                    b.Property<string>(\"RoleId\")\n                        .IsRequired();\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"RoleId\");\n\n                    b.ToTable(\"AspNetRoleClaims\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>\", b =>\n                {\n                    b.Property<int>(\"Id\")\n                        .ValueGeneratedOnAdd();\n\n                    b.Property<string>(\"ClaimType\");\n\n                    b.Property<string>(\"ClaimValue\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired();\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserClaims\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>\", b =>\n                {\n                    b.Property<string>(\"LoginProvider\");\n\n                    b.Property<string>(\"ProviderKey\");\n\n                    b.Property<string>(\"ProviderDisplayName\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired();\n\n                    b.HasKey(\"LoginProvider\", \"ProviderKey\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserLogins\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole<string>\", b =>\n                {\n                    b.Property<string>(\"UserId\");\n\n                    b.Property<string>(\"RoleId\");\n\n                    b.HasKey(\"UserId\", \"RoleId\");\n\n                    b.HasIndex(\"RoleId\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserRoles\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserToken<string>\", b =>\n                {\n                    b.Property<string>(\"UserId\");\n\n                    b.Property<string>(\"LoginProvider\");\n\n                    b.Property<string>(\"Name\");\n\n                    b.Property<string>(\"Value\");\n\n                    b.HasKey(\"UserId\", \"LoginProvider\", \"Name\");\n\n                    b.ToTable(\"AspNetUserTokens\");\n                });\n\n            modelBuilder.Entity(\"AdminLTE.Models.ApplicationUser\", b =>\n                {\n                    b.Property<string>(\"Id\");\n\n                    b.Property<int>(\"AccessFailedCount\");\n\n                    b.Property<string>(\"ConcurrencyStamp\")\n                        .IsConcurrencyToken();\n\n                    b.Property<string>(\"Email\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<bool>(\"EmailConfirmed\");\n\n                    b.Property<bool>(\"LockoutEnabled\");\n\n                    b.Property<DateTimeOffset?>(\"LockoutEnd\");\n\n                    b.Property<string>(\"NormalizedEmail\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<string>(\"NormalizedUserName\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<string>(\"PasswordHash\");\n\n                    b.Property<string>(\"PhoneNumber\");\n\n                    b.Property<bool>(\"PhoneNumberConfirmed\");\n\n                    b.Property<string>(\"SecurityStamp\");\n\n                    b.Property<bool>(\"TwoFactorEnabled\");\n\n                    b.Property<string>(\"UserName\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"NormalizedEmail\")\n                        .HasDatabaseName(\"EmailIndex\");\n\n                    b.HasIndex(\"NormalizedUserName\")\n                        .IsUnique()\n                        .HasDatabaseName(\"UserNameIndex\");\n\n                    b.ToTable(\"AspNetUsers\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<string>\", b =>\n                {\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole\")\n                        .WithMany(\"Claims\")\n                        .HasForeignKey(\"RoleId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\")\n                        .WithMany(\"Claims\")\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\")\n                        .WithMany(\"Logins\")\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole<string>\", b =>\n                {\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole\")\n                        .WithMany(\"Users\")\n                        .HasForeignKey(\"RoleId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\")\n                        .WithMany(\"Roles\")\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/Migrations/00000000000000_CreateIdentitySchema.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace AdminLTE.Data.Migrations\n{\n    public partial class CreateIdentitySchema : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.CreateTable(\n                name: \"AspNetRoles\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(nullable: false),\n                    ConcurrencyStamp = table.Column<string>(nullable: true),\n                    Name = table.Column<string>(maxLength: 256, nullable: true),\n                    NormalizedName = table.Column<string>(maxLength: 256, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_AspNetRoles\", x => x.Id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"AspNetUserTokens\",\n                columns: table => new\n                {\n                    UserId = table.Column<string>(nullable: false),\n                    LoginProvider = table.Column<string>(nullable: false),\n                    Name = table.Column<string>(nullable: false),\n                    Value = table.Column<string>(nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_AspNetUserTokens\", x => new { x.UserId, x.LoginProvider, x.Name });\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"AspNetUsers\",\n                columns: table => new\n                {\n                    Id = table.Column<string>(nullable: false),\n                    AccessFailedCount = table.Column<int>(nullable: false),\n                    ConcurrencyStamp = table.Column<string>(nullable: true),\n                    Email = table.Column<string>(maxLength: 256, nullable: true),\n                    EmailConfirmed = table.Column<bool>(nullable: false),\n                    LockoutEnabled = table.Column<bool>(nullable: false),\n                    LockoutEnd = table.Column<DateTimeOffset>(nullable: true),\n                    NormalizedEmail = table.Column<string>(maxLength: 256, nullable: true),\n                    NormalizedUserName = table.Column<string>(maxLength: 256, nullable: true),\n                    PasswordHash = table.Column<string>(nullable: true),\n                    PhoneNumber = table.Column<string>(nullable: true),\n                    PhoneNumberConfirmed = table.Column<bool>(nullable: false),\n                    SecurityStamp = table.Column<string>(nullable: true),\n                    TwoFactorEnabled = table.Column<bool>(nullable: false),\n                    UserName = table.Column<string>(maxLength: 256, nullable: true)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_AspNetUsers\", x => x.Id);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"AspNetRoleClaims\",\n                columns: table => new\n                {\n                    Id = table.Column<int>(nullable: false)\n                        .Annotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn),\n                    ClaimType = table.Column<string>(nullable: true),\n                    ClaimValue = table.Column<string>(nullable: true),\n                    RoleId = table.Column<string>(nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_AspNetRoleClaims\", x => x.Id);\n                    table.ForeignKey(\n                        name: \"FK_AspNetRoleClaims_AspNetRoles_RoleId\",\n                        column: x => x.RoleId,\n                        principalTable: \"AspNetRoles\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Cascade);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"AspNetUserClaims\",\n                columns: table => new\n                {\n                    Id = table.Column<int>(nullable: false)\n                        .Annotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn),\n                    ClaimType = table.Column<string>(nullable: true),\n                    ClaimValue = table.Column<string>(nullable: true),\n                    UserId = table.Column<string>(nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_AspNetUserClaims\", x => x.Id);\n                    table.ForeignKey(\n                        name: \"FK_AspNetUserClaims_AspNetUsers_UserId\",\n                        column: x => x.UserId,\n                        principalTable: \"AspNetUsers\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Cascade);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"AspNetUserLogins\",\n                columns: table => new\n                {\n                    LoginProvider = table.Column<string>(nullable: false),\n                    ProviderKey = table.Column<string>(nullable: false),\n                    ProviderDisplayName = table.Column<string>(nullable: true),\n                    UserId = table.Column<string>(nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_AspNetUserLogins\", x => new { x.LoginProvider, x.ProviderKey });\n                    table.ForeignKey(\n                        name: \"FK_AspNetUserLogins_AspNetUsers_UserId\",\n                        column: x => x.UserId,\n                        principalTable: \"AspNetUsers\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Cascade);\n                });\n\n            migrationBuilder.CreateTable(\n                name: \"AspNetUserRoles\",\n                columns: table => new\n                {\n                    UserId = table.Column<string>(nullable: false),\n                    RoleId = table.Column<string>(nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_AspNetUserRoles\", x => new { x.UserId, x.RoleId });\n                    table.ForeignKey(\n                        name: \"FK_AspNetUserRoles_AspNetRoles_RoleId\",\n                        column: x => x.RoleId,\n                        principalTable: \"AspNetRoles\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Cascade);\n                    table.ForeignKey(\n                        name: \"FK_AspNetUserRoles_AspNetUsers_UserId\",\n                        column: x => x.UserId,\n                        principalTable: \"AspNetUsers\",\n                        principalColumn: \"Id\",\n                        onDelete: ReferentialAction.Cascade);\n                });\n\n            migrationBuilder.CreateIndex(\n                name: \"RoleNameIndex\",\n                table: \"AspNetRoles\",\n                column: \"NormalizedName\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_AspNetRoleClaims_RoleId\",\n                table: \"AspNetRoleClaims\",\n                column: \"RoleId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_AspNetUserClaims_UserId\",\n                table: \"AspNetUserClaims\",\n                column: \"UserId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_AspNetUserLogins_UserId\",\n                table: \"AspNetUserLogins\",\n                column: \"UserId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_AspNetUserRoles_RoleId\",\n                table: \"AspNetUserRoles\",\n                column: \"RoleId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_AspNetUserRoles_UserId\",\n                table: \"AspNetUserRoles\",\n                column: \"UserId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"EmailIndex\",\n                table: \"AspNetUsers\",\n                column: \"NormalizedEmail\");\n\n            migrationBuilder.CreateIndex(\n                name: \"UserNameIndex\",\n                table: \"AspNetUsers\",\n                column: \"NormalizedUserName\",\n                unique: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropTable(\n                name: \"AspNetRoleClaims\");\n\n            migrationBuilder.DropTable(\n                name: \"AspNetUserClaims\");\n\n            migrationBuilder.DropTable(\n                name: \"AspNetUserLogins\");\n\n            migrationBuilder.DropTable(\n                name: \"AspNetUserRoles\");\n\n            migrationBuilder.DropTable(\n                name: \"AspNetUserTokens\");\n\n            migrationBuilder.DropTable(\n                name: \"AspNetRoles\");\n\n            migrationBuilder.DropTable(\n                name: \"AspNetUsers\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/Migrations/20160801092435_ExtendASPNetUser.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing AdminLTE.Data;\n\nnamespace AdminLTE.Data.Migrations\n{\n    [DbContext(typeof(ApplicationDbContext))]\n    [Migration(\"20160801092435_ExtendASPNetUser\")]\n    partial class ExtendASPNetUser\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.0.0-rtm-21431\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"AdminLTE.Models.ApplicationUser\", b =>\n                {\n                    b.Property<string>(\"Id\");\n\n                    b.Property<int>(\"AccessFailedCount\");\n\n                    b.Property<string>(\"AvatarURL\");\n\n                    b.Property<string>(\"ConcurrencyStamp\")\n                        .IsConcurrencyToken();\n\n                    b.Property<string>(\"Email\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<bool>(\"EmailConfirmed\");\n\n                    b.Property<string>(\"FirstName\");\n\n                    b.Property<string>(\"LastName\");\n\n                    b.Property<bool>(\"LockoutEnabled\");\n\n                    b.Property<DateTimeOffset?>(\"LockoutEnd\");\n\n                    b.Property<string>(\"NormalizedEmail\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<string>(\"NormalizedUserName\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<string>(\"PasswordHash\");\n\n                    b.Property<string>(\"PhoneNumber\");\n\n                    b.Property<bool>(\"PhoneNumberConfirmed\");\n\n                    b.Property<string>(\"SecurityStamp\");\n\n                    b.Property<bool>(\"TwoFactorEnabled\");\n\n                    b.Property<string>(\"UserName\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"NormalizedEmail\")\n                        .HasDatabaseName(\"EmailIndex\");\n\n                    b.HasIndex(\"NormalizedUserName\")\n                        .IsUnique()\n                        .HasDatabaseName(\"UserNameIndex\");\n\n                    b.ToTable(\"AspNetUsers\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole\", b =>\n                {\n                    b.Property<string>(\"Id\");\n\n                    b.Property<string>(\"ConcurrencyStamp\")\n                        .IsConcurrencyToken();\n\n                    b.Property<string>(\"Name\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<string>(\"NormalizedName\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"NormalizedName\")\n                        .HasDatabaseName(\"RoleNameIndex\");\n\n                    b.ToTable(\"AspNetRoles\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<string>\", b =>\n                {\n                    b.Property<int>(\"Id\")\n                        .ValueGeneratedOnAdd();\n\n                    b.Property<string>(\"ClaimType\");\n\n                    b.Property<string>(\"ClaimValue\");\n\n                    b.Property<string>(\"RoleId\")\n                        .IsRequired();\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"RoleId\");\n\n                    b.ToTable(\"AspNetRoleClaims\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>\", b =>\n                {\n                    b.Property<int>(\"Id\")\n                        .ValueGeneratedOnAdd();\n\n                    b.Property<string>(\"ClaimType\");\n\n                    b.Property<string>(\"ClaimValue\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired();\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserClaims\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>\", b =>\n                {\n                    b.Property<string>(\"LoginProvider\");\n\n                    b.Property<string>(\"ProviderKey\");\n\n                    b.Property<string>(\"ProviderDisplayName\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired();\n\n                    b.HasKey(\"LoginProvider\", \"ProviderKey\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserLogins\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole<string>\", b =>\n                {\n                    b.Property<string>(\"UserId\");\n\n                    b.Property<string>(\"RoleId\");\n\n                    b.HasKey(\"UserId\", \"RoleId\");\n\n                    b.HasIndex(\"RoleId\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserRoles\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserToken<string>\", b =>\n                {\n                    b.Property<string>(\"UserId\");\n\n                    b.Property<string>(\"LoginProvider\");\n\n                    b.Property<string>(\"Name\");\n\n                    b.Property<string>(\"Value\");\n\n                    b.HasKey(\"UserId\", \"LoginProvider\", \"Name\");\n\n                    b.ToTable(\"AspNetUserTokens\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<string>\", b =>\n                {\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole\")\n                        .WithMany(\"Claims\")\n                        .HasForeignKey(\"RoleId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\")\n                        .WithMany(\"Claims\")\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\")\n                        .WithMany(\"Logins\")\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole<string>\", b =>\n                {\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole\")\n                        .WithMany(\"Users\")\n                        .HasForeignKey(\"RoleId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\")\n                        .WithMany(\"Roles\")\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/Migrations/20160801092435_ExtendASPNetUser.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace AdminLTE.Data.Migrations\n{\n    public partial class ExtendASPNetUser : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"AvatarURL\",\n                table: \"AspNetUsers\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"FirstName\",\n                table: \"AspNetUsers\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"LastName\",\n                table: \"AspNetUsers\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"AvatarURL\",\n                table: \"AspNetUsers\");\n\n            migrationBuilder.DropColumn(\n                name: \"FirstName\",\n                table: \"AspNetUsers\");\n\n            migrationBuilder.DropColumn(\n                name: \"LastName\",\n                table: \"AspNetUsers\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/Migrations/20160802025049_UserAuditTable.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing AdminLTE.Data;\n\nnamespace AdminLTE.Data.Migrations\n{\n    [DbContext(typeof(ApplicationDbContext))]\n    [Migration(\"20160802025049_UserAuditTable\")]\n    partial class UserAuditTable\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.0.0-rtm-21431\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"AdminLTE.Models.ApplicationUser\", b =>\n                {\n                    b.Property<string>(\"Id\");\n\n                    b.Property<int>(\"AccessFailedCount\");\n\n                    b.Property<string>(\"AvatarURL\");\n\n                    b.Property<string>(\"ConcurrencyStamp\")\n                        .IsConcurrencyToken();\n\n                    b.Property<string>(\"Email\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<bool>(\"EmailConfirmed\");\n\n                    b.Property<string>(\"FirstName\");\n\n                    b.Property<string>(\"LastName\");\n\n                    b.Property<bool>(\"LockoutEnabled\");\n\n                    b.Property<DateTimeOffset?>(\"LockoutEnd\");\n\n                    b.Property<string>(\"NormalizedEmail\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<string>(\"NormalizedUserName\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<string>(\"PasswordHash\");\n\n                    b.Property<string>(\"PhoneNumber\");\n\n                    b.Property<bool>(\"PhoneNumberConfirmed\");\n\n                    b.Property<string>(\"SecurityStamp\");\n\n                    b.Property<bool>(\"TwoFactorEnabled\");\n\n                    b.Property<string>(\"UserName\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"NormalizedEmail\")\n                        .HasDatabaseName(\"EmailIndex\");\n\n                    b.HasIndex(\"NormalizedUserName\")\n                        .IsUnique()\n                        .HasDatabaseName(\"UserNameIndex\");\n\n                    b.ToTable(\"AspNetUsers\");\n                });\n\n            modelBuilder.Entity(\"AdminLTE.Models.UserAudit\", b =>\n                {\n                    b.Property<int>(\"UserAuditId\")\n                        .ValueGeneratedOnAdd();\n\n                    b.Property<int>(\"AuditEvent\");\n\n                    b.Property<string>(\"IpAddress\");\n\n                    b.Property<DateTimeOffset>(\"Timestamp\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired();\n\n                    b.HasKey(\"UserAuditId\");\n\n                    b.ToTable(\"UserAuditEvents\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole\", b =>\n                {\n                    b.Property<string>(\"Id\");\n\n                    b.Property<string>(\"ConcurrencyStamp\")\n                        .IsConcurrencyToken();\n\n                    b.Property<string>(\"Name\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<string>(\"NormalizedName\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"NormalizedName\")\n                        .HasDatabaseName(\"RoleNameIndex\");\n\n                    b.ToTable(\"AspNetRoles\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<string>\", b =>\n                {\n                    b.Property<int>(\"Id\")\n                        .ValueGeneratedOnAdd();\n\n                    b.Property<string>(\"ClaimType\");\n\n                    b.Property<string>(\"ClaimValue\");\n\n                    b.Property<string>(\"RoleId\")\n                        .IsRequired();\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"RoleId\");\n\n                    b.ToTable(\"AspNetRoleClaims\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>\", b =>\n                {\n                    b.Property<int>(\"Id\")\n                        .ValueGeneratedOnAdd();\n\n                    b.Property<string>(\"ClaimType\");\n\n                    b.Property<string>(\"ClaimValue\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired();\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserClaims\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>\", b =>\n                {\n                    b.Property<string>(\"LoginProvider\");\n\n                    b.Property<string>(\"ProviderKey\");\n\n                    b.Property<string>(\"ProviderDisplayName\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired();\n\n                    b.HasKey(\"LoginProvider\", \"ProviderKey\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserLogins\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole<string>\", b =>\n                {\n                    b.Property<string>(\"UserId\");\n\n                    b.Property<string>(\"RoleId\");\n\n                    b.HasKey(\"UserId\", \"RoleId\");\n\n                    b.HasIndex(\"RoleId\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserRoles\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserToken<string>\", b =>\n                {\n                    b.Property<string>(\"UserId\");\n\n                    b.Property<string>(\"LoginProvider\");\n\n                    b.Property<string>(\"Name\");\n\n                    b.Property<string>(\"Value\");\n\n                    b.HasKey(\"UserId\", \"LoginProvider\", \"Name\");\n\n                    b.ToTable(\"AspNetUserTokens\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<string>\", b =>\n                {\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole\")\n                        .WithMany(\"Claims\")\n                        .HasForeignKey(\"RoleId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\")\n                        .WithMany(\"Claims\")\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\")\n                        .WithMany(\"Logins\")\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole<string>\", b =>\n                {\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole\")\n                        .WithMany(\"Users\")\n                        .HasForeignKey(\"RoleId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\")\n                        .WithMany(\"Roles\")\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/Migrations/20160802025049_UserAuditTable.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Metadata;\n\nnamespace AdminLTE.Data.Migrations\n{\n    public partial class UserAuditTable : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.CreateTable(\n                name: \"UserAuditEvents\",\n                columns: table => new\n                {\n                    UserAuditId = table.Column<int>(nullable: false)\n                        .Annotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn),\n                    AuditEvent = table.Column<int>(nullable: false),\n                    IpAddress = table.Column<string>(nullable: true),\n                    Timestamp = table.Column<DateTimeOffset>(nullable: false),\n                    UserId = table.Column<string>(nullable: false)\n                },\n                constraints: table =>\n                {\n                    table.PrimaryKey(\"PK_UserAuditEvents\", x => x.UserAuditId);\n                });\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropTable(\n                name: \"UserAuditEvents\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/Migrations/20160802083550_AddedAdditionalUserFields.Designer.cs",
    "content": "﻿using System;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing AdminLTE.Data;\n\nnamespace AdminLTE.Data.Migrations\n{\n    [DbContext(typeof(ApplicationDbContext))]\n    [Migration(\"20160802083550_AddedAdditionalUserFields\")]\n    partial class AddedAdditionalUserFields\n    {\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"1.0.0-rtm-21431\")\n                .HasAnnotation(\"SqlServer:ValueGenerationStrategy\", SqlServerValueGenerationStrategy.IdentityColumn);\n\n            modelBuilder.Entity(\"AdminLTE.Models.ApplicationUser\", b =>\n                {\n                    b.Property<string>(\"Id\");\n\n                    b.Property<int>(\"AccessFailedCount\");\n\n                    b.Property<string>(\"AvatarURL\");\n\n                    b.Property<string>(\"ConcurrencyStamp\")\n                        .IsConcurrencyToken();\n\n                    b.Property<string>(\"DateRegistered\");\n\n                    b.Property<string>(\"Email\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<bool>(\"EmailConfirmed\");\n\n                    b.Property<string>(\"FirstName\");\n\n                    b.Property<string>(\"LastName\");\n\n                    b.Property<bool>(\"LockoutEnabled\");\n\n                    b.Property<DateTimeOffset?>(\"LockoutEnd\");\n\n                    b.Property<string>(\"NickName\");\n\n                    b.Property<string>(\"NormalizedEmail\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<string>(\"NormalizedUserName\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<string>(\"PasswordHash\");\n\n                    b.Property<string>(\"PhoneNumber\");\n\n                    b.Property<bool>(\"PhoneNumberConfirmed\");\n\n                    b.Property<string>(\"Position\");\n\n                    b.Property<string>(\"SecurityStamp\");\n\n                    b.Property<bool>(\"TwoFactorEnabled\");\n\n                    b.Property<string>(\"UserName\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"NormalizedEmail\")\n                        .HasDatabaseName(\"EmailIndex\");\n\n                    b.HasIndex(\"NormalizedUserName\")\n                        .IsUnique()\n                        .HasDatabaseName(\"UserNameIndex\");\n\n                    b.ToTable(\"AspNetUsers\");\n                });\n\n            modelBuilder.Entity(\"AdminLTE.Models.UserAudit\", b =>\n                {\n                    b.Property<int>(\"UserAuditId\")\n                        .ValueGeneratedOnAdd();\n\n                    b.Property<int>(\"AuditEvent\");\n\n                    b.Property<string>(\"IpAddress\");\n\n                    b.Property<DateTimeOffset>(\"Timestamp\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired();\n\n                    b.HasKey(\"UserAuditId\");\n\n                    b.ToTable(\"UserAuditEvents\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole\", b =>\n                {\n                    b.Property<string>(\"Id\");\n\n                    b.Property<string>(\"ConcurrencyStamp\")\n                        .IsConcurrencyToken();\n\n                    b.Property<string>(\"Name\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.Property<string>(\"NormalizedName\")\n                        .HasAnnotation(\"MaxLength\", 256);\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"NormalizedName\")\n                        .HasDatabaseName(\"RoleNameIndex\");\n\n                    b.ToTable(\"AspNetRoles\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<string>\", b =>\n                {\n                    b.Property<int>(\"Id\")\n                        .ValueGeneratedOnAdd();\n\n                    b.Property<string>(\"ClaimType\");\n\n                    b.Property<string>(\"ClaimValue\");\n\n                    b.Property<string>(\"RoleId\")\n                        .IsRequired();\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"RoleId\");\n\n                    b.ToTable(\"AspNetRoleClaims\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>\", b =>\n                {\n                    b.Property<int>(\"Id\")\n                        .ValueGeneratedOnAdd();\n\n                    b.Property<string>(\"ClaimType\");\n\n                    b.Property<string>(\"ClaimValue\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired();\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserClaims\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>\", b =>\n                {\n                    b.Property<string>(\"LoginProvider\");\n\n                    b.Property<string>(\"ProviderKey\");\n\n                    b.Property<string>(\"ProviderDisplayName\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired();\n\n                    b.HasKey(\"LoginProvider\", \"ProviderKey\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserLogins\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole<string>\", b =>\n                {\n                    b.Property<string>(\"UserId\");\n\n                    b.Property<string>(\"RoleId\");\n\n                    b.HasKey(\"UserId\", \"RoleId\");\n\n                    b.HasIndex(\"RoleId\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserRoles\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserToken<string>\", b =>\n                {\n                    b.Property<string>(\"UserId\");\n\n                    b.Property<string>(\"LoginProvider\");\n\n                    b.Property<string>(\"Name\");\n\n                    b.Property<string>(\"Value\");\n\n                    b.HasKey(\"UserId\", \"LoginProvider\", \"Name\");\n\n                    b.ToTable(\"AspNetUserTokens\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRoleClaim<string>\", b =>\n                {\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole\")\n                        .WithMany(\"Claims\")\n                        .HasForeignKey(\"RoleId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserClaim<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\")\n                        .WithMany(\"Claims\")\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserLogin<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\")\n                        .WithMany(\"Logins\")\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole<string>\", b =>\n                {\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityRole\")\n                        .WithMany(\"Users\")\n                        .HasForeignKey(\"RoleId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\")\n                        .WithMany(\"Roles\")\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade);\n                });\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/Migrations/20160802083550_AddedAdditionalUserFields.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Microsoft.EntityFrameworkCore.Migrations;\n\nnamespace AdminLTE.Data.Migrations\n{\n    public partial class AddedAdditionalUserFields : Migration\n    {\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.AddColumn<string>(\n                name: \"DateRegistered\",\n                table: \"AspNetUsers\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"NickName\",\n                table: \"AspNetUsers\",\n                nullable: true);\n\n            migrationBuilder.AddColumn<string>(\n                name: \"Position\",\n                table: \"AspNetUsers\",\n                nullable: true);\n        }\n\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropColumn(\n                name: \"DateRegistered\",\n                table: \"AspNetUsers\");\n\n            migrationBuilder.DropColumn(\n                name: \"NickName\",\n                table: \"AspNetUsers\");\n\n            migrationBuilder.DropColumn(\n                name: \"Position\",\n                table: \"AspNetUsers\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/Migrations/20251217031644_UpdateEF10.Designer.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing AdminLTE.Data;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Migrations;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\n\n#nullable disable\n\nnamespace AdminLTE.Data.Migrations\n{\n    [DbContext(typeof(ApplicationDbContext))]\n    [Migration(\"20251217031644_UpdateEF10\")]\n    partial class UpdateEF10\n    {\n        /// <inheritdoc />\n        protected override void BuildTargetModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"10.0.1\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128);\n\n            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);\n\n            modelBuilder.Entity(\"AdminLTE.Models.ApplicationUser\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<int>(\"AccessFailedCount\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"AvatarURL\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ConcurrencyStamp\")\n                        .IsConcurrencyToken()\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"DateRegistered\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(256)\n                        .HasColumnType(\"nvarchar(256)\");\n\n                    b.Property<bool>(\"EmailConfirmed\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"FirstName\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"LastName\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"LockoutEnabled\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTimeOffset?>(\"LockoutEnd\")\n                        .HasColumnType(\"datetimeoffset\");\n\n                    b.Property<string>(\"NickName\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"NormalizedEmail\")\n                        .HasMaxLength(256)\n                        .HasColumnType(\"nvarchar(256)\");\n\n                    b.Property<string>(\"NormalizedUserName\")\n                        .HasMaxLength(256)\n                        .HasColumnType(\"nvarchar(256)\");\n\n                    b.Property<string>(\"PasswordHash\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"PhoneNumber\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"PhoneNumberConfirmed\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Position\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"SecurityStamp\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"TwoFactorEnabled\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"UserName\")\n                        .HasMaxLength(256)\n                        .HasColumnType(\"nvarchar(256)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"NormalizedEmail\")\n                        .HasDatabaseName(\"EmailIndex\");\n\n                    b.HasIndex(\"NormalizedUserName\")\n                        .IsUnique()\n                        .HasDatabaseName(\"UserNameIndex\")\n                        .HasFilter(\"[NormalizedUserName] IS NOT NULL\");\n\n                    b.ToTable(\"AspNetUsers\", (string)null);\n                });\n\n            modelBuilder.Entity(\"AdminLTE.Models.UserAudit\", b =>\n                {\n                    b.Property<int>(\"UserAuditId\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\");\n\n                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>(\"UserAuditId\"));\n\n                    b.Property<int>(\"AuditEvent\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"IpAddress\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTimeOffset>(\"Timestamp\")\n                        .HasColumnType(\"datetimeoffset\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.HasKey(\"UserAuditId\");\n\n                    b.ToTable(\"UserAuditEvents\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityRole\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"ConcurrencyStamp\")\n                        .IsConcurrencyToken()\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Name\")\n                        .HasMaxLength(256)\n                        .HasColumnType(\"nvarchar(256)\");\n\n                    b.Property<string>(\"NormalizedName\")\n                        .HasMaxLength(256)\n                        .HasColumnType(\"nvarchar(256)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"NormalizedName\")\n                        .IsUnique()\n                        .HasDatabaseName(\"RoleNameIndex\")\n                        .HasFilter(\"[NormalizedName] IS NOT NULL\");\n\n                    b.ToTable(\"AspNetRoles\", (string)null);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>\", b =>\n                {\n                    b.Property<int>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\");\n\n                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>(\"Id\"));\n\n                    b.Property<string>(\"ClaimType\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ClaimValue\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"RoleId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"RoleId\");\n\n                    b.ToTable(\"AspNetRoleClaims\", (string)null);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserClaim<string>\", b =>\n                {\n                    b.Property<int>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\");\n\n                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>(\"Id\"));\n\n                    b.Property<string>(\"ClaimType\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ClaimValue\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserClaims\", (string)null);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserLogin<string>\", b =>\n                {\n                    b.Property<string>(\"LoginProvider\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"ProviderKey\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"ProviderDisplayName\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.HasKey(\"LoginProvider\", \"ProviderKey\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserLogins\", (string)null);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserRole<string>\", b =>\n                {\n                    b.Property<string>(\"UserId\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"RoleId\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.HasKey(\"UserId\", \"RoleId\");\n\n                    b.HasIndex(\"RoleId\");\n\n                    b.ToTable(\"AspNetUserRoles\", (string)null);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserToken<string>\", b =>\n                {\n                    b.Property<string>(\"UserId\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"LoginProvider\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"Name\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"Value\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.HasKey(\"UserId\", \"LoginProvider\", \"Name\");\n\n                    b.ToTable(\"AspNetUserTokens\", (string)null);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>\", b =>\n                {\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.IdentityRole\", null)\n                        .WithMany()\n                        .HasForeignKey(\"RoleId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .IsRequired();\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserClaim<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\", null)\n                        .WithMany()\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .IsRequired();\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserLogin<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\", null)\n                        .WithMany()\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .IsRequired();\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserRole<string>\", b =>\n                {\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.IdentityRole\", null)\n                        .WithMany()\n                        .HasForeignKey(\"RoleId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .IsRequired();\n\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\", null)\n                        .WithMany()\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .IsRequired();\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserToken<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\", null)\n                        .WithMany()\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .IsRequired();\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/Migrations/20251217031644_UpdateEF10.cs",
    "content": "﻿using Microsoft.EntityFrameworkCore.Migrations;\n\n#nullable disable\n\nnamespace AdminLTE.Data.Migrations\n{\n    /// <inheritdoc />\n    public partial class UpdateEF10 : Migration\n    {\n        /// <inheritdoc />\n        protected override void Up(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropIndex(\n                name: \"UserNameIndex\",\n                table: \"AspNetUsers\");\n\n            migrationBuilder.DropIndex(\n                name: \"IX_AspNetUserRoles_UserId\",\n                table: \"AspNetUserRoles\");\n\n            migrationBuilder.DropIndex(\n                name: \"RoleNameIndex\",\n                table: \"AspNetRoles\");\n\n            migrationBuilder.CreateIndex(\n                name: \"UserNameIndex\",\n                table: \"AspNetUsers\",\n                column: \"NormalizedUserName\",\n                unique: true,\n                filter: \"[NormalizedUserName] IS NOT NULL\");\n\n            migrationBuilder.CreateIndex(\n                name: \"RoleNameIndex\",\n                table: \"AspNetRoles\",\n                column: \"NormalizedName\",\n                unique: true,\n                filter: \"[NormalizedName] IS NOT NULL\");\n\n            migrationBuilder.AddForeignKey(\n                name: \"FK_AspNetUserTokens_AspNetUsers_UserId\",\n                table: \"AspNetUserTokens\",\n                column: \"UserId\",\n                principalTable: \"AspNetUsers\",\n                principalColumn: \"Id\",\n                onDelete: ReferentialAction.Cascade);\n        }\n\n        /// <inheritdoc />\n        protected override void Down(MigrationBuilder migrationBuilder)\n        {\n            migrationBuilder.DropForeignKey(\n                name: \"FK_AspNetUserTokens_AspNetUsers_UserId\",\n                table: \"AspNetUserTokens\");\n\n            migrationBuilder.DropIndex(\n                name: \"UserNameIndex\",\n                table: \"AspNetUsers\");\n\n            migrationBuilder.DropIndex(\n                name: \"RoleNameIndex\",\n                table: \"AspNetRoles\");\n\n            migrationBuilder.CreateIndex(\n                name: \"UserNameIndex\",\n                table: \"AspNetUsers\",\n                column: \"NormalizedUserName\",\n                unique: true);\n\n            migrationBuilder.CreateIndex(\n                name: \"IX_AspNetUserRoles_UserId\",\n                table: \"AspNetUserRoles\",\n                column: \"UserId\");\n\n            migrationBuilder.CreateIndex(\n                name: \"RoleNameIndex\",\n                table: \"AspNetRoles\",\n                column: \"NormalizedName\");\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Data/Migrations/ApplicationDbContextModelSnapshot.cs",
    "content": "﻿// <auto-generated />\nusing System;\nusing AdminLTE.Data;\nusing Microsoft.EntityFrameworkCore;\nusing Microsoft.EntityFrameworkCore.Infrastructure;\nusing Microsoft.EntityFrameworkCore.Metadata;\nusing Microsoft.EntityFrameworkCore.Storage.ValueConversion;\n\n#nullable disable\n\nnamespace AdminLTE.Data.Migrations\n{\n    [DbContext(typeof(ApplicationDbContext))]\n    partial class ApplicationDbContextModelSnapshot : ModelSnapshot\n    {\n        protected override void BuildModel(ModelBuilder modelBuilder)\n        {\n#pragma warning disable 612, 618\n            modelBuilder\n                .HasAnnotation(\"ProductVersion\", \"10.0.1\")\n                .HasAnnotation(\"Relational:MaxIdentifierLength\", 128);\n\n            SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);\n\n            modelBuilder.Entity(\"AdminLTE.Models.ApplicationUser\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<int>(\"AccessFailedCount\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"AvatarURL\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ConcurrencyStamp\")\n                        .IsConcurrencyToken()\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"DateRegistered\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Email\")\n                        .HasMaxLength(256)\n                        .HasColumnType(\"nvarchar(256)\");\n\n                    b.Property<bool>(\"EmailConfirmed\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"FirstName\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"LastName\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"LockoutEnabled\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<DateTimeOffset?>(\"LockoutEnd\")\n                        .HasColumnType(\"datetimeoffset\");\n\n                    b.Property<string>(\"NickName\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"NormalizedEmail\")\n                        .HasMaxLength(256)\n                        .HasColumnType(\"nvarchar(256)\");\n\n                    b.Property<string>(\"NormalizedUserName\")\n                        .HasMaxLength(256)\n                        .HasColumnType(\"nvarchar(256)\");\n\n                    b.Property<string>(\"PasswordHash\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"PhoneNumber\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"PhoneNumberConfirmed\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"Position\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"SecurityStamp\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<bool>(\"TwoFactorEnabled\")\n                        .HasColumnType(\"bit\");\n\n                    b.Property<string>(\"UserName\")\n                        .HasMaxLength(256)\n                        .HasColumnType(\"nvarchar(256)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"NormalizedEmail\")\n                        .HasDatabaseName(\"EmailIndex\");\n\n                    b.HasIndex(\"NormalizedUserName\")\n                        .IsUnique()\n                        .HasDatabaseName(\"UserNameIndex\")\n                        .HasFilter(\"[NormalizedUserName] IS NOT NULL\");\n\n                    b.ToTable(\"AspNetUsers\", (string)null);\n                });\n\n            modelBuilder.Entity(\"AdminLTE.Models.UserAudit\", b =>\n                {\n                    b.Property<int>(\"UserAuditId\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\");\n\n                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>(\"UserAuditId\"));\n\n                    b.Property<int>(\"AuditEvent\")\n                        .HasColumnType(\"int\");\n\n                    b.Property<string>(\"IpAddress\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<DateTimeOffset>(\"Timestamp\")\n                        .HasColumnType(\"datetimeoffset\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.HasKey(\"UserAuditId\");\n\n                    b.ToTable(\"UserAuditEvents\");\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityRole\", b =>\n                {\n                    b.Property<string>(\"Id\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"ConcurrencyStamp\")\n                        .IsConcurrencyToken()\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"Name\")\n                        .HasMaxLength(256)\n                        .HasColumnType(\"nvarchar(256)\");\n\n                    b.Property<string>(\"NormalizedName\")\n                        .HasMaxLength(256)\n                        .HasColumnType(\"nvarchar(256)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"NormalizedName\")\n                        .IsUnique()\n                        .HasDatabaseName(\"RoleNameIndex\")\n                        .HasFilter(\"[NormalizedName] IS NOT NULL\");\n\n                    b.ToTable(\"AspNetRoles\", (string)null);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>\", b =>\n                {\n                    b.Property<int>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\");\n\n                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>(\"Id\"));\n\n                    b.Property<string>(\"ClaimType\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ClaimValue\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"RoleId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"RoleId\");\n\n                    b.ToTable(\"AspNetRoleClaims\", (string)null);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserClaim<string>\", b =>\n                {\n                    b.Property<int>(\"Id\")\n                        .ValueGeneratedOnAdd()\n                        .HasColumnType(\"int\");\n\n                    SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>(\"Id\"));\n\n                    b.Property<string>(\"ClaimType\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"ClaimValue\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.HasKey(\"Id\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserClaims\", (string)null);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserLogin<string>\", b =>\n                {\n                    b.Property<string>(\"LoginProvider\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"ProviderKey\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"ProviderDisplayName\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.Property<string>(\"UserId\")\n                        .IsRequired()\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.HasKey(\"LoginProvider\", \"ProviderKey\");\n\n                    b.HasIndex(\"UserId\");\n\n                    b.ToTable(\"AspNetUserLogins\", (string)null);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserRole<string>\", b =>\n                {\n                    b.Property<string>(\"UserId\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"RoleId\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.HasKey(\"UserId\", \"RoleId\");\n\n                    b.HasIndex(\"RoleId\");\n\n                    b.ToTable(\"AspNetUserRoles\", (string)null);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserToken<string>\", b =>\n                {\n                    b.Property<string>(\"UserId\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"LoginProvider\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"Name\")\n                        .HasColumnType(\"nvarchar(450)\");\n\n                    b.Property<string>(\"Value\")\n                        .HasColumnType(\"nvarchar(max)\");\n\n                    b.HasKey(\"UserId\", \"LoginProvider\", \"Name\");\n\n                    b.ToTable(\"AspNetUserTokens\", (string)null);\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityRoleClaim<string>\", b =>\n                {\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.IdentityRole\", null)\n                        .WithMany()\n                        .HasForeignKey(\"RoleId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .IsRequired();\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserClaim<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\", null)\n                        .WithMany()\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .IsRequired();\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserLogin<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\", null)\n                        .WithMany()\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .IsRequired();\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserRole<string>\", b =>\n                {\n                    b.HasOne(\"Microsoft.AspNetCore.Identity.IdentityRole\", null)\n                        .WithMany()\n                        .HasForeignKey(\"RoleId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .IsRequired();\n\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\", null)\n                        .WithMany()\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .IsRequired();\n                });\n\n            modelBuilder.Entity(\"Microsoft.AspNetCore.Identity.IdentityUserToken<string>\", b =>\n                {\n                    b.HasOne(\"AdminLTE.Models.ApplicationUser\", null)\n                        .WithMany()\n                        .HasForeignKey(\"UserId\")\n                        .OnDelete(DeleteBehavior.Cascade)\n                        .IsRequired();\n                });\n#pragma warning restore 612, 618\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/AccountViewModels/ExternalLoginConfirmationViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace AdminLTE.Models.AccountViewModels\n{\n    public class ExternalLoginConfirmationViewModel\n    {\n        [Required]\n        [EmailAddress]\n        public string Email { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/AccountViewModels/ForgotPasswordViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace AdminLTE.Models.AccountViewModels\n{\n    public class ForgotPasswordViewModel\n    {\n        [Required]\n        [EmailAddress]\n        public string Email { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/AccountViewModels/LoginViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace AdminLTE.Models.AccountViewModels\n{\n    public class LoginViewModel\n    {\n        [Required]\n        [EmailAddress]\n        public string Email { get; set; }\n\n        [Required]\n        [DataType(DataType.Password)]\n        public string Password { get; set; }\n\n        [Display(Name = \"Remember Me\")]\n        public bool RememberMe { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/AccountViewModels/RegisterViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace AdminLTE.Models.AccountViewModels\n{\n    public class RegisterViewModel\n    {\n        [Required]\n        [EmailAddress]\n        [Display(Name = \"Email\")]\n        public string Email { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} and at max {1} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Password\")]\n        public string Password { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm password\")]\n        [Compare(\"Password\", ErrorMessage = \"The password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n\n        [Required]\n        [Display(Name = \"FirstName\")]\n        public string FirstName { get; set; }\n\n        [Required]\n        [Display(Name = \"LastName\")]\n        public string LastName { get; set; }\n\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/AccountViewModels/ResetPasswordViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace AdminLTE.Models.AccountViewModels\n{\n    public class ResetPasswordViewModel\n    {\n        [Required]\n        [EmailAddress]\n        public string Email { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} and at max {1} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        public string Password { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm password\")]\n        [Compare(\"Password\", ErrorMessage = \"The password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n\n        public string Code { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/AccountViewModels/SendCodeViewModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing Microsoft.AspNetCore.Mvc.Rendering;\n\nnamespace AdminLTE.Models.AccountViewModels\n{\n    public class SendCodeViewModel\n    {\n        public string SelectedProvider { get; set; }\n\n        public ICollection<SelectListItem> Providers { get; set; }\n\n        public string ReturnUrl { get; set; }\n\n        public bool RememberMe { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/AccountViewModels/VerifyCodeViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace AdminLTE.Models.AccountViewModels\n{\n    public class VerifyCodeViewModel\n    {\n        [Required]\n        public string Provider { get; set; }\n\n        [Required]\n        public string Code { get; set; }\n\n        public string ReturnUrl { get; set; }\n\n        [Display(Name = \"Remember this browser?\")]\n        public bool RememberBrowser { get; set; }\n\n        [Display(Name = \"Remember me?\")]\n        public bool RememberMe { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/ApplicationUser.cs",
    "content": "﻿using Microsoft.AspNetCore.Identity;\nusing System;\n\nnamespace AdminLTE.Models\n{\n    // Add profile data for application users by adding properties to the ApplicationUser class\n    public class ApplicationUser : IdentityUser\n    {\n        public string FirstName { get; set; }\n        public string LastName { get; set; }\n        public string AvatarURL { get; set; }\n        public string DateRegistered { get; set; }\n        public string Position { get; set; }\n        public string NickName { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/ManageViewModels/AddPhoneNumberViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace AdminLTE.Models.ManageViewModels\n{\n    public class AddPhoneNumberViewModel\n    {\n        [Required]\n        [Phone]\n        [Display(Name = \"Phone number\")]\n        public string PhoneNumber { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/ManageViewModels/ChangePasswordViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace AdminLTE.Models.ManageViewModels\n{\n    public class ChangePasswordViewModel\n    {\n        [Required]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Current password\")]\n        public string OldPassword { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} and at max {1} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"New password\")]\n        public string NewPassword { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm new password\")]\n        [Compare(\"NewPassword\", ErrorMessage = \"The new password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/ManageViewModels/ConfigureTwoFactorViewModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing Microsoft.AspNetCore.Mvc.Rendering;\n\nnamespace AdminLTE.Models.ManageViewModels\n{\n    public class ConfigureTwoFactorViewModel\n    {\n        public string SelectedProvider { get; set; }\n\n        public ICollection<SelectListItem> Providers { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/ManageViewModels/FactorViewModel.cs",
    "content": "﻿namespace AdminLTE.Models.ManageViewModels\n{\n    public class FactorViewModel\n    {\n        public string Purpose { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/ManageViewModels/IndexViewModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing Microsoft.AspNetCore.Identity;\n\nnamespace AdminLTE.Models.ManageViewModels\n{\n    public class IndexViewModel\n    {\n        public bool HasPassword { get; set; }\n\n        public IList<UserLoginInfo> Logins { get; set; }\n\n        public string PhoneNumber { get; set; }\n\n        public bool TwoFactor { get; set; }\n\n        public bool BrowserRemembered { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/ManageViewModels/ManageLoginsViewModel.cs",
    "content": "﻿using System.Collections.Generic;\nusing Microsoft.AspNetCore.Authentication;\nusing Microsoft.AspNetCore.Identity;\n\nnamespace AdminLTE.Models.ManageViewModels\n{\n    public class ManageLoginsViewModel\n    {\n        public IList<UserLoginInfo> CurrentLogins { get; set; }\n\n        public IList<AuthenticationScheme> OtherLogins { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/ManageViewModels/RemoveLoginViewModel.cs",
    "content": "﻿namespace AdminLTE.Models.ManageViewModels\n{\n    public class RemoveLoginViewModel\n    {\n        public string LoginProvider { get; set; }\n        public string ProviderKey { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/ManageViewModels/SetPasswordViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace AdminLTE.Models.ManageViewModels\n{\n    public class SetPasswordViewModel\n    {\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} and at max {1} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"New password\")]\n        public string NewPassword { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm new password\")]\n        [Compare(\"NewPassword\", ErrorMessage = \"The new password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/ManageViewModels/VerifyPhoneNumberViewModel.cs",
    "content": "﻿using System.ComponentModel.DataAnnotations;\n\nnamespace AdminLTE.Models.ManageViewModels\n{\n    public class VerifyPhoneNumberViewModel\n    {\n        [Required]\n        public string Code { get; set; }\n\n        [Required]\n        [Phone]\n        [Display(Name = \"Phone number\")]\n        public string PhoneNumber { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/Message.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace AdminLTE.Models\n{\n    public class Message\n    {\n        public int Id { get; set; }\n        public string UserId { get; set; }\n        public string DisplayName { get; set; }\n        public string FontAwesomeIcon { get; set; }\n        public string AvatarURL { get; set; }\n        public string URLPath { get; set; }\n        public string ShortDesc { get; set; }\n        public string TimeSpan { get; set; }\n        public int Percentage { get; set; }\n        public string Type { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/RoleViewModels/EditRoleVm.cs",
    "content": "﻿using Microsoft.AspNetCore.Identity;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace AdminLTE.Models.RoleViewModels\n{\n    public class EditRoleVm\n    {\n        public IdentityRole Role { get; set; }\n        public IEnumerable<ApplicationUser> Members { get; set; }\n        public IEnumerable<ApplicationUser> NonMembers { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/RoleViewModels/ModifyRoleVm.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace AdminLTE.Models.RoleViewModels\n{\n    public class ModifyRoleVm\n    {\n        [Required]\n        public string RoleName { get; set; }\n\n        public string RoleId { get; set; }\n        public string[] IdsToAdd { get; set; }\n        public string[] IdsToRemove { get; set; }\n\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/SalesOrderDetail.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nnamespace AdminLTE.Models\n{\n    public class SalesOrderDetail\n    {\n        public int sr { get; set; }\n        public string ordertracknumber { get; set; }\n        public int quantity { get; set; }\n        public string productname { get; set; }\n        public string specialoffer { get; set; }\n        public double unitprice { get; set; }\n        public double unitpricediscount { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/SidebarMenu.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace AdminLTE.Models\n{\n    public class SidebarMenu\n    {\n        public SidebarMenuType Type { get; set; }\n        public bool IsActive { get; set; } = false;\n        public string Name { get; set; }\n        public string IconClassName { get; set; }\n        public string URLPath { get; set; }\n        public List<SidebarMenu> TreeChild { get; set; }\n        public Tuple<int, int, int> LinkCounter  { get; set; }\n    }\n\n    public enum SidebarMenuType\n    {\n        Header,\n        Link,\n        Tree\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/SuperAdminViewModels/CreateVm.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel.DataAnnotations;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace AdminLTE.Models.SuperAdminViewModels\n{\n    public class CreateVm\n    {\n        [Required]\n        [EmailAddress]\n        [Display(Name = \"Email\")]\n        public string Email { get; set; }\n\n        [Required]\n        [StringLength(100, ErrorMessage = \"The {0} must be at least {2} and at max {1} characters long.\", MinimumLength = 6)]\n        [DataType(DataType.Password)]\n        [Display(Name = \"Password\")]\n        public string Password { get; set; }\n\n        [DataType(DataType.Password)]\n        [Display(Name = \"Confirm password\")]\n        [Compare(\"Password\", ErrorMessage = \"The password and confirmation password do not match.\")]\n        public string ConfirmPassword { get; set; }\n\n        [Required]\n        [Display(Name = \"FirstName\")]\n        public string FirstName { get; set; }\n\n        [Required]\n        [Display(Name = \"LastName\")]\n        public string LastName { get; set; }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Models/UserAudit.cs",
    "content": "﻿using System;\nusing System.ComponentModel.DataAnnotations;\n\nnamespace AdminLTE.Models\n{\n    public class UserAudit\n    {\n        [Key]\n        public int UserAuditId { get; private set; }\n\n        [Required]\n        public string UserId { get; private set; }\n\n        [Required]\n        public DateTimeOffset Timestamp { get; private set; } = DateTime.UtcNow;\n\n        [Required]\n        public UserAuditEventType AuditEvent { get; set; }\n\n        public string IpAddress { get; private set; }\n\n        public static UserAudit CreateAuditEvent(string userId, UserAuditEventType auditEventType, string ipAddress)\n        {\n            return new UserAudit { UserId = userId, AuditEvent = auditEventType, IpAddress = ipAddress };\n        }\n    }\n\n    public enum UserAuditEventType\n    {\n        Login = 1,\n        FailedLogin = 2,\n        LogOut = 3\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Program.cs",
    "content": "﻿using AdminLTE.Data;\nusing AdminLTE.Models;\nusing AdminLTE.Services;\nusing Microsoft.AspNetCore.Authentication.Cookies;\nusing Microsoft.AspNetCore.Authorization;\nusing Microsoft.AspNetCore.Builder;\nusing Microsoft.AspNetCore.Identity;\nusing Microsoft.AspNetCore.Mvc.Authorization;\nusing Microsoft.EntityFrameworkCore;\nusing System;\n\nvar builder = WebApplication.CreateBuilder(args);\n\n// Add services to the container.\nvar connectionString = builder.Configuration.GetConnectionString(\"DefaultConnection\") ?? throw new InvalidOperationException(\"Connection string 'DefaultConnection' not found.\");\nbuilder.Services.AddDbContext<ApplicationDbContext>(options =>\n    options.UseSqlServer(connectionString));\nbuilder.Services.AddDatabaseDeveloperPageExceptionFilter();\n\nbuilder.Services.AddIdentity<ApplicationUser, IdentityRole>()\n    .AddEntityFrameworkStores<ApplicationDbContext>()\n    .AddDefaultTokenProviders();\nbuilder.Services.AddControllersWithViews();\n\nbuilder.Services.AddScoped<IUserClaimsPrincipalFactory<ApplicationUser>, AppClaimsPrincipalFactory>();\nbuilder.Services.AddScoped<SignInManager<ApplicationUser>, AuditableSignInManager<ApplicationUser>>();\n\nvar mvcBuilder = builder.Services.AddMvc(config =>\n{\n    var policy = new AuthorizationPolicyBuilder()\n                     .RequireAuthenticatedUser()\n                     .Build();\n    config.Filters.Add(new AuthorizeFilter(policy));\n});\n\nbuilder.Services.Configure<CookieAuthenticationOptions>(options =>\n{\n    options.LoginPath = new PathString(\"/Account/Login\");\n});\n\n// Add application services.\nbuilder.Services.AddTransient<IEmailSender, AuthMessageSender>();\nbuilder.Services.AddTransient<ISmsSender, AuthMessageSender>();\n\nbuilder.Services.AddControllersWithViews().AddRazorRuntimeCompilation();\n\nvar app = builder.Build();\n\n// Configure the HTTP request pipeline.\nif (app.Environment.IsDevelopment())\n{\n    app.UseDeveloperExceptionPage();\n    app.UseMigrationsEndPoint();\n}\nelse\n{\n    app.UseExceptionHandler(\"/Home/Error\");\n    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.\n    app.UseHsts();\n}\n\napp.UseStatusCodePagesWithRedirects(\"~/Home/Error/{0}\");\n\napp.UseHttpsRedirection();\napp.UseStaticFiles();\n\napp.UseRouting();\napp.UseAuthentication();\napp.UseAuthorization();\n\n//Add middleware here\napp.UseMiddleware<RequestLoggingMiddleware>();\n\napp.MapControllerRoute(\n    name: \"default\",\n    pattern: \"{controller=Home}/{action=Index}/{id?}\");\napp.MapRazorPages();\n\n// Populate default user admin\nDataSeed.Seed(app.Services).Wait();\n\napp.Run();"
  },
  {
    "path": "src/AdminLTE/Project_Readme.html",
    "content": "﻿<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\" />\n    <title>Welcome to ASP.NET Core</title>\n    <style>\n        html {\n            background: #f1f1f1;\n            height: 100%;\n        }\n\n        body {\n            background: #fff;\n            color: #505050;\n            font: 14px 'Segoe UI', tahoma, arial, helvetica, sans-serif;\n            margin: 1%;\n            min-height: 95.5%;\n            border: 1px solid silver;\n            position: relative;\n        }\n\n        #header {\n            padding: 0;\n        }\n\n            #header h1 {\n                font-size: 44px;\n                font-weight: normal;\n                margin: 0;\n                padding: 10px 30px 10px 30px;\n            }\n\n            #header span {\n                margin: 0;\n                padding: 0 30px;\n                display: block;\n            }\n\n            #header p {\n                font-size: 20px;\n                color: #fff;\n                background: #007acc;\n                padding: 0 30px;\n                line-height: 50px;\n                margin-top: 25px;\n\n            }\n\n                #header p a {\n                    color: #fff;\n                    text-decoration: underline;\n                    font-weight: bold;\n                    padding-right: 35px;\n                    background: no-repeat right bottom url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAWCAMAAAAcqPc3AAAANlBMVEUAAAAAeswfitI9mthXp91us+KCvuaTx+mjz+2x1u+83PLH4vTR5/ba7Pjj8Pns9fv1+v3////wy3dWAAAAAXRSTlMAQObYZgAAAHxJREFUeNp9kVcSwCAIRMHUYoH7XzaxOxJ9P8oyQ1uIqNPwh3s2aLmIM2YtqrLcQIeQEylhuCeUOlhgve5yoBCfWmlnlgkN4H8ykbpaE7gR03AbUHiwoOxUH9Xp+ubd41p1HF3mBPrfC87BHeTdaB3ceeKL9HGpcvX9zu6+DdMWT9KQPvYAAAAASUVORK5CYII=);\n                }\n\n        #main {\n            padding: 5px 30px;\n            clear: both;\n        }\n\n        .section {\n            width: 21.7%;\n            float: left;\n            margin: 0 0 0 4%;\n        }\n\n            .section h2 {\n                font-size: 13px;\n                text-transform: uppercase;\n                margin: 0;\n                border-bottom: 1px solid silver;\n                padding-bottom: 12px;\n                margin-bottom: 8px;\n            }\n\n            .section.first {\n                margin-left: 0;\n            }\n\n                .section.first h2 {\n                    font-size: 24px;\n                    text-transform: none;\n                    margin-bottom: 25px;\n                    border: none;\n                }\n\n                .section.first li {\n                    border-top: 1px solid silver;\n                    padding: 8px 0;\n                }\n\n            .section.last {\n                margin-right: 0;\n            }\n\n        ul {\n            list-style: none;\n            padding: 0;\n            margin: 0;\n            line-height: 20px;\n        }\n\n        li {\n            padding: 4px 0;\n        }\n\n        a {\n            color: #267cb2;\n            text-decoration: none;\n        }\n\n            a:hover {\n                text-decoration: underline;\n            }\n\n        #footer {\n            clear: both;\n            padding-top: 50px;\n        }\n\n            #footer p {\n                position: absolute;\n                bottom: 10px;\n            }\n    </style>\n</head>\n<body>\n\n    <div id=\"header\">\n        <h1>Welcome to ASP.NET Core</h1>\n        <span>\n            We've made some big updates in this release, so it’s <b>important</b> that you spend\n            a few minutes to learn what’s new.\n        </span>\n        <p>You've created a new ASP.NET Core project. <a href=\"http://go.microsoft.com/fwlink/?LinkId=518016\">Learn what's new</a></p>\n    </div>\n\n    <div id=\"main\">\n        <div class=\"section first\">\n            <h2>This application consists of:</h2>\n            <ul>\n                <li>Sample pages using ASP.NET Core MVC</li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkId=518004\">Bower</a> for managing client-side libraries</li>\n                <li>Theming using <a href=\"http://go.microsoft.com/fwlink/?LinkID=398939\">Bootstrap</a></li>\n            </ul>\n        </div>\n        <div class=\"section\">\n            <h2>How to</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=398600\">Add a Controller and View</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=699562\">Add an appsetting in config and access it in app.</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkId=699315\">Manage User Secrets using Secret Manager.</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkId=699316\">Use logging to log a message.</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkId=699317\">Add packages using NuGet.</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkId=699318\">Add client packages using Bower.</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkId=699319\">Target development, staging or production environment.</a></li>\n            </ul>\n        </div>\n        <div class=\"section\">\n            <h2>Overview</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkId=518008\">Conceptual overview of what is ASP.NET Core</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkId=699320\">Fundamentals of ASP.NET Core such as Startup and middleware.</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkId=398602\">Working with Data</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkId=398603\">Security</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=699321\">Client side development</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=699322\">Develop on different platforms</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=699323\">Read more on the documentation site</a></li>\n            </ul>\n        </div>\n        <div class=\"section last\">\n            <h2>Run & Deploy</h2>\n            <ul>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=517851\">Run your app</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=517853\">Run tools such as EF migrations and more</a></li>\n                <li><a href=\"http://go.microsoft.com/fwlink/?LinkID=398609\">Publish to Microsoft Azure Web Apps</a></li>\n            </ul>\n        </div>\n\n        <div id=\"footer\">\n            <p>We would love to hear your <a href=\"http://go.microsoft.com/fwlink/?LinkId=518015\">feedback</a></p>\n        </div>\n    </div>\n\n</body>\n</html>\n"
  },
  {
    "path": "src/AdminLTE/Properties/launchSettings.json",
    "content": "{\n  \"iisSettings\": {\n    \"windowsAuthentication\": false,\n    \"anonymousAuthentication\": true,\n    \"iisExpress\": {\n      \"applicationUrl\": \"http://localhost:9889/\",\n      \"sslPort\": 0\n    }\n  },\n  \"profiles\": {\n    \"IIS Express\": {\n      \"commandName\": \"IISExpress\",\n      \"launchBrowser\": true,\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      }\n    },\n    \"AdminLTE\": {\n      \"commandName\": \"Project\",\n      \"launchBrowser\": true,\n      \"launchUrl\": \"https://localhost:5001\",\n      \"environmentVariables\": {\n        \"ASPNETCORE_ENVIRONMENT\": \"Development\"\n      },\n      \"applicationUrl\": \"https://localhost:5001;http://localhost:5000\"\n    }\n  }\n}"
  },
  {
    "path": "src/AdminLTE/Services/IEmailSender.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace AdminLTE.Services\n{\n    public interface IEmailSender\n    {\n        Task SendEmailAsync(string email, string subject, string message);\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Services/ISmsSender.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace AdminLTE.Services\n{\n    public interface ISmsSender\n    {\n        Task SendSmsAsync(string number, string message);\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Services/MessageServices.cs",
    "content": "﻿using System.Threading.Tasks;\n\nnamespace AdminLTE.Services\n{\n    // This class is used by the application to send Email and SMS\n    // when you turn on two-factor authentication in ASP.NET Identity.\n    // For more details see this link http://go.microsoft.com/fwlink/?LinkID=532713\n    public class AuthMessageSender : IEmailSender, ISmsSender\n    {\n        public Task SendEmailAsync(string email, string subject, string message)\n        {\n            // Plug in your email service here to send an email.\n            return Task.FromResult(0);\n        }\n\n        public Task SendSmsAsync(string number, string message)\n        {\n            // Plug in your SMS service here to send a text message.\n            return Task.FromResult(0);\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Services/RequestLoggingMiddleware.cs",
    "content": "﻿using Microsoft.AspNetCore.Http;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace AdminLTE.Services\n{\n    public class RequestLoggingMiddleware\n    {\n        private readonly RequestDelegate _next;\n        private readonly ILogger<RequestLoggingMiddleware> _logger;\n\n        public RequestLoggingMiddleware(RequestDelegate next, ILogger<RequestLoggingMiddleware> logger)\n        {\n            _next = next;\n            _logger = logger;\n        }\n\n        public async Task Invoke(HttpContext context)\n        {\n            var startTime = DateTime.UtcNow;\n\n            var watch = Stopwatch.StartNew();\n            await _next.Invoke(context);\n            watch.Stop();\n\n            var logTemplate = @\"Client IP: {clientIP}\n                                Request path: {requestPath}\n                                Request content type: {requestContentType}\n                                Request content length: {requestContentLength}\n                                Start time: {startTime}\n                                Duration: {duration}\";\n\n            _logger.LogInformation(logTemplate,\n                context.Connection.RemoteIpAddress.ToString(),\n                context.Request.Path,\n                context.Request.ContentType,\n                context.Request.ContentLength,\n                startTime,\n                watch.ElapsedMilliseconds);\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/ViewComponents/BreadcrumbViewComponent.cs",
    "content": "﻿using AdminLTE.Models;\nusing Microsoft.AspNetCore.Mvc;\nusing System.Collections.Generic;\n\nnamespace AdminLTE.ViewComponents\n{\n    public class BreadcrumbViewComponent : ViewComponent\n    {\n\n        public BreadcrumbViewComponent()\n        {\n            \n        }\n\n        public IViewComponentResult Invoke(string filter)\n        {\n            if (ViewBag.Breadcrumb == null)\n            {\n                ViewBag.Breadcrumb = new List<Message>();\n            }\n            \n            return View(ViewBag.Breadcrumb as List<Message>);\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/ViewComponents/ControlSidebarViewComponent.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Diagnostics;\nusing System.IO;\n\nnamespace AdminLTE.ViewComponents\n{\n    public class ControlSidebarViewComponent : ViewComponent\n    {\n\n        public ControlSidebarViewComponent()\n        {\n        }\n\n        public IViewComponentResult Invoke(string filter)\n        {\n            if (string.IsNullOrEmpty(ViewBag.PageHelpFileName))\n            {\n                return View(string.Empty);\n            }\n\n            ViewBag.PageHelpContainer = LoadData(ViewBag.PageHelpFileName);\n            return View();\n        }\n\n        private string LoadData(string filepath)\n        {\n            var basePath = Directory.GetCurrentDirectory() + @\"\\wwwroot\\files\\\";\n            var baseExtension = @\".html\";\n            var absoluteFilePath = basePath + filepath + baseExtension;\n\n            string result = string.Empty;\n            try\n            {\n                if (!File.Exists(absoluteFilePath))\n                {\n                    return string.Empty;\n                }\n\n                using (StreamReader sr = new StreamReader(new FileStream(absoluteFilePath, FileMode.Open, FileAccess.Read)))\n                {\n                    result = sr.ReadToEnd();\n                }\n            }\n            catch (FileNotFoundException fex)\n            {\n                Debug.Write(fex);\n                return string.Empty;\n            }\n            catch (Exception ex)\n            {\n                Debug.Write(ex);\n                return string.Empty;\n            }\n\n            return result;\n        }\n\n        //private List<string> LoadData(string filename)\n        //{\n        //    var result = new List<string>();\n        //    try\n        //    {\n        //        using (StreamReader sr = new StreamReader(new FileStream(Directory.GetCurrentDirectory() + $\"\\\\wwwroot\\\\files\\\\{filename}\", FileMode.Open, FileAccess.Read)))\n        //        {\n        //            var line = string.Empty;\n        //            while ((line = sr.ReadLine()) != null)\n        //            {\n        //                // Adding.\n        //                result.Add(line);\n        //            }\n\n        //            return result;\n        //        }\n        //    }\n        //    catch (Exception ex)\n        //    {\n        //        Debug.Write(ex);\n        //    }\n\n        //    return result;\n        //}\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/ViewComponents/FooterViewComponent.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\n\nnamespace AdminLTE.ViewComponents\n{\n    public class FooterViewComponent : ViewComponent\n    {\n\n        public FooterViewComponent()\n        {\n        }\n\n        public IViewComponentResult Invoke(string filter)\n        {\n            return View();\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/ViewComponents/HeaderViewComponent.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\n\nnamespace AdminLTE.ViewComponents\n{\n    public class HeaderViewComponent : ViewComponent\n    {\n\n        public HeaderViewComponent()\n        {\n        }\n\n        public IViewComponentResult Invoke(string filter)\n        {\n            return View();\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/ViewComponents/MenuMessageViewComponent.cs",
    "content": "﻿using AdminLTE.Models;\nusing Microsoft.AspNetCore.Mvc;\nusing System.Collections.Generic;\nusing System.Security.Claims;\nusing AdminLTE.Common.Extensions;\nusing AdminLTE.Common;\nnamespace AdminLTE.ViewComponents\n{\n    public class MenuMessageViewComponent : ViewComponent\n    {\n\n        public MenuMessageViewComponent()\n        {\n        }\n\n        public IViewComponentResult Invoke(string filter)\n        {\n            var messages = GetData();\n            return View(messages);\n        }\n\n        private List<Message> GetData()\n        {\n            var messages = new List<Message>();\n\n            messages.Add(new Message\n            {\n                Id = 1,\n                UserId = ((ClaimsPrincipal)User).GetUserProperty(CustomClaimTypes.NameIdentifier),\n                DisplayName = \"Support Team\",\n                AvatarURL = \"/images/user.png\",\n                ShortDesc = \"Why not buy a new awesome theme?\",\n                TimeSpan = \"5 mins\",\n                URLPath = \"#\",\n            });\n\n            messages.Add(new Message\n            {\n                Id = 1,\n                UserId = ((ClaimsPrincipal)User).GetUserProperty(CustomClaimTypes.NameIdentifier),\n                DisplayName = \"Ken\",\n                AvatarURL = \"/images/user.png\",\n                ShortDesc = \"For approval\",\n                TimeSpan = \"15 mins\",\n                URLPath = \"#\",\n            });\n\n            return messages;\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/ViewComponents/MenuNotificationViewComponent.cs",
    "content": "﻿using AdminLTE.Models;\nusing Microsoft.AspNetCore.Mvc;\nusing System.Collections.Generic;\n\nnamespace AdminLTE.ViewComponents\n{\n    public class MenuNotificationViewComponent : ViewComponent\n    {\n\n        public MenuNotificationViewComponent()\n        {\n        }\n\n        public IViewComponentResult Invoke(string filter)\n        {\n            var messages = GetData();\n            return View(messages);\n        }\n\n        private List<Message> GetData()\n        {\n            var messages = new List<Message>();\n            messages.Add(new Message\n            {\n                Id = 1,\n                FontAwesomeIcon = \"bi bi-people-fill text-aqua\",\n                ShortDesc = \"5 new members joined today\",\n                URLPath = \"#\",\n            });\n\n            return messages;\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/ViewComponents/MenuTaskViewComponent.cs",
    "content": "﻿using AdminLTE.Models;\nusing Microsoft.AspNetCore.Mvc;\nusing System.Collections.Generic;\n\nnamespace AdminLTE.ViewComponents\n{\n    public class MenuTaskViewComponent : ViewComponent\n    {\n\n        public MenuTaskViewComponent()\n        {\n        }\n\n        public IViewComponentResult Invoke(string filter)\n        {\n            var messages = GetData();\n            return View(messages);\n        }\n\n        private List<Message> GetData()\n        {\n            var messages = new List<Message>();\n            messages.Add(new Message\n            {\n                Id = 1,\n                ShortDesc = \"Design some buttons\",\n                URLPath = \"#\",\n                Percentage = 20,\n            });\n\n            return messages;\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/ViewComponents/MenuUserViewComponent.cs",
    "content": "﻿using AdminLTE.Models;\nusing Microsoft.AspNetCore.Mvc;\nusing System.Collections.Generic;\n\nnamespace AdminLTE.ViewComponents\n{\n    public class MenuUserViewComponent : ViewComponent\n    {\n\n        public MenuUserViewComponent()\n        {\n        }\n\n        public IViewComponentResult Invoke(string filter)\n        {\n            return View();\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/ViewComponents/PageAlertViewComponent.cs",
    "content": "﻿using AdminLTE.Models;\nusing Microsoft.AspNetCore.Mvc;\nusing System;\nusing System.Collections.Generic;\n\nnamespace AdminLTE.ViewComponents\n{\n    public class PageAlertViewComponent : ViewComponent\n    {\n\n        public PageAlertViewComponent()\n        {\n        }\n\n        public IViewComponentResult Invoke(string filter)\n        {\n            List<Message> messages;\n            if (ViewBag.PageAlerts == null)\n            {\n                messages = new List<Message>();\n            }\n            else\n            {\n                messages = new List<Message>(ViewBag.PageAlerts);\n            }\n            return View(messages);\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/ViewComponents/PageHeaderViewComponent.cs",
    "content": "﻿using Microsoft.AspNetCore.Mvc;\nusing System;\n\nnamespace AdminLTE.ViewComponents\n{\n    public class PageHeaderViewComponent : ViewComponent\n    {\n\n        public PageHeaderViewComponent()\n        {\n        }\n\n        public IViewComponentResult Invoke(string filter)\n        {\n            Tuple<string, string> message;\n\n            if (ViewBag.PageHeader == null)\n            {\n                message = Tuple.Create(string.Empty, string.Empty);\n            }\n            else\n            {\n                message = ViewBag.PageHeader as Tuple<string, string>;\n            }\n            return View(message);\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/ViewComponents/SidebarViewComponent.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Linq;\nusing Microsoft.AspNetCore.Mvc;\nusing AdminLTE.Common;\nusing AdminLTE.Models;\nusing System.Security.Claims;\nusing AdminLTE.Common.Extensions;\nusing System;\n\nnamespace AdminLTE.ViewComponents\n{\n    public class SidebarViewComponent : ViewComponent\n    {\n        public SidebarViewComponent()\n        {\n        }\n\n        public IViewComponentResult Invoke(string filter)\n        {\n            //you can do the access rights checking here by using session, user, and/or filter parameter\n            var sidebars = new List<SidebarMenu>();\n\n            //if (((ClaimsPrincipal)User).GetUserProperty(\"AccessProfile\").Contains(\"VES_008, Payroll\"))\n            //{\n            //}\n\n            sidebars.Add(ModuleHelper.AddHeader(\"MAIN NAVIGATION\"));\n            sidebars.Add(ModuleHelper.AddModule(ModuleHelper.Module.Home));\n            sidebars.Add(ModuleHelper.AddModule(ModuleHelper.Module.Error, Tuple.Create(0, 0, 1)));\n            sidebars.Add(ModuleHelper.AddModule(ModuleHelper.Module.About, Tuple.Create(0, 1, 0)));\n            sidebars.Add(ModuleHelper.AddModule(ModuleHelper.Module.Contact, Tuple.Create(1, 0, 0)));\n            sidebars.Add(ModuleHelper.AddTree(\"Account\"));\n            sidebars.Last().TreeChild = new List<SidebarMenu>()\n            {\n                ModuleHelper.AddModule(ModuleHelper.Module.Login),\n                ModuleHelper.AddModule(ModuleHelper.Module.Register, Tuple.Create(1, 1, 1)),\n            };\n\n            if (User.IsInRole(\"SuperAdmins\"))\n            {\n                sidebars.Add(ModuleHelper.AddTree(\"Administration\"));\n                sidebars.Last().TreeChild = new List<SidebarMenu>()\n                {\n                    ModuleHelper.AddModule(ModuleHelper.Module.SuperAdmin),\n                    ModuleHelper.AddModule(ModuleHelper.Module.Role),\n                };\n                sidebars.Add(ModuleHelper.AddModule(ModuleHelper.Module.UserLogs));\n            }\n\n            return View(sidebars);\n        }\n    }\n}\n"
  },
  {
    "path": "src/AdminLTE/Views/Account/ConfirmEmail.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Confirm Email\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n<div>\n    <p>\n        Thank you for confirming your email. Please <a asp-controller=\"Account\" asp-action=\"Login\">Click here to Log in</a>.\n    </p>\n</div>\n"
  },
  {
    "path": "src/AdminLTE/Views/Account/ExternalLoginConfirmation.cshtml",
    "content": "﻿@model ExternalLoginConfirmationViewModel\n@{\n    ViewData[\"Title\"] = \"Register\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n<h3>Associate your @ViewData[\"LoginProvider\"] account.</h3>\n\n<form asp-controller=\"Account\" asp-action=\"ExternalLoginConfirmation\" asp-route-returnurl=\"@ViewData[\"ReturnUrl\"]\" method=\"post\" class=\"form-horizontal\">\n    <h4>Association Form</h4>\n    <hr />\n    <div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n\n    <p class=\"text-info\">\n        You've successfully authenticated with <strong>@ViewData[\"LoginProvider\"]</strong>.\n        Please enter an email address for this site below and click the Register button to finish\n        logging in.\n    </p>\n    <div class=\"form-group\">\n        <label asp-for=\"Email\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"Email\" class=\"form-control\" />\n            <span asp-validation-for=\"Email\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <button type=\"submit\" class=\"btn btn-default\">Register</button>\n        </div>\n    </div>\n</form>\n\n@section Scripts {\n    @{ await Html.RenderPartialAsync(\"_ValidationScriptsPartial\"); }\n}\n"
  },
  {
    "path": "src/AdminLTE/Views/Account/ExternalLoginFailure.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Login Failure\";\n}\n\n<header>\n    <h2>@ViewData[\"Title\"].</h2>\n    <p class=\"text-danger\">Unsuccessful login with service.</p>\n</header>\n"
  },
  {
    "path": "src/AdminLTE/Views/Account/ForgotPassword.cshtml",
    "content": "﻿@model ForgotPasswordViewModel\n@{\n    ViewData[\"Title\"] = \"Forgot your password?\";\n}\n\n<h2>@ViewData[\"Title\"]</h2>\n<p>\n    For more information on how to enable reset password please see this <a href=\"http://go.microsoft.com/fwlink/?LinkID=532713\">article</a>.\n</p>\n\n@*<form asp-controller=\"Account\" asp-action=\"ForgotPassword\" method=\"post\" class=\"form-horizontal\">\n    <h4>Enter your email.</h4>\n    <hr />\n    <div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n    <div class=\"form-group\">\n        <label asp-for=\"Email\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"Email\" class=\"form-control\" />\n            <span asp-validation-for=\"Email\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <button type=\"submit\" class=\"btn btn-default\">Submit</button>\n        </div>\n    </div>\n</form>*@\n\n@section Scripts {\n    @{ await Html.RenderPartialAsync(\"_ValidationScriptsPartial\"); }\n}\n"
  },
  {
    "path": "src/AdminLTE/Views/Account/ForgotPasswordConfirmation.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Forgot Password Confirmation\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n<p>\n    Please check your email to reset your password.\n</p>\n"
  },
  {
    "path": "src/AdminLTE/Views/Account/Lockout.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Locked out\";\n}\n\n<header>\n    <h1 class=\"text-danger\">Locked out.</h1>\n    <p class=\"text-danger\">This account has been locked out, please try again later.</p>\n</header>\n"
  },
  {
    "path": "src/AdminLTE/Views/Account/Login.cshtml",
    "content": "﻿@using System.Collections.Generic\n@using Microsoft.AspNetCore.Http\n@model LoginViewModel\n@inject SignInManager<ApplicationUser> SignInManager\n\n@{\n    ViewData[\"Title\"] = \"Log in\";\n    Layout = \"\";\n}\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>AdminLTE 4 | Login Page</title>\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback\">\n\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/lib/admin-lte/dist/css/adminlte.css\" />\n        <link rel=\"stylesheet\" href=\"~/lib/bootstrap-icons/font/bootstrap-icons.css\" />\n        <link rel=\"stylesheet\" href=\"~/lib/icheck-bootstrap/icheck-bootstrap.css\" />\n\n        <link rel=\"stylesheet\" href=\"~/css/animation.css\" />\n\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/lib/admin-lte/dist/css/adminlte.min.css\" asp-append-version=\"true\" />\n        <link rel=\"stylesheet\" href=\"~/lib/bootstrap-icons/font/bootstrap-icons.min.css\" asp-append-version=\"true\" />\n        <link rel=\"stylesheet\" href=\"~/lib/icheck-bootstrap/icheck-bootstrap.min.css\" asp-append-version=\"true\" />\n\n        <link rel=\"stylesheet\" href=\"~/css/animation.css\" asp-append-version=\"true\" />\n\n    </environment>\n\n</head>\n<body class=\"login-page bg-body-secondary app-loaded\">\n    <div class=\"login-box\">\n        <div class=\"login-logo animated fadeInDown\">\n            <a href=\"/\"><b>Admin</b>LTE</a>\n        </div>\n        <!-- /.login-logo -->\n        <div class=\"card\">\n            <div class=\"card-body login-card-body\">\n                <p class=\"login-box-msg\">Sign in to start your session</p>\n\n                <form asp-controller=\"Account\" asp-action=\"Login\" asp-route-returnurl=\"@ViewData[\"ReturnUrl\"]\" method=\"post\" class=\"form-horizontal\">\n                    \n                    <div class=\"input-group mb-3\">\n                        <input asp-for=\"Email\" type=\"email\" class=\"form-control\" placeholder=\"Email\" autofocus />\n                        <div class=\"input-group-text\">\n                            <span class=\"bi bi-envelope\"></span>\n                        </div>\n                    </div>\n                    <div class=\"input-group mb-3\">\n                        <input asp-for=\"Password\" class=\"form-control\" placeholder=\"Password\" />\n                        <div class=\"input-group-text\">\n                            <span class=\"bi bi-lock-fill\"></span>\n                        </div>\n                    </div>\n\n                    <div class=\"row\">\n                        <div class=\"col-8\">\n                            <div class=\"form-check\">\n                                <input class=\"form-check-input\" asp-for=\"RememberMe\" type=\"checkbox\" class=\"form-check-input\" id=\"remember\">\n                                <label class=\"form-check-label\" for=\"remember\">\n                                    @Html.DisplayNameFor(m => m.RememberMe)\n                                </label>\n                            </div>\n                        </div>\n                        <!-- /.col -->\n                        <div class=\"col-4\">\n                            <div class=\"d-grid gap-2\">\n                                <button type=\"submit\" class=\"btn btn-primary\">Sign In</button>\n                            </div>\n                        </div>\n                        <!-- /.col -->\n                    </div>\n                </form>\n\n                <div class=\"social-auth-links text-center mb-3 d-grid gap-2\">\n                    <p>- OR -</p>\n                    <a href=\"#\" class=\"btn btn-primary\">\n                        <i class=\"bi bi-facebook me-2\"></i> Sign in using Facebook\n                    </a>\n                    <a href=\"#\" class=\"btn btn-danger\">\n                        <i class=\"bi bi-google me-2\"></i> Sign in using Google+\n                    </a>\n                </div>\n                <!-- /.social-auth-links -->\n\n                <p class=\"mb-1\">\n                    <a asp-action=\"ForgotPassword\">I forgot my password</a>\n                </p>\n                <p class=\"mb-0\">\n                    <a asp-action=\"Register\" asp-route-returnurl=\"@ViewData[\"ReturnUrl\"]\" class=\"text-center\">Register a new membership</a>\n                </p>\n            </div>\n            <!-- /.login-card-body -->\n        </div>\n    </div>\n    <!-- /.login-box -->\n\n    <environment names=\"Development\">\n        <script src=\"~/lib/jquery/jquery.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/lib/bootstrap/js/bootstrap.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/lib/admin-lte/dist/js/adminlte.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/js/site.js\" asp-append-version=\"true\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/lib/jquery/jquery.min.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/lib/bootstrap/js/bootstrap.min.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/lib/admin-lte/dist/js/adminlte.min.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/js/site.min.js\" asp-append-version=\"true\"></script>\n    </environment>\n\n    @section Scripts {\n        @{ await Html.RenderPartialAsync(\"_ValidationScriptsPartial\"); }\n    }\n</body>\n</html>"
  },
  {
    "path": "src/AdminLTE/Views/Account/Register.cshtml",
    "content": "﻿@model RegisterViewModel\n@{\n    ViewData[\"Title\"] = \"Register\";\n    Layout = \"\";\n}\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <title>AdminLTE 4 | Registration Page</title>\n\n    <link rel=\"stylesheet\" href=\"https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,400i,700&display=fallback\">\n\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/lib/admin-lte/dist/css/adminlte.css\" />\n        <link rel=\"stylesheet\" href=\"~/lib/bootstrap-icons/font/bootstrap-icons.css\" />\n        <link rel=\"stylesheet\" href=\"~/lib/icheck-bootstrap/icheck-bootstrap.css\" />\n\n        <link rel=\"stylesheet\" href=\"~/css/animation.css\" />\n\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/lib/admin-lte/dist/css/adminlte.min.css\" asp-append-version=\"true\" />\n        <link rel=\"stylesheet\" href=\"~/lib/bootstrap-icons/font/bootstrap-icons.min.css\" asp-append-version=\"true\" />\n        <link rel=\"stylesheet\" href=\"~/lib/icheck-bootstrap/icheck-bootstrap.min.css\" asp-append-version=\"true\" />\n\n        <link rel=\"stylesheet\" href=\"~/css/animation.css\" asp-append-version=\"true\" />\n\n    </environment>\n\n</head>\n<body class=\"register-page bg-body-secondary app-loaded\">\n    <div class=\"register-box\">\n        <div class=\"register-logo\">\n            <a href=\"/\"><b>Admin</b>LTE</a>\n        </div>\n\n        <div class=\"card\">\n            <div class=\"card-body register-card-body\">\n                <p class=\"login-box-msg\">Register a new membership</p>\n                <form id=\"ccSelectForm\" asp-controller=\"Account\" asp-action=\"Register\" asp-route-returnurl=\"@ViewData[\"ReturnUrl\"]\" method=\"post\">\n\n                    <div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n                    <div class=\"input-group mb-3\">\n                        <input asp-for=\"FirstName\" type=\"text\" class=\"form-control\" placeholder=\"First name\">\n                        <div class=\"input-group-text\">\n                            <span class=\"bi bi-person\"></span>\n                        </div>\n                    </div>\n                    <div class=\"input-group mb-3\">\n                        <input asp-for=\"LastName\" type=\"text\" class=\"form-control\" placeholder=\"Last name\">\n                        <div class=\"input-group-text\">\n                            <span class=\"bi bi-person\"></span>\n                        </div>\n                    </div>\n                    <div class=\"input-group mb-3\">\n                        <input asp-for=\"Email\" type=\"email\" class=\"form-control\" placeholder=\"Email\">\n                        <div class=\"input-group-text\">\n                            <span class=\"bi bi-envelope\"></span>\n                        </div>\n                    </div>\n                    <div class=\"input-group mb-3\">\n                        <input asp-for=\"Password\" type=\"password\" class=\"form-control\" placeholder=\"Password\">\n                        <div class=\"input-group-text\">\n                            <span class=\"bi bi-lock-fill\"></span>\n                        </div>\n                    </div>\n                    <div class=\"input-group mb-3\">\n                        <input asp-for=\"ConfirmPassword\" type=\"password\" class=\"form-control\" placeholder=\"Retype password\">\n                        <div class=\"input-group-text\">\n                            <span class=\"bi bi-lock-fill\"></span>\n                        </div>\n                    </div>\n\n                    <div class=\"row\">\n                        <div class=\"col-8\">\n                            <div class=\"form-check\">\n                                <input class=\"form-check-input\" type=\"checkbox\" id=\"agreeTerms\" name=\"terms\" value=\"agree\">\n                                <label class=\"form-check-label\" for=\"agreeTerms\">\n                                    I agree to the <a href=\"#\">terms</a>\n                                </label>\n                            </div>\n                        </div>\n                        <!-- /.col -->\n                        <div class=\"col-4\">\n                            <div class=\"d-grid gap-2\">\n                                <button type=\"submit\" class=\"btn btn-primary\">Register</button>\n                            </div>\n                        </div>\n                        <!-- /.col -->\n                    </div>\n                </form>\n\n                <div class=\"social-auth-links text-center d-grid gap-2\">\n                    <p>- OR -</p>\n                    <a href=\"#\" class=\"btn btn-primary\">\n                        <i class=\"bi bi-facebook me-2\"></i>\n                        Sign up using Facebook\n                    </a>\n                    <a href=\"#\" class=\"btn btn-danger\">\n                        <i class=\"bi bi-google me-2\"></i>\n                        Sign up using Google+\n                    </a>\n                </div>\n\n                <a href=\"/Account/Login\" class=\"text-center\">I already have a membership</a>\n            </div>\n            <!-- /.form-box -->\n        </div><!-- /.card -->\n    </div>\n    <!-- /.register-box -->\n\n    @section Scripts {\n        @{ await Html.RenderPartialAsync(\"_ValidationScriptsPartial\"); }\n    }\n\n</body>\n</html>"
  },
  {
    "path": "src/AdminLTE/Views/Account/ResetPassword.cshtml",
    "content": "﻿@model ResetPasswordViewModel\n@{\n    ViewData[\"Title\"] = \"Reset password\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<form asp-controller=\"Account\" asp-action=\"ResetPassword\" method=\"post\" class=\"form-horizontal\">\n    <h4>Reset your password.</h4>\n    <hr />\n    <div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n    <input asp-for=\"Code\" type=\"hidden\" />\n    <div class=\"form-group\">\n        <label asp-for=\"Email\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"Email\" class=\"form-control\" />\n            <span asp-validation-for=\"Email\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <label asp-for=\"Password\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"Password\" class=\"form-control\" />\n            <span asp-validation-for=\"Password\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <label asp-for=\"ConfirmPassword\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"ConfirmPassword\" class=\"form-control\" />\n            <span asp-validation-for=\"ConfirmPassword\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <button type=\"submit\" class=\"btn btn-default\">Reset</button>\n        </div>\n    </div>\n</form>\n\n@section Scripts {\n    @{ await Html.RenderPartialAsync(\"_ValidationScriptsPartial\"); }\n}\n"
  },
  {
    "path": "src/AdminLTE/Views/Account/ResetPasswordConfirmation.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Reset password confirmation\";\n}\n\n<h1>@ViewData[\"Title\"].</h1>\n<p>\n    Your password has been reset. Please <a asp-controller=\"Account\" asp-action=\"Login\">Click here to log in</a>.\n</p>\n"
  },
  {
    "path": "src/AdminLTE/Views/Account/SendCode.cshtml",
    "content": "﻿@model SendCodeViewModel\n@{\n    ViewData[\"Title\"] = \"Send Verification Code\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<form asp-controller=\"Account\" asp-action=\"SendCode\" asp-route-returnurl=\"@Model.ReturnUrl\" method=\"post\" class=\"form-horizontal\">\n    <input asp-for=\"RememberMe\" type=\"hidden\" />\n    <div class=\"row\">\n        <div class=\"col-md-8\">\n            Select Two-Factor Authentication Provider:\n            <select asp-for=\"SelectedProvider\" asp-items=\"Model.Providers\"></select>\n            <button type=\"submit\" class=\"btn btn-default\">Submit</button>\n        </div>\n    </div>\n</form>\n\n@section Scripts {\n    @{await Html.RenderPartialAsync(\"_ValidationScriptsPartial\"); }\n}\n"
  },
  {
    "path": "src/AdminLTE/Views/Account/VerifyCode.cshtml",
    "content": "﻿@model VerifyCodeViewModel\n@{\n    ViewData[\"Title\"] = \"Verify\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<form asp-controller=\"Account\" asp-action=\"VerifyCode\" asp-route-returnurl=\"@ViewData[\"ReturnUrl\"]\" method=\"post\" class=\"form-horizontal\">\n    <div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n    <input asp-for=\"Provider\" type=\"hidden\" />\n    <input asp-for=\"RememberMe\" type=\"hidden\" />\n    <h4>@ViewData[\"Status\"]</h4>\n    <hr />\n    <div class=\"form-group\">\n        <label asp-for=\"Code\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"Code\" class=\"form-control\" />\n            <span asp-validation-for=\"Code\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <div class=\"checkbox\">\n                <input asp-for=\"RememberBrowser\" />\n                <label asp-for=\"RememberBrowser\"></label>\n            </div>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <button type=\"submit\" class=\"btn btn-default\">Submit</button>\n        </div>\n    </div>\n</form>\n\n@section Scripts {\n    @{ await Html.RenderPartialAsync(\"_ValidationScriptsPartial\"); }\n}\n"
  },
  {
    "path": "src/AdminLTE/Views/Home/About.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"About\";\n}\n<h2>@ViewData[\"Title\"].</h2>\n<h3>@ViewData[\"Message\"]</h3>\n\n<p>Use this area to provide additional information.</p>\n"
  },
  {
    "path": "src/AdminLTE/Views/Home/Contact.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Contact\";\n}\n<h2>@ViewData[\"Title\"].</h2>\n<h3>@ViewData[\"Message\"]</h3>\n\n<address>\n    One Microsoft Way<br />\n    Redmond, WA 98052-6399<br />\n    <abbr title=\"Phone\">P:</abbr>\n    425.555.0100\n</address>\n\n<address>\n    <strong>Support:</strong> <a href=\"mailto:Support@example.com\">Support@example.com</a><br />\n    <strong>Marketing:</strong> <a href=\"mailto:Marketing@example.com\">Marketing@example.com</a>\n</address>\n"
  },
  {
    "path": "src/AdminLTE/Views/Home/Error.cshtml",
    "content": "﻿@{\n    Layout = \"\";\n}\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <title>AdminLTE</title>\n\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\n\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/lib/bootstrap/css/bootstrap.css\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" />\n        <link rel=\"stylesheet\" href=\"~/css/error.css\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/lib/bootstrap/css/bootstrap.min.css\" asp-append-version=\"true\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" asp-append-version=\"true\" />\n        <link rel=\"stylesheet\" href=\"~/css/error.css\" />\n    </environment>\n\n</head>\n<body>\n\n    <div class=\"\">\n\n        <div class=\"\">\n\n            <div class=\"block-error\">\n                <div class=\"row\">\n                    <div class=\"error-num\">404</div>\n                    <div class=\"error-text\">Page not found</div>\n\n                    <div class=\"error-description\">Unfortunately we're having trouble loading the page you are looking for. Please verify if you have the right permission and try again or use action below.</div>\n                </div>\n                <div class=\"row\">\n                    <div class=\"col-md-6 d-grid gap-2\">\n                        <button class=\"btn btn-info\" onClick=\"document.location.href = '/';\">Back to dashboard</button>\n                    </div>\n                    <div class=\"col-md-6 d-grid gap-2\">\n                        <button class=\"btn btn-primary\" onClick=\"history.back();\">Previous page</button>\n                    </div>\n                </div>\n                <div class=\"copy\">\n                    © All Rights Reserved AdminLTE @DateTime.Now.Year\n                </div>\n            </div>\n\n        </div>\n    </div>\n\n</body>\n</html>"
  },
  {
    "path": "src/AdminLTE/Views/Home/Index.cshtml",
    "content": "﻿<environment names=\"Development\">\n    <link rel=\"stylesheet\" href=\"~/lib/datatables-bs/datatables.bootstrap5.css\" asp-append-version=\"true\"/>\n</environment>\n<environment names=\"Staging,Production\">\n    <link rel=\"stylesheet\" href=\"~/lib/datatables-bs/datatables.bootstrap5.min.css\" asp-append-version=\"true\" />\n</environment>\n\n<environment names=\"Development\">\n    <script src=\"~/lib/datatables/datatables.js\" asp-append-version=\"true\"></script>\n    <script src=\"~/lib/datatables-bs/datatables.bootstrap5.js\" asp-append-version=\"true\"></script>\n</environment>\n<environment names=\"Staging,Production\">\n    <script src=\"~/lib/datatables/datatables.min.js\" asp-append-version=\"true\"></script>\n    <script src=\"~/lib/datatables-bs/datatables.bootstrap5.min.js\" asp-append-version=\"true\"></script>\n</environment>\n\n<div class=\"box\">\n    <div class=\"box-body table-responsive\">\n        <table class=\"table table-bordered table-hover\" id=\"TableId\" cellspacing=\"0\" align=\"center\">\n            <thead>\n                <tr>\n                    <th>Sr</th>\n                    <th>Order Track Number</th>\n                    <th>Quantity</th>\n                    <th>Product Name</th>\n                    <th>Special Offer</th>\n                    <th>Unit Price</th>\n                    <th>Unit Price Discount</th>\n                    <th>Options</th>\n                </tr>\n            </thead>\n        </table>\n    </div>\n</div>\n\n<div class=\"box\">\n    <div class=\"box-body\">\n        <form asp-controller=\"Home\" asp-action=\"Index\" method=\"post\">\n            <button class=\"btn btn-sm btn-primary\" type=\"submit\">Submit</button>\n            <button class=\"btn btn-sm btn-primary\" type=\"submit\">Submit</button>\n            <button class=\"btn btn-sm btn-primary\" type=\"submit\">Submit</button>\n        </form>\n    </div>\n</div>\n\n<script>\n    $(document).ready(function () {\n        new DataTable('#TableId',\n        {\n            searchDelay: 500,\n            \"columnDefs\": [\n                { \"width\": \"5%\", \"targets\": [0] },\n                { \"className\": \"text-center\", \"targets\": [0, 1, 2, 3, 4, 5, 6] },\n                { \"defaultContent\": \"<button class='btn btn-primary btn-sm'>Details</button>\", \"targets\": [7] },\n                { \"searchable\": false, \"targets\": [0,2,4,5,6] },\n                { \"render\": function (data, type, row) {\n                            return ' <label class=\"badge text-bg-primary\">' + data + '</label>';},\n                  \"targets\": [4] },\n                { \"render\": function (data, type, row) {\n                        if (row['quantity'] > 1)\n                            return ' <label class=\"badge text-bg-success\">' + row['quantity'] + '</label>'\n                        else\n                            return ' <label class=\"badge text-bg-secondary\">' + row['quantity'] + '</label>';},\n                   \"targets\": [2]},\n            ],\n            \"language\":\n                {\n                    \"processing\": \"<div class=''><i class='bi bi-gear site-loader-color'></i></div>\",\n                    \"search\": \"filter\",\n                    \"searchPlaceholder\": \"track num or product\"\n                },\n            \"processing\": true,\n            \"serverSide\": true,\n            \"ajax\":\n                {\n                    \"url\": \"/Home/GetData\",\n                    \"type\": \"POST\",\n                    \"dataType\": \"JSON\"\n                },\n            \"columns\": [\n                        { \"data\": \"sr\" },\n                        { \"data\": \"ordertracknumber\" },\n                        { \"data\": \"quantity\" },\n                        { \"data\": \"productname\" },\n                        { \"data\": \"specialoffer\" },\n                        { \"data\": \"unitprice\" },\n                        { \"data\": \"unitpricediscount\" },\n            ],\n            \"dom\": \"<'row'<'col-sm-6'l><'col-sm-6'<'#buttonContainer.site-datatable-button-container'>f>>\" + \"<'row'<'col-sm-12'tr>>\" + \"<'row'<'col-sm-5'i><'col-sm-7'p>>\",\n        });\n        \n        $(\"#buttonContainer\").addClass(\"float-end\").append(\"<button class='btn btn-sm bg-success'>Create</button>\");\n\n    });\n</script>"
  },
  {
    "path": "src/AdminLTE/Views/Manage/AddPhoneNumber.cshtml",
    "content": "﻿@model AddPhoneNumberViewModel\n@{\n    ViewData[\"Title\"] = \"Add Phone Number\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n<form asp-controller=\"Manage\" asp-action=\"AddPhoneNumber\" method=\"post\" class=\"form-horizontal\">\n    <h4>Add a phone number.</h4>\n    <hr />\n    <div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n    <div class=\"form-group\">\n        <label asp-for=\"PhoneNumber\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"PhoneNumber\" class=\"form-control\" />\n            <span asp-validation-for=\"PhoneNumber\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <button type=\"submit\" class=\"btn btn-default\">Send verification code</button>\n        </div>\n    </div>\n</form>\n\n@section Scripts {\n    @{ await Html.RenderPartialAsync(\"_ValidationScriptsPartial\"); }\n}\n"
  },
  {
    "path": "src/AdminLTE/Views/Manage/ChangePassword.cshtml",
    "content": "﻿@model ChangePasswordViewModel\n@{\n    ViewData[\"Title\"] = \"Change Password\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<form asp-controller=\"Manage\" asp-action=\"ChangePassword\" method=\"post\" class=\"form-horizontal\">\n    <h4>Change Password Form</h4>\n    <hr />\n    <div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n    <div class=\"form-group\">\n        <label asp-for=\"OldPassword\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"OldPassword\" class=\"form-control\" />\n            <span asp-validation-for=\"OldPassword\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <label asp-for=\"NewPassword\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"NewPassword\" class=\"form-control\" />\n            <span asp-validation-for=\"NewPassword\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <label asp-for=\"ConfirmPassword\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"ConfirmPassword\" class=\"form-control\" />\n            <span asp-validation-for=\"ConfirmPassword\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <button type=\"submit\" class=\"btn btn-default\">Change password</button>\n        </div>\n    </div>\n</form>\n\n@section Scripts {\n    @{ await Html.RenderPartialAsync(\"_ValidationScriptsPartial\"); }\n}\n"
  },
  {
    "path": "src/AdminLTE/Views/Manage/Index.cshtml",
    "content": "﻿@model IndexViewModel\n@{\n    ViewData[\"Title\"] = \"Manage your account\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n<p class=\"text-success\">@ViewData[\"StatusMessage\"]</p>\n\n<div>\n    <h4>Change your account settings</h4>\n    <hr />\n    <dl class=\"dl-horizontal\">\n        <dt>Password:</dt>\n        <dd>\n            @if (Model.HasPassword)\n            {\n                <a asp-controller=\"Manage\" asp-action=\"ChangePassword\" class=\"btn-bracketed\">Change</a>\n            }\n            else\n            {\n                <a asp-controller=\"Manage\" asp-action=\"SetPassword\" class=\"btn-bracketed\">Create</a>\n            }\n        </dd>\n        <dt>External Logins:</dt>\n        <dd>\n\n            @Model.Logins.Count <a asp-controller=\"Manage\" asp-action=\"ManageLogins\" class=\"btn-bracketed\">Manage</a>\n        </dd>\n        <dt>Phone Number:</dt>\n        <dd>\n            <p>\n                Phone Numbers can used as a second factor of verification in two-factor authentication.\n                See <a href=\"http://go.microsoft.com/fwlink/?LinkID=532713\">this article</a>\n                for details on setting up this ASP.NET application to support two-factor authentication using SMS.\n            </p>\n            @*@(Model.PhoneNumber ?? \"None\")\n                @if (Model.PhoneNumber != null)\n                {\n                    <br />\n                    <a asp-controller=\"Manage\" asp-action=\"AddPhoneNumber\" class=\"btn-bracketed\">Change</a>\n                    <form asp-controller=\"Manage\" asp-action=\"RemovePhoneNumber\" method=\"post\">\n                        [<button type=\"submit\" class=\"btn-link\">Remove</button>]\n                    </form>\n                }\n                else\n                {\n                    <a asp-controller=\"Manage\" asp-action=\"AddPhoneNumber\" class=\"btn-bracketed\">Add</a>\n                }*@\n        </dd>\n\n        <dt>Two-Factor Authentication:</dt>\n        <dd>\n            <p>\n                There are no two-factor authentication providers configured. See <a href=\"http://go.microsoft.com/fwlink/?LinkID=532713\">this article</a>\n                for setting up this application to support two-factor authentication.\n            </p>\n            @*@if (Model.TwoFactor)\n                {\n                    <form asp-controller=\"Manage\" asp-action=\"DisableTwoFactorAuthentication\" method=\"post\" class=\"form-horizontal\">\n                        Enabled <button type=\"submit\" class=\"btn-link btn-bracketed\">Disable</button>\n                    </form>\n                }\n                else\n                {\n                    <form asp-controller=\"Manage\" asp-action=\"EnableTwoFactorAuthentication\" method=\"post\" class=\"form-horizontal\">\n                        <button type=\"submit\" class=\"btn-link btn-bracketed\">Enable</button> Disabled\n                    </form>\n                }*@\n        </dd>\n    </dl>\n</div>\n"
  },
  {
    "path": "src/AdminLTE/Views/Manage/ManageLogins.cshtml",
    "content": "﻿@model ManageLoginsViewModel\n@{\n    ViewData[\"Title\"] = \"Manage your external logins\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<p class=\"text-success\">@ViewData[\"StatusMessage\"]</p>\n@if (Model.CurrentLogins.Count > 0)\n{\n    <h4>Registered Logins</h4>\n    <table class=\"table\">\n        <tbody>\n            @for (var index = 0; index < Model.CurrentLogins.Count; index++)\n            {\n                <tr>\n                    <td>@Model.CurrentLogins[index].LoginProvider</td>\n                    <td>\n                        @if ((bool)ViewData[\"ShowRemoveButton\"])\n                        {\n                            <form asp-controller=\"Manage\" asp-action=\"RemoveLogin\" method=\"post\" class=\"form-horizontal\">\n                                <div>\n                                    <input asp-for=\"@Model.CurrentLogins[index].LoginProvider\" name=\"LoginProvider\" type=\"hidden\" />\n                                    <input asp-for=\"@Model.CurrentLogins[index].ProviderKey\" name=\"ProviderKey\" type=\"hidden\" />\n                                    <input type=\"submit\" class=\"btn btn-default\" value=\"Remove\" title=\"Remove this @Model.CurrentLogins[index].LoginProvider login from your account\" />\n                                </div>\n                            </form>\n                        }\n                        else\n                        {\n                            @: &nbsp;\n                        }\n                    </td>\n                </tr>\n            }\n        </tbody>\n    </table>\n}\n@if (Model.OtherLogins.Count > 0)\n{\n    <h4>Add another service to log in.</h4>\n    <hr />\n    <form asp-controller=\"Manage\" asp-action=\"LinkLogin\" method=\"post\" class=\"form-horizontal\">\n        <div id=\"socialLoginList\">\n            <p>\n                @foreach (var provider in Model.OtherLogins)\n                {\n                    <button type=\"submit\" class=\"btn btn-default\" name=\"provider\" value=\"@provider\" title=\"Log in using your @provider.DisplayName account\">@provider</button>\n                }\n            </p>\n        </div>\n    </form>\n}\n"
  },
  {
    "path": "src/AdminLTE/Views/Manage/SetPassword.cshtml",
    "content": "﻿@model SetPasswordViewModel\n@{\n    ViewData[\"Title\"] = \"Set Password\";\n}\n\n<p class=\"text-info\">\n    You do not have a local username/password for this site. Add a local\n    account so you can log in without an external login.\n</p>\n\n<form asp-controller=\"Manage\" asp-action=\"SetPassword\" asp-route-returnurl=\"@ViewData[\"ReturnUrl\"]\" method=\"post\" class=\"form-horizontal\">\n    <h4>Set your password</h4>\n    <hr />\n    <div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n    <div class=\"form-group\">\n        <label asp-for=\"NewPassword\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"NewPassword\" class=\"form-control\" />\n            <span asp-validation-for=\"NewPassword\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <label asp-for=\"ConfirmPassword\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"ConfirmPassword\" class=\"form-control\" />\n            <span asp-validation-for=\"ConfirmPassword\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <button type=\"submit\" class=\"btn btn-default\">Set password</button>\n        </div>\n    </div>\n</form>\n\n@section Scripts {\n    @{ await Html.RenderPartialAsync(\"_ValidationScriptsPartial\"); }\n}\n"
  },
  {
    "path": "src/AdminLTE/Views/Manage/VerifyPhoneNumber.cshtml",
    "content": "﻿@model VerifyPhoneNumberViewModel\n@{\n    ViewData[\"Title\"] = \"Verify Phone Number\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<form asp-controller=\"Manage\" asp-action=\"VerifyPhoneNumber\" asp-route-returnurl=\"@ViewData[\"ReturnUrl\"]\" method=\"post\" class=\"form-horizontal\">\n    <input asp-for=\"PhoneNumber\" type=\"hidden\" />\n    <h4>Add a phone number.</h4>\n    <h5>@ViewData[\"Status\"]</h5>\n    <hr />\n    <div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n    <div class=\"form-group\">\n        <label asp-for=\"Code\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"Code\" class=\"form-control\" />\n            <span asp-validation-for=\"Code\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <div class=\"col-md-offset-2 col-md-10\">\n            <button type=\"submit\" class=\"btn btn-default\">Submit</button>\n        </div>\n    </div>\n</form>\n\n@section Scripts {\n    @{ await Html.RenderPartialAsync(\"_ValidationScriptsPartial\"); }\n}\n"
  },
  {
    "path": "src/AdminLTE/Views/Role/Create.cshtml",
    "content": "﻿@model string\n@{\n    ViewData[\"Title\"] = \"Create Role\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<div class=\"text-danger\" asp-validation-summary=\"All\"></div>\n\n<form method=\"post\" asp-controller=\"Role\" asp-action=\"Create\" asp-antiforgery=\"true\" class=\"form-horizontal\">\n    <div class=\"form-group\">\n        <label class=\"control-label col-sm-2\" for=\"name\">Name:</label>\n        <div class=\"col-sm-4\">\n            <input class=\"form-control\" name=\"name\" />\n        </div>\n    </div>\n\n    <div class=\"form-group\">\n        <div class=\"col-sm-offset-2 col-sm-4\">\n            <button type=\"submit\" class=\"btn btn-primary\">Create</button>\n            <button type=\"reset\" class=\"btn btn-primary\">Reset</button>\n            <a class=\"btn btn-primary\" asp-controller=\"Role\" asp-action=\"Index\">Cancel</a>\n        </div>\n    </div>\n</form>"
  },
  {
    "path": "src/AdminLTE/Views/Role/Edit.cshtml",
    "content": "﻿@model AdminLTE.Models.RoleViewModels.EditRoleVm\n@{\n    ViewData[\"Title\"] = \"Edit Role\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<div class=\"text-danger\" asp-validation-summary=\"All\"></div>\n\n<form method=\"post\" asp-controller=\"Role\" asp-action=\"Edit\" asp-antiforgery=\"true\" class=\"form-horizontal\">\n    <input type=\"hidden\" name=\"RoleId\" value=\"@Model.Role.Id\" />\n\n    <div class=\"form-group\">\n        <label class=\"control-label col-sm-2\" for=\"RoleName\">Role Name:</label>\n        <div class=\"col-sm-2\">\n            <input class=\"form-control\" name=\"RoleName\" value=\"@Model.Role.Name\" />\n        </div>\n    </div>\n\n    <h5 class=\"bg-info panel-body\">\n        Add to @Model.Role.Name\n    </h5>\n    <table class=\"table table-condensed table-bordered table-striped\">\n        @if (Model.NonMembers.Count() == 0)\n        {\n            <tr>\n                <td colspan=\"2\">All Users Are @Model.Role.Name</td>\n            </tr>\n        }\n        else\n        {\n            foreach (ApplicationUser user in Model.NonMembers)\n            {\n                <tr>\n                    <td>@user.UserName</td>\n                    <td>\n                        <input type=\"checkbox\" name=\"IdsToAdd\" value=\"@user.Id\" />\n                    </td>\n                </tr>\n            }\n        }\n    </table>\n\n    <h5 class=\"bg-info panel-body\">Remove from @Model.Role.Name</h5>\n    <table class=\"table table-condensed table-bordered table-striped\">\n        @if (Model.Members.Count() == 0)\n        {\n            <tr>\n                <td colspan=\"2\">\n                    No Users are @Model.Role.Name\n                </td>\n            </tr>\n        }\n        else\n        {\n            foreach (ApplicationUser user in Model.Members)\n            {\n                <tr>\n                    <td>@user.UserName</td>\n                    <td>\n                        <input type=\"checkbox\" name=\"IdsToRemove\" value=\"@user.Id\" />\n                    </td>\n                </tr>\n            }\n        }\n    </table>\n\n    <button type=\"submit\" class=\"btn btn-primary\">Save</button>\n    <button type=\"reset\" class=\"btn btn-primary\">Reset</button>\n    <a class=\"btn btn-primary\" asp-controller=\"Role\" asp-action=\"Index\">Cancel</a>\n</form>"
  },
  {
    "path": "src/AdminLTE/Views/Role/Index.cshtml",
    "content": "﻿<link rel=\"stylesheet\" href=\"~/lib/datatables-bs/datatables.bootstrap5.min.css\" asp-append-version=\"true\" />\n<script src=\"~/lib/datatables/datatables.min.js\" asp-append-version=\"true\"></script>\n<script src=\"~/lib/datatables-bs/datatables.bootstrap5.min.js\" asp-append-version=\"true\"></script>\n\n@model IEnumerable<Microsoft.AspNetCore.Identity.IdentityRole>\n@{\n    ViewData[\"Title\"] = \"Roles\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<div class=\"text-danger\" asp-validation-summary=\"ModelOnly\"></div>\n\n<table class=\"table table-condensed table-bordered table-striped\" id=\"myTable\">\n    <thead>\n        <tr>\n            <th>ID</th>\n            <td>Name</td>\n            <td>Users</td>\n            <td></td>\n        </tr>\n    </thead>\n    <tbody>\n        @if (Model.Count() == 0)\n        {\n        <tr>\n            <td colspan=\"4\" class=\"text-center\">\n                No roles\n            </td>\n            <td></td>\n            <td></td>\n            <td></td>\n        </tr>\n        }\n        else\n        {\n            foreach (var role in Model)\n            {\n                <tr>\n                    <td>@role.Id</td>\n                    <td>@role.Name</td>\n                    <td identity-role=\"@role.Id\"></td>\n                    <td>\n                        <a class=\"btn btn-sm btn-success\" asp-controller=\"Role\" asp-action=\"Edit\" asp-route-id=\"@role.Id\">Edit</a>\n                        <a class=\"btn btn-sm btn-danger btn-delete\" asp-controller=\"Role\" asp-action=\"Delete\" asp-route-id=\"@role.Id\">Delete</a>\n                    </td>\n                </tr>\n            }\n        }\n    </tbody>\n</table>\n\n<a class=\"btn btn-primary\" asp-controller=\"Role\" asp-action=\"Create\">Create</a>\n<a class=\"btn btn-primary\" asp-controller=\"Home\" asp-action=\"Index\">Home</a>\n\n<script>\n    $(document).ready(function () {\n        $('#myTable').DataTable({\n            \"lengthMenu\": [[50, 75, 150, -1], [50, 75, 150, \"All\"]]\n        });\n    });\n</script>"
  },
  {
    "path": "src/AdminLTE/Views/Shared/Components/Breadcrumb/Default.cshtml",
    "content": "﻿@model IEnumerable<Message>\n<ol class=\"breadcrumb float-sm-end\">\n    <li class=\"breadcrumb-item\"><a href=\"/\">Home</a></li>\n\n    @foreach (var message in Model)\n    {\n        if (Model.Last() == message)\n        {\n            <li class=\"breadcrumb-item active\" aria-current=\"page\">@message.DisplayName</li>\n        }\n        else\n        {\n            <li class=\"breadcrumb-item\"><a href=\"@message.URLPath\"> @message.DisplayName</a></li>\n        }\n    }\n</ol>"
  },
  {
    "path": "src/AdminLTE/Views/Shared/Components/ControlSidebar/Default.cshtml",
    "content": "﻿<aside class=\"control-sidebar control-sidebar-dark\">\n    <!-- Create the tabs -->\n    <ul class=\"nav nav-tabs nav-justified control-sidebar-tabs\">\n        <li class=\"active\"><a href=\"#control-sidebar-home-tab\" data-toggle=\"tab\"><i class=\"bi bi-house\"></i></a></li>\n        <li><a href=\"#control-sidebar-settings-tab\" data-toggle=\"tab\"><i class=\"bi bi-gear\"></i></a></li>\n    </ul>\n    <!-- Tab panes -->\n    <div class=\"tab-content\">\n        <!-- Home tab content -->\n        <div class=\"tab-pane active\" id=\"control-sidebar-home-tab\">\n            @Html.Raw(ViewBag.PageHelpContainer)\n        </div>\n        <!-- /.tab-pane -->\n        <!-- Stats tab content -->\n        <div class=\"tab-pane\" id=\"control-sidebar-stats-tab\">Stats Tab Content</div>\n        <!-- /.tab-pane -->\n        <!-- Settings tab content -->\n        <div class=\"tab-pane\" id=\"control-sidebar-settings-tab\">\n            <form method=\"post\">\n                <h3 class=\"control-sidebar-heading\">General Settings</h3>\n                <div class=\"form-group\">\n                    <label class=\"control-sidebar-subheading\">\n                        Report panel usage\n                        <input type=\"checkbox\" class=\"pull-right\" checked>\n                    </label>\n                    <p>\n                        Some information about this general settings option\n                    </p>\n                </div>\n                <!-- /.form-group -->\n            </form>\n        </div>\n        <!-- /.tab-pane -->\n    </div>\n</aside>"
  },
  {
    "path": "src/AdminLTE/Views/Shared/Components/Footer/Default.cshtml",
    "content": "﻿<footer class=\"app-footer\">\n    <!-- To the right -->\n    <div class=\"float-right hidden-xs\">\n        Anything you want\n    </div>\n    <!-- Default to the left -->\n    <strong>Copyright &copy; @DateTime.Now.Year <a href=\"#\">Company</a>.</strong> All rights reserved.\n</footer>"
  },
  {
    "path": "src/AdminLTE/Views/Shared/Components/Header/Default.cshtml",
    "content": "﻿<!--begin::Header-->\n<nav class=\"app-header navbar navbar-expand bg-body\">\n    <!--begin::Container-->\n    <div class=\"container-fluid\">\n        <!--begin::Start Navbar Links-->\n        <ul class=\"navbar-nav\">\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" data-lte-toggle=\"sidebar\" href=\"#\" role=\"button\">\n                    <i class=\"bi bi-list\"></i>\n                </a>\n            </li>\n            <li class=\"nav-item d-none d-md-block\">\n                <a href=\"/\" class=\"nav-link\">Home</a>\n            </li>\n            <li class=\"nav-item d-none d-md-block\">\n                <a href=\"/Home/Contact\" class=\"nav-link\">Contact</a>\n            </li>\n        </ul>\n        <!--end::Start Navbar Links-->\n\n        <!--begin::End Navbar Links-->\n        <ul class=\"navbar-nav ms-auto\">\n            <!--begin::Navbar Search-->\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" data-widget=\"navbar-search\" href=\"#\" role=\"button\">\n                    <i class=\"bi bi-search\"></i>\n                </a>\n            </li>\n            <!--end::Navbar Search-->\n            <!--begin::Messages Dropdown Menu-->\n            @await Component.InvokeAsync(\"MenuMessage\")\n            <!-- /.messages-menu -->\n            <!-- Notifications Menu -->\n            @await Component.InvokeAsync(\"MenuNotification\")\n            <!-- Tasks Menu -->\n            @await Component.InvokeAsync(\"MenuTask\")\n            <!-- User Account Menu -->\n            @await Component.InvokeAsync(\"MenuUser\")\n            <!-- Control Sidebar Toggle Button -->\n            <li class=\"nav-item\">\n                <a class=\"nav-link\" data-widget=\"control-sidebar\" data-slide=\"true\" href=\"#\"><i class=\"bi bi-gear\"></i></a>\n            </li>\n        </ul>\n    </div>\n    <!--end::Container-->\n</nav>"
  },
  {
    "path": "src/AdminLTE/Views/Shared/Components/MenuMessage/Default.cshtml",
    "content": "﻿@model IEnumerable<Message>\n<li class=\"nav-item dropdown\">\n    <!-- Menu toggle button -->\n    <a class=\"nav-link\" data-toggle=\"dropdown\" href=\"#\" aria-expanded=\"false\">\n        <i class=\"bi bi-chat-text\"></i>\n        <span class=\"navbar-badge badge text-bg-danger\">@Model.Count()</span>\n    </a>\n    <div class=\"dropdown-menu dropdown-menu-lg dropdown-menu-end\">\n\n        <!-- inner menu: contains the messages -->\n        @foreach (var message in Model)\n        {\n            <a href=\"#\" class=\"dropdown-item\">\n                <!--begin::Message-->\n                <div class=\"d-flex\">\n                    <div class=\"flex-shrink-0\">\n                        <img src=\"@message.AvatarURL\" alt=\"User Avatar\" class=\"img-size-50 rounded-circle me-3\">\n                    </div>\n                    <div class=\"flex-grow-1\">\n                        <h3 class=\"dropdown-item-title\">\n                            @message.DisplayName\n                            <span class=\"float-end fs-7 text-danger\"><i class=\"bi bi-star-fill\"></i></span>\n                        </h3>\n                        <p class=\"fs-7\">@message.DisplayName</p>\n                        <p class=\"fs-7 text-secondary\">\n                            <i class=\"bi bi-clock-fill me-1\"></i> @message.TimeSpan\n                        </p>\n                    </div>\n                </div>\n                <!--end::Message-->\n            </a>\n            <div class=\"dropdown-divider\"></div>\n        }\n                <!-- end message -->\n                <!-- /.menu -->\n            \n    <a href=\"#\" class=\"dropdown-item dropdown-footer\">See All Messages</a>\n    </div>\n</li>"
  },
  {
    "path": "src/AdminLTE/Views/Shared/Components/MenuNotification/Default.cshtml",
    "content": "﻿@model IEnumerable<Message>\n<li class=\"nav-item dropdown\">\n    <!-- Menu toggle button -->\n    <a class=\"nav-link\" data-bs-toggle=\"dropdown\" href=\"#\" aria-expanded=\"false\">\n        <i class=\"bi bi-bell-fill\"></i>\n        <span class=\"badge badge-warning navbar-badge\">@Model.Count()</span>\n    </a>\n    <div class=\"dropdown-menu dropdown-menu-lg dropdown-menu-end\">\n        <span class=\"dropdown-item dropdown-header\">@Model.Count() notifications</span>\n            @foreach (var message in Model)\n            {\n                <div class=\"dropdown-divider\"></div>\n                    <!-- start notification -->\n                    <a href=\"@message.URLPath\" class=\"dropdown-item\">\n                        <i class=\"@message.FontAwesomeIcon\"></i> @message.ShortDesc\n                    </a>\n                \n            }\n                <!-- end notification -->\n            \n        \n        <a href=\"#\" class=\"dropdown-item dropdown-footer\">See All Notifications</a>\n    </div>\n</li>"
  },
  {
    "path": "src/AdminLTE/Views/Shared/Components/MenuTask/Default.cshtml",
    "content": "﻿"
  },
  {
    "path": "src/AdminLTE/Views/Shared/Components/MenuUser/Default.cshtml",
    "content": "﻿<li class=\"nav-item dropdown user-menu\">\n    <a href=\"#\" class=\"nav-link dropdown-toggle\" data-bs-toggle=\"dropdown\">\n        <img src=\"@User.GetUserProperty(CustomClaimTypes.AvatarURL)\" class=\"user-image rounded-circle shadow\" alt=\"User Image\">\n        <span class=\"d-none d-md-inline\">Alexander Pierce</span>\n    </a>\n    <ul class=\"dropdown-menu dropdown-menu-lg dropdown-menu-end\">\n        <!--begin::User Image-->\n        <li class=\"user-header text-bg-primary\">\n            <img src=\"@User.GetUserProperty(CustomClaimTypes.AvatarURL)\" class=\"rounded-circle shadow\" alt=\"User Image\">\n\n            <p>\n                @User.GetUserProperty(CustomClaimTypes.GivenName) - @User.GetUserProperty(CustomClaimTypes.Role)\n                <small>Member since @User.GetUserProperty(CustomClaimTypes.DateRegistered)</small>\n            </p>\n        </li>\n        <!--end::User Image-->\n        <!--begin::Menu Body-->\n        <li class=\"user-body\">\n            <!--begin::Row-->\n            <div class=\"row\">\n                <div class=\"col-4 text-center\">\n                    <a href=\"#\">Followers</a>\n                </div>\n                <div class=\"col-4 text-center\">\n                    <a href=\"#\">Sales</a>\n                </div>\n                <div class=\"col-4 text-center\">\n                    <a href=\"#\">Friends</a>\n                </div>\n            </div>\n            <!--end::Row-->\n        </li>\n        <!--end::Menu Body-->\n        <!--begin::Menu Footer-->\n        <li class=\"user-footer\">\n            <a href=\"#\" class=\"btn btn-default btn-flat\">Profile</a>\n            <a href=\"#\" class=\"btn btn-default btn-flat float-end\">Sign out</a>\n        </li>\n        <!--end::Menu Footer-->\n    </ul>\n</li>\n<form asp-controller=\"Account\" asp-action=\"LogOff\" method=\"post\">\n    <button class=\"btn btn-light\">Sign out</button>\n</form>"
  },
  {
    "path": "src/AdminLTE/Views/Shared/Components/PageAlert/Default.cshtml",
    "content": "﻿@model IEnumerable<Message>\n\n@foreach (var item in Model)\n{\n    if (item.Type == \"error\")\n    {\n        <div class=\"alert alert-danger alert-dismissible\">\n            <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">×</button>\n            <b><i class=\"icon bi bi-ban-fill\"></i> Error!</b> @Html.Raw(@item.ShortDesc)\n        </div>\n    }\n\n    if (item.Type == \"info\")\n    {\n        <div class=\"alert alert-info alert-dismissible\">\n            <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">×</button>\n            <b><i class=\"icon bi bi-info-circle-fill\"></i> Info!</b> @Html.Raw(@item.ShortDesc)\n        </div>\n    }\n\n    if (item.Type == \"warning\")\n    {\n        <div class=\"alert alert-warning alert-dismissible\">\n            <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">×</button>\n            <b><i class=\"icon bi bi-exclamation-triangle-fill\"></i> Warning!</b> @Html.Raw(@item.ShortDesc)\n        </div>\n    }\n\n    if (item.Type == \"success\")\n    {\n        <div class=\"alert alert-success alert-dismissible\">\n            <button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">×</button>\n            <b><i class=\"icon bi bi-check\"></i> Success!</b> @Html.Raw(@item.ShortDesc)\n        </div>\n    }\n}\n\n"
  },
  {
    "path": "src/AdminLTE/Views/Shared/Components/PageHeader/Default.cshtml",
    "content": "﻿@model Tuple<string, string>\n<h3 class=\"mb-0\">\n    @Model.Item1\n    <small>@Model.Item2</small>\n</h3>"
  },
  {
    "path": "src/AdminLTE/Views/Shared/Components/Sidebar/Default.cshtml",
    "content": "﻿@model IEnumerable<AdminLTE.Models.SidebarMenu>\n<aside class=\"app-sidebar bg-body-secondary shadow\" data-bs-theme=\"dark\">\n    <!--begin::Sidebar Brand-->\n    <div class=\"sidebar-brand\">\n        <!--begin::Brand Link-->\n        <a href=\"/\" class=\"brand-link\">\n            <img src=\"~/lib/admin-lte/dist/assets/img/AdminLTELogo.png\" alt=\"AdminLTE Logo\" class=\"brand-image opacity-75 shadow\">\n            <span class=\"brand-text fw-light\">AdminLTE 4</span>\n        </a>\n        <!--end::Brand Link-->\n    </div>\n    <!--end::Sidebar Brand-->\n    <!--begin::Sidebar Wrapper-->\n    <div class=\"sidebar-wrapper\">\n        <nav class=\"mt-2\">\n            <!--begin::Sidebar Menu-->\n            <ul class=\"nav sidebar-menu flex-column\" data-lte-toggle=\"treeview\" role=\"menu\" data-accordion=\"false\">\n                @foreach (var menu in Model as IEnumerable<SidebarMenu>)\n                {\n                    if (menu.Type == SidebarMenuType.Header)\n                    {\n                        <li class=\"nav-item\"><a class=\"nav-link\">@menu.Name</a></li>\n                    }\n                    else if (menu.Type == SidebarMenuType.Link)\n                    {\n                        var active = string.Empty;\n                        if (menu.URLPath != \"/\" && @Context.Request.Path.Value.EndsWith(menu.URLPath))\n                        {\n                            active = \"active\";\n                        }\n                        <li class=\"nav-item\">\n                            <a href=\"@menu.URLPath\" class=\"nav-link @active\">\n                                <i class=\"nav-icon @menu.IconClassName\"></i>\n                                <p class=\"container\">@menu.Name</p>\n                                <span>\n                                    @{\n                                        if (menu.LinkCounter.Item1 > 0)\n                                        {\n                                            <small class=\"badge float-end bg-primary\">@menu.LinkCounter.Item1</small>\n                                        }\n                                        if (menu.LinkCounter.Item2 > 0)\n                                        {\n                                            <small class=\"badge float-end bg-success\">@menu.LinkCounter.Item2</small>\n                                        }\n                                        if (menu.LinkCounter.Item3 > 0)\n                                        {\n                                            <small class=\"badge float-end bg-danger\">@menu.LinkCounter.Item3</small>\n                                        }\n                                    }\n                                </span>\n                            </a>\n                        </li>\n                    }\n                    else if (menu.Type == SidebarMenuType.Tree)\n                    {\n                        var active = string.Empty;\n                        var menuopen = string.Empty;\n                        if (menu.TreeChild.Any(x => @Context.Request.Path.Value.EndsWith(x.URLPath)))\n                        {\n                            active = \"active\";\n                            menuopen = \"menu-open\";\n                        }\n\n                        <li class=\"nav-item has-treeview @active @menuopen\">\n                            <a href=\"#\" class=\"nav-link @active\">\n                                <i class=\"nav-icon @menu.IconClassName\"></i> <p>@menu.Name <i class=\"nav-arrow bi bi-chevron-right\"></i></p>\n                            </a>\n                            <ul class=\"nav nav-treeview\" style=\"box-sizing: border-box; display: block;\">\n                                @foreach (SidebarMenu subMenu in menu.TreeChild)\n                                {\n                                    active = string.Empty;\n                                    if (Context.Request.Path.Value.EndsWith(subMenu.URLPath))\n                                    {\n                                        active = \"active\";\n                                    }\n                                    <li class=\"nav-item\">\n                                        <a href=\"@subMenu.URLPath\" class=\"nav-link @active\">\n                                            <i class=\"nav-icon @subMenu.IconClassName\"></i>\n                                            <p>@subMenu.Name</p>\n                                        </a>\n                                    </li>\n                                }\n                            </ul>\n                        </li>\n                    }\n                }\n            </ul>\n            <!--end::Sidebar Menu-->\n        </nav>\n    </div>\n</aside>"
  },
  {
    "path": "src/AdminLTE/Views/Shared/Error.cshtml",
    "content": "﻿@{\n    ViewData[\"Title\"] = \"Error\";\n}\n\n<h1 class=\"text-danger\">Error.</h1>\n<h2 class=\"text-danger\">An error occurred while processing your request.</h2>\n\n<h3>Development Mode</h3>\n<p>\n    Swapping to <strong>Development</strong> environment will display more detailed information about the error that occurred.\n</p>\n<p>\n    <strong>Development environment should not be enabled in deployed applications</strong>, as it can result in sensitive information from exceptions being displayed to end users. For local debugging, development environment can be enabled by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>, and restarting the application.\n</p>\n"
  },
  {
    "path": "src/AdminLTE/Views/Shared/_Layout.cshtml",
    "content": "﻿<!DOCTYPE html>\n<!--\nThis is a starter template page. Use this page to start your new project from\nscratch. This page gets rid of all links and provides the needed markup only.\n-->\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <title>AdminLTE v4 | Starter</title>\n    <!-- Tell the browser to be responsive to screen width -->\n    <meta content=\"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no\" name=\"viewport\">\n    <environment names=\"Development\">\n        <link rel=\"stylesheet\" href=\"~/lib/bootstrap/css/bootstrap.css\" />\n        <link rel=\"stylesheet\" href=\"~/lib/bootstrap-icons/font/bootstrap-icons.css\" />\n        <link rel=\"stylesheet\" href=\"~/lib/admin-lte/dist/css/adminlte.css\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.css\" />\n    </environment>\n    <environment names=\"Staging,Production\">\n        <link rel=\"stylesheet\" href=\"~/lib/bootstrap/css/bootstrap.min.css\" asp-append-version=\"true\" />\n        <link rel=\"stylesheet\" href=\"~/lib/bootstrap-icons/font/bootstrap-icons.min.css\" asp-append-version=\"true\" />\n        <link rel=\"stylesheet\" href=\"~/lib/admin-lte/dist/css/adminlte.min.css\" asp-append-version=\"true\" />\n        <link rel=\"stylesheet\" href=\"~/css/site.min.css\" asp-append-version=\"true\" />\n    </environment>\n\n    <environment names=\"Development\">\n        <script src=\"~/lib/jquery/jquery.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/lib/bootstrap/js/bootstrap.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/lib/admin-lte/dist/js/adminlte.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/lib/pace/pace.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/js/site.js\" asp-append-version=\"true\"></script>\n    </environment>\n    <environment names=\"Staging,Production\">\n        <script src=\"~/lib/jquery/jquery.min.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/lib/bootstrap/js/bootstrap.min.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/lib/admin-lte/dist/js/adminlte.min.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/lib/pace/pace.min.js\" asp-append-version=\"true\"></script>\n        <script src=\"~/js/site.min.js\" asp-append-version=\"true\"></script>\n    </environment>\n\n</head>\n<!--\nBODY TAG OPTIONS:\n=================\nApply one or more of the following classes to get the\ndesired effect\n|---------------------------------------------------------|\n| SKINS         | skin-blue                               |\n|               | skin-black                              |\n|               | skin-purple                             |\n|               | skin-yellow                             |\n|               | skin-red                                |\n|               | skin-green                              |\n|---------------------------------------------------------|\n|LAYOUT OPTIONS | fixed                                   |\n|               | layout-boxed                            |\n|               | layout-top-nav                          |\n|               | sidebar-collapse                        |\n|               | sidebar-mini                            |\n|---------------------------------------------------------|\n-->\n<body class=\"layout-fixed sidebar-expand-lg bg-body-tertiary app-loaded sidebar-open\">\n    <div class=\"app-wrapper\">\n        <!-- Main Header -->\n        @await Component.InvokeAsync(\"Header\")\n        <!-- Left side column. contains the logo and sidebar -->\n        @await Component.InvokeAsync(\"Sidebar\")\n        <!-- Content Wrapper. Contains page content -->\n        <main class=\"app-main\">\n            <!--begin::App Content Header-->\n            <div class=\"app-content-header\">\n                <div class=\"container-fluid\">\n                    <div class=\"row\">\n                        <div class=\"col-sm-6\">\n                            @await Component.InvokeAsync(\"PageHeader\")\n                        </div>\n                        <div class=\"col-sm-6\">\n                            @await Component.InvokeAsync(\"Breadcrumb\")\n                        </div>\n                        <br />\n                        @await Component.InvokeAsync(\"PageAlert\")\n                    </div>\n                </div>\n                <!--begin::App Content-->\n                <div class=\"app-content\">\n                    <!-- Your Page Content Here -->\n                    @RenderBody()\n                </div>\n                <!--end::App Content-->\n            </div>\n        </main>\n        <!-- /.content-wrapper -->\n        <!-- Main Footer -->\n        @await Component.InvokeAsync(\"Footer\")\n        <!-- Control Sidebar -->\n        @await Component.InvokeAsync(\"ControlSidebar\")\n        <!-- /.control-sidebar -->\n        <!-- Add the sidebar's background. This div must be placed\n             immediately after the control sidebar -->\n        <aside class=\"control-sidebar control-sidebar-dark\">\n            <!-- Control sidebar content goes here -->\n        </aside>\n    </div>\n    <!-- ./wrapper -->\n    <!-- Optionally, you can add Slimscroll and FastClick plugins.\n    Both of these plugins are recommended to enhance the\n    user experience. Slimscroll is required when using the\n    fixed layout. -->\n\n    @RenderSection(\"scripts\", required: false)\n    <script>\n        useSubmitClass();\n        useDeleteConfirmation();\n    </script>\n</body>\n</html>"
  },
  {
    "path": "src/AdminLTE/Views/Shared/_LoginPartial.cshtml",
    "content": "﻿@using Microsoft.AspNetCore.Identity\n@using AdminLTE.Models\n\n@inject SignInManager<ApplicationUser> SignInManager\n@inject UserManager<ApplicationUser> UserManager\n\n@if (SignInManager.IsSignedIn(User))\n{\n    <form asp-area=\"\" asp-controller=\"Account\" asp-action=\"LogOff\" method=\"post\" id=\"logoutForm\" class=\"navbar-right\">\n        <ul class=\"nav navbar-nav navbar-right\">\n            <li>\n                <a asp-area=\"\" asp-controller=\"Manage\" asp-action=\"Index\" title=\"Manage\">Hello @UserManager.GetUserName(User)!</a>\n            </li>\n            <li>\n                <button type=\"submit\" class=\"btn btn-link navbar-btn navbar-link\">Log off</button>\n            </li>\n        </ul>\n    </form>\n}\nelse\n{\n    <ul class=\"nav navbar-nav navbar-right\">\n        <li><a asp-area=\"\" asp-controller=\"Account\" asp-action=\"Register\">Register</a></li>\n        <li><a asp-area=\"\" asp-controller=\"Account\" asp-action=\"Login\">Log in</a></li>\n    </ul>\n}\n"
  },
  {
    "path": "src/AdminLTE/Views/Shared/_ValidationScriptsPartial.cshtml",
    "content": "﻿<environment names=\"Development\">\n    <script src=\"~/lib/jquery-validation/jquery.validate.js\"></script>\n    <script src=\"~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js\"></script>\n</environment>\n<environment names=\"Staging,Production\">\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.0/jquery.validate.min.js\"\n            asp-fallback-src=\"~/lib/jquery-validation/jquery.validate.min.js\"\n            asp-fallback-test=\"window.jQuery && window.jQuery.validator\">\n    </script>\n    <script src=\"https://cdnjs.cloudflare.com/ajax/libs/jquery-validation-unobtrusive/3.2.11/jquery.validate.unobtrusive.min.js\"\n            asp-fallback-src=\"~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js\"\n            asp-fallback-test=\"window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive\">\n    </script>\n</environment>\n"
  },
  {
    "path": "src/AdminLTE/Views/SuperAdmin/ChangePassword.cshtml",
    "content": "﻿@model ApplicationUser\n@{\n    ViewData[\"Title\"] = \"Change Password\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n\n<form method=\"post\" asp-controller=\"SuperAdmin\" asp-action=\"ChangePassword\" asp-antiforgery=\"true\" class=\"form-horizontal\">\n    <div class=\"form-group\">\n        <label class=\"control-label col-sm-2\" asp-for=\"Id\">Id: </label>\n        <div class=\"col-sm-4\">\n            <input class=\"form-control\" asp-for=\"Id\" disabled />\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <label class=\"control-label col-sm-2\" asp-for=\"UserName\">Name: </label>\n        <div class=\"col-sm-4\">\n            <input class=\"form-control\" asp-for=\"UserName\" disabled />\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <!--only hashed passwords are stored in the database and the User class doesn't contain password property-->\n        <label class=\"control-label col-sm-2\" for=\"password\">Password:</label>\n        <div class=\"col-sm-4\">\n            <input class=\"form-control\" name=\"password\" type=\"password\" />\n        </div>\n    </div>\n\n    <div class=\"form-group\">\n        <div class=\"col-sm-offset-2 col-sm-4\">\n            <button type=\"submit\" class=\"btn btn-primary\">Save</button>\n            <button type=\"reset\" class=\"btn btn-primary\">Reset</button>\n            <a class=\"btn btn-primary\" asp-controller=\"SuperAdmin\" asp-action=\"Index\">Cancel</a>\n        </div>\n    </div>\n</form>"
  },
  {
    "path": "src/AdminLTE/Views/SuperAdmin/Create.cshtml",
    "content": "﻿@model AdminLTE.Models.SuperAdminViewModels.CreateVm\n@{\n    ViewData[\"Title\"] = \"Create User\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n\n<form method=\"post\" asp-action=\"Create\" asp-antiforgery=\"true\" class=\"form-horizontal\">\n    <div class=\"form-group\">\n        <label asp-for=\"FirstName\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"FirstName\" class=\"form-control\" />\n            <span asp-validation-for=\"FirstName\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <label asp-for=\"LastName\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"LastName\" class=\"form-control\" />\n            <span asp-validation-for=\"LastName\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <label asp-for=\"Email\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"Email\" class=\"form-control\" />\n            <span asp-validation-for=\"Email\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <label asp-for=\"Password\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"Password\" class=\"form-control\" />\n            <span asp-validation-for=\"Password\" class=\"text-danger\"></span>\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <label asp-for=\"ConfirmPassword\" class=\"col-md-2 control-label\"></label>\n        <div class=\"col-md-10\">\n            <input asp-for=\"ConfirmPassword\" class=\"form-control\" />\n            <span asp-validation-for=\"ConfirmPassword\" class=\"text-danger\"></span>\n        </div>\n    </div>\n\n    <div class=\"form-group\">\n        <div class=\"col-sm-offset-2 col-sm-4\">\n            <button type=\"submit\" class=\"btn btn-primary\">Create</button>\n            <button type=\"reset\" class=\"btn btn-primary\">Reset</button>\n            <a asp-action=\"Index\" class=\"btn btn-primary\">Cancel</a>\n        </div>\n    </div>\n</form>\n"
  },
  {
    "path": "src/AdminLTE/Views/SuperAdmin/Edit.cshtml",
    "content": "﻿@model ApplicationUser\n@{\n    ViewData[\"Title\"] = \"Edit User\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<div asp-validation-summary=\"All\" class=\"text-danger\"></div>\n\n<form method=\"post\" asp-controller=\"SuperAdmin\" asp-action=\"Edit\" asp-antiforgery=\"true\" class=\"form-horizontal\">\n    <div class=\"form-group\">\n        <label class=\"control-label col-sm-2\" asp-for=\"Id\">Id: </label>\n        <div class=\"col-sm-4\">\n            <input class=\"form-control\" asp-for=\"Id\" disabled />\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <label class=\"control-label col-sm-2\" asp-for=\"UserName\">Name: </label>\n        <div class=\"col-sm-4\">\n            <input class=\"form-control\" asp-for=\"UserName\" />\n        </div>\n    </div>\n    <div class=\"form-group\">\n        <label class=\"control-label col-sm-2\" asp-for=\"Email\">Email:</label>\n        <div class=\"col-sm-4\">\n            <input class=\"form-control\" asp-for=\"Email\" />\n        </div>\n    </div>\n\n    <div class=\"form-group\">\n        <div class=\"col-sm-offset-2 col-sm-4\">\n            <button type=\"submit\" class=\"btn btn-primary\">Save</button>\n            <button type=\"reset\" class=\"btn btn-primary\">Reset</button>\n            <a class=\"btn btn-primary\" asp-controller=\"SuperAdmin\" asp-action=\"Index\">Cancel</a>\n        </div>\n    </div>\n</form>"
  },
  {
    "path": "src/AdminLTE/Views/SuperAdmin/Index.cshtml",
    "content": "﻿<link rel=\"stylesheet\" href=\"~/lib/datatables-bs/datatables.bootstrap5.min.css\" asp-append-version=\"true\" />\n<script src=\"~/lib/datatables/datatables.min.js\" asp-append-version=\"true\"></script>\n<script src=\"~/lib/datatables-bs/datatables.bootstrap5.min.js\" asp-append-version=\"true\"></script>\n\n@model IEnumerable<ApplicationUser>\n@{\n    ViewData[\"Title\"] = \"User Accounts\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<div class=\"text-danger\" asp-validation-summary=\"ModelOnly\"></div>\n\n<table class=\"table table-condensed table-bordered\" id=\"myTable\">\n    <thead>\n        <tr>\n            <th>ID</th>\n            <th>Name</th>\n            <th>Email</th>\n            <th></th>\n        </tr>\n    </thead>\n    <tbody>\n        @if (Model.Count() == 0)\n        {\n        <tr>\n            <td colspan=\"3\" class=\"text-center\">\n                No User Accounts\n            </td>\n            <td></td>\n            <td></td>\n            <td></td>\n        </tr>\n        }\n        else\n        {\n            foreach (ApplicationUser user in Model)\n            {\n                <tr>\n                    <td>@user.Id</td>\n                    <td>@user.UserName</td>\n                    <td>@user.Email</td>\n                    <td>\n                        <a class=\"btn btn-success\" asp-controller=\"SuperAdmin\" asp-action=\"Edit\" asp-route-id=\"@user.Id\">Edit</a>\n                        <a class=\"btn btn-success\" asp-controller=\"SuperAdmin\" asp-action=\"ChangePassword\" asp-route-id=\"@user.Id\">Change Password</a>\n                        <a class=\"btn btn-danger btn-delete\" asp-controller=\"SuperAdmin\" asp-action=\"Delete\" asp-route-id=\"@user.Id\">Delete</a>\n                    </td>\n                </tr>\n            }\n        }\n    </tbody>\n</table>\n\n<a class=\"btn btn-primary\" asp-action=\"Create\">Create</a>\n<a class=\"btn btn-primary\" asp-controller=\"Home\" asp-action=\"Index\">Home</a>\n\n<script>\n    $(document).ready(function () {\n        $('#myTable').DataTable({\n            \"lengthMenu\": [[50, 75, 150, -1], [50, 75, 150, \"All\"]]\n        });\n    });\n</script>"
  },
  {
    "path": "src/AdminLTE/Views/UserLogs/Index.cshtml",
    "content": "﻿<link rel=\"stylesheet\" href=\"~/lib/datatables/css/dataTables.bootstrap4.min.css\" asp-append-version=\"true\" />\n<script src=\"~/lib/datatables/js/jquery.dataTables.min.js\" asp-append-version=\"true\"></script>\n<script src=\"~/lib/datatables/js/dataTables.bootstrap4.min.js\" asp-append-version=\"true\"></script>\n\n@model System.Collections.Generic.IEnumerable<AdminLTE.Models.UserAudit>\n\n@{\n    ViewData[\"Title\"] = \"User Logs\";\n}\n\n<h2>@ViewData[\"Title\"].</h2>\n\n<br>\n<table class=\"table\" id=\"myTable\">\n    <thead>\n        <tr>\n            <th>\n                @Html.DisplayNameFor(model => model.UserAuditId)\n            </th>\n            <th>\n                @Html.DisplayNameFor(model => model.UserId)\n            </th>\n            <th>\n                @Html.DisplayNameFor(model => model.Timestamp)\n            </th>\n            <th>\n                @Html.DisplayNameFor(model => model.AuditEvent)\n            </th>\n            <th>\n                @Html.DisplayNameFor(model => model.IpAddress)\n            </th>\n        </tr>\n    </thead>\n    <tbody>\n        @foreach (var item in Model) {\n        <tr>\n            <td>\n                @Html.DisplayFor(modelItem => item.UserAuditId)\n            </td>\n            <td>\n                @Html.DisplayFor(modelItem => item.UserId)\n            </td>\n            <td>\n                @Html.DisplayFor(modelItem => item.Timestamp)\n            </td>\n            <td>\n                @Html.DisplayFor(modelItem => item.AuditEvent)\n            </td>\n            <td>\n                @Html.DisplayFor(modelItem => item.IpAddress)\n            </td>\n        </tr>\n}\n    </tbody>\n</table>\n\n<script>\n    $(document).ready(function () {\n        $('#myTable').DataTable({\n            \"lengthMenu\": [[50, 75, 150, -1], [50, 75, 150, \"All\"]]\n        });\n    });\n</script>"
  },
  {
    "path": "src/AdminLTE/Views/_ViewImports.cshtml",
    "content": "﻿@using AdminLTE\n@using AdminLTE.Models\n@using AdminLTE.Models.AccountViewModels\n@using AdminLTE.Models.ManageViewModels\n@using Microsoft.AspNetCore.Identity\n@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers\n@using AdminLTE.Common.Extensions\n@using AdminLTE.Common"
  },
  {
    "path": "src/AdminLTE/Views/_ViewStart.cshtml",
    "content": "﻿@{\n    Layout = \"_Layout\";\n}\n"
  },
  {
    "path": "src/AdminLTE/appsettings.json",
    "content": "﻿{\n  \"ConnectionStrings\": {\n    \"DefaultConnection\": \"Server=(localdb)\\\\MSSQLLocalDB;Database=AdminLTECore-sample;Integrated Security=true;\"\n  },\n  \"Logging\": {\n    \"IncludeScopes\": false,\n    \"LogLevel\": {\n      \"Default\": \"Debug\",\n      \"System\": \"Information\",\n      \"Microsoft\": \"Information\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/AdminLTE/bundleconfig.json",
    "content": "﻿// Configure bundling and minification for the project.\n// More info at https://go.microsoft.com/fwlink/?LinkId=808241\n[\n  {\n    \"outputFileName\": \"wwwroot/css/site.min.css\",\n    // An array of relative input file paths. Globbing patterns supported\n    \"inputFiles\": [\n      \"wwwroot/css/site.css\"\n    ]\n  },\n  {\n    \"outputFileName\": \"wwwroot/js/site.min.js\",\n    \"inputFiles\": [\n      \"wwwroot/js/site.js\"\n    ],\n    // Optionally specify minification options\n    \"minify\": {\n      \"enabled\": true,\n      \"renameLocals\": true\n    },\n    // Optinally generate .map file\n    \"sourceMap\": false\n  }\n]\n"
  },
  {
    "path": "src/AdminLTE/libman.json",
    "content": "{\n  \"version\": \"1.0\",\n  \"defaultProvider\": \"cdnjs\",\n  \"libraries\": [\n    {\n      \"library\": \"twitter-bootstrap@5.3.8\",\n      \"destination\": \"wwwroot/lib/bootstrap/\"\n    },\n    {\n      \"library\": \"jquery@3.7.1\",\n      \"destination\": \"wwwroot/lib/jquery/\"\n    },\n    {\n      \"library\": \"jquery-validate@1.21.0\",\n      \"destination\": \"wwwroot/lib/jquery-validation/\"\n    },\n    {\n      \"library\": \"jquery-validation-unobtrusive@4.0.0\",\n      \"destination\": \"wwwroot/lib/jquery-validation-unobtrusive/\"\n    },\n    {\n      \"library\": \"datatables.net@2.3.4\",\n      \"destination\": \"wwwroot/lib/datatables/\"\n    },\n    {\n      \"library\": \"datatables.net-bs5@2.3.4\",\n      \"destination\": \"wwwroot/lib/datatables-bs/\"\n    },\n    {\n      \"library\": \"pace@1.2.4\",\n      \"destination\": \"wwwroot/lib/pace/\"\n    },\n    {\n      \"library\": \"fastclick@1.0.6\",\n      \"destination\": \"wwwroot/lib/fastclick/\"\n    },\n    {\n      \"library\": \"bootstrap-icons@1.13.1\",\n      \"destination\": \"wwwroot/lib/bootstrap-icons/\"\n    },\n    {\n      \"library\": \"icheck-bootstrap@3.0.1\",\n      \"destination\": \"wwwroot/lib/icheck-bootstrap/\"\n    },\n    {\n      \"provider\": \"jsdelivr\",\n      \"library\": \"admin-lte@4.0.0-rc6\",\n      \"destination\": \"wwwroot/lib/admin-lte/\",\n      \"files\": [\n        \"dist/css/adminlte.css\",\n        \"dist/css/adminlte.css.map\",\n        \"dist/css/adminlte.min.css\",\n        \"dist/js/adminlte.js\",\n        \"dist/js/adminlte.js.map\",\n        \"dist/js/adminlte.min.js\",\n        \"dist/js/adminlte.min.js.map\",\n        \"dist/assets/img/AdminLTELogo.png\"\n      ]\n    }\n  ]\n}"
  },
  {
    "path": "src/AdminLTE/web.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <!--\n    Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380\n  -->\n  <system.webServer>\n    <handlers>\n      <add name=\"aspNetCore\" path=\"*\" verb=\"*\" modules=\"AspNetCoreModuleV2\" resourceType=\"Unspecified\" />\n    </handlers>\n    <aspNetCore processPath=\"%LAUNCHER_PATH%\" arguments=\"%LAUNCHER_ARGS%\" stdoutLogEnabled=\"false\" stdoutLogFile=\".\\logs\\stdout\" forwardWindowsAuthToken=\"false\" hostingModel=\"InProcess\" />\n  </system.webServer>\n</configuration>"
  },
  {
    "path": "src/AdminLTE/wwwroot/_references.js",
    "content": "﻿/// <autosync enabled=\"true\" />\n/// <reference path=\"lib/admin-lte/dist/js/adminlte.js\" />\n/// <reference path=\"js/site.js\" />\n/// <reference path=\"lib/bootstrap/js/bootstrap.js\" />\n/// <reference path=\"lib/datatables/js/jquery.dataTables.js\" />\n/// <reference path=\"lib/fastclick/fastclick.js\" />\n/// <reference path=\"lib/jquery/jquery.js\" />\n/// <reference path=\"lib/jquery-validation/jquery.validate.js\" />\n/// <reference path=\"lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js\" />\n/// <reference path=\"lib/pace/pace.js\" />\n"
  },
  {
    "path": "src/AdminLTE/wwwroot/css/animation.css",
    "content": ".animated{-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-ms-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:1s;-moz-animation-duration:1s;-ms-animation-duration:1s;-o-animation-duration:1s;animation-duration:1s;}.animated.hinge{-webkit-animation-duration:1s;-moz-animation-duration:1s;-ms-animation-duration:1s;-o-animation-duration:1s;animation-duration:1s;}\n\n@-webkit-keyframes fadeIn {\n\t0% {opacity: 0;}\t\n\t100% {opacity: 1;}\n}\n\n@-moz-keyframes fadeIn {\n\t0% {opacity: 0;}\t\n\t100% {opacity: 1;}\n}\n\n@-o-keyframes fadeIn {\n\t0% {opacity: 0;}\t\n\t100% {opacity: 1;}\n}\n\n@keyframes fadeIn {\n\t0% {opacity: 0;}\t\n\t100% {opacity: 1;}\n}\n\n.fadeIn {\n\t-webkit-animation-name: fadeIn;\n\t-moz-animation-name: fadeIn;\n\t-o-animation-name: fadeIn;\n\tanimation-name: fadeIn;\n}\n\n@-webkit-keyframes fadeInUp {\n\t0% {\n\t\topacity: 0;\n\t\t-webkit-transform: translateY(60px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateY(0);\n\t}\n}\n\n@-moz-keyframes fadeInUp {\n\t0% {\n\t\topacity: 0;\n\t\t-moz-transform: translateY(60px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-moz-transform: translateY(0);\n\t}\n}\n\n@-o-keyframes fadeInUp {\n\t0% {\n\t\topacity: 0;\n\t\t-o-transform: translateY(60px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-o-transform: translateY(0);\n\t}\n}\n\n@keyframes fadeInUp {\n\t0% {\n\t\topacity: 0;\n\t\ttransform: translateY(60px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\ttransform: translateY(0);\n\t}\n}\n\n.fadeInUp {\n\t-webkit-animation-name: fadeInUp;\n\t-moz-animation-name: fadeInUp;\n\t-o-animation-name: fadeInUp;\n\tanimation-name: fadeInUp;\n}\n@-webkit-keyframes fadeInDown {\n\t0% {\n\t\topacity: 0;\n\t\t-webkit-transform: translateY(-40px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateY(0);\n\t}\n}\n\n@-moz-keyframes fadeInDown {\n\t0% {\n\t\topacity: 0;\n\t\t-moz-transform: translateY(-40px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-moz-transform: translateY(0);\n\t}\n}\n\n@-o-keyframes fadeInDown {\n\t0% {\n\t\topacity: 0;\n\t\t-o-transform: translateY(-40px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-o-transform: translateY(0);\n\t}\n}\n\n@keyframes fadeInDown {\n\t0% {\n\t\topacity: 0;\n\t\ttransform: translateY(-40px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\ttransform: translateY(0);\n\t}\n}\n\n.fadeInDown {\n\t-webkit-animation-name: fadeInDown;\n\t-moz-animation-name: fadeInDown;\n\t-o-animation-name: fadeInDown;\n\tanimation-name: fadeInDown;\n}\n@-webkit-keyframes fadeInLeft {\n\t0% {\n\t\topacity: 0;\n\t\t-webkit-transform: translateX(-20px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateX(0);\n\t}\n}\n\n@-moz-keyframes fadeInLeft {\n\t0% {\n\t\topacity: 0;\n\t\t-moz-transform: translateX(-20px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-moz-transform: translateX(0);\n\t}\n}\n\n@-o-keyframes fadeInLeft {\n\t0% {\n\t\topacity: 0;\n\t\t-o-transform: translateX(-20px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-o-transform: translateX(0);\n\t}\n}\n\n@keyframes fadeInLeft {\n\t0% {\n\t\topacity: 0;\n\t\ttransform: translateX(-20px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\ttransform: translateX(0);\n\t}\n}\n\n.fadeInLeft {\n\t-webkit-animation-name: fadeInLeft;\n\t-moz-animation-name: fadeInLeft;\n\t-o-animation-name: fadeInLeft;\n\tanimation-name: fadeInLeft;\n}\n@-webkit-keyframes fadeInRight {\n\t0% {\n\t\topacity: 0;\n\t\t-webkit-transform: translateX(20px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateX(0);\n\t}\n}\n\n@-moz-keyframes fadeInRight {\n\t0% {\n\t\topacity: 0;\n\t\t-moz-transform: translateX(20px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-moz-transform: translateX(0);\n\t}\n}\n\n@-o-keyframes fadeInRight {\n\t0% {\n\t\topacity: 0;\n\t\t-o-transform: translateX(20px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-o-transform: translateX(0);\n\t}\n}\n\n@keyframes fadeInRight {\n\t0% {\n\t\topacity: 0;\n\t\ttransform: translateX(20px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\ttransform: translateX(0);\n\t}\n}\n\n.fadeInRight {\n\t-webkit-animation-name: fadeInRight;\n\t-moz-animation-name: fadeInRight;\n\t-o-animation-name: fadeInRight;\n\tanimation-name: fadeInRight;\n}\n@-webkit-keyframes fadeOut {\n\t0% {opacity: 1;}\n\t100% {opacity: 0;}\n}\n\n@-moz-keyframes fadeOut {\n\t0% {opacity: 1;}\n\t100% {opacity: 0;}\n}\n\n@-o-keyframes fadeOut {\n\t0% {opacity: 1;}\n\t100% {opacity: 0;}\n}\n\n@keyframes fadeOut {\n\t0% {opacity: 1;}\n\t100% {opacity: 0;}\n}\n\n.fadeOut {\n\t-webkit-animation-name: fadeOut;\n\t-moz-animation-name: fadeOut;\n\t-o-animation-name: fadeOut;\n\tanimation-name: fadeOut;\n}\n@-webkit-keyframes fadeOutUp {\n\t0% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateY(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-webkit-transform: translateY(-20px);\n\t}\n}\n@-moz-keyframes fadeOutUp {\n\t0% {\n\t\topacity: 1;\n\t\t-moz-transform: translateY(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-moz-transform: translateY(-20px);\n\t}\n}\n@-o-keyframes fadeOutUp {\n\t0% {\n\t\topacity: 1;\n\t\t-o-transform: translateY(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-o-transform: translateY(-20px);\n\t}\n}\n@keyframes fadeOutUp {\n\t0% {\n\t\topacity: 1;\n\t\ttransform: translateY(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\ttransform: translateY(-20px);\n\t}\n}\n\n.fadeOutUp {\n\t-webkit-animation-name: fadeOutUp;\n\t-moz-animation-name: fadeOutUp;\n\t-o-animation-name: fadeOutUp;\n\tanimation-name: fadeOutUp;\n}\n@-webkit-keyframes fadeOutDown {\n\t0% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateY(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-webkit-transform: translateY(20px);\n\t}\n}\n\n@-moz-keyframes fadeOutDown {\n\t0% {\n\t\topacity: 1;\n\t\t-moz-transform: translateY(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-moz-transform: translateY(20px);\n\t}\n}\n\n@-o-keyframes fadeOutDown {\n\t0% {\n\t\topacity: 1;\n\t\t-o-transform: translateY(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-o-transform: translateY(20px);\n\t}\n}\n\n@keyframes fadeOutDown {\n\t0% {\n\t\topacity: 1;\n\t\ttransform: translateY(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\ttransform: translateY(20px);\n\t}\n}\n\n.fadeOutDown {\n\t-webkit-animation-name: fadeOutDown;\n\t-moz-animation-name: fadeOutDown;\n\t-o-animation-name: fadeOutDown;\n\tanimation-name: fadeOutDown;\n}\n@-webkit-keyframes fadeOutLeft {\n\t0% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateX(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-webkit-transform: translateX(-20px);\n\t}\n}\n\n@-moz-keyframes fadeOutLeft {\n\t0% {\n\t\topacity: 1;\n\t\t-moz-transform: translateX(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-moz-transform: translateX(-20px);\n\t}\n}\n\n@-o-keyframes fadeOutLeft {\n\t0% {\n\t\topacity: 1;\n\t\t-o-transform: translateX(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-o-transform: translateX(-20px);\n\t}\n}\n\n@keyframes fadeOutLeft {\n\t0% {\n\t\topacity: 1;\n\t\ttransform: translateX(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\ttransform: translateX(-20px);\n\t}\n}\n\n.fadeOutLeft {\n\t-webkit-animation-name: fadeOutLeft;\n\t-moz-animation-name: fadeOutLeft;\n\t-o-animation-name: fadeOutLeft;\n\tanimation-name: fadeOutLeft;\n}\n@-webkit-keyframes fadeOutRight {\n\t0% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateX(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-webkit-transform: translateX(20px);\n\t}\n}\n\n@-moz-keyframes fadeOutRight {\n\t0% {\n\t\topacity: 1;\n\t\t-moz-transform: translateX(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-moz-transform: translateX(20px);\n\t}\n}\n\n@-o-keyframes fadeOutRight {\n\t0% {\n\t\topacity: 1;\n\t\t-o-transform: translateX(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-o-transform: translateX(20px);\n\t}\n}\n\n@keyframes fadeOutRight {\n\t0% {\n\t\topacity: 1;\n\t\ttransform: translateX(0);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\ttransform: translateX(20px);\n\t}\n}\n\n.fadeOutRight {\n\t-webkit-animation-name: fadeOutRight;\n\t-moz-animation-name: fadeOutRight;\n\t-o-animation-name: fadeOutRight;\n\tanimation-name: fadeOutRight;\n}\n\n@-webkit-keyframes bounceIn {\n\t0% {\n\t\topacity: 0;\n\t\t-webkit-transform: scale(.3);\n\t}\n\t\n\t50% {\n\t\topacity: 1;\n\t\t-webkit-transform: scale(1.05);\n\t}\n\t\n\t70% {\n\t\t-webkit-transform: scale(.9);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-webkit-transform: scale(1);\n\t}\n}\n\n@-moz-keyframes bounceIn {\n\t0% {\n\t\topacity: 0;\n\t\t-moz-transform: scale(.3);\n\t}\n\t\n\t50% {\n\t\topacity: 1;\n\t\t-moz-transform: scale(1.05);\n\t}\n\t\n\t70% {\n\t\t-moz-transform: scale(.9);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-moz-transform: scale(1);\n\t}\n}\n\n@-o-keyframes bounceIn {\n\t0% {\n\t\topacity: 0;\n\t\t-o-transform: scale(.3);\n\t}\n\t\n\t50% {\n\t\topacity: 1;\n\t\t-o-transform: scale(1.05);\n\t}\n\t\n\t70% {\n\t\t-o-transform: scale(.9);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-o-transform: scale(1);\n\t}\n}\n\n@keyframes bounceIn {\n\t0% {\n\t\topacity: 0;\n\t\ttransform: scale(.3);\n\t}\n\t\n\t50% {\n\t\topacity: 1;\n\t\ttransform: scale(1.05);\n\t}\n\t\n\t70% {\n\t\ttransform: scale(.9);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\ttransform: scale(1);\n\t}\n}\n\n.bounceIn {\n\t-webkit-animation-name: bounceIn;\n\t-moz-animation-name: bounceIn;\n\t-o-animation-name: bounceIn;\n\tanimation-name: bounceIn;\n}\n\n@-webkit-keyframes bounceOut {\n\t0% {\n\t\t-webkit-transform: scale(1);\n\t}\n\t\n\t25% {\n\t\t-webkit-transform: scale(.95);\n\t}\n\t\n\t50% {\n\t\topacity: 1;\n\t\t-webkit-transform: scale(1.1);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-webkit-transform: scale(.3);\n\t}\t\n}\n\n@-moz-keyframes bounceOut {\n\t0% {\n\t\t-moz-transform: scale(1);\n\t}\n\t\n\t25% {\n\t\t-moz-transform: scale(.95);\n\t}\n\t\n\t50% {\n\t\topacity: 1;\n\t\t-moz-transform: scale(1.1);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-moz-transform: scale(.3);\n\t}\t\n}\n\n@-o-keyframes bounceOut {\n\t0% {\n\t\t-o-transform: scale(1);\n\t}\n\t\n\t25% {\n\t\t-o-transform: scale(.95);\n\t}\n\t\n\t50% {\n\t\topacity: 1;\n\t\t-o-transform: scale(1.1);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\t-o-transform: scale(.3);\n\t}\t\n}\n\n@keyframes bounceOut {\n\t0% {\n\t\ttransform: scale(1);\n\t}\n\t\n\t25% {\n\t\ttransform: scale(.95);\n\t}\n\t\n\t50% {\n\t\topacity: 1;\n\t\ttransform: scale(1.1);\n\t}\n\t\n\t100% {\n\t\topacity: 0;\n\t\ttransform: scale(.3);\n\t}\t\n}\n\n.bounceOut {\n\t-webkit-animation-name: bounceOut;\n\t-moz-animation-name: bounceOut;\n\t-o-animation-name: bounceOut;\n\tanimation-name: bounceOut;\n}\n\n@-webkit-keyframes bounceInLeft {\n\t0% {\n\t\topacity: 0;\n\t\t-webkit-transform: translateX(-2000px);\n\t}\n\t\n\t60% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateX(30px);\n\t}\n\t\n\t80% {\n\t\t-webkit-transform: translateX(-10px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateX(0);\n\t}\n}\n\n@-moz-keyframes bounceInLeft {\n\t0% {\n\t\topacity: 0;\n\t\t-moz-transform: translateX(-2000px);\n\t}\n\t\n\t60% {\n\t\topacity: 1;\n\t\t-moz-transform: translateX(30px);\n\t}\n\t\n\t80% {\n\t\t-moz-transform: translateX(-10px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-moz-transform: translateX(0);\n\t}\n}\n\n@-o-keyframes bounceInLeft {\n\t0% {\n\t\topacity: 0;\n\t\t-o-transform: translateX(-2000px);\n\t}\n\t\n\t60% {\n\t\topacity: 1;\n\t\t-o-transform: translateX(30px);\n\t}\n\t\n\t80% {\n\t\t-o-transform: translateX(-10px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-o-transform: translateX(0);\n\t}\n}\n\n@keyframes bounceInLeft {\n\t0% {\n\t\topacity: 0;\n\t\ttransform: translateX(-2000px);\n\t}\n\t\n\t60% {\n\t\topacity: 1;\n\t\ttransform: translateX(30px);\n\t}\n\t\n\t80% {\n\t\ttransform: translateX(-10px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\ttransform: translateX(0);\n\t}\n}\n\n.bounceInLeft {\n\t-webkit-animation-name: bounceInLeft;\n\t-moz-animation-name: bounceInLeft;\n\t-o-animation-name: bounceInLeft;\n\tanimation-name: bounceInLeft;\n}\n\n@-webkit-keyframes bounceInRight {\n\t0% {\n\t\topacity: 0;\n\t\t-webkit-transform: translateX(2000px);\n\t}\n\t\n\t60% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateX(-30px);\n\t}\n\t\n\t80% {\n\t\t-webkit-transform: translateX(10px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-webkit-transform: translateX(0);\n\t}\n}\n\n@-moz-keyframes bounceInRight {\n\t0% {\n\t\topacity: 0;\n\t\t-moz-transform: translateX(2000px);\n\t}\n\t\n\t60% {\n\t\topacity: 1;\n\t\t-moz-transform: translateX(-30px);\n\t}\n\t\n\t80% {\n\t\t-moz-transform: translateX(10px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-moz-transform: translateX(0);\n\t}\n}\n\n@-o-keyframes bounceInRight {\n\t0% {\n\t\topacity: 0;\n\t\t-o-transform: translateX(2000px);\n\t}\n\t\n\t60% {\n\t\topacity: 1;\n\t\t-o-transform: translateX(-30px);\n\t}\n\t\n\t80% {\n\t\t-o-transform: translateX(10px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\t-o-transform: translateX(0);\n\t}\n}\n\n@keyframes bounceInRight {\n\t0% {\n\t\topacity: 0;\n\t\ttransform: translateX(2000px);\n\t}\n\t\n\t60% {\n\t\topacity: 1;\n\t\ttransform: translateX(-30px);\n\t}\n\t\n\t80% {\n\t\ttransform: translateX(10px);\n\t}\n\t\n\t100% {\n\t\topacity: 1;\n\t\ttransform: translateX(0);\n\t}\n}\n\n.bounceInRight {\n\t-webkit-animation-name: bounceInRight;\n\t-moz-animation-name: bounceInRight;\n\t-o-animation-name: bounceInRight;\n\tanimation-name: bounceInRight;\n}\n\n\n"
  },
  {
    "path": "src/AdminLTE/wwwroot/css/error.css",
    "content": "﻿@charset \"UTF-8\";\n\nhtml * {\n  outline: none !important;\n}\nhtml,\nbody {\n  font-size: 12px;\n  padding: 0px;\n  margin: 0px;\n  overflow: hidden;\n  background: #334454;\n  font-family: 'Open Sans', sans-serif;\n}\na {\n  color: #2f9fe0;\n}\n/* Layout */\n\n.center {text-align: center; margin-left: auto; margin-right: auto; margin-bottom: auto; margin-top: auto;}\n\n[class^='col-xs-'],\n[class^='col-sm-'],\n[class^='col-md-'],\n[class^='col-lg-'] {\n  position: relative;\n  min-height: 1px;\n  padding-left: 10px;\n  padding-right: 10px;\n}\n.container .row {\n  margin-left: 0px;\n  margin-right: 0px;\n}\n/* eof layout */\n\n/* error block */\n.block-error {\n  width: 400px;\n  margin: 10% auto 0px;\n}\n.block-error .error-num {\n  font-size: 190px;\n  font-weight: 100;\n  text-align: center;\n  float: left;\n  width: 100%;\n  color: #FFF;\n  line-height: 180px;\n}\n.block-error .error-text {\n  font-size: 31px;\n  color: #F5F5F5;\n  float: left;\n  width: 100%;\n  font-weight: 200;\n  text-align: center;\n  margin-top: 10px;\n  text-transform: uppercase;\n}\n.block-error .error-description {\n  font-size: 13px;\n  color: #F0F0F0;\n  float: left;\n  width: 100%;\n  font-weight: 300;\n  margin: 30px 0px;\n  text-align: center;\n}\n.block-error .copy {\n  float: left;\n  width: 100%;\n  text-align: center;\n  color: #FFF;\n  margin-top: 30px;\n  color: #dddddd;\n}\n/* eof error */\n"
  },
  {
    "path": "src/AdminLTE/wwwroot/css/site.css",
    "content": "﻿\n/*PACE.js Related*/\n.pace {\n  pointer-events: none;\n\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n\n.pace-inactive {\n  display: none;\n}\n\n.pace .pace-progress {\n  /*background: #29d;*/\n  background: green;\n  position: fixed;\n  z-index: 2000;\n  top: 0;\n  right: 100%;\n  width: 100%;\n  height: 50px;\n}\n\n/*site specifics*/\n.site-loader-color \n{\n    color: #000000 !important;\n    font-size: 50px !important;\n}\n\n.site-datatable-button-container{\n    margin-left: 10px;\n}\n\n.button-create{\n\n}\n\n"
  },
  {
    "path": "src/AdminLTE/wwwroot/files/SalesOrderDetail.txt",
    "content": "﻿0,1,2,3,4,5,6\n1,4911-403C-98,1,Mountain-100 Black. 42,No Discount,2024.994,0.00\n2,4911-403C-98,3,Mountain-100 Black. 44,No Discount,2024.994,0.00\n3,4911-403C-98,1,Mountain-100 Black. 48,No Discount,2024.994,0.00\n4,4911-403C-98,1,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n5,4911-403C-98,1,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n6,4911-403C-98,2,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n7,4911-403C-98,1,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n8,4911-403C-98,3,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n9,4911-403C-98,1,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n10,4911-403C-98,6,Mountain Bike Socks. M,No Discount,5.70,0.00\n11,4911-403C-98,2,AWC Logo Cap,No Discount,5.1865,0.00\n12,4911-403C-98,4,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n13,6431-4D57-83,1,Road-650 Red. 44,No Discount,419.4589,0.00\n14,6431-4D57-83,1,Road-450 Red. 52,No Discount,874.794,0.00\n15,4E0A-4F89-AE,1,HL Mountain Frame - Black. 48,No Discount,809.76,0.00\n16,4E0A-4F89-AE,1,HL Mountain Frame - Black. 42,No Discount,714.7043,0.00\n17,4E0A-4F89-AE,2,HL Mountain Frame - Black. 38,No Discount,714.7043,0.00\n18,4E0A-4F89-AE,4,AWC Logo Cap,No Discount,5.1865,0.00\n19,4E0A-4F89-AE,4,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n20,4E0A-4F89-AE,2,HL Mountain Frame - Silver. 46,No Discount,722.5949,0.00\n21,4E0A-4F89-AE,3,Mountain-100 Black. 38,No Discount,2024.994,0.00\n22,4E0A-4F89-AE,2,Mountain-100 Black. 48,No Discount,2024.994,0.00\n23,4E0A-4F89-AE,2,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n24,4E0A-4F89-AE,2,HL Mountain Frame - Silver. 48,No Discount,818.70,0.00\n25,4E0A-4F89-AE,4,Mountain-100 Black. 42,No Discount,2024.994,0.00\n26,4E0A-4F89-AE,2,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n27,4E0A-4F89-AE,2,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n28,4E0A-4F89-AE,2,Mountain-100 Black. 44,No Discount,2024.994,0.00\n29,4E0A-4F89-AE,5,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n30,2E53-4802-85,3,Road-650 Red. 52,No Discount,419.4589,0.00\n31,2E53-4802-85,5,Road-650 Black. 52,No Discount,419.4589,0.00\n32,2E53-4802-85,2,LL Road Frame - Red. 62,No Discount,183.9382,0.00\n33,2E53-4802-85,4,Road-450 Red. 58,No Discount,874.794,0.00\n34,2E53-4802-85,3,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n35,2E53-4802-85,5,Road-650 Red. 44,No Discount,419.4589,0.00\n36,2E53-4802-85,3,Road-650 Black. 58,No Discount,419.4589,0.00\n37,2E53-4802-85,2,Road-650 Black. 44,No Discount,419.4589,0.00\n38,2E53-4802-85,1,Road-150 Red. 56,No Discount,2146.962,0.00\n39,2E53-4802-85,1,Road-450 Red. 44,No Discount,874.794,0.00\n40,2E53-4802-85,3,Road-650 Red. 48,No Discount,419.4589,0.00\n41,2E53-4802-85,1,ML Road Frame - Red. 48,No Discount,356.898,0.00\n42,2E53-4802-85,6,Road-450 Red. 52,No Discount,874.794,0.00\n43,2E53-4802-85,1,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n44,2E53-4802-85,3,LL Road Frame - Black. 58,No Discount,178.5808,0.00\n45,2E53-4802-85,1,Road-150 Red. 62,No Discount,2146.962,0.00\n46,2E53-4802-85,3,Road-650 Red. 60,No Discount,419.4589,0.00\n47,2E53-4802-85,1,LL Road Frame - Red. 48,No Discount,183.9382,0.00\n48,2E53-4802-85,1,ML Road Frame - Red. 52,No Discount,356.898,0.00\n49,2E53-4802-85,1,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n50,2E53-4802-85,3,Road-650 Black. 60,No Discount,419.4589,0.00\n51,2E53-4802-85,1,Road-450 Red. 60,No Discount,874.794,0.00\n52,1E90-4FBF-B6,1,Road-650 Red. 60,No Discount,419.4589,0.00\n53,2F44-4BA1-BB,1,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n54,2F44-4BA1-BB,4,Mountain-100 Black. 38,No Discount,2024.994,0.00\n55,2F44-4BA1-BB,1,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n56,2F44-4BA1-BB,1,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n57,2F44-4BA1-BB,2,Mountain-100 Black. 44,No Discount,2024.994,0.00\n58,2F44-4BA1-BB,3,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n59,2F44-4BA1-BB,1,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n60,2F44-4BA1-BB,1,Mountain-100 Black. 48,No Discount,2024.994,0.00\n61,19F0-4638-8E,2,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n62,19F0-4638-8E,1,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n63,19F0-4638-8E,1,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n64,19F0-4638-8E,2,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n65,19F0-4638-8E,2,Mountain-100 Black. 44,No Discount,2024.994,0.00\n66,19F0-4638-8E,2,AWC Logo Cap,No Discount,5.1865,0.00\n67,19F0-4638-8E,2,Mountain-100 Black. 38,No Discount,2024.994,0.00\n68,19F0-4638-8E,1,Mountain-100 Black. 48,No Discount,2024.994,0.00\n69,19F0-4638-8E,6,Mountain Bike Socks. M,No Discount,5.70,0.00\n70,19F0-4638-8E,1,Mountain-100 Black. 42,No Discount,2024.994,0.00\n71,D46A-40CA-8D,1,Road-650 Red. 52,No Discount,419.4589,0.00\n72,D46A-40CA-8D,1,Road-150 Red. 56,No Discount,2146.962,0.00\n73,D46A-40CA-8D,1,ML Road Frame - Red. 48,No Discount,356.898,0.00\n74,D46A-40CA-8D,1,Road-450 Red. 44,No Discount,874.794,0.00\n75,D46A-40CA-8D,2,Road-650 Black. 44,No Discount,419.4589,0.00\n76,D46A-40CA-8D,1,Road-650 Black. 60,No Discount,419.4589,0.00\n77,4DFB-4B10-A6,3,Mountain Bike Socks. L,No Discount,5.70,0.00\n78,4DFB-4B10-A6,1,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n79,4DFB-4B10-A6,1,Mountain-100 Black. 48,No Discount,2024.994,0.00\n80,4DFB-4B10-A6,1,Mountain-100 Black. 38,No Discount,2024.994,0.00\n81,365D-4C9A-BE,3,Road-450 Red. 44,No Discount,874.794,0.00\n82,365D-4C9A-BE,2,Road-150 Red. 56,No Discount,2146.962,0.00\n83,365D-4C9A-BE,7,Road-650 Red. 60,No Discount,419.4589,0.00\n84,365D-4C9A-BE,6,Road-650 Black. 58,No Discount,419.4589,0.00\n85,365D-4C9A-BE,6,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n86,365D-4C9A-BE,6,LL Road Frame - Red. 62,No Discount,183.9382,0.00\n87,365D-4C9A-BE,2,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n88,365D-4C9A-BE,2,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n89,365D-4C9A-BE,2,Road-450 Red. 58,No Discount,874.794,0.00\n90,365D-4C9A-BE,4,AWC Logo Cap,No Discount,5.1865,0.00\n91,365D-4C9A-BE,2,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n92,365D-4C9A-BE,3,Road-450 Red. 60,No Discount,874.794,0.00\n93,365D-4C9A-BE,3,Road-650 Red. 62,No Discount,419.4589,0.00\n94,365D-4C9A-BE,2,Road-650 Black. 52,No Discount,419.4589,0.00\n95,365D-4C9A-BE,3,LL Road Frame - Red. 48,No Discount,183.9382,0.00\n96,365D-4C9A-BE,2,Road-650 Red. 52,No Discount,419.4589,0.00\n97,365D-4C9A-BE,2,Road-650 Black. 60,No Discount,419.4589,0.00\n98,365D-4C9A-BE,2,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n99,365D-4C9A-BE,1,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n100,365D-4C9A-BE,2,Road-650 Black. 44,No Discount,419.4589,0.00\n101,365D-4C9A-BE,4,ML Road Frame - Red. 48,No Discount,356.898,0.00\n102,365D-4C9A-BE,6,Road-450 Red. 52,No Discount,874.794,0.00\n103,365D-4C9A-BE,4,Road-650 Red. 44,No Discount,419.4589,0.00\n104,365D-4C9A-BE,3,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n105,365D-4C9A-BE,4,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n106,365D-4C9A-BE,3,LL Road Frame - Black. 58,No Discount,178.5808,0.00\n107,365D-4C9A-BE,1,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n108,365D-4C9A-BE,3,ML Road Frame - Red. 52,No Discount,356.898,0.00\n109,365D-4C9A-BE,3,Road-650 Red. 48,No Discount,419.4589,0.00\n110,B65C-4867-86,1,HL Mountain Frame - Black. 38,No Discount,714.7043,0.00\n111,F101-4649-85,1,Mountain Bike Socks. L,No Discount,5.70,0.00\n112,F101-4649-85,2,Mountain Bike Socks. M,No Discount,5.70,0.00\n113,F101-4649-85,2,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n114,F101-4649-85,1,Mountain-100 Black. 42,No Discount,2024.994,0.00\n115,DFD9-41B7-94,1,Road-150 Red. 56,No Discount,2146.962,0.00\n116,DFD9-41B7-94,2,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n117,DFD9-41B7-94,1,Road-450 Red. 44,No Discount,874.794,0.00\n118,DFD9-41B7-94,2,Road-650 Black. 44,No Discount,419.4589,0.00\n119,DFD9-41B7-94,2,ML Road Frame - Red. 48,No Discount,356.898,0.00\n120,DFD9-41B7-94,2,Road-650 Red. 48,No Discount,419.4589,0.00\n121,DFD9-41B7-94,2,Road-450 Red. 60,No Discount,874.794,0.00\n122,DFD9-41B7-94,2,Road-650 Red. 52,No Discount,419.4589,0.00\n123,DFD9-41B7-94,1,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n124,DFD9-41B7-94,1,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n125,DFD9-41B7-94,1,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n126,F4B5-48D0-BA,6,Mountain Bike Socks. M,No Discount,5.70,0.00\n127,F4B5-48D0-BA,2,Mountain-100 Black. 42,No Discount,2024.994,0.00\n128,F4B5-48D0-BA,1,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n129,260F-4DCF-A1,1,Road-450 Red. 58,No Discount,874.794,0.00\n130,260F-4DCF-A1,3,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n131,260F-4DCF-A1,1,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n132,260F-4DCF-A1,2,Road-650 Red. 62,No Discount,419.4589,0.00\n133,260F-4DCF-A1,1,Road-650 Red. 44,No Discount,419.4589,0.00\n134,260F-4DCF-A1,2,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n135,260F-4DCF-A1,2,Road-650 Black. 52,No Discount,419.4589,0.00\n136,260F-4DCF-A1,1,AWC Logo Cap,No Discount,5.1865,0.00\n137,260F-4DCF-A1,2,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n138,260F-4DCF-A1,1,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n139,260F-4DCF-A1,4,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n140,4C12-4FF9-80,3,Road-450 Red. 52,No Discount,874.794,0.00\n141,5069-4470-BE,4,Road-650 Red. 62,No Discount,419.4589,0.00\n142,5069-4470-BE,5,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n143,5069-4470-BE,2,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n144,5069-4470-BE,1,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n145,5069-4470-BE,2,Road-650 Red. 44,No Discount,419.4589,0.00\n146,5069-4470-BE,2,Road-450 Red. 52,No Discount,874.794,0.00\n147,5069-4470-BE,2,AWC Logo Cap,No Discount,5.1865,0.00\n148,5069-4470-BE,1,Road-450 Red. 58,No Discount,874.794,0.00\n149,5069-4470-BE,3,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n150,11BA-4D19-B7,2,Mountain-100 Black. 42,No Discount,2024.994,0.00\n151,11BA-4D19-B7,2,Mountain-100 Black. 48,No Discount,2024.994,0.00\n152,11BA-4D19-B7,1,Mountain Bike Socks. L,No Discount,5.70,0.00\n153,11BA-4D19-B7,3,Mountain-100 Black. 38,No Discount,2024.994,0.00\n154,11BA-4D19-B7,4,Mountain Bike Socks. M,No Discount,5.70,0.00\n155,8E3A-4564-99,3,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n156,8E3A-4564-99,1,Road-150 Red. 56,No Discount,2146.962,0.00\n157,8E3A-4564-99,1,Road-450 Red. 52,No Discount,874.794,0.00\n158,8E3A-4564-99,1,Road-650 Black. 52,No Discount,419.4589,0.00\n159,8E3A-4564-99,2,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n160,8E3A-4564-99,4,Road-650 Red. 60,No Discount,419.4589,0.00\n161,8E3A-4564-99,2,Road-650 Black. 58,No Discount,419.4589,0.00\n162,8E3A-4564-99,1,Road-650 Red. 48,No Discount,419.4589,0.00\n163,8E3A-4564-99,5,AWC Logo Cap,No Discount,5.1865,0.00\n164,8E3A-4564-99,1,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n165,8E3A-4564-99,1,Road-450 Red. 58,No Discount,874.794,0.00\n166,8E3A-4564-99,2,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n167,FBD8-4CE4-8B,1,Road-650 Red. 60,No Discount,419.4589,0.00\n168,FBD8-4CE4-8B,2,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n169,FBD8-4CE4-8B,1,Road-650 Black. 58,No Discount,419.4589,0.00\n170,FBD8-4CE4-8B,2,ML Road Frame - Red. 48,No Discount,356.898,0.00\n171,FBD8-4CE4-8B,3,Road-650 Red. 44,No Discount,419.4589,0.00\n172,FBD8-4CE4-8B,2,Road-650 Red. 62,No Discount,419.4589,0.00\n173,FBD8-4CE4-8B,3,AWC Logo Cap,No Discount,5.1865,0.00\n174,FBD8-4CE4-8B,4,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n175,FBD8-4CE4-8B,2,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n176,FBD8-4CE4-8B,1,Road-450 Red. 44,No Discount,874.794,0.00\n177,FBD8-4CE4-8B,2,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n178,FBD8-4CE4-8B,1,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n179,FBD8-4CE4-8B,1,Road-650 Black. 52,No Discount,419.4589,0.00\n180,FBD8-4CE4-8B,2,Road-450 Red. 52,No Discount,874.794,0.00\n181,FBD8-4CE4-8B,2,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n182,FBD8-4CE4-8B,1,Road-450 Red. 58,No Discount,874.794,0.00\n183,FBD8-4CE4-8B,1,Road-450 Red. 60,No Discount,874.794,0.00\n184,FBD8-4CE4-8B,3,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n185,FBD8-4CE4-8B,1,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n186,918F-49F3-AD,1,Road-650 Red. 60,No Discount,419.4589,0.00\n187,918F-49F3-AD,2,Road-650 Black. 52,No Discount,419.4589,0.00\n188,918F-49F3-AD,2,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n189,FF1F-4DD0-98,3,Road-650 Red. 60,No Discount,419.4589,0.00\n190,FF1F-4DD0-98,2,Road-450 Red. 44,No Discount,874.794,0.00\n191,FF1F-4DD0-98,2,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n192,FF1F-4DD0-98,4,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n193,FF1F-4DD0-98,1,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n194,FF1F-4DD0-98,1,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n195,FF1F-4DD0-98,2,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n196,FF1F-4DD0-98,2,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n197,FF1F-4DD0-98,1,Road-450 Red. 52,No Discount,874.794,0.00\n198,FF1F-4DD0-98,1,Road-650 Red. 62,No Discount,419.4589,0.00\n199,FF1F-4DD0-98,2,Road-150 Red. 56,No Discount,2146.962,0.00\n200,FF1F-4DD0-98,2,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n201,FF1F-4DD0-98,3,Road-650 Black. 58,No Discount,419.4589,0.00\n202,FF1F-4DD0-98,3,AWC Logo Cap,No Discount,5.1865,0.00\n203,FF1F-4DD0-98,1,Road-650 Red. 48,No Discount,419.4589,0.00\n204,6D51-449D-B3,6,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n205,6D51-449D-B3,5,Road-650 Red. 44,No Discount,419.4589,0.00\n206,6D51-449D-B3,1,ML Road Frame - Red. 48,No Discount,356.898,0.00\n207,6D51-449D-B3,1,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n208,6D51-449D-B3,1,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n209,6D51-449D-B3,2,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n210,6D51-449D-B3,3,Road-650 Black. 52,No Discount,419.4589,0.00\n211,6D51-449D-B3,2,LL Road Frame - Red. 62,No Discount,183.9382,0.00\n212,6D51-449D-B3,3,Road-450 Red. 52,No Discount,874.794,0.00\n213,6D51-449D-B3,1,Road-650 Black. 44,No Discount,419.4589,0.00\n214,6D51-449D-B3,2,Road-650 Red. 62,No Discount,419.4589,0.00\n215,6D51-449D-B3,2,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n216,6D51-449D-B3,1,Road-150 Red. 56,No Discount,2146.962,0.00\n217,6D51-449D-B3,2,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n218,6D51-449D-B3,2,Road-650 Red. 52,No Discount,419.4589,0.00\n219,6D51-449D-B3,2,Road-650 Red. 60,No Discount,419.4589,0.00\n220,6D51-449D-B3,1,Road-450 Red. 44,No Discount,874.794,0.00\n221,6D51-449D-B3,2,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n222,6D51-449D-B3,2,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n223,6D51-449D-B3,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n224,6D51-449D-B3,2,AWC Logo Cap,No Discount,5.1865,0.00\n225,ECD4-43A8-A8,2,Road-450 Red. 52,No Discount,874.794,0.00\n226,ECD4-43A8-A8,1,Road-650 Red. 44,No Discount,419.4589,0.00\n227,ECD4-43A8-A8,2,Road-650 Red. 60,No Discount,419.4589,0.00\n228,ECD4-43A8-A8,2,Road-650 Black. 52,No Discount,419.4589,0.00\n229,ECD4-43A8-A8,1,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n230,2299-44F7-95,2,Mountain-100 Black. 42,No Discount,2024.994,0.00\n231,2299-44F7-95,2,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n232,2299-44F7-95,2,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n233,2299-44F7-95,1,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n234,2299-44F7-95,1,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n235,2299-44F7-95,2,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n236,2299-44F7-95,3,AWC Logo Cap,No Discount,5.1865,0.00\n237,2299-44F7-95,4,Mountain-100 Black. 38,No Discount,2024.994,0.00\n238,2299-44F7-95,6,Mountain-100 Black. 44,No Discount,2024.994,0.00\n239,2299-44F7-95,1,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n240,2299-44F7-95,3,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n241,2299-44F7-95,5,Mountain-100 Black. 48,No Discount,2024.994,0.00\n242,2299-44F7-95,6,Mountain Bike Socks. M,No Discount,5.70,0.00\n243,8C01-4CC0-A9,2,Road-450 Red. 58,No Discount,874.794,0.00\n244,8C01-4CC0-A9,2,Road-650 Red. 44,No Discount,419.4589,0.00\n245,8C01-4CC0-A9,1,Road-650 Red. 60,No Discount,419.4589,0.00\n246,8C01-4CC0-A9,2,Road-450 Red. 52,No Discount,874.794,0.00\n247,8C01-4CC0-A9,1,Road-650 Black. 52,No Discount,419.4589,0.00\n248,8C01-4CC0-A9,1,Road-650 Red. 48,No Discount,419.4589,0.00\n249,C519-4AB3-88,3,Road-650 Black. 58,No Discount,419.4589,0.00\n250,C519-4AB3-88,1,Road-650 Red. 48,No Discount,419.4589,0.00\n251,C519-4AB3-88,1,Road-450 Red. 58,No Discount,874.794,0.00\n252,C519-4AB3-88,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n253,FBD0-4F71-80,3,Road-450 Red. 52,No Discount,874.794,0.00\n254,FBD0-4F71-80,1,Road-650 Red. 44,No Discount,419.4589,0.00\n255,FBD0-4F71-80,1,Road-650 Black. 52,No Discount,419.4589,0.00\n256,61FA-475A-AC,1,Road-650 Black. 44,No Discount,419.4589,0.00\n257,61FA-475A-AC,2,Road-650 Black. 58,No Discount,419.4589,0.00\n258,16F4-456B-9A,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n259,16F4-456B-9A,2,Road-650 Red. 60,No Discount,419.4589,0.00\n260,16F4-456B-9A,3,Road-650 Red. 44,No Discount,419.4589,0.00\n261,16F4-456B-9A,1,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n262,16F4-456B-9A,1,Road-650 Red. 48,No Discount,419.4589,0.00\n263,16F4-456B-9A,2,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n264,16F4-456B-9A,2,Road-450 Red. 58,No Discount,874.794,0.00\n265,16F4-456B-9A,2,Road-450 Red. 52,No Discount,874.794,0.00\n266,16F4-456B-9A,3,Road-650 Black. 58,No Discount,419.4589,0.00\n267,16F4-456B-9A,1,Road-650 Black. 52,No Discount,419.4589,0.00\n268,16F4-456B-9A,2,Road-150 Red. 56,No Discount,2146.962,0.00\n269,DCD9-4C9A-AB,3,Road-650 Red. 52,No Discount,419.4589,0.00\n270,DCD9-4C9A-AB,2,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n271,DCD9-4C9A-AB,2,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n272,DCD9-4C9A-AB,1,Road-150 Red. 56,No Discount,2146.962,0.00\n273,DCD9-4C9A-AB,2,Road-450 Red. 60,No Discount,874.794,0.00\n274,DCD9-4C9A-AB,4,Road-650 Black. 60,No Discount,419.4589,0.00\n275,DCD9-4C9A-AB,2,Road-650 Black. 52,No Discount,419.4589,0.00\n276,DCD9-4C9A-AB,7,Road-650 Red. 60,No Discount,419.4589,0.00\n277,DCD9-4C9A-AB,3,LL Road Frame - Red. 48,No Discount,183.9382,0.00\n278,DCD9-4C9A-AB,1,LL Road Frame - Black. 58,No Discount,178.5808,0.00\n279,DCD9-4C9A-AB,6,Road-650 Red. 48,No Discount,419.4589,0.00\n280,DCD9-4C9A-AB,2,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n281,DCD9-4C9A-AB,2,LL Road Frame - Red. 62,No Discount,183.9382,0.00\n282,DCD9-4C9A-AB,2,ML Road Frame - Red. 48,No Discount,356.898,0.00\n283,DCD9-4C9A-AB,5,Road-650 Black. 58,No Discount,419.4589,0.00\n284,DCD9-4C9A-AB,2,Road-650 Black. 44,No Discount,419.4589,0.00\n285,DCD9-4C9A-AB,2,Road-650 Red. 62,No Discount,419.4589,0.00\n286,DCD9-4C9A-AB,3,Road-450 Red. 52,No Discount,874.794,0.00\n287,DCD9-4C9A-AB,2,Road-150 Red. 62,No Discount,2146.962,0.00\n288,DCD9-4C9A-AB,9,Road-650 Red. 44,No Discount,419.4589,0.00\n289,DCD9-4C9A-AB,4,Road-450 Red. 58,No Discount,874.794,0.00\n290,7A3C-492F-A6,1,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n291,7A3C-492F-A6,1,Road-650 Black. 52,No Discount,419.4589,0.00\n292,7A3C-492F-A6,2,AWC Logo Cap,No Discount,5.1865,0.00\n293,7A3C-492F-A6,2,Road-650 Red. 60,No Discount,419.4589,0.00\n294,272B-4319-9E,1,Road-450 Red. 52,No Discount,874.794,0.00\n295,BFA9-470E-B4,5,Road-650 Black. 52,No Discount,419.4589,0.00\n296,BFA9-470E-B4,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n297,BFA9-470E-B4,8,Road-450 Red. 58,No Discount,874.794,0.00\n298,BFA9-470E-B4,2,LL Road Frame - Red. 62,No Discount,183.9382,0.00\n299,BFA9-470E-B4,10,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n300,BFA9-470E-B4,1,Road-650 Black. 44,No Discount,419.4589,0.00\n301,BFA9-470E-B4,4,Road-450 Red. 44,No Discount,874.794,0.00\n302,BFA9-470E-B4,2,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n303,BFA9-470E-B4,8,Road-450 Red. 52,No Discount,874.794,0.00\n304,BFA9-470E-B4,3,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n305,BFA9-470E-B4,6,Road-650 Red. 44,No Discount,419.4589,0.00\n306,BFA9-470E-B4,3,ML Road Frame - Red. 48,No Discount,356.898,0.00\n307,BFA9-470E-B4,6,AWC Logo Cap,No Discount,5.1865,0.00\n308,BFA9-470E-B4,4,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n309,BFA9-470E-B4,7,Road-650 Red. 60,No Discount,419.4589,0.00\n310,BFA9-470E-B4,2,Road-450 Red. 60,No Discount,874.794,0.00\n311,BFA9-470E-B4,4,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n312,BFA9-470E-B4,2,Road-650 Black. 58,No Discount,419.4589,0.00\n313,BFA9-470E-B4,1,Road-650 Red. 52,No Discount,419.4589,0.00\n314,BFA9-470E-B4,2,Road-150 Red. 56,No Discount,2146.962,0.00\n315,BFA9-470E-B4,1,Road-650 Black. 60,No Discount,419.4589,0.00\n316,BFA9-470E-B4,1,LL Road Frame - Black. 58,No Discount,178.5808,0.00\n317,BFA9-470E-B4,3,Road-650 Red. 62,No Discount,419.4589,0.00\n318,BFA9-470E-B4,3,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n319,BFA9-470E-B4,1,Road-650 Red. 48,No Discount,419.4589,0.00\n320,BFA9-470E-B4,2,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n321,BFA9-470E-B4,4,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n322,BFA9-470E-B4,2,LL Road Frame - Red. 48,No Discount,183.9382,0.00\n323,EC62-4BB3-9B,3,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n324,EC62-4BB3-9B,1,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n325,EC62-4BB3-9B,6,Mountain Bike Socks. M,No Discount,5.70,0.00\n326,EC62-4BB3-9B,2,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n327,EC62-4BB3-9B,3,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n328,EC62-4BB3-9B,2,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n329,EC62-4BB3-9B,1,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n330,EC62-4BB3-9B,3,Mountain-100 Black. 44,No Discount,2024.994,0.00\n331,EC62-4BB3-9B,1,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n332,EC62-4BB3-9B,1,Mountain-100 Black. 48,No Discount,2024.994,0.00\n333,EC3D-48E0-A6,3,Mountain-100 Black. 42,No Discount,2024.994,0.00\n334,EC3D-48E0-A6,3,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n335,EC3D-48E0-A6,2,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n336,EC3D-48E0-A6,1,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n337,EC3D-48E0-A6,3,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n338,EC3D-48E0-A6,1,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n339,EC3D-48E0-A6,1,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n340,EC3D-48E0-A6,1,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n341,EC3D-48E0-A6,2,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n342,EC3D-48E0-A6,1,AWC Logo Cap,No Discount,5.1865,0.00\n343,EC3D-48E0-A6,5,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n344,A89C-4D25-B9,2,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n345,A89C-4D25-B9,2,HL Mountain Frame - Silver. 38,No Discount,722.5949,0.00\n346,A89C-4D25-B9,1,HL Mountain Frame - Black. 38,No Discount,714.7043,0.00\n347,A89C-4D25-B9,1,HL Mountain Frame - Silver. 46,No Discount,722.5949,0.00\n348,A89C-4D25-B9,5,Mountain-100 Black. 44,No Discount,2024.994,0.00\n349,A89C-4D25-B9,6,Mountain-100 Black. 48,No Discount,2024.994,0.00\n350,A89C-4D25-B9,2,Mountain Bike Socks. M,No Discount,5.70,0.00\n351,A89C-4D25-B9,5,Mountain-100 Black. 38,No Discount,2024.994,0.00\n352,50C1-41FA-BE,1,Road-650 Red. 44,No Discount,419.4589,0.00\n353,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n354,NULL,1,Mountain-100 Silver. 44,No Discount,3399.99,0.00\n355,NULL,1,Mountain-100 Silver. 44,No Discount,3399.99,0.00\n356,NULL,1,Road-650 Black. 62,No Discount,699.0982,0.00\n357,NULL,1,Mountain-100 Silver. 44,No Discount,3399.99,0.00\n358,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n359,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n360,NULL,1,Mountain-100 Black. 48,No Discount,3374.99,0.00\n361,NULL,1,Mountain-100 Silver. 38,No Discount,3399.99,0.00\n362,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n363,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n364,NULL,1,Road-650 Red. 52,No Discount,699.0982,0.00\n365,NULL,1,Road-150 Red. 52,No Discount,3578.27,0.00\n366,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n367,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n368,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n369,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n370,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n371,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n372,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n373,NULL,1,Road-650 Black. 62,No Discount,699.0982,0.00\n374,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n375,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n376,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n377,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n378,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n379,NULL,1,Road-650 Black. 58,No Discount,699.0982,0.00\n380,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n381,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n382,NULL,1,Road-650 Black. 58,No Discount,699.0982,0.00\n383,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n384,NULL,1,Road-150 Red. 52,No Discount,3578.27,0.00\n385,NULL,1,Mountain-100 Silver. 44,No Discount,3399.99,0.00\n386,NULL,1,Mountain-100 Silver. 44,No Discount,3399.99,0.00\n387,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n388,NULL,1,Mountain-100 Black. 44,No Discount,3374.99,0.00\n389,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n390,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n391,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n392,NULL,1,Mountain-100 Silver. 44,No Discount,3399.99,0.00\n393,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n394,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n395,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n396,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n397,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n398,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n399,NULL,1,Mountain-100 Silver. 48,No Discount,3399.99,0.00\n400,NULL,1,Road-150 Red. 52,No Discount,3578.27,0.00\n401,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n402,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n403,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n404,NULL,1,Road-150 Red. 52,No Discount,3578.27,0.00\n405,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n406,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n407,NULL,1,Road-150 Red. 52,No Discount,3578.27,0.00\n408,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n409,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n410,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n411,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n412,NULL,1,Road-650 Black. 58,No Discount,699.0982,0.00\n413,NULL,1,Mountain-100 Black. 44,No Discount,3374.99,0.00\n414,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n415,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n416,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n417,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n418,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n419,NULL,1,Road-150 Red. 52,No Discount,3578.27,0.00\n420,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n421,NULL,1,Mountain-100 Silver. 44,No Discount,3399.99,0.00\n422,NULL,1,Road-150 Red. 52,No Discount,3578.27,0.00\n423,NULL,1,Mountain-100 Black. 44,No Discount,3374.99,0.00\n424,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n425,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n426,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n427,NULL,1,Road-650 Red. 52,No Discount,699.0982,0.00\n428,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n429,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n430,NULL,1,Road-150 Red. 52,No Discount,3578.27,0.00\n431,NULL,1,Mountain-100 Silver. 48,No Discount,3399.99,0.00\n432,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n433,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n434,NULL,1,Mountain-100 Silver. 42,No Discount,3399.99,0.00\n435,NULL,1,Road-650 Red. 44,No Discount,699.0982,0.00\n436,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n437,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n438,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n439,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n440,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n441,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n442,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n443,NULL,1,Mountain-100 Silver. 38,No Discount,3399.99,0.00\n444,NULL,1,Mountain-100 Black. 48,No Discount,3374.99,0.00\n445,NULL,1,Mountain-100 Black. 48,No Discount,3374.99,0.00\n446,NULL,1,Mountain-100 Silver. 38,No Discount,3399.99,0.00\n447,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n448,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n449,NULL,1,Mountain-100 Silver. 38,No Discount,3399.99,0.00\n450,NULL,1,Mountain-100 Silver. 48,No Discount,3399.99,0.00\n451,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n452,NULL,1,Road-650 Black. 52,No Discount,699.0982,0.00\n453,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n454,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n455,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n456,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n457,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n458,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n459,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n460,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n461,NULL,1,Road-650 Red. 48,No Discount,699.0982,0.00\n462,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n463,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n464,NULL,1,Road-150 Red. 52,No Discount,3578.27,0.00\n465,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n466,NULL,1,Mountain-100 Silver. 42,No Discount,3399.99,0.00\n467,NULL,1,Mountain-100 Silver. 44,No Discount,3399.99,0.00\n468,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n469,NULL,1,Mountain-100 Black. 44,No Discount,3374.99,0.00\n470,NULL,1,Mountain-100 Black. 44,No Discount,3374.99,0.00\n471,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n472,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n473,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n474,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n475,NULL,1,Mountain-100 Silver. 44,No Discount,3399.99,0.00\n476,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n477,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n478,NULL,1,Road-150 Red. 52,No Discount,3578.27,0.00\n479,NULL,1,Road-650 Black. 52,No Discount,699.0982,0.00\n480,NULL,1,Road-650 Black. 44,No Discount,699.0982,0.00\n481,NULL,1,Road-150 Red. 52,No Discount,3578.27,0.00\n482,NULL,1,Mountain-100 Black. 38,No Discount,3374.99,0.00\n483,NULL,1,Road-650 Black. 44,No Discount,699.0982,0.00\n484,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n485,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n486,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n487,NULL,1,Mountain-100 Black. 42,No Discount,3374.99,0.00\n488,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n489,NULL,1,Road-150 Red. 62,No Discount,3578.27,0.00\n490,NULL,1,Mountain-100 Black. 38,No Discount,3374.99,0.00\n491,NULL,1,Mountain-100 Black. 38,No Discount,3374.99,0.00\n492,NULL,1,Road-650 Red. 62,No Discount,699.0982,0.00\n493,NULL,1,Mountain-100 Black. 44,No Discount,3374.99,0.00\n494,NULL,1,Road-150 Red. 52,No Discount,3578.27,0.00\n495,NULL,1,Road-150 Red. 44,No Discount,3578.27,0.00\n496,NULL,1,Road-650 Red. 44,No Discount,699.0982,0.00\n497,NULL,1,Road-150 Red. 56,No Discount,3578.27,0.00\n498,NULL,1,Road-150 Red. 48,No Discount,3578.27,0.00\n499,AEB6-4356-80,2,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n500,AEB6-4356-80,2,Mountain-100 Black. 48,No Discount,2024.994,0.00\n501,AEB6-4356-80,2,HL Mountain Frame - Silver. 46,No Discount,722.5949,0.00\n502,AEB6-4356-80,5,Mountain-100 Black. 44,No Discount,2024.994,0.00\n503,AEB6-4356-80,2,HL Mountain Frame - Silver. 38,No Discount,722.5949,0.00\n504,AEB6-4356-80,1,HL Mountain Frame - Silver. 48,No Discount,818.70,0.00\n505,AEB6-4356-80,1,HL Mountain Frame - Black. 48,No Discount,809.76,0.00\n506,AEB6-4356-80,2,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n507,AEB6-4356-80,2,Mountain Bike Socks. M,No Discount,5.70,0.00\n508,AEB6-4356-80,3,Mountain-100 Black. 42,No Discount,2024.994,0.00\n509,15C3-40C5-AC,4,Mountain-100 Black. 38,No Discount,2024.994,0.00\n510,15C3-40C5-AC,2,Mountain-100 Black. 42,No Discount,2024.994,0.00\n511,15C3-40C5-AC,3,Mountain-100 Black. 44,No Discount,2024.994,0.00\n512,15C3-40C5-AC,1,Mountain-100 Black. 48,No Discount,2024.994,0.00\n513,2E65-4D8B-9A,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n514,2E65-4D8B-9A,3,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n515,2E65-4D8B-9A,1,Road-650 Black. 52,No Discount,419.4589,0.00\n516,2E65-4D8B-9A,2,Road-650 Red. 48,No Discount,419.4589,0.00\n517,2E65-4D8B-9A,2,Road-650 Red. 62,No Discount,419.4589,0.00\n518,2E65-4D8B-9A,1,Road-450 Red. 58,No Discount,874.794,0.00\n519,2E65-4D8B-9A,2,Road-650 Black. 58,No Discount,419.4589,0.00\n520,2E65-4D8B-9A,2,Road-150 Red. 56,No Discount,2146.962,0.00\n521,2E65-4D8B-9A,1,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n522,2E65-4D8B-9A,4,AWC Logo Cap,No Discount,5.1865,0.00\n523,A787-4CD2-A0,3,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n524,A787-4CD2-A0,1,AWC Logo Cap,No Discount,5.1865,0.00\n525,A787-4CD2-A0,1,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n526,A787-4CD2-A0,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n527,4E09-4638-82,1,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n528,4E09-4638-82,1,AWC Logo Cap,No Discount,5.1865,0.00\n529,4E09-4638-82,1,Road-450 Red. 52,No Discount,874.794,0.00\n530,FB94-4C38-B1,1,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n531,FB94-4C38-B1,1,Mountain-100 Black. 48,No Discount,2024.994,0.00\n532,FB94-4C38-B1,1,Mountain-100 Black. 38,No Discount,2024.994,0.00\n533,FB94-4C38-B1,4,Mountain-100 Black. 42,No Discount,2024.994,0.00\n534,FB94-4C38-B1,2,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n535,D0B8-4476-BA,2,Mountain-100 Black. 42,No Discount,2024.994,0.00\n536,D0B8-4476-BA,1,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n537,D0B8-4476-BA,2,Mountain-100 Black. 44,No Discount,2024.994,0.00\n538,D0B8-4476-BA,2,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n539,D0B8-4476-BA,1,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n540,D0B8-4476-BA,1,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n541,D0B8-4476-BA,4,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n542,D0B8-4476-BA,1,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n543,D0B8-4476-BA,1,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n544,D0B8-4476-BA,2,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n545,D0B8-4476-BA,1,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n546,EBA6-4C6F-86,1,Road-650 Black. 58,No Discount,419.4589,0.00\n547,EBA6-4C6F-86,1,Road-450 Red. 60,No Discount,874.794,0.00\n548,EBA6-4C6F-86,1,Road-650 Red. 62,No Discount,419.4589,0.00\n549,EBA6-4C6F-86,2,Road-650 Red. 44,No Discount,419.4589,0.00\n550,EBA6-4C6F-86,1,Road-150 Red. 56,No Discount,2146.962,0.00\n551,EBA6-4C6F-86,3,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n552,EBA6-4C6F-86,1,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n553,EBA6-4C6F-86,3,Road-450 Red. 52,No Discount,874.794,0.00\n554,EBA6-4C6F-86,1,Road-450 Red. 44,No Discount,874.794,0.00\n555,EBA6-4C6F-86,3,ML Road Frame - Red. 48,No Discount,356.898,0.00\n556,EBA6-4C6F-86,1,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n557,56EA-48EB-96,2,Road-650 Red. 62,No Discount,419.4589,0.00\n558,56EA-48EB-96,1,Road-650 Red. 60,No Discount,419.4589,0.00\n559,56EA-48EB-96,1,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n560,56EA-48EB-96,3,Road-650 Black. 52,No Discount,419.4589,0.00\n561,56EA-48EB-96,1,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n562,56EA-48EB-96,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n563,56EA-48EB-96,1,Road-450 Red. 58,No Discount,874.794,0.00\n564,56EA-48EB-96,3,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n565,56EA-48EB-96,1,Road-150 Red. 56,No Discount,2146.962,0.00\n566,56EA-48EB-96,1,Road-650 Black. 58,No Discount,419.4589,0.00\n567,56EA-48EB-96,1,AWC Logo Cap,No Discount,5.1865,0.00\n568,56EA-48EB-96,3,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n569,C745-45C2-A1,1,Mountain-100 Black. 42,No Discount,2024.994,0.00\n570,434D-4DAA-96,2,Mountain-100 Black. 44,No Discount,2024.994,0.00\n571,434D-4DAA-96,1,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n572,434D-4DAA-96,1,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n573,434D-4DAA-96,4,Mountain-100 Black. 42,No Discount,2024.994,0.00\n574,434D-4DAA-96,2,Mountain-100 Black. 38,No Discount,2024.994,0.00\n575,434D-4DAA-96,3,Mountain-100 Black. 48,No Discount,2024.994,0.00\n576,D379-445F-92,2,Road-450 Red. 52,No Discount,874.794,0.00\n577,FB88-4B92-82,2,Road-650 Black. 58,No Discount,419.4589,0.00\n578,FB88-4B92-82,2,Road-650 Red. 60,No Discount,419.4589,0.00\n579,FB88-4B92-82,1,Road-150 Red. 56,No Discount,2146.962,0.00\n580,FB88-4B92-82,4,Road-650 Red. 62,No Discount,419.4589,0.00\n581,FB88-4B92-82,1,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n582,FB88-4B92-82,3,Road-650 Red. 44,No Discount,419.4589,0.00\n583,FB88-4B92-82,2,ML Road Frame - Red. 48,No Discount,356.898,0.00\n584,FB88-4B92-82,1,Road-650 Black. 60,No Discount,419.4589,0.00\n585,FB88-4B92-82,1,LL Road Frame - Red. 48,No Discount,183.9382,0.00\n586,FB88-4B92-82,2,Road-650 Black. 52,No Discount,419.4589,0.00\n587,FB88-4B92-82,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n588,FB88-4B92-82,1,Road-450 Red. 60,No Discount,874.794,0.00\n589,FB88-4B92-82,2,Road-650 Black. 44,No Discount,419.4589,0.00\n590,745E-4F74-BC,2,Mountain Bike Socks. M,No Discount,5.70,0.00\n591,745E-4F74-BC,1,Mountain-100 Black. 44,No Discount,2024.994,0.00\n592,0CD4-4091-9B,1,Road-650 Red. 60,No Discount,419.4589,0.00\n593,0CD4-4091-9B,1,Road-650 Black. 58,No Discount,419.4589,0.00\n594,0CD4-4091-9B,2,Road-650 Red. 44,No Discount,419.4589,0.00\n595,0CD4-4091-9B,3,Road-450 Red. 52,No Discount,874.794,0.00\n596,0CD4-4091-9B,1,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n597,0CD4-4091-9B,3,AWC Logo Cap,No Discount,5.1865,0.00\n598,0CD4-4091-9B,1,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n599,0CD4-4091-9B,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n600,0CD4-4091-9B,2,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n601,0CD4-4091-9B,1,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n602,0CD4-4091-9B,2,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n603,0CD4-4091-9B,1,Road-650 Red. 48,No Discount,419.4589,0.00\n604,0CD4-4091-9B,2,Road-450 Red. 58,No Discount,874.794,0.00\n605,0CD4-4091-9B,2,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n606,8FFA-4339-B7,2,Road-650 Red. 44,No Discount,419.4589,0.00\n607,8FFA-4339-B7,2,Road-650 Red. 62,No Discount,419.4589,0.00\n608,8FFA-4339-B7,5,Road-650 Black. 52,No Discount,419.4589,0.00\n609,8FFA-4339-B7,1,Road-650 Black. 58,No Discount,419.4589,0.00\n610,8FFA-4339-B7,2,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n611,8FFA-4339-B7,3,Road-650 Red. 48,No Discount,419.4589,0.00\n612,8FFA-4339-B7,2,Road-450 Red. 58,No Discount,874.794,0.00\n613,8FFA-4339-B7,1,LL Road Frame - Black. 58,No Discount,178.5808,0.00\n614,8FFA-4339-B7,2,Road-150 Red. 56,No Discount,2146.962,0.00\n615,8FFA-4339-B7,1,LL Road Frame - Red. 48,No Discount,183.9382,0.00\n616,8FFA-4339-B7,1,Road-650 Black. 60,No Discount,419.4589,0.00\n617,8FFA-4339-B7,1,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n618,8FFA-4339-B7,1,Road-450 Red. 44,No Discount,874.794,0.00\n619,2C16-4AA6-B4,1,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n620,2C16-4AA6-B4,1,Road-650 Red. 44,No Discount,419.4589,0.00\n621,2C16-4AA6-B4,3,Road-450 Red. 52,No Discount,874.794,0.00\n622,2C16-4AA6-B4,2,Road-650 Red. 60,No Discount,419.4589,0.00\n623,E57D-4B4B-BF,2,Road-650 Red. 62,No Discount,419.4589,0.00\n624,E57D-4B4B-BF,1,Road-650 Black. 52,No Discount,419.4589,0.00\n625,E57D-4B4B-BF,2,Road-450 Red. 52,No Discount,874.794,0.00\n626,E57D-4B4B-BF,2,Road-650 Black. 58,No Discount,419.4589,0.00\n627,E57D-4B4B-BF,1,ML Road Frame - Red. 48,No Discount,356.898,0.00\n628,E57D-4B4B-BF,1,Road-650 Red. 44,No Discount,419.4589,0.00\n629,E57D-4B4B-BF,1,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n630,E57D-4B4B-BF,1,Road-650 Black. 44,No Discount,419.4589,0.00\n631,E57D-4B4B-BF,2,Road-150 Red. 56,No Discount,2146.962,0.00\n632,E57D-4B4B-BF,1,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n633,E57D-4B4B-BF,1,Road-650 Red. 48,No Discount,419.4589,0.00\n634,E57D-4B4B-BF,1,Road-450 Red. 44,No Discount,874.794,0.00\n635,0CC0-4166-9E,1,ML Road Frame - Red. 48,No Discount,356.898,0.00\n636,0CC0-4166-9E,3,Road-650 Red. 52,No Discount,419.4589,0.00\n637,0CC0-4166-9E,5,Road-650 Black. 52,No Discount,419.4589,0.00\n638,0CC0-4166-9E,2,Road-650 Black. 44,No Discount,419.4589,0.00\n639,0CC0-4166-9E,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n640,0CC0-4166-9E,9,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n641,0CC0-4166-9E,4,Road-650 Black. 58,No Discount,419.4589,0.00\n642,0CC0-4166-9E,1,Road-150 Red. 56,No Discount,2146.962,0.00\n643,0CC0-4166-9E,2,ML Road Frame - Red. 52,No Discount,356.898,0.00\n644,0CC0-4166-9E,2,LL Road Frame - Red. 62,No Discount,183.9382,0.00\n645,0CC0-4166-9E,2,Road-650 Black. 60,No Discount,419.4589,0.00\n646,0CC0-4166-9E,4,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n647,0CC0-4166-9E,3,Road-450 Red. 58,No Discount,874.794,0.00\n648,0CC0-4166-9E,2,Road-450 Red. 44,No Discount,874.794,0.00\n649,0CC0-4166-9E,2,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n650,0CC0-4166-9E,4,Road-650 Red. 60,No Discount,419.4589,0.00\n651,0CC0-4166-9E,2,Road-450 Red. 60,No Discount,874.794,0.00\n652,0CC0-4166-9E,6,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n653,0CC0-4166-9E,2,Road-650 Red. 48,No Discount,419.4589,0.00\n654,0CC0-4166-9E,2,Road-450 Red. 52,No Discount,874.794,0.00\n655,0CC0-4166-9E,9,AWC Logo Cap,No Discount,5.1865,0.00\n656,0CC0-4166-9E,2,Road-650 Red. 62,No Discount,419.4589,0.00\n657,0CC0-4166-9E,4,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n658,0CC0-4166-9E,1,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n659,0CC0-4166-9E,3,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n660,0CC0-4166-9E,2,LL Road Frame - Black. 58,No Discount,178.5808,0.00\n661,0CC0-4166-9E,3,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n662,68A2-4B5C-A7,4,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n663,68A2-4B5C-A7,1,HL Mountain Frame - Silver. 48,No Discount,818.70,0.00\n664,68A2-4B5C-A7,3,Mountain-100 Black. 44,No Discount,2024.994,0.00\n665,68A2-4B5C-A7,4,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n666,68A2-4B5C-A7,2,HL Mountain Frame - Black. 38,No Discount,714.7043,0.00\n667,68A2-4B5C-A7,2,HL Mountain Frame - Silver. 38,No Discount,722.5949,0.00\n668,68A2-4B5C-A7,2,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n669,68A2-4B5C-A7,1,HL Mountain Frame - Black. 48,No Discount,809.76,0.00\n670,68A2-4B5C-A7,4,Mountain Bike Socks. M,No Discount,5.70,0.00\n671,D0C0-435D-A2,1,Road-450 Red. 52,No Discount,874.794,0.00\n672,D0C0-435D-A2,1,AWC Logo Cap,No Discount,5.1865,0.00\n673,D0C0-435D-A2,1,Road-650 Red. 60,No Discount,419.4589,0.00\n674,D0C0-435D-A2,1,Road-650 Red. 44,No Discount,419.4589,0.00\n675,B5D8-4B03-96,5,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n676,B5D8-4B03-96,1,HL Mountain Frame - Black. 38,No Discount,714.7043,0.00\n677,B5D8-4B03-96,2,HL Mountain Frame - Silver. 48,No Discount,818.70,0.00\n678,B5D8-4B03-96,2,Mountain-100 Black. 48,No Discount,2024.994,0.00\n679,B5D8-4B03-96,4,Mountain-100 Black. 42,No Discount,2024.994,0.00\n680,B5D8-4B03-96,1,HL Mountain Frame - Silver. 38,No Discount,722.5949,0.00\n681,B5D8-4B03-96,2,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n682,B5D8-4B03-96,4,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n683,B5D8-4B03-96,1,HL Mountain Frame - Black. 48,No Discount,809.76,0.00\n684,071C-4913-89,1,Road-450 Red. 52,No Discount,874.794,0.00\n685,071C-4913-89,2,Road-650 Black. 52,No Discount,419.4589,0.00\n686,071C-4913-89,1,Road-150 Red. 56,No Discount,2146.962,0.00\n687,071C-4913-89,4,Road-650 Red. 60,No Discount,419.4589,0.00\n688,071C-4913-89,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n689,071C-4913-89,4,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n690,071C-4913-89,1,Road-650 Red. 44,No Discount,419.4589,0.00\n691,071C-4913-89,2,Road-650 Red. 48,No Discount,419.4589,0.00\n692,071C-4913-89,5,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n693,071C-4913-89,1,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n694,071C-4913-89,3,AWC Logo Cap,No Discount,5.1865,0.00\n695,071C-4913-89,3,Road-650 Black. 58,No Discount,419.4589,0.00\n696,071C-4913-89,3,Road-650 Red. 62,No Discount,419.4589,0.00\n697,071C-4913-89,3,Road-450 Red. 58,No Discount,874.794,0.00\n698,B6E8-4721-85,1,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n699,B6E8-4721-85,1,Mountain-100 Black. 44,No Discount,2024.994,0.00\n700,B6E8-4721-85,2,Mountain Bike Socks. M,No Discount,5.70,0.00\n701,061F-4449-BE,1,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n702,061F-4449-BE,1,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n703,061F-4449-BE,2,Mountain-100 Black. 42,No Discount,2024.994,0.00\n704,061F-4449-BE,2,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n705,061F-4449-BE,2,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n706,061F-4449-BE,2,Mountain Bike Socks. M,No Discount,5.70,0.00\n707,061F-4449-BE,3,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n708,061F-4449-BE,4,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n709,061F-4449-BE,2,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n710,061F-4449-BE,1,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n711,061F-4449-BE,2,Mountain-100 Black. 48,No Discount,2024.994,0.00\n712,061F-4449-BE,4,AWC Logo Cap,No Discount,5.1865,0.00\n713,061F-4449-BE,2,HL Mountain Frame - Black. 42,No Discount,714.7043,0.00\n714,061F-4449-BE,1,HL Mountain Frame - Silver. 38,No Discount,722.5949,0.00\n715,061F-4449-BE,3,HL Mountain Frame - Silver. 46,No Discount,722.5949,0.00\n716,061F-4449-BE,2,HL Mountain Frame - Silver. 48,No Discount,818.70,0.00\n717,061F-4449-BE,2,Mountain-100 Black. 44,No Discount,2024.994,0.00\n718,061F-4449-BE,1,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n719,5E0C-45B4-9D,1,Road-150 Red. 62,No Discount,2146.962,0.00\n720,96FA-4DF1-81,1,HL Mountain Frame - Black. 38,No Discount,714.7043,0.00\n721,96FA-4DF1-81,5,Mountain-100 Black. 38,No Discount,2024.994,0.00\n722,96FA-4DF1-81,2,Mountain-100 Black. 44,No Discount,2024.994,0.00\n723,96FA-4DF1-81,2,HL Mountain Frame - Black. 48,No Discount,809.76,0.00\n724,96FA-4DF1-81,5,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n725,96FA-4DF1-81,4,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n726,96FA-4DF1-81,1,HL Mountain Frame - Black. 42,No Discount,714.7043,0.00\n727,96FA-4DF1-81,1,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n728,96FA-4DF1-81,5,Mountain-100 Black. 48,No Discount,2024.994,0.00\n729,96FA-4DF1-81,2,HL Mountain Frame - Silver. 46,No Discount,722.5949,0.00\n730,1722-46CA-96,3,Road-650 Red. 60,No Discount,419.4589,0.00\n731,1722-46CA-96,2,Road-650 Red. 44,No Discount,419.4589,0.00\n732,1722-46CA-96,3,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n733,1722-46CA-96,3,Road-650 Black. 52,No Discount,419.4589,0.00\n734,1722-46CA-96,1,Road-450 Red. 52,No Discount,874.794,0.00\n735,01F1-4AD5-A5,1,AWC Logo Cap,No Discount,5.1865,0.00\n736,01F1-4AD5-A5,1,Road-650 Red. 62,No Discount,419.4589,0.00\n737,01F1-4AD5-A5,2,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n738,01F1-4AD5-A5,2,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n739,01F1-4AD5-A5,1,Road-450 Red. 52,No Discount,874.794,0.00\n740,01F1-4AD5-A5,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n741,01F1-4AD5-A5,1,Road-650 Red. 44,No Discount,419.4589,0.00\n742,01F1-4AD5-A5,2,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n743,01F1-4AD5-A5,3,Road-450 Red. 58,No Discount,874.794,0.00\n744,01F1-4AD5-A5,1,Road-150 Red. 56,No Discount,2146.962,0.00\n745,01F1-4AD5-A5,4,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n746,01F1-4AD5-A5,2,Road-650 Red. 60,No Discount,419.4589,0.00\n747,01F1-4AD5-A5,3,Road-650 Black. 52,No Discount,419.4589,0.00\n748,01F1-4AD5-A5,4,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n749,52FF-45CD-9B,1,Road-650 Red. 48,No Discount,419.4589,0.00\n750,52FF-45CD-9B,1,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n751,52FF-45CD-9B,3,Road-450 Red. 52,No Discount,874.794,0.00\n752,52FF-45CD-9B,2,Road-450 Red. 44,No Discount,874.794,0.00\n753,52FF-45CD-9B,1,Road-650 Black. 58,No Discount,419.4589,0.00\n754,52FF-45CD-9B,2,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n755,52FF-45CD-9B,4,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n756,52FF-45CD-9B,2,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n757,52FF-45CD-9B,1,ML Road Frame - Red. 48,No Discount,356.898,0.00\n758,52FF-45CD-9B,1,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n759,52FF-45CD-9B,1,Road-150 Red. 56,No Discount,2146.962,0.00\n760,52FF-45CD-9B,2,Road-450 Red. 58,No Discount,874.794,0.00\n761,52FF-45CD-9B,1,Road-450 Red. 60,No Discount,874.794,0.00\n762,52FF-45CD-9B,4,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n763,52FF-45CD-9B,1,Road-650 Red. 60,No Discount,419.4589,0.00\n764,52FF-45CD-9B,4,AWC Logo Cap,No Discount,5.1865,0.00\n765,494C-48D2-BD,6,Road-650 Black. 52,No Discount,419.4589,0.00\n766,494C-48D2-BD,2,Road-650 Red. 52,No Discount,419.4589,0.00\n767,494C-48D2-BD,2,Road-150 Red. 62,No Discount,2146.962,0.00\n768,494C-48D2-BD,5,LL Road Frame - Red. 48,No Discount,183.9382,0.00\n769,494C-48D2-BD,5,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n770,494C-48D2-BD,1,Road-450 Red. 60,No Discount,874.794,0.00\n771,494C-48D2-BD,1,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n772,494C-48D2-BD,3,Road-650 Black. 60,No Discount,419.4589,0.00\n773,494C-48D2-BD,3,LL Road Frame - Black. 58,No Discount,178.5808,0.00\n774,494C-48D2-BD,5,Road-450 Red. 52,No Discount,874.794,0.00\n775,494C-48D2-BD,5,Road-650 Red. 60,No Discount,419.4589,0.00\n776,494C-48D2-BD,3,ML Road Frame - Red. 52,No Discount,356.898,0.00\n777,494C-48D2-BD,2,Road-650 Black. 44,No Discount,419.4589,0.00\n778,494C-48D2-BD,1,Road-450 Red. 44,No Discount,874.794,0.00\n779,494C-48D2-BD,5,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n780,494C-48D2-BD,1,Road-650 Black. 58,No Discount,419.4589,0.00\n781,494C-48D2-BD,2,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n782,494C-48D2-BD,6,Road-450 Red. 58,No Discount,874.794,0.00\n783,494C-48D2-BD,3,LL Road Frame - Red. 62,No Discount,183.9382,0.00\n784,494C-48D2-BD,6,Road-650 Red. 62,No Discount,419.4589,0.00\n785,494C-48D2-BD,5,Road-650 Red. 48,No Discount,419.4589,0.00\n786,494C-48D2-BD,1,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n787,494C-48D2-BD,5,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n788,494C-48D2-BD,1,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n789,494C-48D2-BD,4,Road-650 Red. 44,No Discount,419.4589,0.00\n790,494C-48D2-BD,2,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n791,494C-48D2-BD,2,Road-150 Red. 56,No Discount,2146.962,0.00\n792,494C-48D2-BD,6,ML Road Frame - Red. 48,No Discount,356.898,0.00\n793,190B-4F56-9E,1,Road-650 Red. 48,No Discount,419.4589,0.00\n794,CE1F-4E31-89,6,Mountain-100 Black. 48,No Discount,2024.994,0.00\n795,CE1F-4E31-89,2,HL Mountain Frame - Black. 38,No Discount,714.7043,0.00\n796,CE1F-4E31-89,1,HL Mountain Frame - Silver. 48,No Discount,818.70,0.00\n797,CE1F-4E31-89,2,Mountain Bike Socks. M,No Discount,5.70,0.00\n798,CE1F-4E31-89,2,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n799,CE1F-4E31-89,7,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n800,CE1F-4E31-89,6,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n801,CE1F-4E31-89,2,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n802,CE1F-4E31-89,5,HL Mountain Frame - Silver. 38,No Discount,722.5949,0.00\n803,CE1F-4E31-89,12,Mountain-100 Silver. 44,Volume Discount 11 to 14,1971.9942,0.02\n804,CE1F-4E31-89,1,HL Mountain Frame - Black. 48,No Discount,809.76,0.00\n805,CE1F-4E31-89,13,Mountain-100 Black. 38,Volume Discount 11 to 14,1957.4942,0.02\n806,CE1F-4E31-89,2,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n807,CE1F-4E31-89,8,Mountain-100 Black. 42,No Discount,2024.994,0.00\n808,CE1F-4E31-89,2,HL Mountain Frame - Black. 42,No Discount,714.7043,0.00\n809,CE1F-4E31-89,2,AWC Logo Cap,No Discount,5.1865,0.00\n810,CE1F-4E31-89,2,Mountain-100 Black. 44,No Discount,2024.994,0.00\n811,CE1F-4E31-89,3,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n812,CE1F-4E31-89,5,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n813,CE1F-4E31-89,3,HL Mountain Frame - Silver. 46,No Discount,722.5949,0.00\n814,CE1F-4E31-89,2,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n815,1E6F-4150-A3,2,Road-650 Red. 44,No Discount,419.4589,0.00\n816,1E6F-4150-A3,1,Road-450 Red. 52,No Discount,874.794,0.00\n817,1E6F-4150-A3,3,Road-650 Red. 48,No Discount,419.4589,0.00\n818,1E6F-4150-A3,2,Road-450 Red. 58,No Discount,874.794,0.00\n819,1E6F-4150-A3,2,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n820,1E6F-4150-A3,2,Road-650 Red. 62,No Discount,419.4589,0.00\n821,1E6F-4150-A3,2,Road-650 Black. 52,No Discount,419.4589,0.00\n822,1E6F-4150-A3,2,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n823,4ECF-42F2-A7,4,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n824,4ECF-42F2-A7,2,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n825,4ECF-42F2-A7,5,Mountain Bike Socks. M,No Discount,5.70,0.00\n826,4ECF-42F2-A7,3,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n827,4ECF-42F2-A7,2,Mountain-100 Black. 38,No Discount,2024.994,0.00\n828,4ECF-42F2-A7,4,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n829,4ECF-42F2-A7,1,Mountain-100 Black. 48,No Discount,2024.994,0.00\n830,4ECF-42F2-A7,1,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n831,4ECF-42F2-A7,1,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n832,4ECF-42F2-A7,2,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n833,FC28-4F00-A9,1,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n834,FC28-4F00-A9,1,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n835,EDC5-4BD5-8F,3,Road-650 Red. 44,No Discount,419.4589,0.00\n836,EDC5-4BD5-8F,2,Road-650 Red. 48,No Discount,419.4589,0.00\n837,EDC5-4BD5-8F,3,Road-650 Red. 60,No Discount,419.4589,0.00\n838,EDC5-4BD5-8F,2,Road-650 Red. 52,No Discount,419.4589,0.00\n839,EDC5-4BD5-8F,2,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n840,EDC5-4BD5-8F,4,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n841,EDC5-4BD5-8F,4,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n842,EDC5-4BD5-8F,4,Road-650 Black. 52,No Discount,419.4589,0.00\n843,EDC5-4BD5-8F,3,LL Road Frame - Red. 62,No Discount,183.9382,0.00\n844,EDC5-4BD5-8F,2,Road-450 Red. 58,No Discount,874.794,0.00\n845,EDC5-4BD5-8F,2,LL Road Frame - Red. 48,No Discount,183.9382,0.00\n846,EDC5-4BD5-8F,1,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n847,EDC5-4BD5-8F,2,Road-650 Black. 60,No Discount,419.4589,0.00\n848,EDC5-4BD5-8F,3,Road-650 Black. 58,No Discount,419.4589,0.00\n849,EDC5-4BD5-8F,3,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n850,EDC5-4BD5-8F,1,Road-650 Black. 44,No Discount,419.4589,0.00\n851,EDC5-4BD5-8F,5,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n852,EDC5-4BD5-8F,3,Road-450 Red. 52,No Discount,874.794,0.00\n853,EDC5-4BD5-8F,1,Road-450 Red. 44,No Discount,874.794,0.00\n854,EDC5-4BD5-8F,3,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n855,EDC5-4BD5-8F,2,Road-450 Red. 60,No Discount,874.794,0.00\n856,EDC5-4BD5-8F,4,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n857,EDC5-4BD5-8F,5,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n858,EDC5-4BD5-8F,5,LL Road Frame - Black. 58,No Discount,178.5808,0.00\n859,EDC5-4BD5-8F,1,Road-150 Red. 56,No Discount,2146.962,0.00\n860,EDC5-4BD5-8F,13,AWC Logo Cap,Volume Discount 11 to 14,5.0136,0.02\n861,3269-4442-87,3,Road-650 Red. 60,No Discount,419.4589,0.00\n862,3269-4442-87,2,Road-450 Red. 60,No Discount,874.794,0.00\n863,3269-4442-87,3,Road-650 Red. 44,No Discount,419.4589,0.00\n864,3269-4442-87,3,Road-650 Black. 52,No Discount,419.4589,0.00\n865,3269-4442-87,1,Road-650 Black. 60,No Discount,419.4589,0.00\n866,3269-4442-87,1,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n867,3269-4442-87,1,ML Road Frame - Red. 48,No Discount,356.898,0.00\n868,3269-4442-87,2,Road-150 Red. 56,No Discount,2146.962,0.00\n869,3269-4442-87,2,Road-450 Red. 44,No Discount,874.794,0.00\n870,3269-4442-87,2,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n871,3269-4442-87,2,Road-450 Red. 52,No Discount,874.794,0.00\n872,3269-4442-87,1,Road-650 Red. 52,No Discount,419.4589,0.00\n873,3269-4442-87,1,Road-650 Black. 44,No Discount,419.4589,0.00\n874,89D3-483D-8F,2,Mountain-100 Black. 42,No Discount,2024.994,0.00\n875,89D3-483D-8F,2,Mountain-100 Black. 48,No Discount,2024.994,0.00\n876,89D3-483D-8F,5,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n877,89D3-483D-8F,3,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n878,89D3-483D-8F,3,Mountain-100 Black. 44,No Discount,2024.994,0.00\n879,89D3-483D-8F,2,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n880,89D3-483D-8F,4,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n881,89D3-483D-8F,21,Mountain Bike Socks. M,Volume Discount 15 to 24,5.225,0.05\n882,8137-47B8-9B,1,Mountain-100 Black. 48,No Discount,2024.994,0.00\n883,E43E-40BF-9B,2,LL Road Frame - Red. 48,No Discount,183.9382,0.00\n884,E43E-40BF-9B,1,ML Road Frame - Red. 48,No Discount,356.898,0.00\n885,E43E-40BF-9B,2,Road-650 Red. 48,No Discount,419.4589,0.00\n886,E43E-40BF-9B,1,Road-650 Black. 44,No Discount,419.4589,0.00\n887,E43E-40BF-9B,2,Road-650 Black. 52,No Discount,419.4589,0.00\n888,E43E-40BF-9B,2,AWC Logo Cap,No Discount,5.1865,0.00\n889,E43E-40BF-9B,2,Road-650 Red. 60,No Discount,419.4589,0.00\n890,E43E-40BF-9B,1,LL Road Frame - Black. 58,No Discount,178.5808,0.00\n891,E43E-40BF-9B,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n892,E43E-40BF-9B,3,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n893,E43E-40BF-9B,1,Road-150 Red. 62,No Discount,2146.962,0.00\n894,E43E-40BF-9B,3,Road-650 Red. 44,No Discount,419.4589,0.00\n895,E43E-40BF-9B,3,Road-450 Red. 52,No Discount,874.794,0.00\n896,E43E-40BF-9B,2,Road-450 Red. 58,No Discount,874.794,0.00\n897,E43E-40BF-9B,2,Road-650 Red. 62,No Discount,419.4589,0.00\n898,E43E-40BF-9B,2,Road-150 Red. 56,No Discount,2146.962,0.00\n899,E43E-40BF-9B,2,Road-650 Black. 58,No Discount,419.4589,0.00\n900,728A-44AB-A8,3,HL Mountain Frame - Black. 38,No Discount,714.7043,0.00\n901,728A-44AB-A8,4,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n902,728A-44AB-A8,3,HL Mountain Frame - Black. 48,No Discount,809.76,0.00\n903,728A-44AB-A8,10,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n904,728A-44AB-A8,10,Mountain-100 Black. 44,No Discount,2024.994,0.00\n905,728A-44AB-A8,5,Mountain-100 Black. 42,No Discount,2024.994,0.00\n906,728A-44AB-A8,5,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n907,728A-44AB-A8,3,HL Mountain Frame - Silver. 48,No Discount,818.70,0.00\n908,728A-44AB-A8,5,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n909,728A-44AB-A8,4,Mountain-100 Black. 48,No Discount,2024.994,0.00\n910,728A-44AB-A8,6,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n911,728A-44AB-A8,1,HL Mountain Frame - Silver. 38,No Discount,722.5949,0.00\n912,728A-44AB-A8,8,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n913,728A-44AB-A8,8,AWC Logo Cap,No Discount,5.1865,0.00\n914,728A-44AB-A8,2,Mountain-100 Black. 38,No Discount,2024.994,0.00\n915,728A-44AB-A8,3,HL Mountain Frame - Black. 42,No Discount,714.7043,0.00\n916,728A-44AB-A8,14,Mountain-100 Silver. 42,Volume Discount 11 to 14,1971.9942,0.02\n917,728A-44AB-A8,4,Sport-100 Helmet. Red,No Discount,20.1865,0.00\n918,728A-44AB-A8,4,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n919,728A-44AB-A8,4,Mountain Bike Socks. M,No Discount,5.70,0.00\n920,728A-44AB-A8,1,HL Mountain Frame - Silver. 46,No Discount,722.5949,0.00\n921,728A-44AB-A8,1,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n922,190F-4A02-89,4,Mountain Bike Socks. L,No Discount,5.70,0.00\n923,190F-4A02-89,8,Mountain Bike Socks. M,No Discount,5.70,0.00\n924,CE58-49B5-82,2,Road-450 Red. 58,No Discount,874.794,0.00\n925,CE58-49B5-82,1,Road-650 Red. 48,No Discount,419.4589,0.00\n926,CE58-49B5-82,2,LL Road Frame - Red. 48,No Discount,183.9382,0.00\n927,CE58-49B5-82,1,Road-650 Black. 44,No Discount,419.4589,0.00\n928,CE58-49B5-82,2,Road-450 Red. 44,No Discount,874.794,0.00\n929,CE58-49B5-82,3,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n930,CE58-49B5-82,6,AWC Logo Cap,No Discount,5.1865,0.00\n931,CE58-49B5-82,1,Sport-100 Helmet. Black,No Discount,20.1865,0.00\n932,CE58-49B5-82,2,Road-450 Red. 52,No Discount,874.794,0.00\n933,CE58-49B5-82,2,Road-650 Black. 52,No Discount,419.4589,0.00\n934,CE58-49B5-82,5,Road-650 Red. 60,No Discount,419.4589,0.00\n935,CE58-49B5-82,1,ML Road Frame - Red. 52,No Discount,356.898,0.00\n936,CE58-49B5-82,1,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n937,CE58-49B5-82,1,LL Road Frame - Red. 62,No Discount,183.9382,0.00\n938,CE58-49B5-82,1,Road-450 Red. 60,No Discount,874.794,0.00\n939,CE58-49B5-82,1,LL Road Frame - Black. 58,No Discount,178.5808,0.00\n940,CE58-49B5-82,5,Long-Sleeve Logo Jersey. M,No Discount,28.8404,0.00\n941,CE58-49B5-82,1,Road-650 Black. 60,No Discount,419.4589,0.00\n942,CE58-49B5-82,3,Road-650 Red. 44,No Discount,419.4589,0.00\n943,CE58-49B5-82,2,Road-150 Red. 56,No Discount,2146.962,0.00\n944,CE58-49B5-82,4,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n945,790D-448C-AA,1,Road-650 Black. 58,No Discount,419.4589,0.00\n946,7AED-4154-93,1,Road-650 Red. 52,No Discount,419.4589,0.00\n947,7AED-4154-93,1,Road-450 Red. 60,No Discount,874.794,0.00\n948,7AED-4154-93,2,LL Road Frame - Black. 52,No Discount,178.5808,0.00\n949,7AED-4154-93,1,LL Road Frame - Red. 44,No Discount,183.9382,0.00\n950,7AED-4154-93,1,Road-650 Black. 44,No Discount,419.4589,0.00\n951,7AED-4154-93,2,Road-650 Red. 60,No Discount,419.4589,0.00\n952,7AED-4154-93,1,Road-150 Red. 56,No Discount,2146.962,0.00\n953,7AED-4154-93,2,Road-450 Red. 44,No Discount,874.794,0.00\n954,7AED-4154-93,5,Road-450 Red. 58,No Discount,874.794,0.00\n955,7AED-4154-93,2,Road-650 Black. 52,No Discount,419.4589,0.00\n956,7AED-4154-93,2,LL Road Frame - Red. 62,No Discount,183.9382,0.00\n957,7AED-4154-93,2,Road-650 Red. 48,No Discount,419.4589,0.00\n958,7AED-4154-93,2,Road-650 Black. 58,No Discount,419.4589,0.00\n959,7AED-4154-93,1,LL Road Frame - Red. 48,No Discount,183.9382,0.00\n960,F108-4D76-8A,1,Mountain-100 Black. 48,No Discount,2024.994,0.00\n961,F108-4D76-8A,2,Long-Sleeve Logo Jersey. XL,No Discount,28.8404,0.00\n962,6787-4174-98,5,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n963,6787-4174-98,2,Mountain-100 Black. 44,No Discount,2024.994,0.00\n964,6787-4174-98,7,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n965,6787-4174-98,2,Mountain-100 Silver. 48,No Discount,2039.994,0.00\n966,6787-4174-98,3,HL Mountain Frame - Silver. 46,No Discount,722.5949,0.00\n967,6787-4174-98,5,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n968,6787-4174-98,2,Mountain-100 Black. 42,No Discount,2024.994,0.00\n969,6787-4174-98,1,HL Mountain Frame - Silver. 38,No Discount,722.5949,0.00\n970,6787-4174-98,1,HL Mountain Frame - Black. 38,No Discount,714.7043,0.00\n971,6787-4174-98,8,Mountain-100 Black. 38,No Discount,2024.994,0.00\n972,6787-4174-98,4,Mountain Bike Socks. M,No Discount,5.70,0.00\n973,6787-4174-98,3,Mountain-100 Black. 48,No Discount,2024.994,0.00\n974,6787-4174-98,3,HL Mountain Frame - Black. 48,No Discount,809.76,0.00\n975,1094-43CB-B1,2,Mountain-100 Black. 38,No Discount,2024.994,0.00\n976,1094-43CB-B1,2,Mountain Bike Socks. L,No Discount,5.70,0.00\n977,1094-43CB-B1,1,Mountain-100 Black. 48,No Discount,2024.994,0.00\n978,1094-43CB-B1,3,Mountain-100 Silver. 44,No Discount,2039.994,0.00\n979,1094-43CB-B1,3,Mountain-100 Silver. 38,No Discount,2039.994,0.00\n980,1094-43CB-B1,4,Mountain Bike Socks. M,No Discount,5.70,0.00\n981,1094-43CB-B1,2,Mountain-100 Black. 42,No Discount,2024.994,0.00\n982,1094-43CB-B1,3,Mountain-100 Silver. 42,No Discount,2039.994,0.00\n983,1094-43CB-B1,2,Mountain-100 Black. 44,No Discount,2024.994,0.00\n984,0D3C-4E1F-9C,2,Road-650 Red. 44,No Discount,419.4589,0.00\n985,0D3C-4E1F-9C,3,Long-Sleeve Logo Jersey. L,No Discount,28.8404,0.00\n986,0D3C-4E1F-9C,2,Road-150 Red. 56,No Discount,2146.962,0.00\n987,0D3C-4E1F-9C,3,AWC Logo Cap,No Discount,5.1865,0.00\n988,0D3C-4E1F-9C,2,Road-650 Red. 48,No Discount,419.4589,0.00\n989,0D3C-4E1F-9C,5,Road-650 Red. 60,No Discount,419.4589,0.00\n990,0D3C-4E1F-9C,1,LL Road Frame - Red. 60,No Discount,183.9382,0.00\n991,0D3C-4E1F-9C,2,Sport-100 Helmet. Blue,No Discount,20.1865,0.00\n992,0D3C-4E1F-9C,2,Road-450 Red. 58,No Discount,874.794,0.00\n993,0D3C-4E1F-9C,3,Road-650 Black. 52,No Discount,419.4589,0.00\n994,0D3C-4E1F-9C,4,Road-650 Red. 62,No Discount,419.4589,0.00\n995,0D3C-4E1F-9C,3,Road-450 Red. 52,No Discount,874.794,0.00\n996,0D3C-4E1F-9C,2,Road-650 Black. 58,No Discount,419.4589,0.00\n997,7C5D-46AA-A7,1,Road-650 Black. 52,No Discount,419.4589,0.00\n998,7DF2-4E54-B0,3,Mountain Bike Socks. L,No Discount,5.70,0.00\n999,7DF2-4E54-B0,2,Mountain-100 Black. 44,No Discount,2024.994,0.00\n1000,7DF2-4E54-B0,3,Mountain-100 Black. 38,No Discount,2024.994,0.00\n"
  },
  {
    "path": "src/AdminLTE/wwwroot/js/site.js",
    "content": "﻿/*\\\n|*|\n|*|  :: cookies.js ::\n|*|\n|*|  A complete cookies reader/writer framework with full unicode support.\n|*|\n|*|  Revision #1 - September 4, 2014\n|*|\n|*|  https://developer.mozilla.org/en-US/docs/Web/API/document.cookie\n|*|  https://developer.mozilla.org/User:fusionchess\n|*|\n|*|  This framework is released under the GNU Public License, version 3 or later.\n|*|  http://www.gnu.org/licenses/gpl-3.0-standalone.html\n|*|\n|*|  Syntaxes:\n|*|\n|*|  * docCookies.setItem(name, value[, end[, path[, domain[, secure]]]])\n|*|  * docCookies.getItem(name)\n|*|  * docCookies.removeItem(name[, path[, domain]])\n|*|  * docCookies.hasItem(name)\n|*|  * docCookies.keys()\n|*|\n\\*/\n\nvar docCookies = {\n    getItem: function (sKey) {\n        if (!sKey) { return null; }\n        return decodeURIComponent(document.cookie.replace(new RegExp(\"(?:(?:^|.*;)\\\\s*\" + encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, \"\\\\$&\") + \"\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$\"), \"$1\")) || null;\n    },\n    setItem: function (sKey, sValue, vEnd, sPath, sDomain, bSecure) {\n        if (!sKey || /^(?:expires|max\\-age|path|domain|secure)$/i.test(sKey)) { return false; }\n        var sExpires = \"\";\n        if (vEnd) {\n            switch (vEnd.constructor) {\n                case Number:\n                    sExpires = vEnd === Infinity ? \"; expires=Fri, 31 Dec 9999 23:59:59 GMT\" : \"; max-age=\" + vEnd;\n                    break;\n                case String:\n                    sExpires = \"; expires=\" + vEnd;\n                    break;\n                case Date:\n                    sExpires = \"; expires=\" + vEnd.toUTCString();\n                    break;\n            }\n        }\n        document.cookie = encodeURIComponent(sKey) + \"=\" + encodeURIComponent(sValue) + sExpires + (sDomain ? \"; domain=\" + sDomain : \"\") + (sPath ? \"; path=\" + sPath : \"\") + (bSecure ? \"; secure\" : \"\");\n        return true;\n    },\n    removeItem: function (sKey, sPath, sDomain) {\n        if (!this.hasItem(sKey)) { return false; }\n        document.cookie = encodeURIComponent(sKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 GMT\" + (sDomain ? \"; domain=\" + sDomain : \"\") + (sPath ? \"; path=\" + sPath : \"\");\n        return true;\n    },\n    hasItem: function (sKey) {\n        if (!sKey) { return false; }\n        return (new RegExp(\"(?:^|;\\\\s*)\" + encodeURIComponent(sKey).replace(/[\\-\\.\\+\\*]/g, \"\\\\$&\") + \"\\\\s*\\\\=\")).test(document.cookie);\n    },\n    keys: function () {\n        var aKeys = document.cookie.replace(/((?:^|\\s*;)[^\\=]+)(?=;|$)|^\\s*|\\s*(?:\\=[^;]*)?(?:\\1|$)/g, \"\").split(/\\s*(?:\\=[^;]*)?;\\s*/);\n        for (var nLen = aKeys.length, nIdx = 0; nIdx < nLen; nIdx++) { aKeys[nIdx] = decodeURIComponent(aKeys[nIdx]); }\n        return aKeys;\n    }\n};\n\n\n/* collapse/expand */\nif (docCookies.hasItem(\"sidebarstate\")) {\n    $(\"body\").addClass(docCookies.getItem(\"sidebarstate\"));\n}\n\n/*global datatable defaults*/\n//$.extend(true, $.fn.dataTable.defaults, {\n   \n//});\n\n/* automatically defaults all submit button to be disabled */\nfunction useSubmitClass() {\n    $('form').submit(function () {\n        if ($(this).valid()) {\n            $(this).find(':submit').attr('disabled', 'disabled');\n        }\n    });\n}\n\nfunction useDeleteConfirmation() {\n    $('.btn-delete').on(\"click\", function (e) {\n        e.preventDefault();\n\n        var choice = confirm(\"Are you sure you want to delete?\");\n\n        if (choice) {\n            window.location.href = $(this).attr('href');\n        }\n    });\n}\n"
  }
]