diff --git a/waffle-jna-jakarta/apidocs/allclasses-index.html b/waffle-jna-jakarta/apidocs/allclasses-index.html new file mode 100644 index 0000000000..92debe0f86 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/allclasses-index.html @@ -0,0 +1,243 @@ + + + + +All Classes and Interfaces (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
+ +
+
+
+

All Classes and Interfaces

+
+
+
+
+
+
Class
+
Description
+ +
+
Authorization header.
+
+ +
+
The Class AutoDisposableWindowsPrincipal.
+
+ +
+
A Basic authentication security filter provider. https://tools.ietf.org/html/rfc2617
+
+ +
+
A semi-persistent mapping from keys to values.
+
+ +
+
Service interface to instantiate a new Cache.
+
+ +
+
A Cache based on Cache.
+
+ +
+ +
+ +
+
The Class CorsAwareNegotiateSecurityFilter.
+
+ +
+
The Class CorsPrefFlightCheck.
+
+ +
Deprecated. +
This class is deprecated as hiding a principal inside another principal is not JAAS compliant.
+
+ +
+
Windows account.
+
+ +
+
Implements Windows authentication functions.
+
+ +
+
A Windows Computer.
+
+ +
+
Windows credentials handle.
+
+ +
+
A Windows Domain.
+
+ +
+
A Windows Identity.
+
+ +
+
A Windows impersonation context.
+
+ +
+
A Windows security context.
+
+ +
+
Negotiate Request wrapper.
+
+ +
+
A Negotiate (NTLM/Kerberos) Security Filter.
+
+ +
+
A negotiate security filter provider.
+
+ +
+
Rudimentary NTLM message utility.
+
+ +
+
The Class NtlmServletRequest.
+
+ +
+
The Enum PrincipalFormat.
+
+ +
+
Role principal.
+
+ +
+
A security filter provider.
+
+ +
+
A collection of security filter providers.
+
+ +
+
Rudimentary NTLM message utility.
+
+ +
+
User Principal.
+
+ +
+
A Utility class to read system info to help troubleshoot WAFFLE system configuration.
+
+ +
+
A servlet that returns WaffleInfo as XML.
+
+ +
+
A flattened Windows Account used in a Windows principal.
+
+ +
+
Windows Account.
+
+ +
+
Windows Auth Provider.
+
+ +
+
Windows Computer.
+
+ +
+
Pre-existing credentials of a security principal.
+
+ +
+
Windows Domain.
+
+ +
+
The Class WindowsIdentityImpersonationContextImpl.
+
+ +
+
Windows Identity.
+
+ +
+
A Java Security login module for Windows authentication.
+
+ +
+
A Windows Principal.
+
+ +
+
The Class WindowsSecurityContextImpersonationContextImpl.
+
+ +
+
Windows Security Context.
+
+
+
+
+
+ +
+
+ + diff --git a/waffle-jna-jakarta/apidocs/allpackages-index.html b/waffle-jna-jakarta/apidocs/allpackages-index.html new file mode 100644 index 0000000000..ab2fc302db --- /dev/null +++ b/waffle-jna-jakarta/apidocs/allpackages-index.html @@ -0,0 +1,95 @@ + + + + +All Packages (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
+ +
+
+
+

All Packages

+
+
Package Summary
+
+
Package
+
Description
+ +
+
Waffle JNA JAAS Package.
+
+ +
+
Waffle JNA Servlet Package.
+
+ +
+
Waffle JNA Servlet SPI Package.
+
+ +
+
Waffle JNA Utility Package.
+
+ +
+
Waffle JNA Cache Package.
+
+ +
+
Waffle JNA Windows Authorization Package.
+
+ +
+
Waffle JNA Windows Authorization Implementation Package.
+
+
+
+ +
+
+ + diff --git a/waffle-jna-jakarta/apidocs/constant-values.html b/waffle-jna-jakarta/apidocs/constant-values.html new file mode 100644 index 0000000000..55abc97d1a --- /dev/null +++ b/waffle-jna-jakarta/apidocs/constant-values.html @@ -0,0 +1,84 @@ + + + + +Constant Field Values (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
+ +
+
+
+

Constant Field Values

+
+
+

Contents

+ +
+
+

waffle.windows.*

+ +
+
+ +
+
+ + diff --git a/waffle-jna-jakarta/apidocs/copy.svg b/waffle-jna-jakarta/apidocs/copy.svg new file mode 100644 index 0000000000..d435f6c375 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/copy.svg @@ -0,0 +1,33 @@ + + + + + + + + diff --git a/waffle-jna-jakarta/apidocs/deprecated-list.html b/waffle-jna-jakarta/apidocs/deprecated-list.html new file mode 100644 index 0000000000..51fbe714a1 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/deprecated-list.html @@ -0,0 +1,96 @@ + + + + +Deprecated List (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
+ +
+
+
+

Deprecated API

+
+

Contents

+ +
    +
  • +
    +
    Deprecated Classes
    +
    +
    Class
    +
    Description
    + +
    +
    This class is deprecated as hiding a principal inside another principal is not JAAS compliant. Use the + Principals in the Subject to directly enroll groups or roles by name.
    +
    +
    +
    +
  • +
+ +
+ +
+
+ + diff --git a/waffle-jna-jakarta/apidocs/element-list b/waffle-jna-jakarta/apidocs/element-list new file mode 100644 index 0000000000..3bfb6081f0 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/element-list @@ -0,0 +1,8 @@ +module:waffle.jna.jakarta +waffle.jaas +waffle.servlet +waffle.servlet.spi +waffle.util +waffle.util.cache +waffle.windows.auth +waffle.windows.auth.impl diff --git a/waffle-jna-jakarta/apidocs/help-doc.html b/waffle-jna-jakarta/apidocs/help-doc.html new file mode 100644 index 0000000000..03ed5b8642 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/help-doc.html @@ -0,0 +1,213 @@ + + + + +API Help (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
+ +
+
+

JavaDoc Help

+ +
+
+

Navigation

+Starting from the Overview page, you can browse the documentation using the links in each page, and in the navigation bar at the top of each page. The Index and Search box allow you to navigate to specific declarations and summary pages, including: All Packages, All Classes and Interfaces + +
+
+
+

Kinds of Pages

+The following sections describe the different kinds of pages in this collection. +
+

Module

+

Each module has a page that contains a list of its packages, dependencies on other modules, and services, with a summary for each. These pages may contain the following categories:

+
    +
  • Packages
  • +
  • Modules
  • +
  • Services
  • +
+
+
+

Package

+

Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain the following categories:

+
    +
  • Interfaces
  • +
  • Classes
  • +
  • Enums
  • +
  • Exception Classes
  • +
  • Annotation Types
  • +
+
+
+

Class or Interface

+

Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a declaration and description, member summary tables, and detailed member descriptions. Entries in each of these sections are omitted if they are empty or not applicable.

+
    +
  • Class Inheritance Diagram
  • +
  • Direct Subclasses
  • +
  • All Known Subinterfaces
  • +
  • All Known Implementing Classes
  • +
  • Class or Interface Declaration
  • +
  • Class or Interface Description
  • +
+
+
    +
  • Nested Class Summary
  • +
  • Enum Constant Summary
  • +
  • Field Summary
  • +
  • Property Summary
  • +
  • Constructor Summary
  • +
  • Method Summary
  • +
  • Required Element Summary
  • +
  • Optional Element Summary
  • +
+
+
    +
  • Enum Constant Details
  • +
  • Field Details
  • +
  • Property Details
  • +
  • Constructor Details
  • +
  • Method Details
  • +
  • Element Details
  • +
+

Note: Annotation interfaces have required and optional elements, but not methods. Only enum classes have enum constants. The components of a record class are displayed as part of the declaration of the record class. Properties are a feature of JavaFX.

+

The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

+
+
+

Other Files

+

Packages and modules may contain pages with additional information related to the declarations nearby.

+
+
+

Use

+

Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the USE link in the navigation bar.

+
+
+

Tree (Class Hierarchy)

+

There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

+
    +
  • When viewing the Overview page, clicking on TREE displays the hierarchy for all packages.
  • +
  • When viewing a particular package, class or interface page, clicking on TREE displays the hierarchy for only that package.
  • +
+
+
+

Deprecated API

+

The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to shortcomings, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.

+
+
+

Constant Field Values

+

The Constant Field Values page lists the static final fields and their values.

+
+
+

Serialized Form

+

Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to those who implement rather than use the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See Also" section of the class description.

+
+
+

All Packages

+

The All Packages page contains an alphabetic index of all packages contained in the documentation.

+
+
+

All Classes and Interfaces

+

The All Classes and Interfaces page contains an alphabetic index of all classes and interfaces contained in the documentation, including annotation interfaces, enum classes, and record classes.

+
+
+

Index

+

The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields in the documentation, as well as summary pages such as All Packages, All Classes and Interfaces.

+
+
+
+This help file applies to API documentation generated by the standard doclet.
+ +
+
+ + diff --git a/waffle-jna-jakarta/apidocs/index-all.html b/waffle-jna-jakarta/apidocs/index-all.html new file mode 100644 index 0000000000..7307781f63 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/index-all.html @@ -0,0 +1,1205 @@ + + + + +Index (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
+ +
+
+
+

Index

+
+A B C D E F G H I L M N P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

A

+
+
abort() - Method in class waffle.jaas.WindowsLoginModule
+
+
Abort a login process.
+
+
acceptSecurityToken(String, byte[], String) - Method in class waffle.windows.auth.impl.WindowsAuthProviderImpl
+
 
+
acceptSecurityToken(String, byte[], String) - Method in interface waffle.windows.auth.IWindowsAuthProvider
+
+
Attempts to validate the user using an SSPI token.
+
+
addAccountInfo(Document, Element, IWindowsAccount) - Method in class waffle.util.WaffleInfo
+
+
Adds the account info.
+
+
addMember(Principal) - Method in class waffle.jaas.GroupPrincipal
+
+
Deprecated.
+
Add user principal to member.
+
+
AuthorizationHeader - Class in waffle.util
+
+
Authorization header.
+
+
AuthorizationHeader(HttpServletRequest) - Constructor for class waffle.util.AuthorizationHeader
+
+
Instantiates a new authorization header.
+
+
AutoDisposableWindowsPrincipal - Class in waffle.servlet
+
+
The Class AutoDisposableWindowsPrincipal.
+
+
AutoDisposableWindowsPrincipal(IWindowsIdentity) - Constructor for class waffle.servlet.AutoDisposableWindowsPrincipal
+
+
Instantiates a new auto disposable windows principal.
+
+
AutoDisposableWindowsPrincipal(IWindowsIdentity, PrincipalFormat, PrincipalFormat) - Constructor for class waffle.servlet.AutoDisposableWindowsPrincipal
+
+
Instantiates a new auto disposable windows principal.
+
+
+

B

+
+
BasicSecurityFilterProvider - Class in waffle.servlet.spi
+
+
A Basic authentication security filter provider. https://tools.ietf.org/html/rfc2617
+
+
BasicSecurityFilterProvider(IWindowsAuthProvider) - Constructor for class waffle.servlet.spi.BasicSecurityFilterProvider
+
+
Instantiates a new basic security filter provider.
+
+
BOTH - Enum constant in enum waffle.windows.auth.PrincipalFormat
+
+
The both.
+
+
+

C

+
+
Cache<K,V> - Interface in waffle.util.cache
+
+
A semi-persistent mapping from keys to values.
+
+
CacheSupplier - Interface in waffle.util.cache
+
+
Service interface to instantiate a new Cache.
+
+
CaffeineCache<K,V> - Class in waffle.util.cache
+
+
A Cache based on Cache.
+
+
CaffeineCache(long) - Constructor for class waffle.util.cache.CaffeineCache
+
+
Instantiate new caffeine cache with timeout.
+
+
CaffeineCacheSupplier - Class in waffle.util.cache
+
+ +
+
CaffeineCacheSupplier() - Constructor for class waffle.util.cache.CaffeineCacheSupplier
+
 
+
commit() - Method in class waffle.jaas.WindowsLoginModule
+
+
Commit principals to the subject.
+
+
CONTINUE_CONTEXT_TIMEOUT - Static variable in class waffle.windows.auth.impl.WindowsAuthProviderImpl
+
+
The Continue Context Timeout.
+
+
CorsAwareNegotiateSecurityFilter - Class in waffle.servlet
+
+
The Class CorsAwareNegotiateSecurityFilter.
+
+
CorsAwareNegotiateSecurityFilter() - Constructor for class waffle.servlet.CorsAwareNegotiateSecurityFilter
+
+
Instantiates a new negotiate security filter.
+
+
CorsPreFlightCheck - Class in waffle.util
+
+
The Class CorsPrefFlightCheck.
+
+
+

D

+
+
destroy() - Method in class waffle.servlet.CorsAwareNegotiateSecurityFilter
+
 
+
destroy() - Method in class waffle.servlet.NegotiateSecurityFilter
+
 
+
dispose() - Method in class waffle.windows.auth.impl.WindowsCredentialsHandleImpl
+
+
Dispose of the credentials handle.
+
+
dispose() - Method in class waffle.windows.auth.impl.WindowsIdentityImpl
+
 
+
dispose() - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
 
+
dispose() - Method in interface waffle.windows.auth.IWindowsCredentialsHandle
+
+
Dispose.
+
+
dispose() - Method in interface waffle.windows.auth.IWindowsIdentity
+
+
Dispose of the Windows identity.
+
+
dispose() - Method in interface waffle.windows.auth.IWindowsSecurityContext
+
+
Disposes of the context.
+
+
dispose(Sspi.CtxtHandle) - Static method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
+
Dispose a security context.
+
+
doFilter(HttpServletRequest, HttpServletResponse) - Method in class waffle.servlet.spi.BasicSecurityFilterProvider
+
 
+
doFilter(HttpServletRequest, HttpServletResponse) - Method in class waffle.servlet.spi.NegotiateSecurityFilterProvider
+
 
+
doFilter(HttpServletRequest, HttpServletResponse) - Method in interface waffle.servlet.spi.SecurityFilterProvider
+
+
Execute filter.
+
+
doFilter(HttpServletRequest, HttpServletResponse) - Method in class waffle.servlet.spi.SecurityFilterProviderCollection
+
+
Filter.
+
+
doFilter(ServletRequest, ServletResponse, FilterChain) - Method in class waffle.servlet.CorsAwareNegotiateSecurityFilter
+
 
+
doFilter(ServletRequest, ServletResponse, FilterChain) - Method in class waffle.servlet.NegotiateSecurityFilter
+
 
+
doGet(HttpServletRequest, HttpServletResponse) - Method in class waffle.servlet.WaffleInfoServlet
+
 
+
doPost(HttpServletRequest, HttpServletResponse) - Method in class waffle.servlet.WaffleInfoServlet
+
 
+
+

E

+
+
equals(Object) - Method in class waffle.jaas.RolePrincipal
+
+
Role Principal Equals for FQN.
+
+
equals(Object) - Method in class waffle.jaas.UserPrincipal
+
 
+
equals(Object) - Method in class waffle.servlet.WindowsPrincipal
+
 
+
equals(Object) - Method in class waffle.windows.auth.WindowsAccount
+
 
+
+

F

+
+
FQN - Enum constant in enum waffle.windows.auth.PrincipalFormat
+
+
The fqn.
+
+
+

G

+
+
get(K) - Method in interface waffle.util.cache.Cache
+
+
Fetches the key from the cache
+
+
get(K) - Method in class waffle.util.cache.CaffeineCache
+
 
+
getAuth() - Method in class waffle.jaas.WindowsLoginModule
+
+
Windows auth provider.
+
+
getAuth() - Method in class waffle.servlet.NegotiateSecurityFilter
+
+
Windows auth provider.
+
+
getAuthProviderInfo(Document) - Method in class waffle.util.WaffleInfo
+
+
Gets the auth provider info.
+
+
getAuthType() - Method in class waffle.servlet.NegotiateRequestWrapper
+
+
Authentication type.
+
+
getByClassName(String) - Method in class waffle.servlet.spi.SecurityFilterProviderCollection
+
+
Get a security provider by class name.
+
+
getComputerName() - Method in class waffle.windows.auth.impl.WindowsComputerImpl
+
 
+
getComputerName() - Method in interface waffle.windows.auth.IWindowsComputer
+
+
Computer name.
+
+
getConnectionId(HttpServletRequest) - Static method in class waffle.util.NtlmServletRequest
+
+
Returns a unique connection id for a given servlet request.
+
+
getContinueContextsSize() - Method in class waffle.windows.auth.impl.WindowsAuthProviderImpl
+
+
Number of elements in the continue contexts map.
+
+
getCurrent(String) - Static method in class waffle.windows.auth.impl.WindowsCredentialsHandleImpl
+
+
Returns the current credentials handle.
+
+
getCurrent(String, String) - Static method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
+
Get the current Windows security context for a given SSPI package.
+
+
getCurrentComputer() - Method in class waffle.windows.auth.impl.WindowsAuthProviderImpl
+
 
+
getCurrentComputer() - Method in interface waffle.windows.auth.IWindowsAuthProvider
+
+
Retrieve the current computer information.
+
+
getCurrentUsername() - Static method in class waffle.windows.auth.impl.WindowsAccountImpl
+
+
Get the SAM-compatible username of the currently logged-on user.
+
+
getDomain() - Method in class waffle.windows.auth.impl.WindowsAccountImpl
+
+
Account domain.
+
+
getDomain() - Method in interface waffle.windows.auth.IWindowsAccount
+
+
Domain name.
+
+
getDomain() - Method in class waffle.windows.auth.WindowsAccount
+
+
Gets the domain.
+
+
getDomains() - Method in class waffle.windows.auth.impl.WindowsAuthProviderImpl
+
 
+
getDomains() - Method in interface waffle.windows.auth.IWindowsAuthProvider
+
+
Retrieve a list of domains (Active Directory) on the local server.
+
+
getException(Document, Exception) - Static method in class waffle.util.WaffleInfo
+
+
Gets the exception.
+
+
getFqn() - Method in class waffle.windows.auth.impl.WindowsAccountImpl
+
 
+
getFqn() - Method in class waffle.windows.auth.impl.WindowsDomainImpl
+
 
+
getFqn() - Method in class waffle.windows.auth.impl.WindowsIdentityImpl
+
 
+
getFqn() - Method in interface waffle.windows.auth.IWindowsAccount
+
+
Fully qualified username.
+
+
getFqn() - Method in interface waffle.windows.auth.IWindowsDomain
+
+
Fully qualified domain name.
+
+
getFqn() - Method in interface waffle.windows.auth.IWindowsIdentity
+
+
Fully qualified name.
+
+
getFqn() - Method in class waffle.windows.auth.WindowsAccount
+
+
Gets the fqn.
+
+
getGroups() - Method in class waffle.servlet.WindowsPrincipal
+
+
Windows groups that the user is a member of.
+
+
getGroups() - Method in class waffle.windows.auth.impl.WindowsComputerImpl
+
 
+
getGroups() - Method in class waffle.windows.auth.impl.WindowsIdentityImpl
+
 
+
getGroups() - Method in interface waffle.windows.auth.IWindowsComputer
+
+
Groups.
+
+
getGroups() - Method in interface waffle.windows.auth.IWindowsIdentity
+
+
Group memberships.
+
+
getHandle() - Method in class waffle.windows.auth.impl.WindowsCredentialsHandleImpl
+
+
Get CredHandle.
+
+
getHandle() - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
 
+
getHandle() - Method in interface waffle.windows.auth.IWindowsCredentialsHandle
+
+
Return a security handle.
+
+
getHandle() - Method in interface waffle.windows.auth.IWindowsSecurityContext
+
+
Context handle.
+
+
getHeader() - Method in class waffle.util.AuthorizationHeader
+
+
Gets the header.
+
+
getIdentity() - Method in class waffle.servlet.WindowsPrincipal
+
+
Underlying identity.
+
+
getIdentity() - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
 
+
getIdentity() - Method in interface waffle.windows.auth.IWindowsSecurityContext
+
+
Windows Identity.
+
+
getJoinStatus() - Method in class waffle.windows.auth.impl.WindowsComputerImpl
+
 
+
getJoinStatus() - Method in interface waffle.windows.auth.IWindowsComputer
+
+
Join status.
+
+
getLookupInfo(Document, String) - Method in class waffle.util.WaffleInfo
+
+
Gets the lookup info.
+
+
getMemberOf() - Method in class waffle.windows.auth.impl.WindowsComputerImpl
+
 
+
getMemberOf() - Method in interface waffle.windows.auth.IWindowsComputer
+
+
Member of (domain).
+
+
getMessageType(byte[]) - Static method in class waffle.util.NtlmMessage
+
+
Get NTLM message type.
+
+
getName() - Method in class waffle.jaas.GroupPrincipal
+
+
Deprecated.
+
getName() - Method in class waffle.jaas.RolePrincipal
+
+
Role name (Windows Group).
+
+
getName() - Method in class waffle.jaas.UserPrincipal
+
+
Fully qualified username.
+
+
getName() - Method in class waffle.servlet.WindowsPrincipal
+
+
Fully qualified name.
+
+
getName() - Method in class waffle.windows.auth.impl.WindowsAccountImpl
+
+
Account name.
+
+
getName() - Method in interface waffle.windows.auth.IWindowsAccount
+
+
User name.
+
+
getName() - Method in class waffle.windows.auth.WindowsAccount
+
+
Gets the name.
+
+
getPrincipalFormat() - Method in class waffle.servlet.NegotiateSecurityFilter
+
+
Principal format.
+
+
getPrincipalName() - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
 
+
getPrincipalName() - Method in interface waffle.windows.auth.IWindowsSecurityContext
+
+
Principal name.
+
+
getProtocols() - Method in class waffle.servlet.spi.NegotiateSecurityFilterProvider
+
+
Gets the protocols.
+
+
getProviders() - Method in class waffle.servlet.NegotiateSecurityFilter
+
+
Security filter providers.
+
+
getRealm() - Method in class waffle.servlet.spi.BasicSecurityFilterProvider
+
+
Protection space.
+
+
getRemoteUser() - Method in class waffle.servlet.NegotiateRequestWrapper
+
+
Remote username.
+
+
getRoleFormat() - Method in class waffle.servlet.NegotiateSecurityFilter
+
+
Principal format.
+
+
getRolesString() - Method in class waffle.servlet.WindowsPrincipal
+
+
Get an array of roles as a string.
+
+
getSecurityPackage() - Method in class waffle.util.AuthorizationHeader
+
+
Returns a supported security package string.
+
+
getSecurityPackage() - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
 
+
getSecurityPackage() - Method in interface waffle.windows.auth.IWindowsSecurityContext
+
+
Security package name.
+
+
getSid() - Method in class waffle.servlet.WindowsPrincipal
+
+
Byte representation of the SID.
+
+
getSid() - Method in class waffle.windows.auth.impl.WindowsIdentityImpl
+
 
+
getSid() - Method in interface waffle.windows.auth.IWindowsIdentity
+
+
Sid.
+
+
getSidString() - Method in class waffle.servlet.WindowsPrincipal
+
+
String representation of the SID.
+
+
getSidString() - Method in class waffle.windows.auth.impl.WindowsAccountImpl
+
 
+
getSidString() - Method in class waffle.windows.auth.impl.WindowsIdentityImpl
+
 
+
getSidString() - Method in interface waffle.windows.auth.IWindowsAccount
+
+
Security identifier.
+
+
getSidString() - Method in interface waffle.windows.auth.IWindowsIdentity
+
+
Sid.
+
+
getSidString() - Method in class waffle.windows.auth.WindowsAccount
+
+
Gets the sid string.
+
+
getToken() - Method in class waffle.util.AuthorizationHeader
+
+
Gets the token.
+
+
getToken() - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
 
+
getToken() - Method in interface waffle.windows.auth.IWindowsSecurityContext
+
+
Token.
+
+
getTokenBytes() - Method in class waffle.util.AuthorizationHeader
+
+
Gets the token bytes.
+
+
getTrustDirectionString() - Method in class waffle.windows.auth.impl.WindowsDomainImpl
+
 
+
getTrustDirectionString() - Method in interface waffle.windows.auth.IWindowsDomain
+
+
Trust direction.
+
+
getTrustTypeString() - Method in class waffle.windows.auth.impl.WindowsDomainImpl
+
 
+
getTrustTypeString() - Method in interface waffle.windows.auth.IWindowsDomain
+
+
Trust type.
+
+
getUserPrincipal() - Method in class waffle.servlet.NegotiateRequestWrapper
+
+
User principal.
+
+
getWaffleInfo() - Method in class waffle.util.WaffleInfo
+
+
Get a Document with basic system information.
+
+
getWaffleInfoResponse(HttpServletRequest, HttpServletResponse) - Method in class waffle.servlet.WaffleInfoServlet
+
+
Gets the waffle info response.
+
+
GroupPrincipal - Class in waffle.jaas
+
+
Deprecated. +
This class is deprecated as hiding a principal inside another principal is not JAAS compliant. Use the + Principals in the Subject to directly enroll groups or roles by name.
+
+
+
GroupPrincipal(String) - Constructor for class waffle.jaas.GroupPrincipal
+
+
Deprecated.
+
Instantiates a new group principal.
+
+
+

H

+
+
hashCode() - Method in class waffle.jaas.RolePrincipal
+
+
Role Principal HashCode for FQN.
+
+
hashCode() - Method in class waffle.jaas.UserPrincipal
+
 
+
hashCode() - Method in class waffle.servlet.WindowsPrincipal
+
 
+
hashCode() - Method in class waffle.windows.auth.WindowsAccount
+
 
+
hasRole(String) - Method in class waffle.servlet.WindowsPrincipal
+
+
Checks whether the principal has a given role.
+
+
+

I

+
+
impersonate() - Method in class waffle.windows.auth.impl.WindowsIdentityImpl
+
 
+
impersonate() - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
 
+
impersonate() - Method in interface waffle.windows.auth.IWindowsIdentity
+
+
Impersonate a logged on user.
+
+
impersonate() - Method in interface waffle.windows.auth.IWindowsSecurityContext
+
+
Impersonate this security context.
+
+
init(FilterConfig) - Method in class waffle.servlet.CorsAwareNegotiateSecurityFilter
+
 
+
init(FilterConfig) - Method in class waffle.servlet.NegotiateSecurityFilter
+
 
+
initialize() - Method in class waffle.windows.auth.impl.WindowsCredentialsHandleImpl
+
+
Initialize a new credentials handle.
+
+
initialize() - Method in interface waffle.windows.auth.IWindowsCredentialsHandle
+
+
Initialize.
+
+
initialize(Sspi.CtxtHandle, Sspi.SecBufferDesc, String) - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
 
+
initialize(Sspi.CtxtHandle, Sspi.SecBufferDesc, String) - Method in interface waffle.windows.auth.IWindowsSecurityContext
+
+
Initialize the security context, continuing from a previous one.
+
+
initialize(Subject, CallbackHandler, Map<String, ?>, Map<String, ?>) - Method in class waffle.jaas.WindowsLoginModule
+
 
+
initParameter(String, String) - Method in class waffle.servlet.spi.BasicSecurityFilterProvider
+
+
Init configuration parameters.
+
+
initParameter(String, String) - Method in class waffle.servlet.spi.NegotiateSecurityFilterProvider
+
 
+
initParameter(String, String) - Method in interface waffle.servlet.spi.SecurityFilterProvider
+
+
Init a parameter.
+
+
isAllowGuestLogin() - Method in class waffle.jaas.WindowsLoginModule
+
+
True if Guest login permitted.
+
+
isAllowGuestLogin() - Method in class waffle.servlet.NegotiateSecurityFilter
+
+
True if guest login is allowed.
+
+
isBearerAuthorizationHeader() - Method in class waffle.util.AuthorizationHeader
+
+
Is Bearer Authorization Header will return true if 'BEARER' exists.
+
+
isContinue() - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
 
+
isContinue() - Method in interface waffle.windows.auth.IWindowsSecurityContext
+
+
True if protocol requires continuation.
+
+
isDebug() - Method in class waffle.jaas.WindowsLoginModule
+
+
True if Debug is enabled.
+
+
isGuest() - Method in class waffle.windows.auth.impl.WindowsIdentityImpl
+
 
+
isGuest() - Method in interface waffle.windows.auth.IWindowsIdentity
+
+
Returns true if the identity represents a Guest account.
+
+
isImpersonate() - Method in class waffle.servlet.NegotiateSecurityFilter
+
+
Checks if is impersonate.
+
+
isMember(Principal) - Method in class waffle.jaas.GroupPrincipal
+
+
Deprecated.
+
Is user principal a member of the group.
+
+
isNegTokenArg(byte[]) - Static method in class waffle.util.SPNegoMessage
+
+
Checks if is neg token arg.
+
+
isNegTokenInit(byte[]) - Static method in class waffle.util.SPNegoMessage
+
+
Checks if is neg token init.
+
+
isNtlmMessage(byte[]) - Static method in class waffle.util.NtlmMessage
+
+
Checks if is ntlm message.
+
+
isNtlmType1Message() - Method in class waffle.util.AuthorizationHeader
+
+
Checks if is ntlm type1 message.
+
+
isNtlmType1PostAuthorizationHeader() - Method in class waffle.util.AuthorizationHeader
+
+
When using NTLM authentication and the browser is making a POST request, it preemptively sends a Type 2 + authentication message (without the POSTed data).
+
+
isNull() - Method in class waffle.util.AuthorizationHeader
+
+
Checks if is null.
+
+
isPreflight(HttpServletRequest) - Static method in class waffle.util.CorsPreFlightCheck
+
+
Checks if is preflight.
+
+
isPrincipalException(HttpServletRequest) - Method in class waffle.servlet.spi.BasicSecurityFilterProvider
+
 
+
isPrincipalException(HttpServletRequest) - Method in class waffle.servlet.spi.NegotiateSecurityFilterProvider
+
 
+
isPrincipalException(HttpServletRequest) - Method in interface waffle.servlet.spi.SecurityFilterProvider
+
+
Returns true if despite having a principal authentication needs to happen.
+
+
isPrincipalException(HttpServletRequest) - Method in class waffle.servlet.spi.SecurityFilterProviderCollection
+
+
Returns true if authentication still needs to happen despite an existing principal.
+
+
isSecurityPackageSupported(String) - Method in class waffle.servlet.spi.BasicSecurityFilterProvider
+
 
+
isSecurityPackageSupported(String) - Method in class waffle.servlet.spi.NegotiateSecurityFilterProvider
+
 
+
isSecurityPackageSupported(String) - Method in interface waffle.servlet.spi.SecurityFilterProvider
+
+
Tests whether a specific security package is supported.
+
+
isSecurityPackageSupported(String) - Method in class waffle.servlet.spi.SecurityFilterProviderCollection
+
+
Tests whether a specific security package is supported by any of the underlying providers.
+
+
isSPNegTokenInitMessage() - Method in class waffle.util.AuthorizationHeader
+
+
Checks if is SP nego message.
+
+
isUserInRole(String) - Method in class waffle.servlet.NegotiateRequestWrapper
+
+
Returns true if the user is in a given role.
+
+
IWindowsAccount - Interface in waffle.windows.auth
+
+
Windows account.
+
+
IWindowsAuthProvider - Interface in waffle.windows.auth
+
+
Implements Windows authentication functions.
+
+
IWindowsComputer - Interface in waffle.windows.auth
+
+
A Windows Computer.
+
+
IWindowsCredentialsHandle - Interface in waffle.windows.auth
+
+
Windows credentials handle.
+
+
IWindowsDomain - Interface in waffle.windows.auth
+
+
A Windows Domain.
+
+
IWindowsIdentity - Interface in waffle.windows.auth
+
+
A Windows Identity.
+
+
IWindowsImpersonationContext - Interface in waffle.windows.auth
+
+
A Windows impersonation context.
+
+
IWindowsSecurityContext - Interface in waffle.windows.auth
+
+
A Windows security context.
+
+
+

L

+
+
login() - Method in class waffle.jaas.WindowsLoginModule
+
+
Use Windows SSPI to authenticate a username with a password.
+
+
logonDomainUser(String, String, String) - Method in class waffle.windows.auth.impl.WindowsAuthProviderImpl
+
 
+
logonDomainUser(String, String, String) - Method in interface waffle.windows.auth.IWindowsAuthProvider
+
+
The LogonDomainUser function attempts to log a user on to the local computer using a network logon type and the + default authentication provider.
+
+
logonDomainUserEx(String, String, String, int, int) - Method in class waffle.windows.auth.impl.WindowsAuthProviderImpl
+
 
+
logonDomainUserEx(String, String, String, int, int) - Method in interface waffle.windows.auth.IWindowsAuthProvider
+
+
The LogonDomainUserEx function attempts to log a user on to the local computer.
+
+
logonUser(String, String) - Method in class waffle.windows.auth.impl.WindowsAuthProviderImpl
+
 
+
logonUser(String, String) - Method in interface waffle.windows.auth.IWindowsAuthProvider
+
+
The LogonUser function attempts to log a user on to the local computer using a network logon type and the default + authentication provider.
+
+
logout() - Method in class waffle.jaas.WindowsLoginModule
+
+
Logout a user.
+
+
lookupAccount(String) - Method in class waffle.windows.auth.impl.WindowsAuthProviderImpl
+
 
+
lookupAccount(String) - Method in interface waffle.windows.auth.IWindowsAuthProvider
+
+
Retrieve a security identifier (SID) for the account and the name of the domain or local computer on which the + account was found.
+
+
+

M

+
+
main(String[]) - Static method in class waffle.util.WaffleInfo
+
+
Print system information.
+
+
members() - Method in class waffle.jaas.GroupPrincipal
+
+
Deprecated.
+
Member enumeration.
+
+
+

N

+
+
NegotiateRequestWrapper - Class in waffle.servlet
+
+
Negotiate Request wrapper.
+
+
NegotiateRequestWrapper(HttpServletRequest, WindowsPrincipal) - Constructor for class waffle.servlet.NegotiateRequestWrapper
+
+
Instantiates a new negotiate request wrapper.
+
+
NegotiateSecurityFilter - Class in waffle.servlet
+
+
A Negotiate (NTLM/Kerberos) Security Filter.
+
+
NegotiateSecurityFilter() - Constructor for class waffle.servlet.NegotiateSecurityFilter
+
+
Instantiates a new negotiate security filter.
+
+
NegotiateSecurityFilterProvider - Class in waffle.servlet.spi
+
+
A negotiate security filter provider.
+
+
NegotiateSecurityFilterProvider(IWindowsAuthProvider) - Constructor for class waffle.servlet.spi.NegotiateSecurityFilterProvider
+
+
Instantiates a new negotiate security filter provider.
+
+
newCache(int) - Static method in interface waffle.util.cache.Cache
+
+
Creates a new cache with the specified timeout.
+
+
newCache(long) - Method in interface waffle.util.cache.CacheSupplier
+
+
Creates a new cache with the specified timeout
+
+
newCache(long) - Method in class waffle.util.cache.CaffeineCacheSupplier
+
 
+
NONE - Enum constant in enum waffle.windows.auth.PrincipalFormat
+
+
The none.
+
+
NtlmMessage - Class in waffle.util
+
+
Rudimentary NTLM message utility.
+
+
NtlmServletRequest - Class in waffle.util
+
+
The Class NtlmServletRequest.
+
+
+

P

+
+
PrincipalFormat - Enum in waffle.windows.auth
+
+
The Enum PrincipalFormat.
+
+
put(K, V) - Method in interface waffle.util.cache.Cache
+
+
Stores a binding for the key and the value in the cache
+
+
put(K, V) - Method in class waffle.util.cache.CaffeineCache
+
 
+
+

R

+
+
remove(K) - Method in interface waffle.util.cache.Cache
+
+
Removes the binding for the key from the cache
+
+
remove(K) - Method in class waffle.util.cache.CaffeineCache
+
 
+
removeMember(Principal) - Method in class waffle.jaas.GroupPrincipal
+
+
Deprecated.
+
Remove user from member.
+
+
resetSecurityToken(String) - Method in class waffle.windows.auth.impl.WindowsAuthProviderImpl
+
 
+
resetSecurityToken(String) - Method in interface waffle.windows.auth.IWindowsAuthProvider
+
+
Reset a previously saved continuation security token for a given connection id.
+
+
revertToSelf() - Method in class waffle.windows.auth.impl.WindowsIdentityImpersonationContextImpl
+
 
+
revertToSelf() - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl
+
 
+
revertToSelf() - Method in interface waffle.windows.auth.IWindowsImpersonationContext
+
+
Terminate the impersonation of a client application.
+
+
RolePrincipal - Class in waffle.jaas
+
+
Role principal.
+
+
RolePrincipal(String) - Constructor for class waffle.jaas.RolePrincipal
+
+
A windows principal.
+
+
+

S

+
+
SecurityFilterProvider - Interface in waffle.servlet.spi
+
+
A security filter provider.
+
+
SecurityFilterProviderCollection - Class in waffle.servlet.spi
+
+
A collection of security filter providers.
+
+
SecurityFilterProviderCollection(String[], IWindowsAuthProvider) - Constructor for class waffle.servlet.spi.SecurityFilterProviderCollection
+
+
Instantiates a new security filter provider collection.
+
+
SecurityFilterProviderCollection(SecurityFilterProvider[]) - Constructor for class waffle.servlet.spi.SecurityFilterProviderCollection
+
+
Instantiates a new security filter provider collection.
+
+
SecurityFilterProviderCollection(IWindowsAuthProvider) - Constructor for class waffle.servlet.spi.SecurityFilterProviderCollection
+
+
Instantiates a new security filter provider collection.
+
+
sendUnauthorized(HttpServletResponse) - Method in class waffle.servlet.spi.BasicSecurityFilterProvider
+
 
+
sendUnauthorized(HttpServletResponse) - Method in class waffle.servlet.spi.NegotiateSecurityFilterProvider
+
 
+
sendUnauthorized(HttpServletResponse) - Method in interface waffle.servlet.spi.SecurityFilterProvider
+
+
Add authentication method headers.
+
+
sendUnauthorized(HttpServletResponse) - Method in class waffle.servlet.spi.SecurityFilterProviderCollection
+
+
Send authorization headers.
+
+
setAllowGuestLogin(boolean) - Method in class waffle.jaas.WindowsLoginModule
+
+
Set whether Guest login is permitted.
+
+
setAuth(IWindowsAuthProvider) - Method in class waffle.jaas.WindowsLoginModule
+
+
Set Windows auth provider.
+
+
setAuth(IWindowsAuthProvider) - Method in class waffle.servlet.NegotiateSecurityFilter
+
+
Set Windows auth provider.
+
+
setContinue(boolean) - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
+
Sets the continue.
+
+
setCredentialsHandle(IWindowsCredentialsHandle) - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
+
Sets the credentials handle.
+
+
setImpersonate(boolean) - Method in class waffle.servlet.NegotiateSecurityFilter
+
+
Enable/Disable impersonation.
+
+
setPrincipalFormat(String) - Method in class waffle.servlet.NegotiateSecurityFilter
+
+
Set the principal format.
+
+
setPrincipalName(String) - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
+
Sets the principal name.
+
+
setProtocols(List<String>) - Method in class waffle.servlet.spi.NegotiateSecurityFilterProvider
+
+
Sets the protocols.
+
+
setRealm(String) - Method in class waffle.servlet.spi.BasicSecurityFilterProvider
+
+
Set the protection space.
+
+
setRoleFormat(String) - Method in class waffle.servlet.NegotiateSecurityFilter
+
+
Set the principal format.
+
+
setSecurityContext(Sspi.CtxtHandle) - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
+
Sets the security context.
+
+
setSecurityPackage(String) - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
+
Sets the security package.
+
+
setToken(byte[]) - Method in class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
+
Sets the token.
+
+
SID - Enum constant in enum waffle.windows.auth.PrincipalFormat
+
+
The sid.
+
+
size() - Method in class waffle.servlet.spi.SecurityFilterProviderCollection
+
+
Number of providers.
+
+
size() - Method in interface waffle.util.cache.Cache
+
+
Returns the number of bindings in this cache
+
+
size() - Method in class waffle.util.cache.CaffeineCache
+
 
+
SPNegoMessage - Class in waffle.util
+
+
Rudimentary NTLM message utility.
+
+
+

T

+
+
toPrettyXML(Document) - Static method in class waffle.util.WaffleInfo
+
+
To pretty xml.
+
+
toString() - Method in class waffle.jaas.GroupPrincipal
+
+
Deprecated.
+
toString() - Method in class waffle.servlet.WindowsPrincipal
+
 
+
toString() - Method in class waffle.util.AuthorizationHeader
+
 
+
+

U

+
+
UserPrincipal - Class in waffle.jaas
+
+
User Principal.
+
+
UserPrincipal(String) - Constructor for class waffle.jaas.UserPrincipal
+
+
A user principal.
+
+
+

V

+
+
valueBound(HttpSessionBindingEvent) - Method in class waffle.servlet.AutoDisposableWindowsPrincipal
+
 
+
valueOf(String) - Static method in enum waffle.windows.auth.PrincipalFormat
+
+
Returns the enum constant of this type with the specified name.
+
+
values() - Static method in enum waffle.windows.auth.PrincipalFormat
+
+
Returns an array containing the constants of this enum type, in +the order they are declared.
+
+
valueUnbound(HttpSessionBindingEvent) - Method in class waffle.servlet.AutoDisposableWindowsPrincipal
+
 
+
+

W

+
+
waffle.jaas - package waffle.jaas
+
+
Waffle JNA JAAS Package.
+
+
waffle.jna.jakarta - module waffle.jna.jakarta
+
 
+
waffle.servlet - package waffle.servlet
+
+
Waffle JNA Servlet Package.
+
+
waffle.servlet.spi - package waffle.servlet.spi
+
+
Waffle JNA Servlet SPI Package.
+
+
waffle.util - package waffle.util
+
+
Waffle JNA Utility Package.
+
+
waffle.util.cache - package waffle.util.cache
+
+
Waffle JNA Cache Package.
+
+
waffle.windows.auth - package waffle.windows.auth
+
+
Waffle JNA Windows Authorization Package.
+
+
waffle.windows.auth.impl - package waffle.windows.auth.impl
+
+
Waffle JNA Windows Authorization Implementation Package.
+
+
WaffleInfo - Class in waffle.util
+
+
A Utility class to read system info to help troubleshoot WAFFLE system configuration.
+
+
WaffleInfo() - Constructor for class waffle.util.WaffleInfo
+
 
+
WaffleInfoServlet - Class in waffle.servlet
+
+
A servlet that returns WaffleInfo as XML.
+
+
WaffleInfoServlet() - Constructor for class waffle.servlet.WaffleInfoServlet
+
 
+
WindowsAccount - Class in waffle.windows.auth
+
+
A flattened Windows Account used in a Windows principal.
+
+
WindowsAccount(IWindowsAccount) - Constructor for class waffle.windows.auth.WindowsAccount
+
+
Instantiates a new windows account.
+
+
WindowsAccountImpl - Class in waffle.windows.auth.impl
+
+
Windows Account.
+
+
WindowsAccountImpl(Advapi32Util.Account) - Constructor for class waffle.windows.auth.impl.WindowsAccountImpl
+
+
Windows Account.
+
+
WindowsAccountImpl(String) - Constructor for class waffle.windows.auth.impl.WindowsAccountImpl
+
+
Windows Account.
+
+
WindowsAccountImpl(String, String) - Constructor for class waffle.windows.auth.impl.WindowsAccountImpl
+
+
Windows Account.
+
+
WindowsAuthProviderImpl - Class in waffle.windows.auth.impl
+
+
Windows Auth Provider.
+
+
WindowsAuthProviderImpl() - Constructor for class waffle.windows.auth.impl.WindowsAuthProviderImpl
+
+
Instantiates a new windows auth provider impl.
+
+
WindowsAuthProviderImpl(int) - Constructor for class waffle.windows.auth.impl.WindowsAuthProviderImpl
+
+
A Windows authentication provider.
+
+
WindowsComputerImpl - Class in waffle.windows.auth.impl
+
+
Windows Computer.
+
+
WindowsComputerImpl(String) - Constructor for class waffle.windows.auth.impl.WindowsComputerImpl
+
+
Instantiates a new windows computer impl.
+
+
WindowsCredentialsHandleImpl - Class in waffle.windows.auth.impl
+
+
Pre-existing credentials of a security principal.
+
+
WindowsCredentialsHandleImpl(String, int, String) - Constructor for class waffle.windows.auth.impl.WindowsCredentialsHandleImpl
+
+
A new Windows credentials handle.
+
+
WindowsDomainImpl - Class in waffle.windows.auth.impl
+
+
Windows Domain.
+
+
WindowsDomainImpl(Netapi32Util.DomainTrust) - Constructor for class waffle.windows.auth.impl.WindowsDomainImpl
+
+
Instantiates a new windows domain impl.
+
+
WindowsDomainImpl(String) - Constructor for class waffle.windows.auth.impl.WindowsDomainImpl
+
+
Instantiates a new windows domain impl.
+
+
WindowsIdentityImpersonationContextImpl - Class in waffle.windows.auth.impl
+
+
The Class WindowsIdentityImpersonationContextImpl.
+
+
WindowsIdentityImpersonationContextImpl(WinNT.HANDLE) - Constructor for class waffle.windows.auth.impl.WindowsIdentityImpersonationContextImpl
+
+
Impersonate a logged on user.
+
+
WindowsIdentityImpl - Class in waffle.windows.auth.impl
+
+
Windows Identity.
+
+
WindowsIdentityImpl(WinNT.HANDLE) - Constructor for class waffle.windows.auth.impl.WindowsIdentityImpl
+
+
Instantiates a new windows identity impl.
+
+
WindowsLoginModule - Class in waffle.jaas
+
+
A Java Security login module for Windows authentication.
+
+
WindowsLoginModule() - Constructor for class waffle.jaas.WindowsLoginModule
+
 
+
WindowsPrincipal - Class in waffle.servlet
+
+
A Windows Principal.
+
+
WindowsPrincipal(IWindowsIdentity) - Constructor for class waffle.servlet.WindowsPrincipal
+
+
A windows principal.
+
+
WindowsPrincipal(IWindowsIdentity, PrincipalFormat, PrincipalFormat) - Constructor for class waffle.servlet.WindowsPrincipal
+
+
A windows principal.
+
+
WindowsSecurityContextImpersonationContextImpl - Class in waffle.windows.auth.impl
+
+
The Class WindowsSecurityContextImpersonationContextImpl.
+
+
WindowsSecurityContextImpersonationContextImpl(Sspi.CtxtHandle) - Constructor for class waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl
+
+
Instantiates a new windows security context impersonation context impl.
+
+
WindowsSecurityContextImpl - Class in waffle.windows.auth.impl
+
+
Windows Security Context.
+
+
WindowsSecurityContextImpl() - Constructor for class waffle.windows.auth.impl.WindowsSecurityContextImpl
+
 
+
+A B C D E F G H I L M N P R S T U V W 
All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
+ +
+
+ + diff --git a/waffle-jna-jakarta/apidocs/index.html b/waffle-jna-jakarta/apidocs/index.html new file mode 100644 index 0000000000..a5c03c4675 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/index.html @@ -0,0 +1,25 @@ + + + + +waffle-jna-jakarta 3.5.1 API + + + + + + + + + + +
+ +

waffle.jna.jakarta/module-summary.html

+
+ + diff --git a/waffle-jna-jakarta/apidocs/legal/COPYRIGHT b/waffle-jna-jakarta/apidocs/legal/COPYRIGHT new file mode 100644 index 0000000000..ca74fffd91 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/legal/COPYRIGHT @@ -0,0 +1 @@ +Please see ..\java.base\COPYRIGHT diff --git a/waffle-jna-jakarta/apidocs/legal/LICENSE b/waffle-jna-jakarta/apidocs/legal/LICENSE new file mode 100644 index 0000000000..4ad9fe4011 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/legal/LICENSE @@ -0,0 +1 @@ +Please see ..\java.base\LICENSE diff --git a/waffle-jna-jakarta/apidocs/legal/jquery.md b/waffle-jna-jakarta/apidocs/legal/jquery.md new file mode 100644 index 0000000000..a763ec6f18 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/legal/jquery.md @@ -0,0 +1,26 @@ +## jQuery v3.7.1 + +### jQuery License +``` +jQuery v 3.7.1 +Copyright OpenJS Foundation and other contributors, https://openjsf.org/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +``` diff --git a/waffle-jna-jakarta/apidocs/legal/jqueryUI.md b/waffle-jna-jakarta/apidocs/legal/jqueryUI.md new file mode 100644 index 0000000000..8bda9d7a85 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/legal/jqueryUI.md @@ -0,0 +1,49 @@ +## jQuery UI v1.13.2 + +### jQuery UI License +``` +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery-ui + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the demos directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +``` diff --git a/waffle-jna-jakarta/apidocs/link.svg b/waffle-jna-jakarta/apidocs/link.svg new file mode 100644 index 0000000000..dadef51c52 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/link.svg @@ -0,0 +1,31 @@ + + + + + + + + diff --git a/waffle-jna-jakarta/apidocs/member-search-index.js b/waffle-jna-jakarta/apidocs/member-search-index.js new file mode 100644 index 0000000000..be0e80a384 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/member-search-index.js @@ -0,0 +1 @@ +memberSearchIndex = [{"p":"waffle.jaas","c":"WindowsLoginModule","l":"abort()"},{"p":"waffle.windows.auth.impl","c":"WindowsAuthProviderImpl","l":"acceptSecurityToken(String, byte[], String)","u":"acceptSecurityToken(java.lang.String,byte[],java.lang.String)"},{"p":"waffle.windows.auth","c":"IWindowsAuthProvider","l":"acceptSecurityToken(String, byte[], String)","u":"acceptSecurityToken(java.lang.String,byte[],java.lang.String)"},{"p":"waffle.util","c":"WaffleInfo","l":"addAccountInfo(Document, Element, IWindowsAccount)","u":"addAccountInfo(org.w3c.dom.Document,org.w3c.dom.Element,waffle.windows.auth.IWindowsAccount)"},{"p":"waffle.jaas","c":"GroupPrincipal","l":"addMember(Principal)","u":"addMember(java.security.Principal)"},{"p":"waffle.util","c":"AuthorizationHeader","l":"AuthorizationHeader(HttpServletRequest)","u":"%3Cinit%3E(jakarta.servlet.http.HttpServletRequest)"},{"p":"waffle.servlet","c":"AutoDisposableWindowsPrincipal","l":"AutoDisposableWindowsPrincipal(IWindowsIdentity)","u":"%3Cinit%3E(waffle.windows.auth.IWindowsIdentity)"},{"p":"waffle.servlet","c":"AutoDisposableWindowsPrincipal","l":"AutoDisposableWindowsPrincipal(IWindowsIdentity, PrincipalFormat, PrincipalFormat)","u":"%3Cinit%3E(waffle.windows.auth.IWindowsIdentity,waffle.windows.auth.PrincipalFormat,waffle.windows.auth.PrincipalFormat)"},{"p":"waffle.servlet.spi","c":"BasicSecurityFilterProvider","l":"BasicSecurityFilterProvider(IWindowsAuthProvider)","u":"%3Cinit%3E(waffle.windows.auth.IWindowsAuthProvider)"},{"p":"waffle.windows.auth","c":"PrincipalFormat","l":"BOTH"},{"p":"waffle.util.cache","c":"CaffeineCache","l":"CaffeineCache(long)","u":"%3Cinit%3E(long)"},{"p":"waffle.util.cache","c":"CaffeineCacheSupplier","l":"CaffeineCacheSupplier()","u":"%3Cinit%3E()"},{"p":"waffle.jaas","c":"WindowsLoginModule","l":"commit()"},{"p":"waffle.windows.auth.impl","c":"WindowsAuthProviderImpl","l":"CONTINUE_CONTEXT_TIMEOUT"},{"p":"waffle.servlet","c":"CorsAwareNegotiateSecurityFilter","l":"CorsAwareNegotiateSecurityFilter()","u":"%3Cinit%3E()"},{"p":"waffle.servlet","c":"CorsAwareNegotiateSecurityFilter","l":"destroy()"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"destroy()"},{"p":"waffle.windows.auth.impl","c":"WindowsCredentialsHandleImpl","l":"dispose()"},{"p":"waffle.windows.auth.impl","c":"WindowsIdentityImpl","l":"dispose()"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"dispose()"},{"p":"waffle.windows.auth","c":"IWindowsCredentialsHandle","l":"dispose()"},{"p":"waffle.windows.auth","c":"IWindowsIdentity","l":"dispose()"},{"p":"waffle.windows.auth","c":"IWindowsSecurityContext","l":"dispose()"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"dispose(Sspi.CtxtHandle)","u":"dispose(com.sun.jna.platform.win32.Sspi.CtxtHandle)"},{"p":"waffle.servlet.spi","c":"BasicSecurityFilterProvider","l":"doFilter(HttpServletRequest, HttpServletResponse)","u":"doFilter(jakarta.servlet.http.HttpServletRequest,jakarta.servlet.http.HttpServletResponse)"},{"p":"waffle.servlet.spi","c":"NegotiateSecurityFilterProvider","l":"doFilter(HttpServletRequest, HttpServletResponse)","u":"doFilter(jakarta.servlet.http.HttpServletRequest,jakarta.servlet.http.HttpServletResponse)"},{"p":"waffle.servlet.spi","c":"SecurityFilterProvider","l":"doFilter(HttpServletRequest, HttpServletResponse)","u":"doFilter(jakarta.servlet.http.HttpServletRequest,jakarta.servlet.http.HttpServletResponse)"},{"p":"waffle.servlet.spi","c":"SecurityFilterProviderCollection","l":"doFilter(HttpServletRequest, HttpServletResponse)","u":"doFilter(jakarta.servlet.http.HttpServletRequest,jakarta.servlet.http.HttpServletResponse)"},{"p":"waffle.servlet","c":"CorsAwareNegotiateSecurityFilter","l":"doFilter(ServletRequest, ServletResponse, FilterChain)","u":"doFilter(jakarta.servlet.ServletRequest,jakarta.servlet.ServletResponse,jakarta.servlet.FilterChain)"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"doFilter(ServletRequest, ServletResponse, FilterChain)","u":"doFilter(jakarta.servlet.ServletRequest,jakarta.servlet.ServletResponse,jakarta.servlet.FilterChain)"},{"p":"waffle.servlet","c":"WaffleInfoServlet","l":"doGet(HttpServletRequest, HttpServletResponse)","u":"doGet(jakarta.servlet.http.HttpServletRequest,jakarta.servlet.http.HttpServletResponse)"},{"p":"waffle.servlet","c":"WaffleInfoServlet","l":"doPost(HttpServletRequest, HttpServletResponse)","u":"doPost(jakarta.servlet.http.HttpServletRequest,jakarta.servlet.http.HttpServletResponse)"},{"p":"waffle.jaas","c":"RolePrincipal","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"waffle.jaas","c":"UserPrincipal","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"waffle.servlet","c":"WindowsPrincipal","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"waffle.windows.auth","c":"WindowsAccount","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"waffle.windows.auth","c":"PrincipalFormat","l":"FQN"},{"p":"waffle.util.cache","c":"Cache","l":"get(K)"},{"p":"waffle.util.cache","c":"CaffeineCache","l":"get(K)"},{"p":"waffle.jaas","c":"WindowsLoginModule","l":"getAuth()"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"getAuth()"},{"p":"waffle.util","c":"WaffleInfo","l":"getAuthProviderInfo(Document)","u":"getAuthProviderInfo(org.w3c.dom.Document)"},{"p":"waffle.servlet","c":"NegotiateRequestWrapper","l":"getAuthType()"},{"p":"waffle.servlet.spi","c":"SecurityFilterProviderCollection","l":"getByClassName(String)","u":"getByClassName(java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsComputerImpl","l":"getComputerName()"},{"p":"waffle.windows.auth","c":"IWindowsComputer","l":"getComputerName()"},{"p":"waffle.util","c":"NtlmServletRequest","l":"getConnectionId(HttpServletRequest)","u":"getConnectionId(jakarta.servlet.http.HttpServletRequest)"},{"p":"waffle.windows.auth.impl","c":"WindowsAuthProviderImpl","l":"getContinueContextsSize()"},{"p":"waffle.windows.auth.impl","c":"WindowsCredentialsHandleImpl","l":"getCurrent(String)","u":"getCurrent(java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"getCurrent(String, String)","u":"getCurrent(java.lang.String,java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsAuthProviderImpl","l":"getCurrentComputer()"},{"p":"waffle.windows.auth","c":"IWindowsAuthProvider","l":"getCurrentComputer()"},{"p":"waffle.windows.auth.impl","c":"WindowsAccountImpl","l":"getCurrentUsername()"},{"p":"waffle.windows.auth.impl","c":"WindowsAccountImpl","l":"getDomain()"},{"p":"waffle.windows.auth","c":"IWindowsAccount","l":"getDomain()"},{"p":"waffle.windows.auth","c":"WindowsAccount","l":"getDomain()"},{"p":"waffle.windows.auth.impl","c":"WindowsAuthProviderImpl","l":"getDomains()"},{"p":"waffle.windows.auth","c":"IWindowsAuthProvider","l":"getDomains()"},{"p":"waffle.util","c":"WaffleInfo","l":"getException(Document, Exception)","u":"getException(org.w3c.dom.Document,java.lang.Exception)"},{"p":"waffle.windows.auth.impl","c":"WindowsAccountImpl","l":"getFqn()"},{"p":"waffle.windows.auth.impl","c":"WindowsDomainImpl","l":"getFqn()"},{"p":"waffle.windows.auth.impl","c":"WindowsIdentityImpl","l":"getFqn()"},{"p":"waffle.windows.auth","c":"IWindowsAccount","l":"getFqn()"},{"p":"waffle.windows.auth","c":"IWindowsDomain","l":"getFqn()"},{"p":"waffle.windows.auth","c":"IWindowsIdentity","l":"getFqn()"},{"p":"waffle.windows.auth","c":"WindowsAccount","l":"getFqn()"},{"p":"waffle.servlet","c":"WindowsPrincipal","l":"getGroups()"},{"p":"waffle.windows.auth.impl","c":"WindowsComputerImpl","l":"getGroups()"},{"p":"waffle.windows.auth.impl","c":"WindowsIdentityImpl","l":"getGroups()"},{"p":"waffle.windows.auth","c":"IWindowsComputer","l":"getGroups()"},{"p":"waffle.windows.auth","c":"IWindowsIdentity","l":"getGroups()"},{"p":"waffle.windows.auth.impl","c":"WindowsCredentialsHandleImpl","l":"getHandle()"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"getHandle()"},{"p":"waffle.windows.auth","c":"IWindowsCredentialsHandle","l":"getHandle()"},{"p":"waffle.windows.auth","c":"IWindowsSecurityContext","l":"getHandle()"},{"p":"waffle.util","c":"AuthorizationHeader","l":"getHeader()"},{"p":"waffle.servlet","c":"WindowsPrincipal","l":"getIdentity()"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"getIdentity()"},{"p":"waffle.windows.auth","c":"IWindowsSecurityContext","l":"getIdentity()"},{"p":"waffle.windows.auth.impl","c":"WindowsComputerImpl","l":"getJoinStatus()"},{"p":"waffle.windows.auth","c":"IWindowsComputer","l":"getJoinStatus()"},{"p":"waffle.util","c":"WaffleInfo","l":"getLookupInfo(Document, String)","u":"getLookupInfo(org.w3c.dom.Document,java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsComputerImpl","l":"getMemberOf()"},{"p":"waffle.windows.auth","c":"IWindowsComputer","l":"getMemberOf()"},{"p":"waffle.util","c":"NtlmMessage","l":"getMessageType(byte[])"},{"p":"waffle.jaas","c":"GroupPrincipal","l":"getName()"},{"p":"waffle.jaas","c":"RolePrincipal","l":"getName()"},{"p":"waffle.jaas","c":"UserPrincipal","l":"getName()"},{"p":"waffle.servlet","c":"WindowsPrincipal","l":"getName()"},{"p":"waffle.windows.auth.impl","c":"WindowsAccountImpl","l":"getName()"},{"p":"waffle.windows.auth","c":"IWindowsAccount","l":"getName()"},{"p":"waffle.windows.auth","c":"WindowsAccount","l":"getName()"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"getPrincipalFormat()"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"getPrincipalName()"},{"p":"waffle.windows.auth","c":"IWindowsSecurityContext","l":"getPrincipalName()"},{"p":"waffle.servlet.spi","c":"NegotiateSecurityFilterProvider","l":"getProtocols()"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"getProviders()"},{"p":"waffle.servlet.spi","c":"BasicSecurityFilterProvider","l":"getRealm()"},{"p":"waffle.servlet","c":"NegotiateRequestWrapper","l":"getRemoteUser()"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"getRoleFormat()"},{"p":"waffle.servlet","c":"WindowsPrincipal","l":"getRolesString()"},{"p":"waffle.util","c":"AuthorizationHeader","l":"getSecurityPackage()"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"getSecurityPackage()"},{"p":"waffle.windows.auth","c":"IWindowsSecurityContext","l":"getSecurityPackage()"},{"p":"waffle.servlet","c":"WindowsPrincipal","l":"getSid()"},{"p":"waffle.windows.auth.impl","c":"WindowsIdentityImpl","l":"getSid()"},{"p":"waffle.windows.auth","c":"IWindowsIdentity","l":"getSid()"},{"p":"waffle.servlet","c":"WindowsPrincipal","l":"getSidString()"},{"p":"waffle.windows.auth.impl","c":"WindowsAccountImpl","l":"getSidString()"},{"p":"waffle.windows.auth.impl","c":"WindowsIdentityImpl","l":"getSidString()"},{"p":"waffle.windows.auth","c":"IWindowsAccount","l":"getSidString()"},{"p":"waffle.windows.auth","c":"IWindowsIdentity","l":"getSidString()"},{"p":"waffle.windows.auth","c":"WindowsAccount","l":"getSidString()"},{"p":"waffle.util","c":"AuthorizationHeader","l":"getToken()"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"getToken()"},{"p":"waffle.windows.auth","c":"IWindowsSecurityContext","l":"getToken()"},{"p":"waffle.util","c":"AuthorizationHeader","l":"getTokenBytes()"},{"p":"waffle.windows.auth.impl","c":"WindowsDomainImpl","l":"getTrustDirectionString()"},{"p":"waffle.windows.auth","c":"IWindowsDomain","l":"getTrustDirectionString()"},{"p":"waffle.windows.auth.impl","c":"WindowsDomainImpl","l":"getTrustTypeString()"},{"p":"waffle.windows.auth","c":"IWindowsDomain","l":"getTrustTypeString()"},{"p":"waffle.servlet","c":"NegotiateRequestWrapper","l":"getUserPrincipal()"},{"p":"waffle.util","c":"WaffleInfo","l":"getWaffleInfo()"},{"p":"waffle.servlet","c":"WaffleInfoServlet","l":"getWaffleInfoResponse(HttpServletRequest, HttpServletResponse)","u":"getWaffleInfoResponse(jakarta.servlet.http.HttpServletRequest,jakarta.servlet.http.HttpServletResponse)"},{"p":"waffle.jaas","c":"GroupPrincipal","l":"GroupPrincipal(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"waffle.jaas","c":"RolePrincipal","l":"hashCode()"},{"p":"waffle.jaas","c":"UserPrincipal","l":"hashCode()"},{"p":"waffle.servlet","c":"WindowsPrincipal","l":"hashCode()"},{"p":"waffle.windows.auth","c":"WindowsAccount","l":"hashCode()"},{"p":"waffle.servlet","c":"WindowsPrincipal","l":"hasRole(String)","u":"hasRole(java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsIdentityImpl","l":"impersonate()"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"impersonate()"},{"p":"waffle.windows.auth","c":"IWindowsIdentity","l":"impersonate()"},{"p":"waffle.windows.auth","c":"IWindowsSecurityContext","l":"impersonate()"},{"p":"waffle.servlet","c":"CorsAwareNegotiateSecurityFilter","l":"init(FilterConfig)","u":"init(jakarta.servlet.FilterConfig)"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"init(FilterConfig)","u":"init(jakarta.servlet.FilterConfig)"},{"p":"waffle.windows.auth.impl","c":"WindowsCredentialsHandleImpl","l":"initialize()"},{"p":"waffle.windows.auth","c":"IWindowsCredentialsHandle","l":"initialize()"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"initialize(Sspi.CtxtHandle, Sspi.SecBufferDesc, String)","u":"initialize(com.sun.jna.platform.win32.Sspi.CtxtHandle,com.sun.jna.platform.win32.Sspi.SecBufferDesc,java.lang.String)"},{"p":"waffle.windows.auth","c":"IWindowsSecurityContext","l":"initialize(Sspi.CtxtHandle, Sspi.SecBufferDesc, String)","u":"initialize(com.sun.jna.platform.win32.Sspi.CtxtHandle,com.sun.jna.platform.win32.Sspi.SecBufferDesc,java.lang.String)"},{"p":"waffle.jaas","c":"WindowsLoginModule","l":"initialize(Subject, CallbackHandler, Map, Map)","u":"initialize(javax.security.auth.Subject,javax.security.auth.callback.CallbackHandler,java.util.Map,java.util.Map)"},{"p":"waffle.servlet.spi","c":"BasicSecurityFilterProvider","l":"initParameter(String, String)","u":"initParameter(java.lang.String,java.lang.String)"},{"p":"waffle.servlet.spi","c":"NegotiateSecurityFilterProvider","l":"initParameter(String, String)","u":"initParameter(java.lang.String,java.lang.String)"},{"p":"waffle.servlet.spi","c":"SecurityFilterProvider","l":"initParameter(String, String)","u":"initParameter(java.lang.String,java.lang.String)"},{"p":"waffle.jaas","c":"WindowsLoginModule","l":"isAllowGuestLogin()"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"isAllowGuestLogin()"},{"p":"waffle.util","c":"AuthorizationHeader","l":"isBearerAuthorizationHeader()"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"isContinue()"},{"p":"waffle.windows.auth","c":"IWindowsSecurityContext","l":"isContinue()"},{"p":"waffle.jaas","c":"WindowsLoginModule","l":"isDebug()"},{"p":"waffle.windows.auth.impl","c":"WindowsIdentityImpl","l":"isGuest()"},{"p":"waffle.windows.auth","c":"IWindowsIdentity","l":"isGuest()"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"isImpersonate()"},{"p":"waffle.jaas","c":"GroupPrincipal","l":"isMember(Principal)","u":"isMember(java.security.Principal)"},{"p":"waffle.util","c":"SPNegoMessage","l":"isNegTokenArg(byte[])"},{"p":"waffle.util","c":"SPNegoMessage","l":"isNegTokenInit(byte[])"},{"p":"waffle.util","c":"NtlmMessage","l":"isNtlmMessage(byte[])"},{"p":"waffle.util","c":"AuthorizationHeader","l":"isNtlmType1Message()"},{"p":"waffle.util","c":"AuthorizationHeader","l":"isNtlmType1PostAuthorizationHeader()"},{"p":"waffle.util","c":"AuthorizationHeader","l":"isNull()"},{"p":"waffle.util","c":"CorsPreFlightCheck","l":"isPreflight(HttpServletRequest)","u":"isPreflight(jakarta.servlet.http.HttpServletRequest)"},{"p":"waffle.servlet.spi","c":"BasicSecurityFilterProvider","l":"isPrincipalException(HttpServletRequest)","u":"isPrincipalException(jakarta.servlet.http.HttpServletRequest)"},{"p":"waffle.servlet.spi","c":"NegotiateSecurityFilterProvider","l":"isPrincipalException(HttpServletRequest)","u":"isPrincipalException(jakarta.servlet.http.HttpServletRequest)"},{"p":"waffle.servlet.spi","c":"SecurityFilterProvider","l":"isPrincipalException(HttpServletRequest)","u":"isPrincipalException(jakarta.servlet.http.HttpServletRequest)"},{"p":"waffle.servlet.spi","c":"SecurityFilterProviderCollection","l":"isPrincipalException(HttpServletRequest)","u":"isPrincipalException(jakarta.servlet.http.HttpServletRequest)"},{"p":"waffle.servlet.spi","c":"BasicSecurityFilterProvider","l":"isSecurityPackageSupported(String)","u":"isSecurityPackageSupported(java.lang.String)"},{"p":"waffle.servlet.spi","c":"NegotiateSecurityFilterProvider","l":"isSecurityPackageSupported(String)","u":"isSecurityPackageSupported(java.lang.String)"},{"p":"waffle.servlet.spi","c":"SecurityFilterProvider","l":"isSecurityPackageSupported(String)","u":"isSecurityPackageSupported(java.lang.String)"},{"p":"waffle.servlet.spi","c":"SecurityFilterProviderCollection","l":"isSecurityPackageSupported(String)","u":"isSecurityPackageSupported(java.lang.String)"},{"p":"waffle.util","c":"AuthorizationHeader","l":"isSPNegTokenInitMessage()"},{"p":"waffle.servlet","c":"NegotiateRequestWrapper","l":"isUserInRole(String)","u":"isUserInRole(java.lang.String)"},{"p":"waffle.jaas","c":"WindowsLoginModule","l":"login()"},{"p":"waffle.windows.auth.impl","c":"WindowsAuthProviderImpl","l":"logonDomainUser(String, String, String)","u":"logonDomainUser(java.lang.String,java.lang.String,java.lang.String)"},{"p":"waffle.windows.auth","c":"IWindowsAuthProvider","l":"logonDomainUser(String, String, String)","u":"logonDomainUser(java.lang.String,java.lang.String,java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsAuthProviderImpl","l":"logonDomainUserEx(String, String, String, int, int)","u":"logonDomainUserEx(java.lang.String,java.lang.String,java.lang.String,int,int)"},{"p":"waffle.windows.auth","c":"IWindowsAuthProvider","l":"logonDomainUserEx(String, String, String, int, int)","u":"logonDomainUserEx(java.lang.String,java.lang.String,java.lang.String,int,int)"},{"p":"waffle.windows.auth.impl","c":"WindowsAuthProviderImpl","l":"logonUser(String, String)","u":"logonUser(java.lang.String,java.lang.String)"},{"p":"waffle.windows.auth","c":"IWindowsAuthProvider","l":"logonUser(String, String)","u":"logonUser(java.lang.String,java.lang.String)"},{"p":"waffle.jaas","c":"WindowsLoginModule","l":"logout()"},{"p":"waffle.windows.auth.impl","c":"WindowsAuthProviderImpl","l":"lookupAccount(String)","u":"lookupAccount(java.lang.String)"},{"p":"waffle.windows.auth","c":"IWindowsAuthProvider","l":"lookupAccount(String)","u":"lookupAccount(java.lang.String)"},{"p":"waffle.util","c":"WaffleInfo","l":"main(String[])","u":"main(java.lang.String[])"},{"p":"waffle.jaas","c":"GroupPrincipal","l":"members()"},{"p":"waffle.servlet","c":"NegotiateRequestWrapper","l":"NegotiateRequestWrapper(HttpServletRequest, WindowsPrincipal)","u":"%3Cinit%3E(jakarta.servlet.http.HttpServletRequest,waffle.servlet.WindowsPrincipal)"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"NegotiateSecurityFilter()","u":"%3Cinit%3E()"},{"p":"waffle.servlet.spi","c":"NegotiateSecurityFilterProvider","l":"NegotiateSecurityFilterProvider(IWindowsAuthProvider)","u":"%3Cinit%3E(waffle.windows.auth.IWindowsAuthProvider)"},{"p":"waffle.util.cache","c":"Cache","l":"newCache(int)"},{"p":"waffle.util.cache","c":"CacheSupplier","l":"newCache(long)"},{"p":"waffle.util.cache","c":"CaffeineCacheSupplier","l":"newCache(long)"},{"p":"waffle.windows.auth","c":"PrincipalFormat","l":"NONE"},{"p":"waffle.util.cache","c":"Cache","l":"put(K, V)","u":"put(K,V)"},{"p":"waffle.util.cache","c":"CaffeineCache","l":"put(K, V)","u":"put(K,V)"},{"p":"waffle.util.cache","c":"Cache","l":"remove(K)"},{"p":"waffle.util.cache","c":"CaffeineCache","l":"remove(K)"},{"p":"waffle.jaas","c":"GroupPrincipal","l":"removeMember(Principal)","u":"removeMember(java.security.Principal)"},{"p":"waffle.windows.auth.impl","c":"WindowsAuthProviderImpl","l":"resetSecurityToken(String)","u":"resetSecurityToken(java.lang.String)"},{"p":"waffle.windows.auth","c":"IWindowsAuthProvider","l":"resetSecurityToken(String)","u":"resetSecurityToken(java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsIdentityImpersonationContextImpl","l":"revertToSelf()"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpersonationContextImpl","l":"revertToSelf()"},{"p":"waffle.windows.auth","c":"IWindowsImpersonationContext","l":"revertToSelf()"},{"p":"waffle.jaas","c":"RolePrincipal","l":"RolePrincipal(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"waffle.servlet.spi","c":"SecurityFilterProviderCollection","l":"SecurityFilterProviderCollection(IWindowsAuthProvider)","u":"%3Cinit%3E(waffle.windows.auth.IWindowsAuthProvider)"},{"p":"waffle.servlet.spi","c":"SecurityFilterProviderCollection","l":"SecurityFilterProviderCollection(SecurityFilterProvider[])","u":"%3Cinit%3E(waffle.servlet.spi.SecurityFilterProvider[])"},{"p":"waffle.servlet.spi","c":"SecurityFilterProviderCollection","l":"SecurityFilterProviderCollection(String[], IWindowsAuthProvider)","u":"%3Cinit%3E(java.lang.String[],waffle.windows.auth.IWindowsAuthProvider)"},{"p":"waffle.servlet.spi","c":"BasicSecurityFilterProvider","l":"sendUnauthorized(HttpServletResponse)","u":"sendUnauthorized(jakarta.servlet.http.HttpServletResponse)"},{"p":"waffle.servlet.spi","c":"NegotiateSecurityFilterProvider","l":"sendUnauthorized(HttpServletResponse)","u":"sendUnauthorized(jakarta.servlet.http.HttpServletResponse)"},{"p":"waffle.servlet.spi","c":"SecurityFilterProvider","l":"sendUnauthorized(HttpServletResponse)","u":"sendUnauthorized(jakarta.servlet.http.HttpServletResponse)"},{"p":"waffle.servlet.spi","c":"SecurityFilterProviderCollection","l":"sendUnauthorized(HttpServletResponse)","u":"sendUnauthorized(jakarta.servlet.http.HttpServletResponse)"},{"p":"waffle.jaas","c":"WindowsLoginModule","l":"setAllowGuestLogin(boolean)"},{"p":"waffle.jaas","c":"WindowsLoginModule","l":"setAuth(IWindowsAuthProvider)","u":"setAuth(waffle.windows.auth.IWindowsAuthProvider)"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"setAuth(IWindowsAuthProvider)","u":"setAuth(waffle.windows.auth.IWindowsAuthProvider)"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"setContinue(boolean)"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"setCredentialsHandle(IWindowsCredentialsHandle)","u":"setCredentialsHandle(waffle.windows.auth.IWindowsCredentialsHandle)"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"setImpersonate(boolean)"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"setPrincipalFormat(String)","u":"setPrincipalFormat(java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"setPrincipalName(String)","u":"setPrincipalName(java.lang.String)"},{"p":"waffle.servlet.spi","c":"NegotiateSecurityFilterProvider","l":"setProtocols(List)","u":"setProtocols(java.util.List)"},{"p":"waffle.servlet.spi","c":"BasicSecurityFilterProvider","l":"setRealm(String)","u":"setRealm(java.lang.String)"},{"p":"waffle.servlet","c":"NegotiateSecurityFilter","l":"setRoleFormat(String)","u":"setRoleFormat(java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"setSecurityContext(Sspi.CtxtHandle)","u":"setSecurityContext(com.sun.jna.platform.win32.Sspi.CtxtHandle)"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"setSecurityPackage(String)","u":"setSecurityPackage(java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"setToken(byte[])"},{"p":"waffle.windows.auth","c":"PrincipalFormat","l":"SID"},{"p":"waffle.servlet.spi","c":"SecurityFilterProviderCollection","l":"size()"},{"p":"waffle.util.cache","c":"Cache","l":"size()"},{"p":"waffle.util.cache","c":"CaffeineCache","l":"size()"},{"p":"waffle.util","c":"WaffleInfo","l":"toPrettyXML(Document)","u":"toPrettyXML(org.w3c.dom.Document)"},{"p":"waffle.jaas","c":"GroupPrincipal","l":"toString()"},{"p":"waffle.servlet","c":"WindowsPrincipal","l":"toString()"},{"p":"waffle.util","c":"AuthorizationHeader","l":"toString()"},{"p":"waffle.jaas","c":"UserPrincipal","l":"UserPrincipal(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"waffle.servlet","c":"AutoDisposableWindowsPrincipal","l":"valueBound(HttpSessionBindingEvent)","u":"valueBound(jakarta.servlet.http.HttpSessionBindingEvent)"},{"p":"waffle.windows.auth","c":"PrincipalFormat","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"waffle.windows.auth","c":"PrincipalFormat","l":"values()"},{"p":"waffle.servlet","c":"AutoDisposableWindowsPrincipal","l":"valueUnbound(HttpSessionBindingEvent)","u":"valueUnbound(jakarta.servlet.http.HttpSessionBindingEvent)"},{"p":"waffle.util","c":"WaffleInfo","l":"WaffleInfo()","u":"%3Cinit%3E()"},{"p":"waffle.servlet","c":"WaffleInfoServlet","l":"WaffleInfoServlet()","u":"%3Cinit%3E()"},{"p":"waffle.windows.auth","c":"WindowsAccount","l":"WindowsAccount(IWindowsAccount)","u":"%3Cinit%3E(waffle.windows.auth.IWindowsAccount)"},{"p":"waffle.windows.auth.impl","c":"WindowsAccountImpl","l":"WindowsAccountImpl(Advapi32Util.Account)","u":"%3Cinit%3E(com.sun.jna.platform.win32.Advapi32Util.Account)"},{"p":"waffle.windows.auth.impl","c":"WindowsAccountImpl","l":"WindowsAccountImpl(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsAccountImpl","l":"WindowsAccountImpl(String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsAuthProviderImpl","l":"WindowsAuthProviderImpl()","u":"%3Cinit%3E()"},{"p":"waffle.windows.auth.impl","c":"WindowsAuthProviderImpl","l":"WindowsAuthProviderImpl(int)","u":"%3Cinit%3E(int)"},{"p":"waffle.windows.auth.impl","c":"WindowsComputerImpl","l":"WindowsComputerImpl(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsCredentialsHandleImpl","l":"WindowsCredentialsHandleImpl(String, int, String)","u":"%3Cinit%3E(java.lang.String,int,java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsDomainImpl","l":"WindowsDomainImpl(Netapi32Util.DomainTrust)","u":"%3Cinit%3E(com.sun.jna.platform.win32.Netapi32Util.DomainTrust)"},{"p":"waffle.windows.auth.impl","c":"WindowsDomainImpl","l":"WindowsDomainImpl(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"waffle.windows.auth.impl","c":"WindowsIdentityImpersonationContextImpl","l":"WindowsIdentityImpersonationContextImpl(WinNT.HANDLE)","u":"%3Cinit%3E(com.sun.jna.platform.win32.WinNT.HANDLE)"},{"p":"waffle.windows.auth.impl","c":"WindowsIdentityImpl","l":"WindowsIdentityImpl(WinNT.HANDLE)","u":"%3Cinit%3E(com.sun.jna.platform.win32.WinNT.HANDLE)"},{"p":"waffle.jaas","c":"WindowsLoginModule","l":"WindowsLoginModule()","u":"%3Cinit%3E()"},{"p":"waffle.servlet","c":"WindowsPrincipal","l":"WindowsPrincipal(IWindowsIdentity)","u":"%3Cinit%3E(waffle.windows.auth.IWindowsIdentity)"},{"p":"waffle.servlet","c":"WindowsPrincipal","l":"WindowsPrincipal(IWindowsIdentity, PrincipalFormat, PrincipalFormat)","u":"%3Cinit%3E(waffle.windows.auth.IWindowsIdentity,waffle.windows.auth.PrincipalFormat,waffle.windows.auth.PrincipalFormat)"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpersonationContextImpl","l":"WindowsSecurityContextImpersonationContextImpl(Sspi.CtxtHandle)","u":"%3Cinit%3E(com.sun.jna.platform.win32.Sspi.CtxtHandle)"},{"p":"waffle.windows.auth.impl","c":"WindowsSecurityContextImpl","l":"WindowsSecurityContextImpl()","u":"%3Cinit%3E()"}];updateSearchResults(); \ No newline at end of file diff --git a/waffle-jna-jakarta/apidocs/module-search-index.js b/waffle-jna-jakarta/apidocs/module-search-index.js new file mode 100644 index 0000000000..560ee632cb --- /dev/null +++ b/waffle-jna-jakarta/apidocs/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [{"l":"waffle.jna.jakarta"}];updateSearchResults(); \ No newline at end of file diff --git a/waffle-jna-jakarta/apidocs/overview-tree.html b/waffle-jna-jakarta/apidocs/overview-tree.html new file mode 100644 index 0000000000..028e9853d4 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/overview-tree.html @@ -0,0 +1,167 @@ + + + + +Class Hierarchy (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
+ +
+
+
+

Hierarchy For All Packages

+
+Package Hierarchies: + +
+

Class Hierarchy

+ +
+
+

Interface Hierarchy

+ +
+
+

Enum Hierarchy

+ +
+
+ +
+
+ + diff --git a/waffle-jna-jakarta/apidocs/package-search-index.js b/waffle-jna-jakarta/apidocs/package-search-index.js new file mode 100644 index 0000000000..04e83e2f5e --- /dev/null +++ b/waffle-jna-jakarta/apidocs/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"m":"waffle.jna.jakarta","l":"waffle.jaas"},{"m":"waffle.jna.jakarta","l":"waffle.servlet"},{"m":"waffle.jna.jakarta","l":"waffle.servlet.spi"},{"m":"waffle.jna.jakarta","l":"waffle.util"},{"m":"waffle.jna.jakarta","l":"waffle.util.cache"},{"m":"waffle.jna.jakarta","l":"waffle.windows.auth"},{"m":"waffle.jna.jakarta","l":"waffle.windows.auth.impl"}];updateSearchResults(); \ No newline at end of file diff --git a/waffle-jna-jakarta/apidocs/resources/glass.png b/waffle-jna-jakarta/apidocs/resources/glass.png new file mode 100644 index 0000000000..a7f591f467 Binary files /dev/null and b/waffle-jna-jakarta/apidocs/resources/glass.png differ diff --git a/waffle-jna-jakarta/apidocs/resources/x.png b/waffle-jna-jakarta/apidocs/resources/x.png new file mode 100644 index 0000000000..30548a756e Binary files /dev/null and b/waffle-jna-jakarta/apidocs/resources/x.png differ diff --git a/waffle-jna-jakarta/apidocs/script-dir/jquery-3.7.1.min.js b/waffle-jna-jakarta/apidocs/script-dir/jquery-3.7.1.min.js new file mode 100644 index 0000000000..7f37b5d991 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/script-dir/jquery-3.7.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=x(e||this.defaultElement||this)[0],this.element=x(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=x(),this.hoverable=x(),this.focusable=x(),this.classesElementLookup={},e!==this&&(x.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=x(e.style?e.ownerDocument:e.document||e),this.window=x(this.document[0].defaultView||this.document[0].parentWindow)),this.options=x.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:x.noop,_create:x.noop,_init:x.noop,destroy:function(){var i=this;this._destroy(),x.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:x.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return x.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=x.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return x("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthC(E(s),E(n))?o.important="horizontal":o.important="vertical",c.using.call(this,t,o)}),l.offset(x.extend(u,{using:t}))})},x.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,l=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=x(t.target),i=x(x.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){x.contains(this.element[0],x.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=x(t.target).closest(".ui-menu-item"),i=x(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=x(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case x.ui.keyCode.PAGE_UP:this.previousPage(t);break;case x.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case x.ui.keyCode.HOME:this._move("first","first",t);break;case x.ui.keyCode.END:this._move("last","last",t);break;case x.ui.keyCode.UP:this.previous(t);break;case x.ui.keyCode.DOWN:this.next(t);break;case x.ui.keyCode.LEFT:this.collapse(t);break;case x.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case x.ui.keyCode.ENTER:case x.ui.keyCode.SPACE:this._activate(t);break;case x.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=x(this),e=t.prev(),i=x("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=x(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!x.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(x.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(x.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=x("
    ").appendTo(this._appendTo()).menu({role:null}).hide().attr({unselectable:"on"}).menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(t,e){var i,s;if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){x(t.target).trigger(t.originalEvent)});s=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:s})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(s.value),(i=e.item.attr("aria-label")||s.value)&&String.prototype.trim.call(i).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(x("
    ").text(i))},100))},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==x.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=x("
    ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||x.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?x(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(".ui-front, dialog"):t).length?this.document[0].body:t},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(x.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(t,e){n.xhr&&n.xhr.abort(),n.xhr=x.ajax({url:s,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;t&&(e||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(x("
    ").text(e.label)).appendTo(t)},_move:function(t,e){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),x.extend(x.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,e){var i=new RegExp(x.ui.autocomplete.escapeRegex(e),"i");return x.grep(t,function(t){return i.test(t.label||t.value||t)})}}),x.widget("ui.autocomplete",x.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1").text(e))},100))}});x.ui.autocomplete}); \ No newline at end of file diff --git a/waffle-jna-jakarta/apidocs/script.js b/waffle-jna-jakarta/apidocs/script.js new file mode 100644 index 0000000000..f1a0f25646 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/script.js @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; + +var oddRowColor = "odd-row-color"; +var evenRowColor = "even-row-color"; +var sortAsc = "sort-asc"; +var sortDesc = "sort-desc"; +var tableTab = "table-tab"; +var activeTableTab = "active-table-tab"; + +function loadScripts(doc, tag) { + createElem(doc, tag, 'search.js'); + + createElem(doc, tag, 'module-search-index.js'); + createElem(doc, tag, 'package-search-index.js'); + createElem(doc, tag, 'type-search-index.js'); + createElem(doc, tag, 'member-search-index.js'); + createElem(doc, tag, 'tag-search-index.js'); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +// Helper for making content containing release names comparable lexicographically +function makeComparable(s) { + return s.toLowerCase().replace(/(\d+)/g, + function(n, m) { + return ("000" + m).slice(-4); + }); +} + +// Switches between two styles depending on a condition +function toggleStyle(classList, condition, trueStyle, falseStyle) { + if (condition) { + classList.remove(falseStyle); + classList.add(trueStyle); + } else { + classList.remove(trueStyle); + classList.add(falseStyle); + } +} + +// Sorts the rows in a table lexicographically by the content of a specific column +function sortTable(header, columnIndex, columns) { + var container = header.parentElement; + var descending = header.classList.contains(sortAsc); + container.querySelectorAll("div.table-header").forEach( + function(header) { + header.classList.remove(sortAsc); + header.classList.remove(sortDesc); + } + ) + var cells = container.children; + var rows = []; + for (var i = columns; i < cells.length; i += columns) { + rows.push(Array.prototype.slice.call(cells, i, i + columns)); + } + var comparator = function(a, b) { + var ka = makeComparable(a[columnIndex].textContent); + var kb = makeComparable(b[columnIndex].textContent); + if (ka < kb) + return descending ? 1 : -1; + if (ka > kb) + return descending ? -1 : 1; + return 0; + }; + var sorted = rows.sort(comparator); + var visible = 0; + sorted.forEach(function(row) { + if (row[0].style.display !== 'none') { + var isEvenRow = visible++ % 2 === 0; + } + row.forEach(function(cell) { + toggleStyle(cell.classList, isEvenRow, evenRowColor, oddRowColor); + container.appendChild(cell); + }) + }); + toggleStyle(header.classList, descending, sortDesc, sortAsc); +} + +// Toggles the visibility of a table category in all tables in a page +function toggleGlobal(checkbox, selected, columns) { + var display = checkbox.checked ? '' : 'none'; + document.querySelectorAll("div.table-tabs").forEach(function(t) { + var id = t.parentElement.getAttribute("id"); + var selectedClass = id + "-tab" + selected; + // if selected is empty string it selects all uncategorized entries + var selectUncategorized = !Boolean(selected); + var visible = 0; + document.querySelectorAll('div.' + id) + .forEach(function(elem) { + if (selectUncategorized) { + if (elem.className.indexOf(selectedClass) === -1) { + elem.style.display = display; + } + } else if (elem.classList.contains(selectedClass)) { + elem.style.display = display; + } + if (elem.style.display === '') { + var isEvenRow = visible++ % (columns * 2) < columns; + toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor); + } + }); + var displaySection = visible === 0 ? 'none' : ''; + t.parentElement.style.display = displaySection; + document.querySelector("li#contents-" + id).style.display = displaySection; + }) +} + +// Shows the elements of a table belonging to a specific category +function show(tableId, selected, columns) { + if (tableId !== selected) { + document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')') + .forEach(function(elem) { + elem.style.display = 'none'; + }); + } + document.querySelectorAll('div.' + selected) + .forEach(function(elem, index) { + elem.style.display = ''; + var isEvenRow = index % (columns * 2) < columns; + toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor); + }); + updateTabs(tableId, selected); +} + +function updateTabs(tableId, selected) { + document.querySelector('div#' + tableId +' .summary-table') + .setAttribute('aria-labelledby', selected); + document.querySelectorAll('button[id^="' + tableId + '"]') + .forEach(function(tab, index) { + if (selected === tab.id || (tableId === selected && index === 0)) { + tab.className = activeTableTab; + tab.setAttribute('aria-selected', true); + tab.setAttribute('tabindex',0); + } else { + tab.className = tableTab; + tab.setAttribute('aria-selected', false); + tab.setAttribute('tabindex',-1); + } + }); +} + +function switchTab(e) { + var selected = document.querySelector('[aria-selected=true]'); + if (selected) { + if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) { + // left or up arrow key pressed: move focus to previous tab + selected.previousSibling.click(); + selected.previousSibling.focus(); + e.preventDefault(); + } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) { + // right or down arrow key pressed: move focus to next tab + selected.nextSibling.click(); + selected.nextSibling.focus(); + e.preventDefault(); + } + } +} + +var updateSearchResults = function() {}; + +function indexFilesLoaded() { + return moduleSearchIndex + && packageSearchIndex + && typeSearchIndex + && memberSearchIndex + && tagSearchIndex; +} +// Copy the contents of the local snippet to the clipboard +function copySnippet(button) { + copyToClipboard(button.nextElementSibling.innerText); + switchCopyLabel(button, button.firstElementChild); +} +function copyToClipboard(content) { + var textarea = document.createElement("textarea"); + textarea.style.height = 0; + document.body.appendChild(textarea); + textarea.value = content; + textarea.select(); + document.execCommand("copy"); + document.body.removeChild(textarea); +} +function switchCopyLabel(button, span) { + var copied = span.getAttribute("data-copied"); + button.classList.add("visible"); + var initialLabel = span.innerHTML; + span.innerHTML = copied; + setTimeout(function() { + button.classList.remove("visible"); + setTimeout(function() { + if (initialLabel !== copied) { + span.innerHTML = initialLabel; + } + }, 100); + }, 1900); +} +// Workaround for scroll position not being included in browser history (8249133) +document.addEventListener("DOMContentLoaded", function(e) { + var contentDiv = document.querySelector("div.flex-content"); + window.addEventListener("popstate", function(e) { + if (e.state !== null) { + contentDiv.scrollTop = e.state; + } + }); + window.addEventListener("hashchange", function(e) { + history.replaceState(contentDiv.scrollTop, document.title); + }); + var timeoutId; + contentDiv.addEventListener("scroll", function(e) { + if (timeoutId) { + clearTimeout(timeoutId); + } + timeoutId = setTimeout(function() { + history.replaceState(contentDiv.scrollTop, document.title); + }, 100); + }); + if (!location.hash) { + history.replaceState(contentDiv.scrollTop, document.title); + } +}); diff --git a/waffle-jna-jakarta/apidocs/search-page.js b/waffle-jna-jakarta/apidocs/search-page.js new file mode 100644 index 0000000000..e4da097d94 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/search-page.js @@ -0,0 +1,284 @@ +/* + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +"use strict"; +$(function() { + var copy = $("#page-search-copy"); + var expand = $("#page-search-expand"); + var searchLink = $("span#page-search-link"); + var redirect = $("input#search-redirect"); + function setSearchUrlTemplate() { + var href = document.location.href.split(/[#?]/)[0]; + href += "?q=" + "%s"; + if (redirect.is(":checked")) { + href += "&r=1"; + } + searchLink.html(href); + copy[0].onmouseenter(); + } + function copyLink(e) { + copyToClipboard(this.previousSibling.innerText); + switchCopyLabel(this, this.lastElementChild); + } + copy.click(copyLink); + copy[0].onmouseenter = function() {}; + redirect.click(setSearchUrlTemplate); + setSearchUrlTemplate(); + copy.prop("disabled", false); + redirect.prop("disabled", false); + expand.click(function (e) { + var searchInfo = $("div.page-search-info"); + if(this.parentElement.hasAttribute("open")) { + searchInfo.attr("style", "border-width: 0;"); + } else { + searchInfo.attr("style", "border-width: 1px;").height(searchInfo.prop("scrollHeight")); + } + }); +}); +$(window).on("load", function() { + var input = $("#page-search-input"); + var reset = $("#page-search-reset"); + var notify = $("#page-search-notify"); + var resultSection = $("div#result-section"); + var resultContainer = $("div#result-container"); + var searchTerm = ""; + var activeTab = ""; + var fixedTab = false; + var visibleTabs = []; + var feelingLucky = false; + function renderResults(result) { + if (!result.length) { + notify.html(messages.noResult); + } else if (result.length === 1) { + notify.html(messages.oneResult); + } else { + notify.html(messages.manyResults.replace("{0}", result.length)); + } + resultContainer.empty(); + var r = { + "types": [], + "members": [], + "packages": [], + "modules": [], + "searchTags": [] + }; + for (var i in result) { + var item = result[i]; + var arr = r[item.category]; + arr.push(item); + } + if (!activeTab || r[activeTab].length === 0 || !fixedTab) { + Object.keys(r).reduce(function(prev, curr) { + if (r[curr].length > 0 && r[curr][0].score > prev) { + activeTab = curr; + return r[curr][0].score; + } + return prev; + }, 0); + } + if (feelingLucky && activeTab) { + notify.html(messages.redirecting) + var firstItem = r[activeTab][0]; + window.location = getURL(firstItem.indexItem, firstItem.category); + return; + } + if (result.length > 20) { + if (searchTerm[searchTerm.length - 1] === ".") { + if (activeTab === "types" && r["members"].length > r["types"].length) { + activeTab = "members"; + } else if (activeTab === "packages" && r["types"].length > r["packages"].length) { + activeTab = "types"; + } + } + } + var categoryCount = Object.keys(r).reduce(function(prev, curr) { + return prev + (r[curr].length > 0 ? 1 : 0); + }, 0); + visibleTabs = []; + var tabContainer = $("
    ").appendTo(resultContainer); + for (var key in r) { + var id = "#result-tab-" + key.replace("searchTags", "search_tags"); + if (r[key].length) { + var count = r[key].length >= 1000 ? "999+" : r[key].length; + if (result.length > 20 && categoryCount > 1) { + var button = $("").appendTo(tabContainer); + button.click(key, function(e) { + fixedTab = true; + renderResult(e.data, $(this)); + }); + visibleTabs.push(key); + } else { + $("" + categories[key] + + " (" + count + ")").appendTo(tabContainer); + renderTable(key, r[key]).appendTo(resultContainer); + tabContainer = $("
    ").appendTo(resultContainer); + + } + } + } + if (activeTab && result.length > 20 && categoryCount > 1) { + $("button#result-tab-" + activeTab).addClass("active-table-tab"); + renderTable(activeTab, r[activeTab]).appendTo(resultContainer); + } + resultSection.show(); + function renderResult(category, button) { + activeTab = category; + setSearchUrl(); + resultContainer.find("div.summary-table").remove(); + renderTable(activeTab, r[activeTab]).appendTo(resultContainer); + button.siblings().removeClass("active-table-tab"); + button.addClass("active-table-tab"); + } + } + function selectTab(category) { + $("button#result-tab-" + category).click(); + } + function renderTable(category, items) { + var table = $("
    ") + .addClass(category === "modules" + ? "one-column-search-results" + : "two-column-search-results"); + var col1, col2; + if (category === "modules") { + col1 = "Module"; + } else if (category === "packages") { + col1 = "Module"; + col2 = "Package"; + } else if (category === "types") { + col1 = "Package"; + col2 = "Class" + } else if (category === "members") { + col1 = "Class"; + col2 = "Member"; + } else if (category === "searchTags") { + col1 = "Location"; + col2 = "Name"; + } + $("
    " + col1 + "
    ").appendTo(table); + if (category !== "modules") { + $("
    " + col2 + "
    ").appendTo(table); + } + $.each(items, function(index, item) { + var rowColor = index % 2 ? "odd-row-color" : "even-row-color"; + renderItem(item, table, rowColor); + }); + return table; + } + function renderItem(item, table, rowColor) { + var label = getHighlightedText(item.input, item.boundaries, item.prefix.length, item.input.length); + var link = $("") + .attr("href", getURL(item.indexItem, item.category)) + .attr("tabindex", "0") + .addClass("search-result-link") + .html(label); + var container = getHighlightedText(item.input, item.boundaries, 0, item.prefix.length - 1); + if (item.category === "searchTags") { + container = item.indexItem.h || ""; + } + if (item.category !== "modules") { + $("
    ").html(container).addClass("col-plain").addClass(rowColor).appendTo(table); + } + $("
    ").html(link).addClass("col-last").addClass(rowColor).appendTo(table); + } + var timeout; + function schedulePageSearch() { + if (timeout) { + clearTimeout(timeout); + } + timeout = setTimeout(function () { + doPageSearch() + }, 100); + } + function doPageSearch() { + setSearchUrl(); + var term = searchTerm = input.val().trim(); + if (term === "") { + notify.html(messages.enterTerm); + activeTab = ""; + fixedTab = false; + resultContainer.empty(); + resultSection.hide(); + } else { + notify.html(messages.searching); + doSearch({ term: term, maxResults: 1200 }, renderResults); + } + } + function setSearchUrl() { + var query = input.val().trim(); + var url = document.location.pathname; + if (query) { + url += "?q=" + encodeURI(query); + if (activeTab && fixedTab) { + url += "&c=" + activeTab; + } + } + history.replaceState({query: query}, "", url); + } + input.on("input", function(e) { + feelingLucky = false; + schedulePageSearch(); + }); + $(document).keydown(function(e) { + if ((e.ctrlKey || e.metaKey) && (e.key === "ArrowLeft" || e.key === "ArrowRight")) { + if (activeTab && visibleTabs.length > 1) { + var idx = visibleTabs.indexOf(activeTab); + idx += e.key === "ArrowLeft" ? visibleTabs.length - 1 : 1; + selectTab(visibleTabs[idx % visibleTabs.length]); + return false; + } + } + }); + reset.click(function() { + notify.html(messages.enterTerm); + resultSection.hide(); + activeTab = ""; + fixedTab = false; + resultContainer.empty(); + input.val('').focus(); + setSearchUrl(); + }); + input.prop("disabled", false); + reset.prop("disabled", false); + + var urlParams = new URLSearchParams(window.location.search); + if (urlParams.has("q")) { + input.val(urlParams.get("q")) + } + if (urlParams.has("c")) { + activeTab = urlParams.get("c"); + fixedTab = true; + } + if (urlParams.get("r")) { + feelingLucky = true; + } + if (input.val()) { + doPageSearch(); + } else { + notify.html(messages.enterTerm); + } + input.select().focus(); +}); diff --git a/waffle-jna-jakarta/apidocs/search.html b/waffle-jna-jakarta/apidocs/search.html new file mode 100644 index 0000000000..3d14843d75 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/search.html @@ -0,0 +1,77 @@ + + + + +Search (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +

    Search

    +
    + + +
    +Additional resources +
    +
    +
    +

    The help page provides an introduction to the scope and syntax of JavaDoc search.

    +

    You can use the <ctrl> or <cmd> keys in combination with the left and right arrow keys to switch between result tabs in this page.

    +

    The URL template below may be used to configure this page as a search engine in browsers that support this feature. It has been tested to work in Google Chrome and Mozilla Firefox. Note that other browsers may not support this feature or require a different URL format.

    +link +

    + +

    +
    +

    Loading search index...

    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/search.js b/waffle-jna-jakarta/apidocs/search.js new file mode 100644 index 0000000000..293b40f52a --- /dev/null +++ b/waffle-jna-jakarta/apidocs/search.js @@ -0,0 +1,458 @@ +/* + * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ +"use strict"; +const messages = { + enterTerm: "Enter a search term", + noResult: "No results found", + oneResult: "Found one result", + manyResults: "Found {0} results", + loading: "Loading search index...", + searching: "Searching...", + redirecting: "Redirecting to first result...", + linkIcon: "Link icon", + linkToSection: "Link to this section" +} +const categories = { + modules: "Modules", + packages: "Packages", + types: "Types", + members: "Members", + searchTags: "Search Tags" +}; +const highlight = "$&"; +const NO_MATCH = {}; +const MAX_RESULTS = 300; +function checkUnnamed(name, separator) { + return name === "" || !name ? "" : name + separator; +} +function escapeHtml(str) { + return str.replace(//g, ">"); +} +function getHighlightedText(str, boundaries, from, to) { + var start = from; + var text = ""; + for (var i = 0; i < boundaries.length; i += 2) { + var b0 = boundaries[i]; + var b1 = boundaries[i + 1]; + if (b0 >= to || b1 <= from) { + continue; + } + text += escapeHtml(str.slice(start, Math.max(start, b0))); + text += ""; + text += escapeHtml(str.slice(Math.max(start, b0), Math.min(to, b1))); + text += ""; + start = Math.min(to, b1); + } + text += escapeHtml(str.slice(start, to)); + return text; +} +function getURLPrefix(item, category) { + var urlPrefix = ""; + var slash = "/"; + if (category === "modules") { + return item.l + slash; + } else if (category === "packages" && item.m) { + return item.m + slash; + } else if (category === "types" || category === "members") { + if (item.m) { + urlPrefix = item.m + slash; + } else { + $.each(packageSearchIndex, function(index, it) { + if (it.m && item.p === it.l) { + urlPrefix = it.m + slash; + } + }); + } + } + return urlPrefix; +} +function getURL(item, category) { + if (item.url) { + return item.url; + } + var url = getURLPrefix(item, category); + if (category === "modules") { + url += "module-summary.html"; + } else if (category === "packages") { + if (item.u) { + url = item.u; + } else { + url += item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (category === "types") { + if (item.u) { + url = item.u; + } else { + url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.l + ".html"; + } + } else if (category === "members") { + url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.c + ".html" + "#"; + if (item.u) { + url += item.u; + } else { + url += item.l; + } + } else if (category === "searchTags") { + url += item.u; + } + item.url = url; + return url; +} +function createMatcher(term, camelCase) { + if (camelCase && !isUpperCase(term)) { + return null; // no need for camel-case matcher for lower case query + } + var pattern = ""; + var upperCase = []; + term.trim().split(/\s+/).forEach(function(w, index, array) { + var tokens = w.split(/(?=[A-Z,.()<>?[\/])/); + for (var i = 0; i < tokens.length; i++) { + var s = tokens[i]; + // ',' and '?' are the only delimiters commonly followed by space in java signatures + pattern += "(" + $.ui.autocomplete.escapeRegex(s).replace(/[,?]/g, "$&\\s*?") + ")"; + upperCase.push(false); + var isWordToken = /\w$/.test(s); + if (isWordToken) { + if (i === tokens.length - 1 && index < array.length - 1) { + // space in query string matches all delimiters + pattern += "(.*?)"; + upperCase.push(isUpperCase(s[0])); + } else { + if (!camelCase && isUpperCase(s) && s.length === 1) { + pattern += "()"; + } else { + pattern += "([a-z0-9$<>?[\\]]*?)"; + } + upperCase.push(isUpperCase(s[0])); + } + } else { + pattern += "()"; + upperCase.push(false); + } + } + }); + var re = new RegExp(pattern, "gi"); + re.upperCase = upperCase; + return re; +} +function findMatch(matcher, input, startOfName, endOfName) { + var from = startOfName; + matcher.lastIndex = from; + var match = matcher.exec(input); + // Expand search area until we get a valid result or reach the beginning of the string + while (!match || match.index + match[0].length < startOfName || endOfName < match.index) { + if (from === 0) { + return NO_MATCH; + } + from = input.lastIndexOf(".", from - 2) + 1; + matcher.lastIndex = from; + match = matcher.exec(input); + } + var boundaries = []; + var matchEnd = match.index + match[0].length; + var score = 5; + var start = match.index; + var prevEnd = -1; + for (var i = 1; i < match.length; i += 2) { + var isUpper = isUpperCase(input[start]); + var isMatcherUpper = matcher.upperCase[i]; + // capturing groups come in pairs, match and non-match + boundaries.push(start, start + match[i].length); + // make sure groups are anchored on a left word boundary + var prevChar = input[start - 1] || ""; + var nextChar = input[start + 1] || ""; + if (start !== 0 && !/[\W_]/.test(prevChar) && !/[\W_]/.test(input[start])) { + if (isUpper && (isLowerCase(prevChar) || isLowerCase(nextChar))) { + score -= 0.1; + } else if (isMatcherUpper && start === prevEnd) { + score -= isUpper ? 0.1 : 1.0; + } else { + return NO_MATCH; + } + } + prevEnd = start + match[i].length; + start += match[i].length + match[i + 1].length; + + // lower score for parts of the name that are missing + if (match[i + 1] && prevEnd < endOfName) { + score -= rateNoise(match[i + 1]); + } + } + // lower score if a type name contains unmatched camel-case parts + if (input[matchEnd - 1] !== "." && endOfName > matchEnd) + score -= rateNoise(input.slice(matchEnd, endOfName)); + score -= rateNoise(input.slice(0, Math.max(startOfName, match.index))); + + if (score <= 0) { + return NO_MATCH; + } + return { + input: input, + score: score, + boundaries: boundaries + }; +} +function isUpperCase(s) { + return s !== s.toLowerCase(); +} +function isLowerCase(s) { + return s !== s.toUpperCase(); +} +function rateNoise(str) { + return (str.match(/([.(])/g) || []).length / 5 + + (str.match(/([A-Z]+)/g) || []).length / 10 + + str.length / 20; +} +function doSearch(request, response) { + var term = request.term.trim(); + var maxResults = request.maxResults || MAX_RESULTS; + if (term.length === 0) { + return this.close(); + } + var matcher = { + plainMatcher: createMatcher(term, false), + camelCaseMatcher: createMatcher(term, true) + } + var indexLoaded = indexFilesLoaded(); + + function getPrefix(item, category) { + switch (category) { + case "packages": + return checkUnnamed(item.m, "/"); + case "types": + return checkUnnamed(item.p, "."); + case "members": + return checkUnnamed(item.p, ".") + item.c + "."; + default: + return ""; + } + } + function useQualifiedName(category) { + switch (category) { + case "packages": + return /[\s/]/.test(term); + case "types": + case "members": + return /[\s.]/.test(term); + default: + return false; + } + } + function searchIndex(indexArray, category) { + var matches = []; + if (!indexArray) { + if (!indexLoaded) { + matches.push({ l: messages.loading, category: category }); + } + return matches; + } + $.each(indexArray, function (i, item) { + var prefix = getPrefix(item, category); + var simpleName = item.l; + var qualifiedName = prefix + simpleName; + var useQualified = useQualifiedName(category); + var input = useQualified ? qualifiedName : simpleName; + var startOfName = useQualified ? prefix.length : 0; + var endOfName = category === "members" && input.indexOf("(", startOfName) > -1 + ? input.indexOf("(", startOfName) : input.length; + var m = findMatch(matcher.plainMatcher, input, startOfName, endOfName); + if (m === NO_MATCH && matcher.camelCaseMatcher) { + m = findMatch(matcher.camelCaseMatcher, input, startOfName, endOfName); + } + if (m !== NO_MATCH) { + m.indexItem = item; + m.prefix = prefix; + m.category = category; + if (!useQualified) { + m.input = qualifiedName; + m.boundaries = m.boundaries.map(function(b) { + return b + prefix.length; + }); + } + matches.push(m); + } + return true; + }); + return matches.sort(function(e1, e2) { + return e2.score - e1.score; + }).slice(0, maxResults); + } + + var result = searchIndex(moduleSearchIndex, "modules") + .concat(searchIndex(packageSearchIndex, "packages")) + .concat(searchIndex(typeSearchIndex, "types")) + .concat(searchIndex(memberSearchIndex, "members")) + .concat(searchIndex(tagSearchIndex, "searchTags")); + + if (!indexLoaded) { + updateSearchResults = function() { + doSearch(request, response); + } + } else { + updateSearchResults = function() {}; + } + response(result); +} +// JQuery search menu implementation +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> .result-item"); + // workaround for search result scrolling + this.menu._scrollIntoView = function _scrollIntoView( item ) { + var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; + if ( this._hasScroll() ) { + borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0; + paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0; + offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; + scroll = this.activeMenu.scrollTop(); + elementHeight = this.activeMenu.height() - 26; + itemHeight = item.outerHeight(); + + if ( offset < 0 ) { + this.activeMenu.scrollTop( scroll + offset ); + } else if ( offset + itemHeight > elementHeight ) { + this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); + } + } + }; + }, + _renderMenu: function(ul, items) { + var currentCategory = ""; + var widget = this; + widget.menu.bindings = $(); + $.each(items, function(index, item) { + if (item.category && item.category !== currentCategory) { + ul.append("
  • " + categories[item.category] + "
  • "); + currentCategory = item.category; + } + var li = widget._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", categories[item.category] + " : " + item.l); + } else { + li.attr("aria-label", item.l); + } + li.attr("class", "result-item"); + }); + ul.append(""); + }, + _renderItem: function(ul, item) { + var li = $("
  • ").appendTo(ul); + var div = $("
    ").appendTo(li); + var label = item.l + ? item.l + : getHighlightedText(item.input, item.boundaries, 0, item.input.length); + var idx = item.indexItem; + if (item.category === "searchTags" && idx && idx.h) { + if (idx.d) { + div.html(label + " (" + idx.h + ")
    " + + idx.d + "
    "); + } else { + div.html(label + " (" + idx.h + ")"); + } + } else { + div.html(label); + } + return li; + } +}); +$(function() { + var expanded = false; + var windowWidth; + function collapse() { + if (expanded) { + $("div#navbar-top").removeAttr("style"); + $("button#navbar-toggle-button") + .removeClass("expanded") + .attr("aria-expanded", "false"); + expanded = false; + } + } + $("button#navbar-toggle-button").click(function (e) { + if (expanded) { + collapse(); + } else { + var navbar = $("div#navbar-top"); + navbar.height(navbar.prop("scrollHeight")); + $("button#navbar-toggle-button") + .addClass("expanded") + .attr("aria-expanded", "true"); + expanded = true; + windowWidth = window.innerWidth; + } + }); + $("ul.sub-nav-list-small li a").click(collapse); + $("input#search-input").focus(collapse); + $("main").click(collapse); + $("section[id] > :header, :header[id], :header:has(a[id])").each(function(idx, el) { + // Create anchor links for headers with an associated id attribute + var hdr = $(el); + var id = hdr.attr("id") || hdr.parent("section").attr("id") || hdr.children("a").attr("id"); + if (id) { + hdr.append(" " + messages.linkIcon +""); + } + }); + $(window).on("orientationchange", collapse).on("resize", function(e) { + if (expanded && windowWidth !== window.innerWidth) collapse(); + }); + var search = $("#search-input"); + var reset = $("#reset-button"); + search.catcomplete({ + minLength: 1, + delay: 200, + source: doSearch, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push({ l: messages.noResult }); + } else { + $("#search-input").empty(); + } + }, + autoFocus: true, + focus: function(event, ui) { + return false; + }, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.indexItem) { + var url = getURL(ui.item.indexItem, ui.item.category); + window.location.href = pathtoroot + url; + $("#search-input").focus(); + } + } + }); + search.val(''); + search.prop("disabled", false); + reset.prop("disabled", false); + reset.click(function() { + search.val('').focus(); + }); + search.focus(); +}); diff --git a/waffle-jna-jakarta/apidocs/serialized-form.html b/waffle-jna-jakarta/apidocs/serialized-form.html new file mode 100644 index 0000000000..7bc21c8616 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/serialized-form.html @@ -0,0 +1,267 @@ + + + + +Serialized Form (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Serialized Form

    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/stylesheet.css b/waffle-jna-jakarta/apidocs/stylesheet.css new file mode 100644 index 0000000000..f71489f86c --- /dev/null +++ b/waffle-jna-jakarta/apidocs/stylesheet.css @@ -0,0 +1,1272 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * These CSS custom properties (variables) define the core color and font + * properties used in this stylesheet. + */ +:root { + /* body, block and code fonts */ + --body-font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; + --block-font-family: 'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + --code-font-family: 'DejaVu Sans Mono', monospace; + /* Base font sizes for body and code elements */ + --body-font-size: 14px; + --code-font-size: 14px; + /* Text colors for body and block elements */ + --body-text-color: #353833; + --block-text-color: #474747; + /* Background colors for various structural elements */ + --body-background-color: #ffffff; + --section-background-color: #f8f8f8; + --detail-background-color: #ffffff; + /* Colors for navigation bar and table captions */ + --navbar-background-color: #4D7A97; + --navbar-text-color: #ffffff; + /* Background color for subnavigation and various headers */ + --subnav-background-color: #dee3e9; + /* Background and text colors for selected tabs and navigation items */ + --selected-background-color: #f8981d; + --selected-text-color: #253441; + --selected-link-color: #1f389c; + /* Background colors for generated tables */ + --even-row-color: #ffffff; + --odd-row-color: #eeeeef; + /* Text color for page title */ + --title-color: #2c4557; + /* Text colors for links */ + --link-color: #4A6782; + --link-color-active: #bb7a2a; + /* Snippet colors */ + --snippet-background-color: #ebecee; + --snippet-text-color: var(--block-text-color); + --snippet-highlight-color: #f7c590; + /* Border colors for structural elements and user defined tables */ + --border-color: #ededed; + --table-border-color: #000000; + /* Search input colors */ + --search-input-background-color: #ffffff; + --search-input-text-color: #000000; + --search-input-placeholder-color: #909090; + /* Highlight color for active search tag target */ + --search-tag-highlight-color: #ffff00; + /* Adjustments for icon and active background colors of copy-to-clipboard buttons */ + --copy-icon-brightness: 100%; + --copy-button-background-color-active: rgba(168, 168, 176, 0.3); + /* Colors for invalid tag notifications */ + --invalid-tag-background-color: #ffe6e6; + --invalid-tag-text-color: #000000; +} +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ +body { + background-color:var(--body-background-color); + color:var(--body-text-color); + font-family:var(--body-font-family); + font-size:var(--body-font-size); + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:var(--link-color); +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:var(--link-color-active); +} +pre { + font-family:var(--code-font-family); + font-size:1em; +} +h1 { + font-size:1.428em; +} +h2 { + font-size:1.285em; +} +h3 { + font-size:1.14em; +} +h4 { + font-size:1.072em; +} +h5 { + font-size:1.001em; +} +h6 { + font-size:0.93em; +} +/* Disable font boosting for selected elements */ +h1, h2, h3, h4, h5, h6, div.member-signature { + max-height: 1000em; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:var(--code-font-family); +} +:not(h1, h2, h3, h4, h5, h6) > code, +:not(h1, h2, h3, h4, h5, h6) > tt { + font-size:var(--code-font-size); + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:var(--code-font-family); + font-size:1em; + padding-top:4px; +} +.summary-table dt code { + font-family:var(--code-font-family); + font-size:1em; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +button { + font-family: var(--body-font-family); + font-size: 1em; +} +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.about-language { + float:right; + padding:0 21px 8px 8px; + font-size:0.915em; + margin-top:-9px; + height:2.9em; +} +.legal-copy { + margin-left:.5em; +} +/* + * Styles for navigation bar. + */ +@media screen { + div.flex-box { + position:fixed; + display:flex; + flex-direction:column; + height: 100%; + width: 100%; + } + header.flex-header { + flex: 0 0 auto; + } + div.flex-content { + flex: 1 1 auto; + overflow-y: auto; + } +} +.top-nav { + background-color:var(--navbar-background-color); + color:var(--navbar-text-color); + float:left; + width:100%; + clear:right; + min-height:2.8em; + padding:10px 0 0 0; + overflow:hidden; + font-size:0.857em; +} +button#navbar-toggle-button { + display:none; +} +ul.sub-nav-list-small { + display: none; +} +.sub-nav { + background-color:var(--subnav-background-color); + float:left; + width:100%; + overflow:hidden; + font-size:0.857em; +} +.sub-nav div { + clear:left; + float:left; + padding:6px; + text-transform:uppercase; +} +.sub-nav .sub-nav-list { + padding-top:4px; +} +ul.nav-list { + display:block; + margin:0 25px 0 0; + padding:0; +} +ul.sub-nav-list { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.nav-list li { + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +.sub-nav .nav-list-search { + float:right; + margin:0; + padding:6px; + clear:none; + text-align:right; + position:relative; +} +ul.sub-nav-list li { + list-style:none; + float:left; +} +.top-nav a:link, .top-nav a:active, .top-nav a:visited { + color:var(--navbar-text-color); + text-decoration:none; + text-transform:uppercase; +} +.top-nav a:hover { + color:var(--link-color-active); +} +.nav-bar-cell1-rev { + background-color:var(--selected-background-color); + color:var(--selected-text-color); + margin: auto 5px; +} +.skip-nav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Hide navigation links and search box in print layout + */ +@media print { + ul.nav-list, div.sub-nav { + display:none; + } +} +/* + * Styles for page header. + */ +.title { + color:var(--title-color); + margin:10px 0; +} +.sub-title { + margin:5px 0 0 0; +} +ul.contents-list { + margin: 0 0 15px 0; + padding: 0; + list-style: none; +} +ul.contents-list li { + font-size:0.93em; +} +/* + * Styles for headings. + */ +body.class-declaration-page .summary h2, +body.class-declaration-page .details h2, +body.class-use-page h2, +body.module-declaration-page .block-list h2 { + font-style: italic; + padding:0; + margin:15px 0; +} +body.class-declaration-page .summary h3, +body.class-declaration-page .details h3, +body.class-declaration-page .summary .inherited-list h2 { + background-color:var(--subnav-background-color); + border:1px solid var(--border-color); + margin:0 0 6px -8px; + padding:7px 5px; +} +/* + * Styles for page layout containers. + */ +main { + clear:both; + padding:10px 20px; + position:relative; +} +dl.notes > dt { + font-family: var(--body-font-family); + font-size:0.856em; + font-weight:bold; + margin:10px 0 0 0; + color:var(--body-text-color); +} +dl.notes > dd { + margin:5px 10px 10px 0; + font-size:1em; + font-family:var(--block-font-family) +} +dl.name-value > dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +dl.name-value > dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +div.inheritance { + margin:0; + padding:0; +} +div.inheritance div.inheritance { + margin-left:2em; +} +ul.block-list, +ul.details-list, +ul.member-list, +ul.summary-list { + margin:10px 0 10px 0; + padding:0; +} +ul.block-list > li, +ul.details-list > li, +ul.member-list > li, +ul.summary-list > li { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.ref-list { + padding:0; + margin:0; +} +ul.ref-list > li { + list-style:none; +} +.summary-table dl, .summary-table dl dt, .summary-table dl dd { + margin-top:0; + margin-bottom:1px; +} +ul.tag-list, ul.tag-list-long { + padding-left: 0; + list-style: none; +} +ul.tag-list li { + display: inline; +} +ul.tag-list li:not(:last-child):after, +ul.tag-list-long li:not(:last-child):after +{ + content: ", "; + white-space: pre-wrap; +} +ul.preview-feature-list { + list-style: none; + margin:0; + padding:0.1em; + line-height: 1.6em; +} +/* + * Styles for tables. + */ +.summary-table, .details-table { + width:100%; + border-spacing:0; + border:1px solid var(--border-color); + border-top:0; + padding:0; +} +.caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:var(--selected-text-color); + clear:none; + overflow:hidden; + padding: 10px 0 0 1px; + margin:0; +} +.caption a:link, .caption a:visited { + color:var(--selected-link-color); +} +.caption a:hover, +.caption a:active { + color:var(--navbar-text-color); +} +.caption span { + font-weight:bold; + white-space:nowrap; + padding:5px 12px 7px 12px; + display:inline-block; + float:left; + background-color:var(--selected-background-color); + border: none; + height:16px; +} +div.table-tabs { + padding:10px 0 0 1px; + margin:10px 0 0 0; +} +div.table-tabs > button { + border: none; + cursor: pointer; + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 8px; +} +div.table-tabs > .active-table-tab { + background: var(--selected-background-color); + color: var(--selected-text-color); +} +div.table-tabs > button.table-tab { + background: var(--navbar-background-color); + color: var(--navbar-text-color); +} +.two-column-search-results { + display: grid; + grid-template-columns: minmax(400px, max-content) minmax(400px, auto); +} +div.checkboxes { + line-height: 2em; +} +div.checkboxes > span { + margin-left: 10px; +} +div.checkboxes > label { + margin-left: 8px; + white-space: nowrap; +} +div.checkboxes > label > input { + margin: 0 2px; +} +.two-column-summary { + display: grid; + grid-template-columns: minmax(25%, max-content) minmax(25%, auto); +} +.three-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(20%, max-content) minmax(20%, auto); +} +.three-column-release-summary { + display: grid; + grid-template-columns: minmax(40%, max-content) minmax(10%, max-content) minmax(40%, auto); +} +.four-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, max-content) minmax(15%, auto); +} +@media screen and (max-width: 1000px) { + .four-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(15%, auto); + } +} +@media screen and (max-width: 800px) { + .two-column-search-results { + display: grid; + grid-template-columns: minmax(40%, max-content) minmax(40%, auto); + } + .three-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(25%, auto); + } + .three-column-release-summary { + display: grid; + grid-template-columns: minmax(70%, max-content) minmax(30%, max-content) + } + .three-column-summary .col-last, + .three-column-release-summary .col-last{ + grid-column-end: span 2; + } +} +@media screen and (max-width: 600px) { + .two-column-summary { + display: grid; + grid-template-columns: 1fr; + } +} +.summary-table > div, .details-table > div { + text-align:left; + padding: 8px 3px 3px 7px; + overflow-x: auto; + scrollbar-width: thin; +} +.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name { + vertical-align:top; + padding-right:0; + padding-top:8px; + padding-bottom:3px; +} +.table-header { + background:var(--subnav-background-color); + font-weight: bold; +} +/* Sortable table columns */ +.table-header[onclick] { + cursor: pointer; +} +.table-header[onclick]::after { + content:""; + display:inline-block; + background-image:url('data:image/svg+xml; utf8, \ + \ + '); + background-size:100% 100%; + width:9px; + height:14px; + margin-left:4px; + margin-bottom:-3px; +} +.table-header[onclick].sort-asc::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); + +} +.table-header[onclick].sort-desc::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); +} +.col-first, .col-first { + font-size:0.93em; +} +.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last { + font-size:0.93em; +} +.col-first, .col-second, .col-constructor-name { + vertical-align:top; + overflow: auto; +} +.col-last { + white-space:normal; +} +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-constructor-name a:link, .col-constructor-name a:visited, +.col-summary-item-name a:link, .col-summary-item-name a:visited { + font-weight:bold; +} +.even-row-color, .even-row-color .table-header { + background-color:var(--even-row-color); +} +.odd-row-color, .odd-row-color .table-header { + background-color:var(--odd-row-color); +} +/* + * Styles for contents. + */ +div.block { + font-size:var(--body-font-size); + font-family:var(--block-font-family); +} +.col-last div { + padding-top:0; +} +.col-last a { + padding-bottom:3px; +} +.module-signature, +.package-signature, +.type-signature, +.member-signature { + font-family:var(--code-font-family); + font-size:1em; + margin:14px 0; + white-space: pre-wrap; +} +.module-signature, +.package-signature, +.type-signature { + margin-top: 0; +} +.member-signature .type-parameters-long, +.member-signature .parameters, +.member-signature .exceptions { + display: inline-block; + vertical-align: top; + white-space: pre; +} +.member-signature .type-parameters { + white-space: normal; +} +/* + * Styles for formatting effect. + */ +.source-line-no { + /* Color of line numbers in source pages can be set via custom property below */ + color:var(--source-linenumber-color, green); + padding:0 30px 0 0; +} +.block { + display:block; + margin:0 10px 5px 0; + color:var(--block-text-color); +} +.deprecated-label, .description-from-type-label, .implementation-label, .member-name-link, +.module-label-in-package, .module-label-in-type, .package-label-in-type, +.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label { + font-weight:bold; +} +.deprecation-comment, .help-footnote, .preview-comment { + font-style:italic; +} +.deprecation-block { + font-size:1em; + font-family:var(--block-font-family); + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +.preview-block { + font-size:1em; + font-family:var(--block-font-family); + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecation-comment { + font-style:normal; +} +details.invalid-tag, span.invalid-tag { + font-size:1em; + font-family:var(--block-font-family); + color: var(--invalid-tag-text-color); + background: var(--invalid-tag-background-color); + border: thin solid var(--table-border-color); + border-radius:2px; + padding: 2px 4px; + display:inline-block; +} +details summary { + cursor: pointer; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-state-active { + /* Overrides the color of selection used in jQuery UI */ + background: var(--selected-background-color); + border: 1px solid var(--selected-background-color); + color: var(--selected-text-color); +} +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:var(--navbar-background-color); + color:var(--navbar-text-color); +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:auto; + overflow-x:auto; + scrollbar-width: thin; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:1; + background-color: var(--body-background-color); +} +ul.ui-autocomplete li { + float:left; + clear:both; + min-width:100%; +} +ul.ui-autocomplete li.ui-static-link { + position:sticky; + bottom:0; + left:0; + background: var(--subnav-background-color); + padding: 5px 0; + font-family: var(--body-font-family); + font-size: 0.93em; + font-weight: bolder; + z-index: 2; +} +li.ui-static-link a, li.ui-static-link a:visited { + text-decoration:none; + color:var(--link-color); + float:right; + margin-right:20px; +} +.ui-autocomplete .result-item { + font-size: inherit; +} +.ui-autocomplete .result-highlight { + font-weight:bold; +} +#search-input, #page-search-input { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + background-color: var(--search-input-background-color); + color: var(--search-input-text-color); + border-color: var(--border-color); + padding-left:20px; + width: 250px; + margin: 0; +} +#search-input { + margin-left: 4px; +} +#reset-button { + background-color: transparent; + background-image:url('resources/x.png'); + background-repeat:no-repeat; + background-size:contain; + border:0; + border-radius:0; + width:12px; + height:12px; + position:absolute; + right:12px; + top:10px; + font-size:0; +} +::placeholder { + color:var(--search-input-placeholder-color); + opacity: 1; +} +.search-tag-desc-result { + font-style:italic; + font-size:11px; +} +.search-tag-holder-result { + font-style:italic; + font-size:12px; +} +.search-tag-result:target { + background-color:var(--search-tag-highlight-color); +} +details.page-search-details { + display: inline-block; +} +div#result-container { + font-size: 1em; +} +div#result-container a.search-result-link { + padding: 0; + margin: 4px 0; + width: 100%; +} +#result-container .result-highlight { + font-weight:bolder; +} +.page-search-info { + background-color: var(--subnav-background-color); + border-radius: 3px; + border: 0 solid var(--border-color); + padding: 0 8px; + overflow: hidden; + height: 0; + transition: all 0.2s ease; +} +div.table-tabs > button.table-tab { + background: var(--navbar-background-color); + color: var(--navbar-text-color); +} +.page-search-header { + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 3px; + background-color:var(--navbar-background-color); + color:var(--navbar-text-color); + display: inline-block; +} +button.page-search-header { + border: none; + cursor: pointer; +} +span#page-search-link { + text-decoration: underline; +} +.module-graph span, .sealed-graph span { + display:none; + position:absolute; +} +.module-graph:hover span, .sealed-graph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.inherited-list { + margin: 10px 0 10px 0; +} +section.class-description { + line-height: 1.4; +} +.summary section[class$="-summary"], .details section[class$="-details"], +.class-uses .detail, .serialized-class-details { + padding: 0 20px 5px 10px; + border: 1px solid var(--border-color); + background-color: var(--section-background-color); +} +.inherited-list, section[class$="-details"] .detail { + padding:0 0 5px 8px; + background-color:var(--detail-background-color); + border:none; +} +.vertical-separator { + padding: 0 5px; +} +ul.help-section-list { + margin: 0; +} +ul.help-subtoc > li { + display: inline-block; + padding-right: 5px; + font-size: smaller; +} +ul.help-subtoc > li::before { + content: "\2022" ; + padding-right:2px; +} +.help-note { + font-style: italic; +} +/* + * Indicator icon for external links. + */ +main a[href*="://"]::after { + content:""; + display:inline-block; + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); + background-size:100% 100%; + width:7px; + height:7px; + margin-left:2px; + margin-bottom:4px; +} +main a[href*="://"]:hover::after, +main a[href*="://"]:focus::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); +} +/* + * Styles for header/section anchor links + */ +a.anchor-link { + opacity: 0; + transition: opacity 0.1s; +} +:hover > a.anchor-link { + opacity: 80%; +} +a.anchor-link:hover, +a.anchor-link:focus-visible, +a.anchor-link.visible { + opacity: 100%; +} +a.anchor-link > img { + width: 0.9em; + height: 0.9em; +} +/* + * Styles for copy-to-clipboard buttons + */ +button.copy { + opacity: 70%; + border: none; + border-radius: 3px; + position: relative; + background:none; + transition: opacity 0.3s; + cursor: pointer; +} +:hover > button.copy { + opacity: 80%; +} +button.copy:hover, +button.copy:active, +button.copy:focus-visible, +button.copy.visible { + opacity: 100%; +} +button.copy img { + position: relative; + background: none; + filter: brightness(var(--copy-icon-brightness)); +} +button.copy:active { + background-color: var(--copy-button-background-color-active); +} +button.copy span { + color: var(--body-text-color); + position: relative; + top: -0.1em; + transition: all 0.1s; + font-size: 0.76rem; + line-height: 1.2em; + opacity: 0; +} +button.copy:hover span, +button.copy:focus-visible span, +button.copy.visible span { + opacity: 100%; +} +/* search page copy button */ +button#page-search-copy { + margin-left: 0.4em; + padding:0.3em; + top:0.13em; +} +button#page-search-copy img { + width: 1.2em; + height: 1.2em; + padding: 0.01em 0; + top: 0.15em; +} +button#page-search-copy span { + color: var(--body-text-color); + line-height: 1.2em; + padding: 0.2em; + top: -0.18em; +} +div.page-search-info:hover button#page-search-copy span { + opacity: 100%; +} +/* snippet copy button */ +button.snippet-copy { + position: absolute; + top: 6px; + right: 6px; + height: 1.7em; + padding: 2px; +} +button.snippet-copy img { + width: 18px; + height: 18px; + padding: 0.05em 0; +} +button.snippet-copy span { + line-height: 1.2em; + padding: 0.2em; + position: relative; + top: -0.5em; +} +div.snippet-container:hover button.snippet-copy span { + opacity: 100%; +} +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid var(--table-border-color); +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid var(--table-border-color); +} +table.striped { + border-collapse: collapse; + border: 1px solid var(--table-border-color); +} +table.striped > thead { + background-color: var(--subnav-background-color); +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid var(--table-border-color); +} +table.striped > tbody > tr:nth-child(even) { + background-color: var(--odd-row-color) +} +table.striped > tbody > tr:nth-child(odd) { + background-color: var(--even-row-color) +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid var(--table-border-color); + border-right: 1px solid var(--table-border-color); +} +table.striped > tbody > tr > th { + font-weight: normal; +} +/** + * Tweak style for small screens. + */ +@media screen and (max-width: 920px) { + header.flex-header { + max-height: 100vh; + overflow-y: auto; + } + div#navbar-top { + height: 2.8em; + transition: height 0.35s ease; + } + ul.nav-list { + display: block; + width: 40%; + float:left; + clear: left; + margin: 10px 0 0 0; + padding: 0; + } + ul.nav-list li { + float: none; + padding: 6px; + margin-left: 10px; + margin-top: 2px; + } + ul.sub-nav-list-small { + display:block; + height: 100%; + width: 50%; + float: right; + clear: right; + background-color: var(--subnav-background-color); + color: var(--body-text-color); + margin: 6px 0 0 0; + padding: 0; + } + ul.sub-nav-list-small ul { + padding-left: 20px; + } + ul.sub-nav-list-small a:link, ul.sub-nav-list-small a:visited { + color:var(--link-color); + } + ul.sub-nav-list-small a:hover { + color:var(--link-color-active); + } + ul.sub-nav-list-small li { + list-style:none; + float:none; + padding: 6px; + margin-top: 1px; + text-transform:uppercase; + } + ul.sub-nav-list-small > li { + margin-left: 10px; + } + ul.sub-nav-list-small li p { + margin: 5px 0; + } + div#navbar-sub-list { + display: none; + } + .top-nav a:link, .top-nav a:active, .top-nav a:visited { + display: block; + } + button#navbar-toggle-button { + width: 3.4em; + height: 2.8em; + background-color: transparent; + display: block; + float: left; + border: 0; + margin: 0 10px; + cursor: pointer; + font-size: 10px; + } + button#navbar-toggle-button .nav-bar-toggle-icon { + display: block; + width: 24px; + height: 3px; + margin: 1px 0 4px 0; + border-radius: 2px; + transition: all 0.1s; + background-color: var(--navbar-text-color); + } + button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(1) { + transform: rotate(45deg); + transform-origin: 10% 10%; + width: 26px; + } + button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(2) { + opacity: 0; + } + button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(3) { + transform: rotate(-45deg); + transform-origin: 10% 90%; + width: 26px; + } +} +@media screen and (max-width: 800px) { + .about-language { + padding-right: 16px; + } + ul.nav-list li { + margin-left: 5px; + } + ul.sub-nav-list-small > li { + margin-left: 5px; + } + main { + padding: 10px; + } + .summary section[class$="-summary"], .details section[class$="-details"], + .class-uses .detail, .serialized-class-details { + padding: 0 8px 5px 8px; + } + body { + -webkit-text-size-adjust: none; + } +} +@media screen and (max-width: 400px) { + .about-language { + font-size: 10px; + padding-right: 12px; + } +} +@media screen and (max-width: 400px) { + .nav-list-search { + width: 94%; + } + #search-input, #page-search-input { + width: 70%; + } +} +@media screen and (max-width: 320px) { + .nav-list-search > label { + display: none; + } + .nav-list-search { + width: 90%; + } + #search-input, #page-search-input { + width: 80%; + } +} + +pre.snippet { + background-color: var(--snippet-background-color); + color: var(--snippet-text-color); + padding: 10px; + margin: 12px 0; + overflow: auto; + white-space: pre; +} +div.snippet-container { + position: relative; +} +@media screen and (max-width: 800px) { + pre.snippet { + padding-top: 26px; + } + button.snippet-copy { + top: 4px; + right: 4px; + } +} +pre.snippet .italic { + font-style: italic; +} +pre.snippet .bold { + font-weight: bold; +} +pre.snippet .highlighted { + background-color: var(--snippet-highlight-color); + border-radius: 10%; +} diff --git a/waffle-jna-jakarta/apidocs/tag-search-index.js b/waffle-jna-jakarta/apidocs/tag-search-index.js new file mode 100644 index 0000000000..bf10aaf6d1 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/tag-search-index.js @@ -0,0 +1 @@ +tagSearchIndex = [{"l":"Constant Field Values","h":"","u":"constant-values.html"},{"l":"Serialized Form","h":"","u":"serialized-form.html"}];updateSearchResults(); \ No newline at end of file diff --git a/waffle-jna-jakarta/apidocs/type-search-index.js b/waffle-jna-jakarta/apidocs/type-search-index.js new file mode 100644 index 0000000000..6fb099c7e6 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"waffle.util","l":"AuthorizationHeader"},{"p":"waffle.servlet","l":"AutoDisposableWindowsPrincipal"},{"p":"waffle.servlet.spi","l":"BasicSecurityFilterProvider"},{"p":"waffle.util.cache","l":"Cache"},{"p":"waffle.util.cache","l":"CacheSupplier"},{"p":"waffle.util.cache","l":"CaffeineCache"},{"p":"waffle.util.cache","l":"CaffeineCacheSupplier"},{"p":"waffle.servlet","l":"CorsAwareNegotiateSecurityFilter"},{"p":"waffle.util","l":"CorsPreFlightCheck"},{"p":"waffle.jaas","l":"GroupPrincipal"},{"p":"waffle.windows.auth","l":"IWindowsAccount"},{"p":"waffle.windows.auth","l":"IWindowsAuthProvider"},{"p":"waffle.windows.auth","l":"IWindowsComputer"},{"p":"waffle.windows.auth","l":"IWindowsCredentialsHandle"},{"p":"waffle.windows.auth","l":"IWindowsDomain"},{"p":"waffle.windows.auth","l":"IWindowsIdentity"},{"p":"waffle.windows.auth","l":"IWindowsImpersonationContext"},{"p":"waffle.windows.auth","l":"IWindowsSecurityContext"},{"p":"waffle.servlet","l":"NegotiateRequestWrapper"},{"p":"waffle.servlet","l":"NegotiateSecurityFilter"},{"p":"waffle.servlet.spi","l":"NegotiateSecurityFilterProvider"},{"p":"waffle.util","l":"NtlmMessage"},{"p":"waffle.util","l":"NtlmServletRequest"},{"p":"waffle.windows.auth","l":"PrincipalFormat"},{"p":"waffle.jaas","l":"RolePrincipal"},{"p":"waffle.servlet.spi","l":"SecurityFilterProvider"},{"p":"waffle.servlet.spi","l":"SecurityFilterProviderCollection"},{"p":"waffle.util","l":"SPNegoMessage"},{"p":"waffle.jaas","l":"UserPrincipal"},{"p":"waffle.util","l":"WaffleInfo"},{"p":"waffle.servlet","l":"WaffleInfoServlet"},{"p":"waffle.windows.auth","l":"WindowsAccount"},{"p":"waffle.windows.auth.impl","l":"WindowsAccountImpl"},{"p":"waffle.windows.auth.impl","l":"WindowsAuthProviderImpl"},{"p":"waffle.windows.auth.impl","l":"WindowsComputerImpl"},{"p":"waffle.windows.auth.impl","l":"WindowsCredentialsHandleImpl"},{"p":"waffle.windows.auth.impl","l":"WindowsDomainImpl"},{"p":"waffle.windows.auth.impl","l":"WindowsIdentityImpersonationContextImpl"},{"p":"waffle.windows.auth.impl","l":"WindowsIdentityImpl"},{"p":"waffle.jaas","l":"WindowsLoginModule"},{"p":"waffle.servlet","l":"WindowsPrincipal"},{"p":"waffle.windows.auth.impl","l":"WindowsSecurityContextImpersonationContextImpl"},{"p":"waffle.windows.auth.impl","l":"WindowsSecurityContextImpl"}];updateSearchResults(); \ No newline at end of file diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/module-summary.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/module-summary.html new file mode 100644 index 0000000000..1d39c0060d --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/module-summary.html @@ -0,0 +1,128 @@ + + + + +waffle.jna.jakarta (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Module waffle.jna.jakarta

    +
    +
    +
    module waffle.jna.jakarta
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/GroupPrincipal.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/GroupPrincipal.html new file mode 100644 index 0000000000..d457e3a90b --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/GroupPrincipal.html @@ -0,0 +1,323 @@ + + + + +GroupPrincipal (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + +
    Package waffle.jaas
    +

    Class GroupPrincipal

    +
    +
    java.lang.Object +
    waffle.jaas.UserPrincipal +
    waffle.jaas.GroupPrincipal
    +
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    Serializable, Principal
    +
    +
    +
    @Deprecated +public class GroupPrincipal +extends UserPrincipal
    +
    Deprecated. +
    This class is deprecated as hiding a principal inside another principal is not JAAS compliant. Use the + Principals in the Subject to directly enroll groups or roles by name.
    +
    +
    Group principal.
    +
    +
    See Also:
    +
    + +
    +
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        GroupPrincipal

        +
        public GroupPrincipal(String fqn)
        +
        Deprecated.
        +
        Instantiates a new group principal.
        +
        +
        Parameters:
        +
        fqn - the fqn
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getName

        +
        public String getName()
        +
        Deprecated.
        +
        Description copied from class: UserPrincipal
        +
        Fully qualified username.
        +
        +
        Specified by:
        +
        getName in interface Principal
        +
        Overrides:
        +
        getName in class UserPrincipal
        +
        Returns:
        +
        the name
        +
        +
        +
      • +
      • +
        +

        addMember

        +
        public boolean addMember(Principal user)
        +
        Deprecated.
        +
        Add user principal to member.
        +
        +
        Parameters:
        +
        user - principal
        +
        Returns:
        +
        True if user principal is a member
        +
        +
        +
      • +
      • +
        +

        isMember

        +
        public boolean isMember(Principal user)
        +
        Deprecated.
        +
        Is user principal a member of the group.
        +
        +
        Parameters:
        +
        user - principal
        +
        Returns:
        +
        True if user principal is a member
        +
        +
        +
      • +
      • +
        +

        members

        +
        public Enumeration<Principal> members()
        +
        Deprecated.
        +
        Member enumeration.
        +
        +
        Returns:
        +
        enumerated members
        +
        +
        +
      • +
      • +
        +

        removeMember

        +
        public boolean removeMember(Principal user)
        +
        Deprecated.
        +
        Remove user from member.
        +
        +
        Parameters:
        +
        user - principal
        +
        Returns:
        +
        True if user principal is removed
        +
        +
        +
      • +
      • +
        +

        toString

        +
        public String toString()
        +
        Deprecated.
        +
        +
        Specified by:
        +
        toString in interface Principal
        +
        Overrides:
        +
        toString in class Object
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/RolePrincipal.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/RolePrincipal.html new file mode 100644 index 0000000000..fbaa5ae135 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/RolePrincipal.html @@ -0,0 +1,253 @@ + + + + +RolePrincipal (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + +
    Package waffle.jaas
    +

    Class RolePrincipal

    +
    +
    java.lang.Object +
    waffle.jaas.RolePrincipal
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    Serializable, Principal
    +
    +
    +
    public class RolePrincipal +extends Object +implements Principal, Serializable
    +
    Role principal.
    +
    +
    See Also:
    +
    + +
    +
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        RolePrincipal

        +
        public RolePrincipal(String newFqn)
        +
        A windows principal.
        +
        +
        Parameters:
        +
        newFqn - Fully qualified name.
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getName

        +
        public String getName()
        +
        Role name (Windows Group).
        +
        +
        Specified by:
        +
        getName in interface Principal
        +
        Returns:
        +
        the name
        +
        +
        +
      • +
      • +
        +

        equals

        +
        public boolean equals(Object o)
        +
        Role Principal Equals for FQN.
        +
        +
        Specified by:
        +
        equals in interface Principal
        +
        Overrides:
        +
        equals in class Object
        +
        Parameters:
        +
        o - Object used for Equality Check.
        +
        Returns:
        +
        true, if successful
        +
        +
        +
      • +
      • +
        +

        hashCode

        +
        public int hashCode()
        +
        Role Principal HashCode for FQN.
        +
        +
        Specified by:
        +
        hashCode in interface Principal
        +
        Overrides:
        +
        hashCode in class Object
        +
        Returns:
        +
        the int
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/UserPrincipal.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/UserPrincipal.html new file mode 100644 index 0000000000..6baf51b849 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/UserPrincipal.html @@ -0,0 +1,245 @@ + + + + +UserPrincipal (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + +
    Package waffle.jaas
    +

    Class UserPrincipal

    +
    +
    java.lang.Object +
    waffle.jaas.UserPrincipal
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    Serializable, Principal
    +
    +
    +
    Direct Known Subclasses:
    +
    GroupPrincipal
    +
    +
    +
    public class UserPrincipal +extends Object +implements Principal, Serializable
    +
    User Principal.
    +
    +
    See Also:
    +
    + +
    +
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        UserPrincipal

        +
        public UserPrincipal(String newFqn)
        +
        A user principal.
        +
        +
        Parameters:
        +
        newFqn - Fully qualified username.
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      + +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/WindowsLoginModule.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/WindowsLoginModule.html new file mode 100644 index 0000000000..9c32b77e3f --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/WindowsLoginModule.html @@ -0,0 +1,367 @@ + + + + +WindowsLoginModule (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + +
    Package waffle.jaas
    +

    Class WindowsLoginModule

    +
    +
    java.lang.Object +
    waffle.jaas.WindowsLoginModule
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    LoginModule
    +
    +
    +
    public class WindowsLoginModule +extends Object +implements LoginModule
    +
    A Java Security login module for Windows authentication.
    +
    +
    See Also:
    +
    + +
    +
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WindowsLoginModule

        +
        public WindowsLoginModule()
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        initialize

        +
        public void initialize(Subject initSubject, + CallbackHandler initCallbackHandler, + Map<String,?> initSharedState, + Map<String,?> initOptions)
        +
        +
        Specified by:
        +
        initialize in interface LoginModule
        +
        +
        +
      • +
      • +
        +

        login

        +
        public boolean login() + throws LoginException
        +
        Use Windows SSPI to authenticate a username with a password.
        +
        +
        Specified by:
        +
        login in interface LoginModule
        +
        Returns:
        +
        true, if successful
        +
        Throws:
        +
        LoginException - the login exception
        +
        +
        +
      • +
      • +
        +

        abort

        +
        public boolean abort() + throws LoginException
        +
        Abort a login process.
        +
        +
        Specified by:
        +
        abort in interface LoginModule
        +
        Returns:
        +
        true, if successful
        +
        Throws:
        +
        LoginException - the login exception
        +
        +
        +
      • +
      • +
        +

        commit

        +
        public boolean commit() + throws LoginException
        +
        Commit principals to the subject.
        +
        +
        Specified by:
        +
        commit in interface LoginModule
        +
        Returns:
        +
        true, if successful
        +
        Throws:
        +
        LoginException - the login exception
        +
        +
        +
      • +
      • +
        +

        logout

        +
        public boolean logout() + throws LoginException
        +
        Logout a user.
        +
        +
        Specified by:
        +
        logout in interface LoginModule
        +
        Returns:
        +
        true, if successful
        +
        Throws:
        +
        LoginException - the login exception
        +
        +
        +
      • +
      • +
        +

        isDebug

        +
        public boolean isDebug()
        +
        True if Debug is enabled.
        +
        +
        Returns:
        +
        True or false.
        +
        +
        +
      • +
      • +
        +

        getAuth

        +
        public IWindowsAuthProvider getAuth()
        +
        Windows auth provider.
        +
        +
        Returns:
        +
        IWindowsAuthProvider.
        +
        +
        +
      • +
      • +
        +

        setAuth

        +
        public void setAuth(IWindowsAuthProvider provider)
        +
        Set Windows auth provider.
        +
        +
        Parameters:
        +
        provider - Class implements IWindowsAuthProvider.
        +
        +
        +
      • +
      • +
        +

        isAllowGuestLogin

        +
        public boolean isAllowGuestLogin()
        +
        True if Guest login permitted.
        +
        +
        Returns:
        +
        True if Guest login permitted, false otherwise.
        +
        +
        +
      • +
      • +
        +

        setAllowGuestLogin

        +
        public void setAllowGuestLogin(boolean value)
        +
        Set whether Guest login is permitted. Default is true, if the Guest account is enabled, an invalid + username/password results in a Guest login.
        +
        +
        Parameters:
        +
        value - True or false.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/class-use/GroupPrincipal.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/class-use/GroupPrincipal.html new file mode 100644 index 0000000000..9854b75fd7 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/class-use/GroupPrincipal.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.jaas.GroupPrincipal (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.jaas.GroupPrincipal

    +
    +No usage of waffle.jaas.GroupPrincipal
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/class-use/RolePrincipal.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/class-use/RolePrincipal.html new file mode 100644 index 0000000000..d9a5676280 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/class-use/RolePrincipal.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.jaas.RolePrincipal (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.jaas.RolePrincipal

    +
    +No usage of waffle.jaas.RolePrincipal
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/class-use/UserPrincipal.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/class-use/UserPrincipal.html new file mode 100644 index 0000000000..abf751ee3e --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/class-use/UserPrincipal.html @@ -0,0 +1,93 @@ + + + + +Uses of Class waffle.jaas.UserPrincipal (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.jaas.UserPrincipal

    +
    +
    Packages that use UserPrincipal
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA JAAS Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/class-use/WindowsLoginModule.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/class-use/WindowsLoginModule.html new file mode 100644 index 0000000000..df356d884a --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/class-use/WindowsLoginModule.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.jaas.WindowsLoginModule (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.jaas.WindowsLoginModule

    +
    +No usage of waffle.jaas.WindowsLoginModule
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/package-summary.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/package-summary.html new file mode 100644 index 0000000000..7c11d86664 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/package-summary.html @@ -0,0 +1,114 @@ + + + + +waffle.jaas (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    + +

    Package waffle.jaas

    +
    +
    +
    package waffle.jaas
    +
    +
    Waffle JNA JAAS Package.
    +
    +
    +
      +
    • +
      +
      Classes
      +
      +
      Class
      +
      Description
      + +
      Deprecated. +
      This class is deprecated as hiding a principal inside another principal is not JAAS compliant.
      +
      + +
      +
      Role principal.
      +
      + +
      +
      User Principal.
      +
      + +
      +
      A Java Security login module for Windows authentication.
      +
      +
      +
      +
    • +
    +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/package-tree.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/package-tree.html new file mode 100644 index 0000000000..6d28a63b12 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/package-tree.html @@ -0,0 +1,82 @@ + + + + +waffle.jaas Class Hierarchy (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package waffle.jaas

    +
    +Package Hierarchies: + +
    +

    Class Hierarchy

    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/package-use.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/package-use.html new file mode 100644 index 0000000000..ae65c1bb80 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/jaas/package-use.html @@ -0,0 +1,88 @@ + + + + +Uses of Package waffle.jaas (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    waffle.jaas

    +
    +
    Packages that use waffle.jaas
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA JAAS Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/AutoDisposableWindowsPrincipal.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/AutoDisposableWindowsPrincipal.html new file mode 100644 index 0000000000..a2da1fe70f --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/AutoDisposableWindowsPrincipal.html @@ -0,0 +1,245 @@ + + + + +AutoDisposableWindowsPrincipal (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class AutoDisposableWindowsPrincipal

    +
    +
    java.lang.Object +
    waffle.servlet.WindowsPrincipal +
    waffle.servlet.AutoDisposableWindowsPrincipal
    +
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    jakarta.servlet.http.HttpSessionBindingListener, Serializable, Principal, EventListener
    +
    +
    +
    public class AutoDisposableWindowsPrincipal +extends WindowsPrincipal +implements jakarta.servlet.http.HttpSessionBindingListener
    +
    The Class AutoDisposableWindowsPrincipal.
    +
    +
    See Also:
    +
    + +
    +
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        AutoDisposableWindowsPrincipal

        +
        public AutoDisposableWindowsPrincipal(IWindowsIdentity windowsIdentity)
        +
        Instantiates a new auto disposable windows principal.
        +
        +
        Parameters:
        +
        windowsIdentity - the windows identity
        +
        +
        +
      • +
      • +
        +

        AutoDisposableWindowsPrincipal

        +
        public AutoDisposableWindowsPrincipal(IWindowsIdentity windowsIdentity, + PrincipalFormat principalFormat, + PrincipalFormat roleFormat)
        +
        Instantiates a new auto disposable windows principal.
        +
        +
        Parameters:
        +
        windowsIdentity - the windows identity
        +
        principalFormat - the principal format
        +
        roleFormat - the role format
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        valueBound

        +
        public void valueBound(jakarta.servlet.http.HttpSessionBindingEvent evt)
        +
        +
        Specified by:
        +
        valueBound in interface jakarta.servlet.http.HttpSessionBindingListener
        +
        +
        +
      • +
      • +
        +

        valueUnbound

        +
        public void valueUnbound(jakarta.servlet.http.HttpSessionBindingEvent evt)
        +
        +
        Specified by:
        +
        valueUnbound in interface jakarta.servlet.http.HttpSessionBindingListener
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/CorsAwareNegotiateSecurityFilter.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/CorsAwareNegotiateSecurityFilter.html new file mode 100644 index 0000000000..30b3066f64 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/CorsAwareNegotiateSecurityFilter.html @@ -0,0 +1,240 @@ + + + + +CorsAwareNegotiateSecurityFilter (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class CorsAwareNegotiateSecurityFilter

    +
    +
    java.lang.Object +
    waffle.servlet.NegotiateSecurityFilter +
    waffle.servlet.CorsAwareNegotiateSecurityFilter
    +
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    jakarta.servlet.Filter
    +
    +
    +
    public class CorsAwareNegotiateSecurityFilter +extends NegotiateSecurityFilter +implements jakarta.servlet.Filter
    +
    The Class CorsAwareNegotiateSecurityFilter.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        CorsAwareNegotiateSecurityFilter

        +
        public CorsAwareNegotiateSecurityFilter()
        +
        Instantiates a new negotiate security filter.
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        init

        +
        public void init(jakarta.servlet.FilterConfig filterConfig) + throws jakarta.servlet.ServletException
        +
        +
        Specified by:
        +
        init in interface jakarta.servlet.Filter
        +
        Overrides:
        +
        init in class NegotiateSecurityFilter
        +
        Throws:
        +
        jakarta.servlet.ServletException
        +
        +
        +
      • +
      • +
        +

        doFilter

        +
        public void doFilter(jakarta.servlet.ServletRequest request, + jakarta.servlet.ServletResponse response, + jakarta.servlet.FilterChain chain) + throws IOException, +jakarta.servlet.ServletException
        +
        +
        Specified by:
        +
        doFilter in interface jakarta.servlet.Filter
        +
        Overrides:
        +
        doFilter in class NegotiateSecurityFilter
        +
        Throws:
        +
        IOException
        +
        jakarta.servlet.ServletException
        +
        +
        +
      • +
      • +
        +

        destroy

        +
        public void destroy()
        +
        +
        Specified by:
        +
        destroy in interface jakarta.servlet.Filter
        +
        Overrides:
        +
        destroy in class NegotiateSecurityFilter
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/NegotiateRequestWrapper.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/NegotiateRequestWrapper.html new file mode 100644 index 0000000000..ce568678f4 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/NegotiateRequestWrapper.html @@ -0,0 +1,288 @@ + + + + +NegotiateRequestWrapper (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class NegotiateRequestWrapper

    +
    +
    java.lang.Object +
    jakarta.servlet.ServletRequestWrapper +
    jakarta.servlet.http.HttpServletRequestWrapper +
    waffle.servlet.NegotiateRequestWrapper
    +
    +
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    jakarta.servlet.http.HttpServletRequest, jakarta.servlet.ServletRequest
    +
    +
    +
    public class NegotiateRequestWrapper +extends jakarta.servlet.http.HttpServletRequestWrapper
    +
    Negotiate Request wrapper.
    +
    +
    +
      + +
    • +
      +

      Field Summary

      +
      +

      Fields inherited from interface jakarta.servlet.http.HttpServletRequest

      +BASIC_AUTH, CLIENT_CERT_AUTH, DIGEST_AUTH, FORM_AUTH
      +
      +
    • + +
    • +
      +

      Constructor Summary

      +
      Constructors
      +
      +
      Constructor
      +
      Description
      +
      NegotiateRequestWrapper(jakarta.servlet.http.HttpServletRequest newRequest, + WindowsPrincipal newPrincipal)
      +
      +
      Instantiates a new negotiate request wrapper.
      +
      +
      +
      +
    • + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      + + +
      +
      Authentication type.
      +
      + + +
      +
      Remote username.
      +
      + + +
      +
      User principal.
      +
      +
      boolean
      + +
      +
      Returns true if the user is in a given role.
      +
      +
      +
      +
      +
      +

      Methods inherited from class jakarta.servlet.http.HttpServletRequestWrapper

      +authenticate, changeSessionId, getContextPath, getCookies, getDateHeader, getHeader, getHeaderNames, getHeaders, getHttpServletMapping, getIntHeader, getMethod, getPart, getParts, getPathInfo, getPathTranslated, getQueryString, getRequestedSessionId, getRequestURI, getRequestURL, getServletPath, getSession, getSession, getTrailerFields, isRequestedSessionIdFromCookie, isRequestedSessionIdFromURL, isRequestedSessionIdValid, isTrailerFieldsReady, login, logout, newPushBuilder, upgrade
      +
      +

      Methods inherited from class jakarta.servlet.ServletRequestWrapper

      +getAsyncContext, getAttribute, getAttributeNames, getCharacterEncoding, getContentLength, getContentLengthLong, getContentType, getDispatcherType, getInputStream, getLocalAddr, getLocale, getLocales, getLocalName, getLocalPort, getParameter, getParameterMap, getParameterNames, getParameterValues, getProtocol, getProtocolRequestId, getReader, getRemoteAddr, getRemoteHost, getRemotePort, getRequest, getRequestDispatcher, getRequestId, getScheme, getServerName, getServerPort, getServletConnection, getServletContext, isAsyncStarted, isAsyncSupported, isSecure, isWrapperFor, isWrapperFor, removeAttribute, setAttribute, setCharacterEncoding, setCharacterEncoding, setRequest, startAsync, startAsync
      +
      +

      Methods inherited from class java.lang.Object

      +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +
      +

      Methods inherited from interface jakarta.servlet.ServletRequest

      +getAsyncContext, getAttribute, getAttributeNames, getCharacterEncoding, getContentLength, getContentLengthLong, getContentType, getDispatcherType, getInputStream, getLocalAddr, getLocale, getLocales, getLocalName, getLocalPort, getParameter, getParameterMap, getParameterNames, getParameterValues, getProtocol, getProtocolRequestId, getReader, getRemoteAddr, getRemoteHost, getRemotePort, getRequestDispatcher, getRequestId, getScheme, getServerName, getServerPort, getServletConnection, getServletContext, isAsyncStarted, isAsyncSupported, isSecure, removeAttribute, setAttribute, setCharacterEncoding, setCharacterEncoding, startAsync, startAsync
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        NegotiateRequestWrapper

        +
        public NegotiateRequestWrapper(jakarta.servlet.http.HttpServletRequest newRequest, + WindowsPrincipal newPrincipal)
        +
        Instantiates a new negotiate request wrapper.
        +
        +
        Parameters:
        +
        newRequest - the new request
        +
        newPrincipal - the new principal
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getUserPrincipal

        +
        public Principal getUserPrincipal()
        +
        User principal.
        +
        +
        Specified by:
        +
        getUserPrincipal in interface jakarta.servlet.http.HttpServletRequest
        +
        Overrides:
        +
        getUserPrincipal in class jakarta.servlet.http.HttpServletRequestWrapper
        +
        Returns:
        +
        the user principal
        +
        +
        +
      • +
      • +
        +

        getAuthType

        +
        public String getAuthType()
        +
        Authentication type.
        +
        +
        Specified by:
        +
        getAuthType in interface jakarta.servlet.http.HttpServletRequest
        +
        Overrides:
        +
        getAuthType in class jakarta.servlet.http.HttpServletRequestWrapper
        +
        Returns:
        +
        the auth type
        +
        +
        +
      • +
      • +
        +

        getRemoteUser

        +
        public String getRemoteUser()
        +
        Remote username.
        +
        +
        Specified by:
        +
        getRemoteUser in interface jakarta.servlet.http.HttpServletRequest
        +
        Overrides:
        +
        getRemoteUser in class jakarta.servlet.http.HttpServletRequestWrapper
        +
        Returns:
        +
        the remote user
        +
        +
        +
      • +
      • +
        +

        isUserInRole

        +
        public boolean isUserInRole(String role)
        +
        Returns true if the user is in a given role.
        +
        +
        Specified by:
        +
        isUserInRole in interface jakarta.servlet.http.HttpServletRequest
        +
        Overrides:
        +
        isUserInRole in class jakarta.servlet.http.HttpServletRequestWrapper
        +
        Parameters:
        +
        role - the role
        +
        Returns:
        +
        true, if is user in role
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/NegotiateSecurityFilter.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/NegotiateSecurityFilter.html new file mode 100644 index 0000000000..4b91cdc830 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/NegotiateSecurityFilter.html @@ -0,0 +1,393 @@ + + + + +NegotiateSecurityFilter (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class NegotiateSecurityFilter

    +
    +
    java.lang.Object +
    waffle.servlet.NegotiateSecurityFilter
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    jakarta.servlet.Filter
    +
    +
    +
    Direct Known Subclasses:
    +
    CorsAwareNegotiateSecurityFilter
    +
    +
    +
    public class NegotiateSecurityFilter +extends Object +implements jakarta.servlet.Filter
    +
    A Negotiate (NTLM/Kerberos) Security Filter.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        NegotiateSecurityFilter

        +
        public NegotiateSecurityFilter()
        +
        Instantiates a new negotiate security filter.
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        destroy

        +
        public void destroy()
        +
        +
        Specified by:
        +
        destroy in interface jakarta.servlet.Filter
        +
        +
        +
      • +
      • +
        +

        doFilter

        +
        public void doFilter(jakarta.servlet.ServletRequest sreq, + jakarta.servlet.ServletResponse sres, + jakarta.servlet.FilterChain chain) + throws IOException, +jakarta.servlet.ServletException
        +
        +
        Specified by:
        +
        doFilter in interface jakarta.servlet.Filter
        +
        Throws:
        +
        IOException
        +
        jakarta.servlet.ServletException
        +
        +
        +
      • +
      • +
        +

        init

        +
        public void init(jakarta.servlet.FilterConfig filterConfig) + throws jakarta.servlet.ServletException
        +
        +
        Specified by:
        +
        init in interface jakarta.servlet.Filter
        +
        Throws:
        +
        jakarta.servlet.ServletException
        +
        +
        +
      • +
      • +
        +

        setPrincipalFormat

        +
        public void setPrincipalFormat(String format)
        +
        Set the principal format.
        +
        +
        Parameters:
        +
        format - Principal format.
        +
        +
        +
      • +
      • +
        +

        getPrincipalFormat

        +
        public PrincipalFormat getPrincipalFormat()
        +
        Principal format.
        +
        +
        Returns:
        +
        Principal format.
        +
        +
        +
      • +
      • +
        +

        setRoleFormat

        +
        public void setRoleFormat(String format)
        +
        Set the principal format.
        +
        +
        Parameters:
        +
        format - Role format.
        +
        +
        +
      • +
      • +
        +

        getRoleFormat

        +
        public PrincipalFormat getRoleFormat()
        +
        Principal format.
        +
        +
        Returns:
        +
        Role format.
        +
        +
        +
      • +
      • +
        +

        getAuth

        +
        public IWindowsAuthProvider getAuth()
        +
        Windows auth provider.
        +
        +
        Returns:
        +
        IWindowsAuthProvider.
        +
        +
        +
      • +
      • +
        +

        setAuth

        +
        public void setAuth(IWindowsAuthProvider provider)
        +
        Set Windows auth provider.
        +
        +
        Parameters:
        +
        provider - Class implements IWindowsAuthProvider.
        +
        +
        +
      • +
      • +
        +

        isAllowGuestLogin

        +
        public boolean isAllowGuestLogin()
        +
        True if guest login is allowed.
        +
        +
        Returns:
        +
        True if guest login is allowed, false otherwise.
        +
        +
        +
      • +
      • +
        +

        setImpersonate

        +
        public void setImpersonate(boolean value)
        +
        Enable/Disable impersonation.
        +
        +
        Parameters:
        +
        value - true to enable impersonation, false otherwise
        +
        +
        +
      • +
      • +
        +

        isImpersonate

        +
        public boolean isImpersonate()
        +
        Checks if is impersonate.
        +
        +
        Returns:
        +
        true if impersonation is enabled, false otherwise
        +
        +
        +
      • +
      • +
        +

        getProviders

        +
        public SecurityFilterProviderCollection getProviders()
        +
        Security filter providers.
        +
        +
        Returns:
        +
        A collection of security filter providers.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/WaffleInfoServlet.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/WaffleInfoServlet.html new file mode 100644 index 0000000000..dd6f471bb2 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/WaffleInfoServlet.html @@ -0,0 +1,250 @@ + + + + +WaffleInfoServlet (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class WaffleInfoServlet

    +
    +
    java.lang.Object +
    jakarta.servlet.GenericServlet +
    jakarta.servlet.http.HttpServlet +
    waffle.servlet.WaffleInfoServlet
    +
    +
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    jakarta.servlet.Servlet, jakarta.servlet.ServletConfig, Serializable
    +
    +
    +
    public class WaffleInfoServlet +extends jakarta.servlet.http.HttpServlet
    +
    A servlet that returns WaffleInfo as XML.
    +
    +
    See Also:
    +
    + +
    +
    +
    +
    +
      + +
    • +
      +

      Field Summary

      +
      +

      Fields inherited from class jakarta.servlet.http.HttpServlet

      +LEGACY_DO_HEAD
      +
      +
    • + +
    • +
      +

      Constructor Summary

      +
      Constructors
      +
      +
      Constructor
      +
      Description
      + +
       
      +
      +
      +
    • + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      +
      void
      +
      doGet(jakarta.servlet.http.HttpServletRequest request, + jakarta.servlet.http.HttpServletResponse response)
      +
       
      +
      void
      +
      doPost(jakarta.servlet.http.HttpServletRequest request, + jakarta.servlet.http.HttpServletResponse response)
      +
       
      +
      void
      +
      getWaffleInfoResponse(jakarta.servlet.http.HttpServletRequest request, + jakarta.servlet.http.HttpServletResponse response)
      +
      +
      Gets the waffle info response.
      +
      +
      +
      +
      +
      +

      Methods inherited from class jakarta.servlet.http.HttpServlet

      +doDelete, doHead, doOptions, doPatch, doPut, doTrace, getLastModified, init, isSensitiveHeader, service, service
      +
      +

      Methods inherited from class jakarta.servlet.GenericServlet

      +destroy, getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log
      +
      +

      Methods inherited from class java.lang.Object

      +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WaffleInfoServlet

        +
        public WaffleInfoServlet()
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        doGet

        +
        public void doGet(jakarta.servlet.http.HttpServletRequest request, + jakarta.servlet.http.HttpServletResponse response)
        +
        +
        Overrides:
        +
        doGet in class jakarta.servlet.http.HttpServlet
        +
        +
        +
      • +
      • +
        +

        doPost

        +
        public void doPost(jakarta.servlet.http.HttpServletRequest request, + jakarta.servlet.http.HttpServletResponse response)
        +
        +
        Overrides:
        +
        doPost in class jakarta.servlet.http.HttpServlet
        +
        +
        +
      • +
      • +
        +

        getWaffleInfoResponse

        +
        public void getWaffleInfoResponse(jakarta.servlet.http.HttpServletRequest request, + jakarta.servlet.http.HttpServletResponse response)
        +
        Gets the waffle info response.
        +
        +
        Parameters:
        +
        request - the request
        +
        response - the response
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/WindowsPrincipal.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/WindowsPrincipal.html new file mode 100644 index 0000000000..2d7b8df1bc --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/WindowsPrincipal.html @@ -0,0 +1,379 @@ + + + + +WindowsPrincipal (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class WindowsPrincipal

    +
    +
    java.lang.Object +
    waffle.servlet.WindowsPrincipal
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    Serializable, Principal
    +
    +
    +
    Direct Known Subclasses:
    +
    AutoDisposableWindowsPrincipal
    +
    +
    +
    public class WindowsPrincipal +extends Object +implements Principal, Serializable
    +
    A Windows Principal.
    +
    +
    See Also:
    +
    + +
    +
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WindowsPrincipal

        +
        public WindowsPrincipal(IWindowsIdentity windowsIdentity)
        +
        A windows principal.
        +
        +
        Parameters:
        +
        windowsIdentity - Windows identity.
        +
        +
        +
      • +
      • +
        +

        WindowsPrincipal

        +
        public WindowsPrincipal(IWindowsIdentity windowsIdentity, + PrincipalFormat principalFormat, + PrincipalFormat roleFormat)
        +
        A windows principal.
        +
        +
        Parameters:
        +
        windowsIdentity - Windows identity.
        +
        principalFormat - Principal format.
        +
        roleFormat - Role format.
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getSid

        +
        public byte[] getSid()
        +
        Byte representation of the SID.
        +
        +
        Returns:
        +
        Array of bytes.
        +
        +
        +
      • +
      • +
        +

        getSidString

        +
        public String getSidString()
        +
        String representation of the SID.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getGroups

        +
        public Map<String,WindowsAccount> getGroups()
        +
        Windows groups that the user is a member of.
        +
        +
        Returns:
        +
        A map of group names to groups.
        +
        +
        +
      • +
      • +
        +

        getRolesString

        +
        public String getRolesString()
        +
        Get an array of roles as a string.
        +
        +
        Returns:
        +
        Role1, Role2, ...
        +
        +
        +
      • +
      • +
        +

        hasRole

        +
        public boolean hasRole(String role)
        +
        Checks whether the principal has a given role.
        +
        +
        Parameters:
        +
        role - Role name.
        +
        Returns:
        +
        True if the principal has a role, false otherwise.
        +
        +
        +
      • +
      • +
        +

        getName

        +
        public String getName()
        +
        Fully qualified name.
        +
        +
        Specified by:
        +
        getName in interface Principal
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getIdentity

        +
        public IWindowsIdentity getIdentity()
        +
        Underlying identity.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        toString

        +
        public String toString()
        +
        +
        Specified by:
        +
        toString in interface Principal
        +
        Overrides:
        +
        toString in class Object
        +
        +
        +
      • +
      • +
        +

        equals

        +
        public boolean equals(Object o)
        +
        +
        Specified by:
        +
        equals in interface Principal
        +
        Overrides:
        +
        equals in class Object
        +
        +
        +
      • +
      • +
        +

        hashCode

        +
        public int hashCode()
        +
        +
        Specified by:
        +
        hashCode in interface Principal
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/AutoDisposableWindowsPrincipal.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/AutoDisposableWindowsPrincipal.html new file mode 100644 index 0000000000..b1e46582d0 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/AutoDisposableWindowsPrincipal.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.servlet.AutoDisposableWindowsPrincipal (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.servlet.AutoDisposableWindowsPrincipal

    +
    +No usage of waffle.servlet.AutoDisposableWindowsPrincipal
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/CorsAwareNegotiateSecurityFilter.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/CorsAwareNegotiateSecurityFilter.html new file mode 100644 index 0000000000..2a33f8028e --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/CorsAwareNegotiateSecurityFilter.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.servlet.CorsAwareNegotiateSecurityFilter (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.servlet.CorsAwareNegotiateSecurityFilter

    +
    +No usage of waffle.servlet.CorsAwareNegotiateSecurityFilter
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/NegotiateRequestWrapper.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/NegotiateRequestWrapper.html new file mode 100644 index 0000000000..58deeb28f3 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/NegotiateRequestWrapper.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.servlet.NegotiateRequestWrapper (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.servlet.NegotiateRequestWrapper

    +
    +No usage of waffle.servlet.NegotiateRequestWrapper
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/NegotiateSecurityFilter.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/NegotiateSecurityFilter.html new file mode 100644 index 0000000000..aaa684450d --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/NegotiateSecurityFilter.html @@ -0,0 +1,91 @@ + + + + +Uses of Class waffle.servlet.NegotiateSecurityFilter (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.servlet.NegotiateSecurityFilter

    +
    +
    Packages that use NegotiateSecurityFilter
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Servlet Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/WaffleInfoServlet.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/WaffleInfoServlet.html new file mode 100644 index 0000000000..da8e52e1e0 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/WaffleInfoServlet.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.servlet.WaffleInfoServlet (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.servlet.WaffleInfoServlet

    +
    +No usage of waffle.servlet.WaffleInfoServlet
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/WindowsPrincipal.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/WindowsPrincipal.html new file mode 100644 index 0000000000..d35179517e --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/class-use/WindowsPrincipal.html @@ -0,0 +1,103 @@ + + + + +Uses of Class waffle.servlet.WindowsPrincipal (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.servlet.WindowsPrincipal

    +
    +
    Packages that use WindowsPrincipal
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Servlet Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/package-summary.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/package-summary.html new file mode 100644 index 0000000000..486b264271 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/package-summary.html @@ -0,0 +1,135 @@ + + + + +waffle.servlet (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    + +

    Package waffle.servlet

    +
    +
    +
    package waffle.servlet
    +
    +
    Waffle JNA Servlet Package.
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/package-tree.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/package-tree.html new file mode 100644 index 0000000000..159b484b7e --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/package-tree.html @@ -0,0 +1,103 @@ + + + + +waffle.servlet Class Hierarchy (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package waffle.servlet

    +
    +Package Hierarchies: + +
    +

    Class Hierarchy

    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/package-use.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/package-use.html new file mode 100644 index 0000000000..2d6dfe618f --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/package-use.html @@ -0,0 +1,92 @@ + + + + +Uses of Package waffle.servlet (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    waffle.servlet

    +
    +
    Packages that use waffle.servlet
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Servlet Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/BasicSecurityFilterProvider.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/BasicSecurityFilterProvider.html new file mode 100644 index 0000000000..55a59d82a2 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/BasicSecurityFilterProvider.html @@ -0,0 +1,324 @@ + + + + +BasicSecurityFilterProvider (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class BasicSecurityFilterProvider

    +
    +
    java.lang.Object +
    waffle.servlet.spi.BasicSecurityFilterProvider
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    SecurityFilterProvider
    +
    +
    +
    public class BasicSecurityFilterProvider +extends Object +implements SecurityFilterProvider
    +
    A Basic authentication security filter provider. https://tools.ietf.org/html/rfc2617
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        BasicSecurityFilterProvider

        +
        public BasicSecurityFilterProvider(IWindowsAuthProvider newAuthProvider)
        +
        Instantiates a new basic security filter provider.
        +
        +
        Parameters:
        +
        newAuthProvider - the new auth provider
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        doFilter

        +
        public IWindowsIdentity doFilter(jakarta.servlet.http.HttpServletRequest request, + jakarta.servlet.http.HttpServletResponse response) + throws IOException
        +
        Description copied from interface: SecurityFilterProvider
        +
        Execute filter.
        +
        +
        Specified by:
        +
        doFilter in interface SecurityFilterProvider
        +
        Parameters:
        +
        request - Http Servlet Request.
        +
        response - Http Servlet Response.
        +
        Returns:
        +
        A Windows identity in case authentication completed or NULL if not. Thrown exceptions should be caught + and processed as 401 Access Denied.
        +
        Throws:
        +
        IOException - on doFilter.
        +
        +
        +
      • +
      • +
        +

        isPrincipalException

        +
        public boolean isPrincipalException(jakarta.servlet.http.HttpServletRequest request)
        +
        Description copied from interface: SecurityFilterProvider
        +
        Returns true if despite having a principal authentication needs to happen.
        +
        +
        Specified by:
        +
        isPrincipalException in interface SecurityFilterProvider
        +
        Parameters:
        +
        request - Http Request.
        +
        Returns:
        +
        True if authentication is required.
        +
        +
        +
      • +
      • +
        +

        isSecurityPackageSupported

        +
        public boolean isSecurityPackageSupported(String securityPackage)
        +
        Description copied from interface: SecurityFilterProvider
        +
        Tests whether a specific security package is supported.
        +
        +
        Specified by:
        +
        isSecurityPackageSupported in interface SecurityFilterProvider
        +
        Parameters:
        +
        securityPackage - Security package.
        +
        Returns:
        +
        True if the security package is supported, false otherwise.
        +
        +
        +
      • +
      • +
        +

        sendUnauthorized

        +
        public void sendUnauthorized(jakarta.servlet.http.HttpServletResponse response)
        +
        Description copied from interface: SecurityFilterProvider
        +
        Add authentication method headers.
        +
        +
        Specified by:
        +
        sendUnauthorized in interface SecurityFilterProvider
        +
        Parameters:
        +
        response - Http Response.
        +
        +
        +
      • +
      • +
        +

        getRealm

        +
        public String getRealm()
        +
        Protection space.
        +
        +
        Returns:
        +
        Name of the protection space.
        +
        +
        +
      • +
      • +
        +

        setRealm

        +
        public void setRealm(String value)
        +
        Set the protection space.
        +
        +
        Parameters:
        +
        value - Protection space name.
        +
        +
        +
      • +
      • +
        +

        initParameter

        +
        public void initParameter(String parameterName, + String parameterValue)
        +
        Init configuration parameters.
        +
        +
        Specified by:
        +
        initParameter in interface SecurityFilterProvider
        +
        Parameters:
        +
        parameterName - the parameter name
        +
        parameterValue - the parameter value
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/NegotiateSecurityFilterProvider.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/NegotiateSecurityFilterProvider.html new file mode 100644 index 0000000000..e111fccb77 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/NegotiateSecurityFilterProvider.html @@ -0,0 +1,325 @@ + + + + +NegotiateSecurityFilterProvider (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class NegotiateSecurityFilterProvider

    +
    +
    java.lang.Object +
    waffle.servlet.spi.NegotiateSecurityFilterProvider
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    SecurityFilterProvider
    +
    +
    +
    public class NegotiateSecurityFilterProvider +extends Object +implements SecurityFilterProvider
    +
    A negotiate security filter provider.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        NegotiateSecurityFilterProvider

        +
        public NegotiateSecurityFilterProvider(IWindowsAuthProvider newAuthProvider)
        +
        Instantiates a new negotiate security filter provider.
        +
        +
        Parameters:
        +
        newAuthProvider - the new auth provider
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getProtocols

        +
        public List<String> getProtocols()
        +
        Gets the protocols.
        +
        +
        Returns:
        +
        the protocols
        +
        +
        +
      • +
      • +
        +

        setProtocols

        +
        public void setProtocols(List<String> values)
        +
        Sets the protocols.
        +
        +
        Parameters:
        +
        values - the new protocols
        +
        +
        +
      • +
      • +
        +

        sendUnauthorized

        +
        public void sendUnauthorized(jakarta.servlet.http.HttpServletResponse response)
        +
        Description copied from interface: SecurityFilterProvider
        +
        Add authentication method headers.
        +
        +
        Specified by:
        +
        sendUnauthorized in interface SecurityFilterProvider
        +
        Parameters:
        +
        response - Http Response.
        +
        +
        +
      • +
      • +
        +

        isPrincipalException

        +
        public boolean isPrincipalException(jakarta.servlet.http.HttpServletRequest request)
        +
        Description copied from interface: SecurityFilterProvider
        +
        Returns true if despite having a principal authentication needs to happen.
        +
        +
        Specified by:
        +
        isPrincipalException in interface SecurityFilterProvider
        +
        Parameters:
        +
        request - Http Request.
        +
        Returns:
        +
        True if authentication is required.
        +
        +
        +
      • +
      • +
        +

        doFilter

        +
        public IWindowsIdentity doFilter(jakarta.servlet.http.HttpServletRequest request, + jakarta.servlet.http.HttpServletResponse response) + throws IOException
        +
        Description copied from interface: SecurityFilterProvider
        +
        Execute filter.
        +
        +
        Specified by:
        +
        doFilter in interface SecurityFilterProvider
        +
        Parameters:
        +
        request - Http Servlet Request.
        +
        response - Http Servlet Response.
        +
        Returns:
        +
        A Windows identity in case authentication completed or NULL if not. Thrown exceptions should be caught + and processed as 401 Access Denied.
        +
        Throws:
        +
        IOException - on doFilter.
        +
        +
        +
      • +
      • +
        +

        isSecurityPackageSupported

        +
        public boolean isSecurityPackageSupported(String securityPackage)
        +
        Description copied from interface: SecurityFilterProvider
        +
        Tests whether a specific security package is supported.
        +
        +
        Specified by:
        +
        isSecurityPackageSupported in interface SecurityFilterProvider
        +
        Parameters:
        +
        securityPackage - Security package.
        +
        Returns:
        +
        True if the security package is supported, false otherwise.
        +
        +
        +
      • +
      • +
        +

        initParameter

        +
        public void initParameter(String parameterName, + String parameterValue)
        +
        Description copied from interface: SecurityFilterProvider
        +
        Init a parameter.
        +
        +
        Specified by:
        +
        initParameter in interface SecurityFilterProvider
        +
        Parameters:
        +
        parameterName - Parameter name.
        +
        parameterValue - Parameter value.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/SecurityFilterProvider.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/SecurityFilterProvider.html new file mode 100644 index 0000000000..9ca921ade6 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/SecurityFilterProvider.html @@ -0,0 +1,236 @@ + + + + +SecurityFilterProvider (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Interface SecurityFilterProvider

    +
    +
    +
    +
    All Known Implementing Classes:
    +
    BasicSecurityFilterProvider, NegotiateSecurityFilterProvider
    +
    +
    +
    public interface SecurityFilterProvider
    +
    A security filter provider.
    +
    +
    +
      + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      + +
      doFilter(jakarta.servlet.http.HttpServletRequest request, + jakarta.servlet.http.HttpServletResponse response)
      +
      +
      Execute filter.
      +
      +
      void
      +
      initParameter(String parameterName, + String parameterValue)
      +
      +
      Init a parameter.
      +
      +
      boolean
      +
      isPrincipalException(jakarta.servlet.http.HttpServletRequest request)
      +
      +
      Returns true if despite having a principal authentication needs to happen.
      +
      +
      boolean
      + +
      +
      Tests whether a specific security package is supported.
      +
      +
      void
      +
      sendUnauthorized(jakarta.servlet.http.HttpServletResponse response)
      +
      +
      Add authentication method headers.
      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        sendUnauthorized

        +
        void sendUnauthorized(jakarta.servlet.http.HttpServletResponse response)
        +
        Add authentication method headers.
        +
        +
        Parameters:
        +
        response - Http Response.
        +
        +
        +
      • +
      • +
        +

        isPrincipalException

        +
        boolean isPrincipalException(jakarta.servlet.http.HttpServletRequest request)
        +
        Returns true if despite having a principal authentication needs to happen.
        +
        +
        Parameters:
        +
        request - Http Request.
        +
        Returns:
        +
        True if authentication is required.
        +
        +
        +
      • +
      • +
        +

        doFilter

        +
        IWindowsIdentity doFilter(jakarta.servlet.http.HttpServletRequest request, + jakarta.servlet.http.HttpServletResponse response) + throws IOException
        +
        Execute filter.
        +
        +
        Parameters:
        +
        request - Http Servlet Request.
        +
        response - Http Servlet Response.
        +
        Returns:
        +
        A Windows identity in case authentication completed or NULL if not. Thrown exceptions should be caught + and processed as 401 Access Denied.
        +
        Throws:
        +
        IOException - on doFilter.
        +
        +
        +
      • +
      • +
        +

        isSecurityPackageSupported

        +
        boolean isSecurityPackageSupported(String securityPackage)
        +
        Tests whether a specific security package is supported.
        +
        +
        Parameters:
        +
        securityPackage - Security package.
        +
        Returns:
        +
        True if the security package is supported, false otherwise.
        +
        +
        +
      • +
      • +
        +

        initParameter

        +
        void initParameter(String parameterName, + String parameterValue)
        +
        Init a parameter.
        +
        +
        Parameters:
        +
        parameterName - Parameter name.
        +
        parameterValue - Parameter value.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/SecurityFilterProviderCollection.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/SecurityFilterProviderCollection.html new file mode 100644 index 0000000000..a2963fe7f0 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/SecurityFilterProviderCollection.html @@ -0,0 +1,323 @@ + + + + +SecurityFilterProviderCollection (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class SecurityFilterProviderCollection

    +
    +
    java.lang.Object +
    waffle.servlet.spi.SecurityFilterProviderCollection
    +
    +
    +
    +
    public class SecurityFilterProviderCollection +extends Object
    +
    A collection of security filter providers.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        SecurityFilterProviderCollection

        +
        public SecurityFilterProviderCollection(SecurityFilterProvider[] providerArray)
        +
        Instantiates a new security filter provider collection.
        +
        +
        Parameters:
        +
        providerArray - the provider array
        +
        +
        +
      • +
      • +
        +

        SecurityFilterProviderCollection

        +
        public SecurityFilterProviderCollection(String[] providerNames, + IWindowsAuthProvider auth)
        +
        Instantiates a new security filter provider collection.
        +
        +
        Parameters:
        +
        providerNames - the provider names
        +
        auth - the auth
        +
        +
        +
      • +
      • +
        +

        SecurityFilterProviderCollection

        +
        public SecurityFilterProviderCollection(IWindowsAuthProvider auth)
        +
        Instantiates a new security filter provider collection.
        +
        +
        Parameters:
        +
        auth - the auth
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        isSecurityPackageSupported

        +
        public boolean isSecurityPackageSupported(String securityPackage)
        +
        Tests whether a specific security package is supported by any of the underlying providers.
        +
        +
        Parameters:
        +
        securityPackage - Security package.
        +
        Returns:
        +
        True if the security package is supported, false otherwise.
        +
        +
        +
      • +
      • +
        +

        doFilter

        +
        public IWindowsIdentity doFilter(jakarta.servlet.http.HttpServletRequest request, + jakarta.servlet.http.HttpServletResponse response) + throws IOException
        +
        Filter.
        +
        +
        Parameters:
        +
        request - Http Request
        +
        response - Http Response
        +
        Returns:
        +
        Windows Identity or NULL.
        +
        Throws:
        +
        IOException - on doFilter.
        +
        +
        +
      • +
      • +
        +

        isPrincipalException

        +
        public boolean isPrincipalException(jakarta.servlet.http.HttpServletRequest request)
        +
        Returns true if authentication still needs to happen despite an existing principal.
        +
        +
        Parameters:
        +
        request - Http Request
        +
        Returns:
        +
        True if authentication is required.
        +
        +
        +
      • +
      • +
        +

        sendUnauthorized

        +
        public void sendUnauthorized(jakarta.servlet.http.HttpServletResponse response)
        +
        Send authorization headers.
        +
        +
        Parameters:
        +
        response - Http Response
        +
        +
        +
      • +
      • +
        +

        size

        +
        public int size()
        +
        Number of providers.
        +
        +
        Returns:
        +
        Number of providers.
        +
        +
        +
      • +
      • +
        +

        getByClassName

        +
        public SecurityFilterProvider getByClassName(String name) + throws ClassNotFoundException
        +
        Get a security provider by class name.
        +
        +
        Parameters:
        +
        name - Class name.
        +
        Returns:
        +
        A security provider instance.
        +
        Throws:
        +
        ClassNotFoundException - when class not found.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/class-use/BasicSecurityFilterProvider.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/class-use/BasicSecurityFilterProvider.html new file mode 100644 index 0000000000..9f8c0b3c69 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/class-use/BasicSecurityFilterProvider.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.servlet.spi.BasicSecurityFilterProvider (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.servlet.spi.BasicSecurityFilterProvider

    +
    +No usage of waffle.servlet.spi.BasicSecurityFilterProvider
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/class-use/NegotiateSecurityFilterProvider.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/class-use/NegotiateSecurityFilterProvider.html new file mode 100644 index 0000000000..71dd1b31ea --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/class-use/NegotiateSecurityFilterProvider.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.servlet.spi.NegotiateSecurityFilterProvider (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.servlet.spi.NegotiateSecurityFilterProvider

    +
    +No usage of waffle.servlet.spi.NegotiateSecurityFilterProvider
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/class-use/SecurityFilterProvider.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/class-use/SecurityFilterProvider.html new file mode 100644 index 0000000000..17938b5c88 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/class-use/SecurityFilterProvider.html @@ -0,0 +1,118 @@ + + + + +Uses of Interface waffle.servlet.spi.SecurityFilterProvider (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    waffle.servlet.spi.SecurityFilterProvider

    +
    +
    Packages that use SecurityFilterProvider
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Servlet SPI Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/class-use/SecurityFilterProviderCollection.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/class-use/SecurityFilterProviderCollection.html new file mode 100644 index 0000000000..f514ff5781 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/class-use/SecurityFilterProviderCollection.html @@ -0,0 +1,91 @@ + + + + +Uses of Class waffle.servlet.spi.SecurityFilterProviderCollection (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.servlet.spi.SecurityFilterProviderCollection

    +
    + +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Servlet Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/package-summary.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/package-summary.html new file mode 100644 index 0000000000..6448553f37 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/package-summary.html @@ -0,0 +1,129 @@ + + + + +waffle.servlet.spi (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    + +

    Package waffle.servlet.spi

    +
    +
    +
    package waffle.servlet.spi
    +
    +
    Waffle JNA Servlet SPI Package.
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/package-tree.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/package-tree.html new file mode 100644 index 0000000000..8f89e87bba --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/package-tree.html @@ -0,0 +1,84 @@ + + + + +waffle.servlet.spi Class Hierarchy (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package waffle.servlet.spi

    +
    +Package Hierarchies: + +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/package-use.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/package-use.html new file mode 100644 index 0000000000..fcb1293d19 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/servlet/spi/package-use.html @@ -0,0 +1,105 @@ + + + + +Uses of Package waffle.servlet.spi (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    waffle.servlet.spi

    +
    +
    Packages that use waffle.servlet.spi
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Servlet Package.
    +
    + +
    +
    Waffle JNA Servlet SPI Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/AuthorizationHeader.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/AuthorizationHeader.html new file mode 100644 index 0000000000..7c722a0a74 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/AuthorizationHeader.html @@ -0,0 +1,344 @@ + + + + +AuthorizationHeader (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + +
    Package waffle.util
    +

    Class AuthorizationHeader

    +
    +
    java.lang.Object +
    waffle.util.AuthorizationHeader
    +
    +
    +
    +
    public class AuthorizationHeader +extends Object
    +
    Authorization header.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        AuthorizationHeader

        +
        public AuthorizationHeader(jakarta.servlet.http.HttpServletRequest httpServletRequest)
        +
        Instantiates a new authorization header.
        +
        +
        Parameters:
        +
        httpServletRequest - the http servlet request
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getHeader

        +
        public String getHeader()
        +
        Gets the header.
        +
        +
        Returns:
        +
        the header
        +
        +
        +
      • +
      • +
        +

        isNull

        +
        public boolean isNull()
        +
        Checks if is null.
        +
        +
        Returns:
        +
        true, if is null
        +
        +
        +
      • +
      • +
        +

        getSecurityPackage

        +
        public String getSecurityPackage()
        +
        Returns a supported security package string. + +
        + Authorization: NTLM the_token
        + Authorization: Negotiate the_token
        + Authorization: Bearer the_token
        + 
        +
        +
        Returns:
        +
        AuthenticationScheme as SecurityPackage e.g. Negotiate, NTLM, Bearer.
        +
        +
        +
      • +
      • +
        +

        toString

        +
        public String toString()
        +
        +
        Overrides:
        +
        toString in class Object
        +
        +
        +
      • +
      • +
        +

        getToken

        +
        public String getToken()
        +
        Gets the token.
        +
        +
        Returns:
        +
        the token
        +
        +
        +
      • +
      • +
        +

        getTokenBytes

        +
        public byte[] getTokenBytes()
        +
        Gets the token bytes.
        +
        +
        Returns:
        +
        the token bytes
        +
        +
        +
      • +
      • +
        +

        isNtlmType1Message

        +
        public boolean isNtlmType1Message()
        +
        Checks if is ntlm type1 message.
        +
        +
        Returns:
        +
        true, if is ntlm type1 message
        +
        +
        +
      • +
      • +
        +

        isSPNegTokenInitMessage

        +
        public boolean isSPNegTokenInitMessage()
        +
        Checks if is SP nego message.
        +
        +
        Returns:
        +
        true, if is SP nego message that contains NegTokenInit
        +
        +
        +
      • +
      • +
        +

        isNtlmType1PostAuthorizationHeader

        +
        public boolean isNtlmType1PostAuthorizationHeader()
        +
        When using NTLM authentication and the browser is making a POST request, it preemptively sends a Type 2 + authentication message (without the POSTed data). The server responds with a 401, and the browser sends a Type 3 + request with the POSTed data. This is to avoid the situation where user's credentials might be potentially + invalid, and all this data is being POSTed across the wire.
        +
        +
        Returns:
        +
        True if request is an NTLM POST, PUT, or DELETE with an Authorization header and no data.
        +
        +
        +
      • +
      • +
        +

        isBearerAuthorizationHeader

        +
        public boolean isBearerAuthorizationHeader()
        +
        Is Bearer Authorization Header will return true if 'BEARER' exists.
        +
        +
        Returns:
        +
        True if header contains 'BEARER' header.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/CorsPreFlightCheck.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/CorsPreFlightCheck.html new file mode 100644 index 0000000000..bb59110036 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/CorsPreFlightCheck.html @@ -0,0 +1,161 @@ + + + + +CorsPreFlightCheck (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + +
    Package waffle.util
    +

    Class CorsPreFlightCheck

    +
    +
    java.lang.Object +
    waffle.util.CorsPreFlightCheck
    +
    +
    +
    +
    public final class CorsPreFlightCheck +extends Object
    +
    The Class CorsPrefFlightCheck.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        isPreflight

        +
        public static boolean isPreflight(jakarta.servlet.http.HttpServletRequest request)
        +
        Checks if is preflight.
        +
        +
        Parameters:
        +
        request - the request
        +
        Returns:
        +
        true, if is preflight
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/NtlmMessage.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/NtlmMessage.html new file mode 100644 index 0000000000..21c051efa3 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/NtlmMessage.html @@ -0,0 +1,179 @@ + + + + +NtlmMessage (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + +
    Package waffle.util
    +

    Class NtlmMessage

    +
    +
    java.lang.Object +
    waffle.util.NtlmMessage
    +
    +
    +
    +
    public final class NtlmMessage +extends Object
    +
    Rudimentary NTLM message utility.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        isNtlmMessage

        +
        public static boolean isNtlmMessage(byte[] message)
        +
        Checks if is ntlm message.
        +
        +
        Parameters:
        +
        message - the message
        +
        Returns:
        +
        true, if is ntlm message
        +
        +
        +
      • +
      • +
        +

        getMessageType

        +
        public static int getMessageType(byte[] message)
        +
        Get NTLM message type.
        +
        +
        Parameters:
        +
        message - Assuming a valid NTLM message.
        +
        Returns:
        +
        Message type.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/NtlmServletRequest.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/NtlmServletRequest.html new file mode 100644 index 0000000000..7e59663e3d --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/NtlmServletRequest.html @@ -0,0 +1,161 @@ + + + + +NtlmServletRequest (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + +
    Package waffle.util
    +

    Class NtlmServletRequest

    +
    +
    java.lang.Object +
    waffle.util.NtlmServletRequest
    +
    +
    +
    +
    public final class NtlmServletRequest +extends Object
    +
    The Class NtlmServletRequest.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getConnectionId

        +
        public static String getConnectionId(jakarta.servlet.http.HttpServletRequest request)
        +
        Returns a unique connection id for a given servlet request.
        +
        +
        Parameters:
        +
        request - Servlet request.
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/SPNegoMessage.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/SPNegoMessage.html new file mode 100644 index 0000000000..7c093f9633 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/SPNegoMessage.html @@ -0,0 +1,179 @@ + + + + +SPNegoMessage (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + +
    Package waffle.util
    +

    Class SPNegoMessage

    +
    +
    java.lang.Object +
    waffle.util.SPNegoMessage
    +
    +
    +
    +
    public final class SPNegoMessage +extends Object
    +
    Rudimentary NTLM message utility.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        isNegTokenInit

        +
        public static boolean isNegTokenInit(byte[] message)
        +
        Checks if is neg token init.
        +
        +
        Parameters:
        +
        message - the message
        +
        Returns:
        +
        true, if is neg token init
        +
        +
        +
      • +
      • +
        +

        isNegTokenArg

        +
        public static boolean isNegTokenArg(byte[] message)
        +
        Checks if is neg token arg.
        +
        +
        Parameters:
        +
        message - the message
        +
        Returns:
        +
        true, if is neg token arg
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/WaffleInfo.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/WaffleInfo.html new file mode 100644 index 0000000000..ffd87d4025 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/WaffleInfo.html @@ -0,0 +1,338 @@ + + + + +WaffleInfo (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + +
    Package waffle.util
    +

    Class WaffleInfo

    +
    +
    java.lang.Object +
    waffle.util.WaffleInfo
    +
    +
    +
    +
    public class WaffleInfo +extends Object
    +
    A Utility class to read system info to help troubleshoot WAFFLE system configuration. + +
    + This utility class collects system information and returns it as an XML document.
    + 
    + + From the command line, you can write the info to stdout using: + +
    + 
    +   java -cp "jna.jar;waffle-core.jar;waffle-api.jar;jna-platform.jar;guava-21.0.jar" waffle.util.WaffleInfo
    + 
    + 
    + + To show this information in a browser, run: + +
    + 
    +   java -cp "..." waffle.util.WaffleInfo -show
    + 
    + 
    + + To lookup account names and return any listed info, run: + +
    + 
    +   java -cp "..." waffle.util.WaffleInfo -lookup AccountName
    + 
    + 
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WaffleInfo

        +
        public WaffleInfo()
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getWaffleInfo

        +
        public Document getWaffleInfo() + throws ParserConfigurationException
        +
        Get a Document with basic system information. +

        + This uses the builtin jakarta.xml package even though the API is quite verbose

        +
        +
        Returns:
        +
        Document with waffle info.
        +
        Throws:
        +
        ParserConfigurationException - when getting new document builder.
        +
        +
        +
      • +
      • +
        +

        getAuthProviderInfo

        +
        protected Element getAuthProviderInfo(Document doc)
        +
        Gets the auth provider info.
        +
        +
        Parameters:
        +
        doc - the doc
        +
        Returns:
        +
        the auth provider info
        +
        +
        +
      • +
      • +
        +

        addAccountInfo

        +
        protected void addAccountInfo(Document doc, + Element node, + IWindowsAccount account)
        +
        Adds the account info.
        +
        +
        Parameters:
        +
        doc - the doc
        +
        node - the node
        +
        account - the account
        +
        +
        +
      • +
      • +
        +

        getLookupInfo

        +
        public Element getLookupInfo(Document doc, + String lookup)
        +
        Gets the lookup info.
        +
        +
        Parameters:
        +
        doc - the doc
        +
        lookup - the lookup
        +
        Returns:
        +
        the lookup info
        +
        +
        +
      • +
      • +
        +

        getException

        +
        public static Element getException(Document doc, + Exception t)
        +
        Gets the exception.
        +
        +
        Parameters:
        +
        doc - the doc
        +
        t - the t
        +
        Returns:
        +
        the exception
        +
        +
        +
      • +
      • +
        +

        toPrettyXML

        +
        public static String toPrettyXML(Document doc) + throws TransformerException
        +
        To pretty xml.
        +
        +
        Parameters:
        +
        doc - the doc
        +
        Returns:
        +
        the string
        +
        Throws:
        +
        TransformerException - the transformer exception
        +
        +
        +
      • +
      • +
        +

        main

        +
        public static void main(String[] args)
        +
        Print system information.
        +
        +
        Parameters:
        +
        args - variable arguments to pass to main. Valid values are "-show" and "-lookup".
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/Cache.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/Cache.html new file mode 100644 index 0000000000..30f29d257c --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/Cache.html @@ -0,0 +1,277 @@ + + + + +Cache (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Interface Cache<K,V>

    +
    +
    +
    +
    Type Parameters:
    +
    K - the type of keys maintained by this cache
    +
    V - the type of mapped values
    +
    +
    +
    All Known Implementing Classes:
    +
    CaffeineCache
    +
    +
    +
    public interface Cache<K,V>
    +
    A semi-persistent mapping from keys to values.
    +
    +
    See Also:
    +
    + +
    +
    +
    +
    +
      + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      + +
      get(K key)
      +
      +
      Fetches the key from the cache
      +
      +
      static <K, +V> Cache<K,V>
      +
      newCache(int timeout)
      +
      +
      Creates a new cache with the specified timeout.
      +
      +
      void
      +
      put(K key, + V value)
      +
      +
      Stores a binding for the key and the value in the cache
      +
      +
      void
      +
      remove(K key)
      +
      +
      Removes the binding for the key from the cache
      +
      +
      int
      + +
      +
      Returns the number of bindings in this cache
      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        newCache

        +
        static <K, +V> Cache<K,V> newCache(int timeout) + throws NoSuchElementException
        +
        Creates a new cache with the specified timeout. +

        + The cache implementation is obtained using ServiceLoader. To create your own implementation, implement + CacheSupplier and register it using the /META-INF/services/waffle.util.cache.CacheSupplier file + on your classpath.

        +
        +
        Type Parameters:
        +
        K - the type of keys maintained by this cache
        +
        V - the type of mapped values
        +
        Parameters:
        +
        timeout - timeout in seconds
        +
        Returns:
        +
        a new cache
        +
        Throws:
        +
        NoSuchElementException - if no cache can be instantiated, use Throwable.getSuppressed() to obtain details.
        +
        +
        +
      • +
      • +
        +

        get

        +
        V get(K key)
        +
        Fetches the key from the cache
        +
        +
        Parameters:
        +
        key - the key
        +
        Returns:
        +
        the corresponding value
        +
        See Also:
        +
        + +
        +
        +
        +
      • +
      • +
        +

        put

        +
        void put(K key, + V value)
        +
        Stores a binding for the key and the value in the cache
        +
        +
        Parameters:
        +
        key - the key
        +
        value - the value
        +
        See Also:
        +
        + +
        +
        +
        +
      • +
      • +
        +

        remove

        +
        void remove(K key)
        +
        Removes the binding for the key from the cache
        +
        +
        Parameters:
        +
        key - the key
        +
        See Also:
        +
        + +
        +
        +
        +
      • +
      • +
        +

        size

        +
        int size()
        +
        Returns the number of bindings in this cache
        +
        +
        Returns:
        +
        the size
        +
        See Also:
        +
        + +
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/CacheSupplier.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/CacheSupplier.html new file mode 100644 index 0000000000..c80567fc69 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/CacheSupplier.html @@ -0,0 +1,163 @@ + + + + +CacheSupplier (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Interface CacheSupplier

    +
    +
    +
    +
    All Known Implementing Classes:
    +
    CaffeineCacheSupplier
    +
    +
    +
    public interface CacheSupplier
    +
    Service interface to instantiate a new Cache.
    +
    +
    +
      + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      +
      <K, +V> Cache<K,V>
      +
      newCache(long timeout)
      +
      +
      Creates a new cache with the specified timeout
      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        newCache

        +
        <K, +V> Cache<K,V> newCache(long timeout)
        +
        Creates a new cache with the specified timeout
        +
        +
        Type Parameters:
        +
        K - the type of keys maintained by this cache
        +
        V - the type of mapped values
        +
        Parameters:
        +
        timeout - timeout in seconds
        +
        Returns:
        +
        a new cache
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/CaffeineCache.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/CaffeineCache.html new file mode 100644 index 0000000000..0fb891f5c7 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/CaffeineCache.html @@ -0,0 +1,292 @@ + + + + +CaffeineCache (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class CaffeineCache<K,V>

    +
    +
    java.lang.Object +
    waffle.util.cache.CaffeineCache<K,V>
    +
    +
    +
    +
    Type Parameters:
    +
    K - the type of keys maintained by this cache
    +
    V - the type of mapped values
    +
    +
    +
    All Implemented Interfaces:
    +
    Cache<K,V>
    +
    +
    +
    public class CaffeineCache<K,V> +extends Object +implements Cache<K,V>
    +
    A Cache based on Cache.
    +
    +
    +
      + +
    • +
      +

      Constructor Summary

      +
      Constructors
      +
      +
      Constructor
      +
      Description
      +
      CaffeineCache(@org.checkerframework.checker.index.qual.NonNegative long timeout)
      +
      +
      Instantiate new caffeine cache with timeout.
      +
      +
      +
      +
    • + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      + +
      get(K key)
      +
      +
      Fetches the key from the cache
      +
      +
      void
      +
      put(K key, + V value)
      +
      +
      Stores a binding for the key and the value in the cache
      +
      +
      void
      +
      remove(K key)
      +
      +
      Removes the binding for the key from the cache
      +
      +
      int
      + +
      +
      Returns the number of bindings in this cache
      +
      +
      +
      +
      +
      +

      Methods inherited from class java.lang.Object

      +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        CaffeineCache

        +
        public CaffeineCache(@org.checkerframework.checker.index.qual.NonNegative long timeout)
        +
        Instantiate new caffeine cache with timeout.
        +
        +
        Parameters:
        +
        timeout - Specified timeout in seconds for cache.
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        get

        +
        public V get(K key)
        +
        Description copied from interface: Cache
        +
        Fetches the key from the cache
        +
        +
        Specified by:
        +
        get in interface Cache<K,V>
        +
        Parameters:
        +
        key - the key
        +
        Returns:
        +
        the corresponding value
        +
        See Also:
        +
        + +
        +
        +
        +
      • +
      • +
        +

        put

        +
        public void put(K key, + V value)
        +
        Description copied from interface: Cache
        +
        Stores a binding for the key and the value in the cache
        +
        +
        Specified by:
        +
        put in interface Cache<K,V>
        +
        Parameters:
        +
        key - the key
        +
        value - the value
        +
        See Also:
        +
        + +
        +
        +
        +
      • +
      • +
        +

        remove

        +
        public void remove(K key)
        +
        Description copied from interface: Cache
        +
        Removes the binding for the key from the cache
        +
        +
        Specified by:
        +
        remove in interface Cache<K,V>
        +
        Parameters:
        +
        key - the key
        +
        See Also:
        +
        + +
        +
        +
        +
      • +
      • +
        +

        size

        +
        public int size()
        +
        Description copied from interface: Cache
        +
        Returns the number of bindings in this cache
        +
        +
        Specified by:
        +
        size in interface Cache<K,V>
        +
        Returns:
        +
        the size
        +
        See Also:
        +
        + +
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/CaffeineCacheSupplier.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/CaffeineCacheSupplier.html new file mode 100644 index 0000000000..553b28d892 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/CaffeineCacheSupplier.html @@ -0,0 +1,201 @@ + + + + +CaffeineCacheSupplier (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class CaffeineCacheSupplier

    +
    +
    java.lang.Object +
    waffle.util.cache.CaffeineCacheSupplier
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    CacheSupplier
    +
    +
    +
    public class CaffeineCacheSupplier +extends Object +implements CacheSupplier
    + +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        CaffeineCacheSupplier

        +
        public CaffeineCacheSupplier()
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        newCache

        +
        public <K, +V> Cache<K,V> newCache(long timeout)
        +
        Description copied from interface: CacheSupplier
        +
        Creates a new cache with the specified timeout
        +
        +
        Specified by:
        +
        newCache in interface CacheSupplier
        +
        Type Parameters:
        +
        K - the type of keys maintained by this cache
        +
        V - the type of mapped values
        +
        Parameters:
        +
        timeout - timeout in seconds
        +
        Returns:
        +
        a new cache
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/class-use/Cache.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/class-use/Cache.html new file mode 100644 index 0000000000..ddf57fcc23 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/class-use/Cache.html @@ -0,0 +1,113 @@ + + + + +Uses of Interface waffle.util.cache.Cache (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    waffle.util.cache.Cache

    +
    +
    Packages that use Cache
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Cache Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/class-use/CacheSupplier.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/class-use/CacheSupplier.html new file mode 100644 index 0000000000..4838a71b20 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/class-use/CacheSupplier.html @@ -0,0 +1,91 @@ + + + + +Uses of Interface waffle.util.cache.CacheSupplier (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    waffle.util.cache.CacheSupplier

    +
    +
    Packages that use CacheSupplier
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Cache Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/class-use/CaffeineCache.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/class-use/CaffeineCache.html new file mode 100644 index 0000000000..a101468a84 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/class-use/CaffeineCache.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.util.cache.CaffeineCache (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.util.cache.CaffeineCache

    +
    +No usage of waffle.util.cache.CaffeineCache
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/class-use/CaffeineCacheSupplier.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/class-use/CaffeineCacheSupplier.html new file mode 100644 index 0000000000..56dbf9af9b --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/class-use/CaffeineCacheSupplier.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.util.cache.CaffeineCacheSupplier (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.util.cache.CaffeineCacheSupplier

    +
    +No usage of waffle.util.cache.CaffeineCacheSupplier
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/package-summary.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/package-summary.html new file mode 100644 index 0000000000..37e09f3d11 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/package-summary.html @@ -0,0 +1,129 @@ + + + + +waffle.util.cache (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    + +

    Package waffle.util.cache

    +
    +
    +
    package waffle.util.cache
    +
    +
    Waffle JNA Cache Package.
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/package-tree.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/package-tree.html new file mode 100644 index 0000000000..baa3c42bd3 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/package-tree.html @@ -0,0 +1,84 @@ + + + + +waffle.util.cache Class Hierarchy (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package waffle.util.cache

    +
    +Package Hierarchies: + +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/package-use.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/package-use.html new file mode 100644 index 0000000000..af57f343ef --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/cache/package-use.html @@ -0,0 +1,92 @@ + + + + +Uses of Package waffle.util.cache (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    waffle.util.cache

    +
    +
    Packages that use waffle.util.cache
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Cache Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/AuthorizationHeader.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/AuthorizationHeader.html new file mode 100644 index 0000000000..17829220cf --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/AuthorizationHeader.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.util.AuthorizationHeader (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.util.AuthorizationHeader

    +
    +No usage of waffle.util.AuthorizationHeader
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/CorsPreFlightCheck.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/CorsPreFlightCheck.html new file mode 100644 index 0000000000..d004faf384 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/CorsPreFlightCheck.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.util.CorsPreFlightCheck (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.util.CorsPreFlightCheck

    +
    +No usage of waffle.util.CorsPreFlightCheck
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/NtlmMessage.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/NtlmMessage.html new file mode 100644 index 0000000000..00aed3c9e2 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/NtlmMessage.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.util.NtlmMessage (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.util.NtlmMessage

    +
    +No usage of waffle.util.NtlmMessage
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/NtlmServletRequest.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/NtlmServletRequest.html new file mode 100644 index 0000000000..faa7954127 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/NtlmServletRequest.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.util.NtlmServletRequest (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.util.NtlmServletRequest

    +
    +No usage of waffle.util.NtlmServletRequest
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/SPNegoMessage.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/SPNegoMessage.html new file mode 100644 index 0000000000..47f4c896ac --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/SPNegoMessage.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.util.SPNegoMessage (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.util.SPNegoMessage

    +
    +No usage of waffle.util.SPNegoMessage
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/WaffleInfo.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/WaffleInfo.html new file mode 100644 index 0000000000..6e504d3812 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/class-use/WaffleInfo.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.util.WaffleInfo (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.util.WaffleInfo

    +
    +No usage of waffle.util.WaffleInfo
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/package-summary.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/package-summary.html new file mode 100644 index 0000000000..16443b54ea --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/package-summary.html @@ -0,0 +1,135 @@ + + + + +waffle.util (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    + +

    Package waffle.util

    +
    +
    +
    package waffle.util
    +
    +
    Waffle JNA Utility Package.
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/package-tree.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/package-tree.html new file mode 100644 index 0000000000..9ec2d4106a --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/package-tree.html @@ -0,0 +1,81 @@ + + + + +waffle.util Class Hierarchy (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package waffle.util

    +
    +Package Hierarchies: + +
    +

    Class Hierarchy

    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/package-use.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/package-use.html new file mode 100644 index 0000000000..71eb704d53 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/util/package-use.html @@ -0,0 +1,62 @@ + + + + +Uses of Package waffle.util (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    waffle.util

    +
    +No usage of waffle.util
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsAccount.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsAccount.html new file mode 100644 index 0000000000..0b4191b5a0 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsAccount.html @@ -0,0 +1,204 @@ + + + + +IWindowsAccount (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Interface IWindowsAccount

    +
    +
    +
    +
    All Known Implementing Classes:
    +
    WindowsAccountImpl
    +
    +
    +
    public interface IWindowsAccount
    +
    Windows account.
    +
    +
    +
      + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      + + +
      +
      Domain name.
      +
      + + +
      +
      Fully qualified username.
      +
      + + +
      +
      User name.
      +
      + + +
      +
      Security identifier.
      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getSidString

        +
        String getSidString()
        +
        Security identifier.
        +
        +
        Returns:
        +
        String in the S- format.
        +
        +
        +
      • +
      • +
        +

        getFqn

        +
        String getFqn()
        +
        Fully qualified username.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getName

        +
        String getName()
        +
        User name.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getDomain

        +
        String getDomain()
        +
        Domain name.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsAuthProvider.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsAuthProvider.html new file mode 100644 index 0000000000..e994082656 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsAuthProvider.html @@ -0,0 +1,323 @@ + + + + +IWindowsAuthProvider (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Interface IWindowsAuthProvider

    +
    +
    +
    +
    All Known Implementing Classes:
    +
    WindowsAuthProviderImpl
    +
    +
    +
    public interface IWindowsAuthProvider
    +
    Implements Windows authentication functions.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        logonUser

        +
        IWindowsIdentity logonUser(String username, + String password)
        +
        The LogonUser function attempts to log a user on to the local computer using a network logon type and the default + authentication provider.
        +
        +
        Parameters:
        +
        username - A string that specifies the name of the user in the UPN format.
        +
        password - A string that specifies the plaintext password for the user account specified by username.
        +
        Returns:
        +
        Windows identity.
        +
        +
        +
      • +
      • +
        +

        logonDomainUser

        +
        IWindowsIdentity logonDomainUser(String username, + String domain, + String password)
        +
        The LogonDomainUser function attempts to log a user on to the local computer using a network logon type and the + default authentication provider.
        +
        +
        Parameters:
        +
        username - A string that specifies the name of the user. This is the name of the user account to log on to. If + you use the user principal name (UPN) format, user@DNS_domain_name, the domain parameter must be NULL.
        +
        domain - A string that specifies the name of the domain or server whose account database contains the username + account. If this parameter is NULL, the user name must be specified in UPN format. If this parameter + is ".", the function validates the account by using only the local account database.
        +
        password - A string that specifies the plaintext password for the user account specified by username.
        +
        Returns:
        +
        Windows identity.
        +
        +
        +
      • +
      • +
        +

        logonDomainUserEx

        +
        IWindowsIdentity logonDomainUserEx(String username, + String domain, + String password, + int logonType, + int logonProvider)
        +
        The LogonDomainUserEx function attempts to log a user on to the local computer. The local computer is the + computer from which LogonUser was called. You cannot use LogonUser to log on to a remote computer. You specify + the user with a user name and domain and authenticate the user with a plaintext password.
        +
        +
        Parameters:
        +
        username - A string that specifies the name of the user. This is the name of the user account to log on to. If + you use the user principal name (UPN) format, user@DNS_domain_name, the domain parameter must be NULL.
        +
        domain - A string that specifies the name of the domain or server whose account database contains the username + account. If this parameter is NULL, the user name must be specified in UPN format. If this parameter + is ".", the function validates the account by using only the local account database.
        +
        password - A string that specifies the plaintext password for the user account specified by username.
        +
        logonType - The type of logon operation to perform.
        +
        logonProvider - Specifies the logon provider.
        +
        Returns:
        +
        Windows identity.
        +
        +
        +
      • +
      • +
        +

        lookupAccount

        +
        IWindowsAccount lookupAccount(String username)
        +
        Retrieve a security identifier (SID) for the account and the name of the domain or local computer on which the + account was found.
        +
        +
        Parameters:
        +
        username - Fully qualified or partial username.
        +
        Returns:
        +
        Windows account.
        +
        +
        +
      • +
      • +
        +

        getCurrentComputer

        +
        IWindowsComputer getCurrentComputer()
        +
        Retrieve the current computer information.
        +
        +
        Returns:
        +
        Current computer information.
        +
        +
        +
      • +
      • +
        +

        getDomains

        +
        IWindowsDomain[] getDomains()
        +
        Retrieve a list of domains (Active Directory) on the local server.
        +
        +
        Returns:
        +
        A list of domains.
        +
        +
        +
      • +
      • +
        +

        acceptSecurityToken

        +
        IWindowsSecurityContext acceptSecurityToken(String connectionId, + byte[] token, + String securityPackage)
        +
        Attempts to validate the user using an SSPI token. This token is generated by the client via the + InitializeSecurityContext(package) method described in + https://msdn.microsoft.com/en-us/library/aa375509(VS.85).aspx
        +
        +
        Parameters:
        +
        connectionId - A unique connection id.
        +
        token - The security token generated by the client wishing to logon.
        +
        securityPackage - The name of the security package to use. Can be any security package supported by both the client and + the server. This is usually set to "Negotiate" which will use SPNEGO to determine which security + package to use. Other common values are "Kerberos" and "NTLM".
        +
        Returns:
        +
        Windows account.
        +
        +
        +
      • +
      • +
        +

        resetSecurityToken

        +
        void resetSecurityToken(String connectionId)
        +
        Reset a previously saved continuation security token for a given connection id.
        +
        +
        Parameters:
        +
        connectionId - Connection id.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsComputer.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsComputer.html new file mode 100644 index 0000000000..11d8ff7192 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsComputer.html @@ -0,0 +1,204 @@ + + + + +IWindowsComputer (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Interface IWindowsComputer

    +
    +
    +
    +
    All Known Implementing Classes:
    +
    WindowsComputerImpl
    +
    +
    +
    public interface IWindowsComputer
    +
    A Windows Computer.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getComputerName

        +
        String getComputerName()
        +
        Computer name.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getMemberOf

        +
        String getMemberOf()
        +
        Member of (domain).
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getJoinStatus

        +
        String getJoinStatus()
        +
        Join status.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getGroups

        +
        String[] getGroups()
        +
        Groups.
        +
        +
        Returns:
        +
        Array of group names.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsCredentialsHandle.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsCredentialsHandle.html new file mode 100644 index 0000000000..b4f9bbd898 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsCredentialsHandle.html @@ -0,0 +1,180 @@ + + + + +IWindowsCredentialsHandle (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Interface IWindowsCredentialsHandle

    +
    +
    +
    +
    All Known Implementing Classes:
    +
    WindowsCredentialsHandleImpl
    +
    +
    +
    public interface IWindowsCredentialsHandle
    +
    Windows credentials handle.
    +
    +
    +
      + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      +
      void
      + +
      +
      Dispose.
      +
      +
      com.sun.jna.platform.win32.Sspi.CredHandle
      + +
      +
      Return a security handle.
      +
      +
      void
      + +
      +
      Initialize.
      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        initialize

        +
        void initialize()
        +
        Initialize.
        +
        +
      • +
      • +
        +

        dispose

        +
        void dispose()
        +
        Dispose.
        +
        +
      • +
      • +
        +

        getHandle

        +
        com.sun.jna.platform.win32.Sspi.CredHandle getHandle()
        +
        Return a security handle.
        +
        +
        Returns:
        +
        CredHandle.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsDomain.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsDomain.html new file mode 100644 index 0000000000..62e5a031ac --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsDomain.html @@ -0,0 +1,188 @@ + + + + +IWindowsDomain (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Interface IWindowsDomain

    +
    +
    +
    +
    All Known Implementing Classes:
    +
    WindowsDomainImpl
    +
    +
    +
    public interface IWindowsDomain
    +
    A Windows Domain.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getFqn

        +
        String getFqn()
        +
        Fully qualified domain name.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getTrustDirectionString

        +
        String getTrustDirectionString()
        +
        Trust direction.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getTrustTypeString

        +
        String getTrustTypeString()
        +
        Trust type.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsIdentity.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsIdentity.html new file mode 100644 index 0000000000..0b904c9436 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsIdentity.html @@ -0,0 +1,248 @@ + + + + +IWindowsIdentity (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Interface IWindowsIdentity

    +
    +
    +
    +
    All Known Implementing Classes:
    +
    WindowsIdentityImpl
    +
    +
    +
    public interface IWindowsIdentity
    +
    A Windows Identity.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getSidString

        +
        String getSidString()
        +
        Sid.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getSid

        +
        byte[] getSid()
        +
        Sid.
        +
        +
        Returns:
        +
        Array of bytes.
        +
        +
        +
      • +
      • +
        +

        getFqn

        +
        String getFqn()
        +
        Fully qualified name.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getGroups

        +
        IWindowsAccount[] getGroups()
        +
        Group memberships.
        +
        +
        Returns:
        +
        Array of accounts.
        +
        +
        +
      • +
      • +
        +

        impersonate

        + +
        Impersonate a logged on user.
        +
        +
        Returns:
        +
        An impersonation context.
        +
        +
        +
      • +
      • +
        +

        dispose

        +
        void dispose()
        +
        Dispose of the Windows identity.
        +
        +
      • +
      • +
        +

        isGuest

        +
        boolean isGuest()
        +
        Returns true if the identity represents a Guest account.
        +
        +
        Returns:
        +
        True if the identity represents a Guest account, false otherwise.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsImpersonationContext.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsImpersonationContext.html new file mode 100644 index 0000000000..1809a01a0c --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsImpersonationContext.html @@ -0,0 +1,152 @@ + + + + +IWindowsImpersonationContext (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Interface IWindowsImpersonationContext

    +
    +
    +
    +
    All Known Implementing Classes:
    +
    WindowsIdentityImpersonationContextImpl, WindowsSecurityContextImpersonationContextImpl
    +
    +
    +
    public interface IWindowsImpersonationContext
    +
    A Windows impersonation context.
    +
    +
    +
      + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      +
      void
      + +
      +
      Terminate the impersonation of a client application.
      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        revertToSelf

        +
        void revertToSelf()
        +
        Terminate the impersonation of a client application.
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsSecurityContext.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsSecurityContext.html new file mode 100644 index 0000000000..b6d7b9df45 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/IWindowsSecurityContext.html @@ -0,0 +1,286 @@ + + + + +IWindowsSecurityContext (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Interface IWindowsSecurityContext

    +
    +
    +
    +
    All Known Implementing Classes:
    +
    WindowsSecurityContextImpl
    +
    +
    +
    public interface IWindowsSecurityContext
    +
    A Windows security context.
    +
    +
    +
      + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      +
      void
      + +
      +
      Disposes of the context.
      +
      +
      com.sun.jna.platform.win32.Sspi.CtxtHandle
      + +
      +
      Context handle.
      +
      + + +
      +
      Windows Identity.
      +
      + + +
      +
      Principal name.
      +
      + + +
      +
      Security package name.
      +
      +
      byte[]
      + +
      +
      Token.
      +
      + + +
      +
      Impersonate this security context.
      +
      +
      void
      +
      initialize(com.sun.jna.platform.win32.Sspi.CtxtHandle continueCtx, + com.sun.jna.platform.win32.Sspi.SecBufferDesc continueToken, + String targetName)
      +
      +
      Initialize the security context, continuing from a previous one.
      +
      +
      boolean
      + +
      +
      True if protocol requires continuation.
      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getSecurityPackage

        +
        String getSecurityPackage()
        +
        Security package name.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getPrincipalName

        +
        String getPrincipalName()
        +
        Principal name.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getToken

        +
        byte[] getToken()
        +
        Token.
        +
        +
        Returns:
        +
        Array of bytes.
        +
        +
        +
      • +
      • +
        +

        isContinue

        +
        boolean isContinue()
        +
        True if protocol requires continuation.
        +
        +
        Returns:
        +
        True or false.
        +
        +
        +
      • +
      • +
        +

        getIdentity

        +
        IWindowsIdentity getIdentity()
        +
        Windows Identity.
        +
        +
        Returns:
        +
        Windows Identity.
        +
        +
        +
      • +
      • +
        +

        getHandle

        +
        com.sun.jna.platform.win32.Sspi.CtxtHandle getHandle()
        +
        Context handle.
        +
        +
        Returns:
        +
        Handle.
        +
        +
        +
      • +
      • +
        +

        initialize

        +
        void initialize(com.sun.jna.platform.win32.Sspi.CtxtHandle continueCtx, + com.sun.jna.platform.win32.Sspi.SecBufferDesc continueToken, + String targetName)
        +
        Initialize the security context, continuing from a previous one.
        +
        +
        Parameters:
        +
        continueCtx - Continue context.
        +
        continueToken - Continue token.
        +
        targetName - The target of the context. The string contents are security-package specific.
        +
        +
        +
      • +
      • +
        +

        impersonate

        + +
        Impersonate this security context.
        +
        +
        Returns:
        +
        A Windows Impersonation Context.
        +
        +
        +
      • +
      • +
        +

        dispose

        +
        void dispose()
        +
        Disposes of the context.
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/PrincipalFormat.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/PrincipalFormat.html new file mode 100644 index 0000000000..465b60fcac --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/PrincipalFormat.html @@ -0,0 +1,257 @@ + + + + +PrincipalFormat (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Enum PrincipalFormat

    +
    +
    java.lang.Object +
    java.lang.Enum<PrincipalFormat> +
    waffle.windows.auth.PrincipalFormat
    +
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    Serializable, Comparable<PrincipalFormat>
    +
    +
    +
    public enum PrincipalFormat +extends Enum<PrincipalFormat>
    +
    The Enum PrincipalFormat.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Enum Constant Details

      + +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        values

        +
        public static PrincipalFormat[] values()
        +
        Returns an array containing the constants of this enum type, in +the order they are declared.
        +
        +
        Returns:
        +
        an array containing the constants of this enum type, in the order they are declared
        +
        +
        +
      • +
      • +
        +

        valueOf

        +
        public static PrincipalFormat valueOf(String name)
        +
        Returns the enum constant of this type with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this type. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum type has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/WindowsAccount.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/WindowsAccount.html new file mode 100644 index 0000000000..9f8a7a4b4b --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/WindowsAccount.html @@ -0,0 +1,280 @@ + + + + +WindowsAccount (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class WindowsAccount

    +
    +
    java.lang.Object +
    waffle.windows.auth.WindowsAccount
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    Serializable
    +
    +
    +
    public class WindowsAccount +extends Object +implements Serializable
    +
    A flattened Windows Account used in a Windows principal.
    +
    +
    See Also:
    +
    + +
    +
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WindowsAccount

        +
        public WindowsAccount(IWindowsAccount account)
        +
        Instantiates a new windows account.
        +
        +
        Parameters:
        +
        account - the account
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getSidString

        +
        public String getSidString()
        +
        Gets the sid string.
        +
        +
        Returns:
        +
        the sid string
        +
        +
        +
      • +
      • +
        +

        getFqn

        +
        public String getFqn()
        +
        Gets the fqn.
        +
        +
        Returns:
        +
        the fqn
        +
        +
        +
      • +
      • +
        +

        getName

        +
        public String getName()
        +
        Gets the name.
        +
        +
        Returns:
        +
        the name
        +
        +
        +
      • +
      • +
        +

        getDomain

        +
        public String getDomain()
        +
        Gets the domain.
        +
        +
        Returns:
        +
        the domain
        +
        +
        +
      • +
      • +
        +

        equals

        +
        public boolean equals(Object o)
        +
        +
        Overrides:
        +
        equals in class Object
        +
        +
        +
      • +
      • +
        +

        hashCode

        +
        public int hashCode()
        +
        +
        Overrides:
        +
        hashCode in class Object
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsAccount.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsAccount.html new file mode 100644 index 0000000000..9d0774ddae --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsAccount.html @@ -0,0 +1,162 @@ + + + + +Uses of Interface waffle.windows.auth.IWindowsAccount (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    waffle.windows.auth.IWindowsAccount

    +
    +
    Packages that use IWindowsAccount
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Utility Package.
    +
    + +
    +
    Waffle JNA Windows Authorization Package.
    +
    + +
    +
    Waffle JNA Windows Authorization Implementation Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsAuthProvider.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsAuthProvider.html new file mode 100644 index 0000000000..79810467c5 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsAuthProvider.html @@ -0,0 +1,189 @@ + + + + +Uses of Interface waffle.windows.auth.IWindowsAuthProvider (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    waffle.windows.auth.IWindowsAuthProvider

    +
    +
    Packages that use IWindowsAuthProvider
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA JAAS Package.
    +
    + +
    +
    Waffle JNA Servlet Package.
    +
    + +
    +
    Waffle JNA Servlet SPI Package.
    +
    + +
    +
    Waffle JNA Windows Authorization Implementation Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsComputer.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsComputer.html new file mode 100644 index 0000000000..ff48082c09 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsComputer.html @@ -0,0 +1,120 @@ + + + + +Uses of Interface waffle.windows.auth.IWindowsComputer (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    waffle.windows.auth.IWindowsComputer

    +
    +
    Packages that use IWindowsComputer
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Windows Authorization Package.
    +
    + +
    +
    Waffle JNA Windows Authorization Implementation Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsCredentialsHandle.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsCredentialsHandle.html new file mode 100644 index 0000000000..2a51c0fcd6 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsCredentialsHandle.html @@ -0,0 +1,113 @@ + + + + +Uses of Interface waffle.windows.auth.IWindowsCredentialsHandle (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    waffle.windows.auth.IWindowsCredentialsHandle

    +
    +
    Packages that use IWindowsCredentialsHandle
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Windows Authorization Implementation Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsDomain.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsDomain.html new file mode 100644 index 0000000000..1400dc5cbc --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsDomain.html @@ -0,0 +1,120 @@ + + + + +Uses of Interface waffle.windows.auth.IWindowsDomain (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    waffle.windows.auth.IWindowsDomain

    +
    +
    Packages that use IWindowsDomain
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Windows Authorization Package.
    +
    + +
    +
    Waffle JNA Windows Authorization Implementation Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsIdentity.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsIdentity.html new file mode 100644 index 0000000000..f3c9806b2e --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsIdentity.html @@ -0,0 +1,245 @@ + + + + +Uses of Interface waffle.windows.auth.IWindowsIdentity (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    waffle.windows.auth.IWindowsIdentity

    +
    +
    Packages that use IWindowsIdentity
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Servlet Package.
    +
    + +
    +
    Waffle JNA Servlet SPI Package.
    +
    + +
    +
    Waffle JNA Windows Authorization Package.
    +
    + +
    +
    Waffle JNA Windows Authorization Implementation Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsImpersonationContext.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsImpersonationContext.html new file mode 100644 index 0000000000..862e044213 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsImpersonationContext.html @@ -0,0 +1,133 @@ + + + + +Uses of Interface waffle.windows.auth.IWindowsImpersonationContext (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    waffle.windows.auth.IWindowsImpersonationContext

    +
    + +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Windows Authorization Package.
    +
    + +
    +
    Waffle JNA Windows Authorization Implementation Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsSecurityContext.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsSecurityContext.html new file mode 100644 index 0000000000..7d04f0fb10 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/IWindowsSecurityContext.html @@ -0,0 +1,130 @@ + + + + +Uses of Interface waffle.windows.auth.IWindowsSecurityContext (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Interface
    waffle.windows.auth.IWindowsSecurityContext

    +
    +
    Packages that use IWindowsSecurityContext
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Windows Authorization Package.
    +
    + +
    +
    Waffle JNA Windows Authorization Implementation Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/PrincipalFormat.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/PrincipalFormat.html new file mode 100644 index 0000000000..ba5fac84ae --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/PrincipalFormat.html @@ -0,0 +1,142 @@ + + + + +Uses of Enum waffle.windows.auth.PrincipalFormat (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Enum
    waffle.windows.auth.PrincipalFormat

    +
    +
    Packages that use PrincipalFormat
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Servlet Package.
    +
    + +
    +
    Waffle JNA Windows Authorization Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/WindowsAccount.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/WindowsAccount.html new file mode 100644 index 0000000000..3576258fda --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/class-use/WindowsAccount.html @@ -0,0 +1,91 @@ + + + + +Uses of Class waffle.windows.auth.WindowsAccount (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.windows.auth.WindowsAccount

    +
    +
    Packages that use WindowsAccount
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA Servlet Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsAccountImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsAccountImpl.html new file mode 100644 index 0000000000..f19ba487ab --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsAccountImpl.html @@ -0,0 +1,305 @@ + + + + +WindowsAccountImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class WindowsAccountImpl

    +
    +
    java.lang.Object +
    waffle.windows.auth.impl.WindowsAccountImpl
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    IWindowsAccount
    +
    +
    +
    public class WindowsAccountImpl +extends Object +implements IWindowsAccount
    +
    Windows Account.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WindowsAccountImpl

        +
        public WindowsAccountImpl(com.sun.jna.platform.win32.Advapi32Util.Account newAccount)
        +
        Windows Account.
        +
        +
        Parameters:
        +
        newAccount - Account.
        +
        +
        +
      • +
      • +
        +

        WindowsAccountImpl

        +
        public WindowsAccountImpl(String userName)
        +
        Windows Account.
        +
        +
        Parameters:
        +
        userName - Fully qualified username.
        +
        +
        +
      • +
      • +
        +

        WindowsAccountImpl

        +
        public WindowsAccountImpl(String accountName, + String systemName)
        +
        Windows Account.
        +
        +
        Parameters:
        +
        accountName - Username, without a domain or machine.
        +
        systemName - Machine name.
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getCurrentUsername

        +
        public static String getCurrentUsername()
        +
        Get the SAM-compatible username of the currently logged-on user.
        +
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getDomain

        +
        public String getDomain()
        +
        Account domain.
        +
        +
        Specified by:
        +
        getDomain in interface IWindowsAccount
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getFqn

        +
        public String getFqn()
        +
        Description copied from interface: IWindowsAccount
        +
        Fully qualified username.
        +
        +
        Specified by:
        +
        getFqn in interface IWindowsAccount
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getName

        +
        public String getName()
        +
        Account name.
        +
        +
        Specified by:
        +
        getName in interface IWindowsAccount
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getSidString

        +
        public String getSidString()
        +
        Description copied from interface: IWindowsAccount
        +
        Security identifier.
        +
        +
        Specified by:
        +
        getSidString in interface IWindowsAccount
        +
        Returns:
        +
        String in the S- format.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsAuthProviderImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsAuthProviderImpl.html new file mode 100644 index 0000000000..75dcf35b00 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsAuthProviderImpl.html @@ -0,0 +1,456 @@ + + + + +WindowsAuthProviderImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class WindowsAuthProviderImpl

    +
    +
    java.lang.Object +
    waffle.windows.auth.impl.WindowsAuthProviderImpl
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    IWindowsAuthProvider
    +
    +
    +
    public class WindowsAuthProviderImpl +extends Object +implements IWindowsAuthProvider
    +
    Windows Auth Provider.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Field Details

      +
        +
      • +
        +

        CONTINUE_CONTEXT_TIMEOUT

        +
        public static final int CONTINUE_CONTEXT_TIMEOUT
        +
        The Continue Context Timeout.
        +
        +
        See Also:
        +
        + +
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WindowsAuthProviderImpl

        +
        public WindowsAuthProviderImpl()
        +
        Instantiates a new windows auth provider impl.
        +
        +
      • +
      • +
        +

        WindowsAuthProviderImpl

        +
        public WindowsAuthProviderImpl(int continueContextsTimeout)
        +
        A Windows authentication provider.
        +
        +
        Parameters:
        +
        continueContextsTimeout - Timeout for security contexts in seconds.
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        acceptSecurityToken

        +
        public IWindowsSecurityContext acceptSecurityToken(String connectionId, + byte[] token, + String securityPackage)
        +
        Description copied from interface: IWindowsAuthProvider
        +
        Attempts to validate the user using an SSPI token. This token is generated by the client via the + InitializeSecurityContext(package) method described in + https://msdn.microsoft.com/en-us/library/aa375509(VS.85).aspx
        +
        +
        Specified by:
        +
        acceptSecurityToken in interface IWindowsAuthProvider
        +
        Parameters:
        +
        connectionId - A unique connection id.
        +
        token - The security token generated by the client wishing to logon.
        +
        securityPackage - The name of the security package to use. Can be any security package supported by both the client and + the server. This is usually set to "Negotiate" which will use SPNEGO to determine which security + package to use. Other common values are "Kerberos" and "NTLM".
        +
        Returns:
        +
        Windows account.
        +
        +
        +
      • +
      • +
        +

        getCurrentComputer

        +
        public IWindowsComputer getCurrentComputer()
        +
        Description copied from interface: IWindowsAuthProvider
        +
        Retrieve the current computer information.
        +
        +
        Specified by:
        +
        getCurrentComputer in interface IWindowsAuthProvider
        +
        Returns:
        +
        Current computer information.
        +
        +
        +
      • +
      • +
        +

        getDomains

        +
        public IWindowsDomain[] getDomains()
        +
        Description copied from interface: IWindowsAuthProvider
        +
        Retrieve a list of domains (Active Directory) on the local server.
        +
        +
        Specified by:
        +
        getDomains in interface IWindowsAuthProvider
        +
        Returns:
        +
        A list of domains.
        +
        +
        +
      • +
      • +
        +

        logonDomainUser

        +
        public IWindowsIdentity logonDomainUser(String username, + String domain, + String password)
        +
        Description copied from interface: IWindowsAuthProvider
        +
        The LogonDomainUser function attempts to log a user on to the local computer using a network logon type and the + default authentication provider.
        +
        +
        Specified by:
        +
        logonDomainUser in interface IWindowsAuthProvider
        +
        Parameters:
        +
        username - A string that specifies the name of the user. This is the name of the user account to log on to. If + you use the user principal name (UPN) format, user@DNS_domain_name, the domain parameter must be NULL.
        +
        domain - A string that specifies the name of the domain or server whose account database contains the username + account. If this parameter is NULL, the user name must be specified in UPN format. If this parameter + is ".", the function validates the account by using only the local account database.
        +
        password - A string that specifies the plaintext password for the user account specified by username.
        +
        Returns:
        +
        Windows identity.
        +
        +
        +
      • +
      • +
        +

        logonDomainUserEx

        +
        public IWindowsIdentity logonDomainUserEx(String username, + String domain, + String password, + int logonType, + int logonProvider)
        +
        Description copied from interface: IWindowsAuthProvider
        +
        The LogonDomainUserEx function attempts to log a user on to the local computer. The local computer is the + computer from which LogonUser was called. You cannot use LogonUser to log on to a remote computer. You specify + the user with a user name and domain and authenticate the user with a plaintext password.
        +
        +
        Specified by:
        +
        logonDomainUserEx in interface IWindowsAuthProvider
        +
        Parameters:
        +
        username - A string that specifies the name of the user. This is the name of the user account to log on to. If + you use the user principal name (UPN) format, user@DNS_domain_name, the domain parameter must be NULL.
        +
        domain - A string that specifies the name of the domain or server whose account database contains the username + account. If this parameter is NULL, the user name must be specified in UPN format. If this parameter + is ".", the function validates the account by using only the local account database.
        +
        password - A string that specifies the plaintext password for the user account specified by username.
        +
        logonType - The type of logon operation to perform.
        +
        logonProvider - Specifies the logon provider.
        +
        Returns:
        +
        Windows identity.
        +
        +
        +
      • +
      • +
        +

        logonUser

        +
        public IWindowsIdentity logonUser(String username, + String password)
        +
        Description copied from interface: IWindowsAuthProvider
        +
        The LogonUser function attempts to log a user on to the local computer using a network logon type and the default + authentication provider.
        +
        +
        Specified by:
        +
        logonUser in interface IWindowsAuthProvider
        +
        Parameters:
        +
        username - A string that specifies the name of the user in the UPN format.
        +
        password - A string that specifies the plaintext password for the user account specified by username.
        +
        Returns:
        +
        Windows identity.
        +
        +
        +
      • +
      • +
        +

        lookupAccount

        +
        public IWindowsAccount lookupAccount(String username)
        +
        Description copied from interface: IWindowsAuthProvider
        +
        Retrieve a security identifier (SID) for the account and the name of the domain or local computer on which the + account was found.
        +
        +
        Specified by:
        +
        lookupAccount in interface IWindowsAuthProvider
        +
        Parameters:
        +
        username - Fully qualified or partial username.
        +
        Returns:
        +
        Windows account.
        +
        +
        +
      • +
      • +
        +

        resetSecurityToken

        +
        public void resetSecurityToken(String connectionId)
        +
        Description copied from interface: IWindowsAuthProvider
        +
        Reset a previously saved continuation security token for a given connection id.
        +
        +
        Specified by:
        +
        resetSecurityToken in interface IWindowsAuthProvider
        +
        Parameters:
        +
        connectionId - Connection id.
        +
        +
        +
      • +
      • +
        +

        getContinueContextsSize

        +
        public int getContinueContextsSize()
        +
        Number of elements in the continue contexts map.
        +
        +
        Returns:
        +
        Number of elements in the hash map.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsComputerImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsComputerImpl.html new file mode 100644 index 0000000000..7284105b09 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsComputerImpl.html @@ -0,0 +1,258 @@ + + + + +WindowsComputerImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class WindowsComputerImpl

    +
    +
    java.lang.Object +
    waffle.windows.auth.impl.WindowsComputerImpl
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    IWindowsComputer
    +
    +
    +
    public class WindowsComputerImpl +extends Object +implements IWindowsComputer
    +
    Windows Computer.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WindowsComputerImpl

        +
        public WindowsComputerImpl(String newComputerName)
        +
        Instantiates a new windows computer impl.
        +
        +
        Parameters:
        +
        newComputerName - the new computer name
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      + +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html new file mode 100644 index 0000000000..2ca2a84639 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html @@ -0,0 +1,257 @@ + + + + +WindowsCredentialsHandleImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class WindowsCredentialsHandleImpl

    +
    +
    java.lang.Object +
    waffle.windows.auth.impl.WindowsCredentialsHandleImpl
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    IWindowsCredentialsHandle
    +
    +
    +
    public class WindowsCredentialsHandleImpl +extends Object +implements IWindowsCredentialsHandle
    +
    Pre-existing credentials of a security principal. This is a handle to a previously authenticated logon data used by a + security principal to establish its own identity, such as a password, or a Kerberos protocol ticket.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WindowsCredentialsHandleImpl

        +
        public WindowsCredentialsHandleImpl(String newPrincipalName, + int newCredentialsType, + String newSecurityPackage)
        +
        A new Windows credentials handle.
        +
        +
        Parameters:
        +
        newPrincipalName - Principal name.
        +
        newCredentialsType - Credentials type.
        +
        newSecurityPackage - Security package.
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getCurrent

        +
        public static IWindowsCredentialsHandle getCurrent(String securityPackage)
        +
        Returns the current credentials handle.
        +
        +
        Parameters:
        +
        securityPackage - Security package, eg. "Negotiate".
        +
        Returns:
        +
        A windows credentials handle
        +
        +
        +
      • +
      • +
        +

        initialize

        +
        public void initialize()
        +
        Initialize a new credentials handle.
        +
        +
        Specified by:
        +
        initialize in interface IWindowsCredentialsHandle
        +
        +
        +
      • +
      • +
        +

        dispose

        +
        public void dispose()
        +
        Dispose of the credentials handle.
        +
        +
        Specified by:
        +
        dispose in interface IWindowsCredentialsHandle
        +
        +
        +
      • +
      • +
        +

        getHandle

        +
        public com.sun.jna.platform.win32.Sspi.CredHandle getHandle()
        +
        Get CredHandle.
        +
        +
        Specified by:
        +
        getHandle in interface IWindowsCredentialsHandle
        +
        Returns:
        +
        the handle
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsDomainImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsDomainImpl.html new file mode 100644 index 0000000000..cdc2ce2e2e --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsDomainImpl.html @@ -0,0 +1,254 @@ + + + + +WindowsDomainImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class WindowsDomainImpl

    +
    +
    java.lang.Object +
    waffle.windows.auth.impl.WindowsDomainImpl
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    IWindowsDomain
    +
    +
    +
    public class WindowsDomainImpl +extends Object +implements IWindowsDomain
    +
    Windows Domain.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WindowsDomainImpl

        +
        public WindowsDomainImpl(String newFqn)
        +
        Instantiates a new windows domain impl.
        +
        +
        Parameters:
        +
        newFqn - the new fqn
        +
        +
        +
      • +
      • +
        +

        WindowsDomainImpl

        +
        public WindowsDomainImpl(com.sun.jna.platform.win32.Netapi32Util.DomainTrust trust)
        +
        Instantiates a new windows domain impl.
        +
        +
        Parameters:
        +
        trust - the trust
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      + +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.html new file mode 100644 index 0000000000..17bac74f07 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.html @@ -0,0 +1,199 @@ + + + + +WindowsIdentityImpersonationContextImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class WindowsIdentityImpersonationContextImpl

    +
    +
    java.lang.Object +
    waffle.windows.auth.impl.WindowsIdentityImpersonationContextImpl
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    IWindowsImpersonationContext
    +
    +
    +
    public class WindowsIdentityImpersonationContextImpl +extends Object +implements IWindowsImpersonationContext
    +
    The Class WindowsIdentityImpersonationContextImpl.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WindowsIdentityImpersonationContextImpl

        +
        public WindowsIdentityImpersonationContextImpl(com.sun.jna.platform.win32.WinNT.HANDLE windowsIdentity)
        +
        Impersonate a logged on user.
        +
        +
        Parameters:
        +
        windowsIdentity - Windows identity obtained via LogonUser.
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      + +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsIdentityImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsIdentityImpl.html new file mode 100644 index 0000000000..c629eee760 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsIdentityImpl.html @@ -0,0 +1,313 @@ + + + + +WindowsIdentityImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class WindowsIdentityImpl

    +
    +
    java.lang.Object +
    waffle.windows.auth.impl.WindowsIdentityImpl
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    IWindowsIdentity
    +
    +
    +
    public class WindowsIdentityImpl +extends Object +implements IWindowsIdentity
    +
    Windows Identity.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WindowsIdentityImpl

        +
        public WindowsIdentityImpl(com.sun.jna.platform.win32.WinNT.HANDLE newWindowsIdentity)
        +
        Instantiates a new windows identity impl.
        +
        +
        Parameters:
        +
        newWindowsIdentity - the new windows identity
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      + +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html new file mode 100644 index 0000000000..de5cd6b9c8 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html @@ -0,0 +1,199 @@ + + + + +WindowsSecurityContextImpersonationContextImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class WindowsSecurityContextImpersonationContextImpl

    +
    +
    java.lang.Object +
    waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    IWindowsImpersonationContext
    +
    +
    +
    public class WindowsSecurityContextImpersonationContextImpl +extends Object +implements IWindowsImpersonationContext
    +
    The Class WindowsSecurityContextImpersonationContextImpl.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WindowsSecurityContextImpersonationContextImpl

        +
        public WindowsSecurityContextImpersonationContextImpl(com.sun.jna.platform.win32.Sspi.CtxtHandle newCtx)
        +
        Instantiates a new windows security context impersonation context impl.
        +
        +
        Parameters:
        +
        newCtx - the new ctx
        +
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      + +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsSecurityContextImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsSecurityContextImpl.html new file mode 100644 index 0000000000..83feec4663 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/WindowsSecurityContextImpl.html @@ -0,0 +1,485 @@ + + + + +WindowsSecurityContextImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    + +
    + + +

    Class WindowsSecurityContextImpl

    +
    +
    java.lang.Object +
    waffle.windows.auth.impl.WindowsSecurityContextImpl
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    IWindowsSecurityContext
    +
    +
    +
    public class WindowsSecurityContextImpl +extends Object +implements IWindowsSecurityContext
    +
    Windows Security Context.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        WindowsSecurityContextImpl

        +
        public WindowsSecurityContextImpl()
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        impersonate

        +
        public IWindowsImpersonationContext impersonate()
        +
        Description copied from interface: IWindowsSecurityContext
        +
        Impersonate this security context.
        +
        +
        Specified by:
        +
        impersonate in interface IWindowsSecurityContext
        +
        Returns:
        +
        A Windows Impersonation Context.
        +
        +
        +
      • +
      • +
        +

        getIdentity

        +
        public IWindowsIdentity getIdentity()
        +
        Description copied from interface: IWindowsSecurityContext
        +
        Windows Identity.
        +
        +
        Specified by:
        +
        getIdentity in interface IWindowsSecurityContext
        +
        Returns:
        +
        Windows Identity.
        +
        +
        +
      • +
      • +
        +

        getSecurityPackage

        +
        public String getSecurityPackage()
        +
        Description copied from interface: IWindowsSecurityContext
        +
        Security package name.
        +
        +
        Specified by:
        +
        getSecurityPackage in interface IWindowsSecurityContext
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        getToken

        +
        public byte[] getToken()
        +
        Description copied from interface: IWindowsSecurityContext
        +
        Token.
        +
        +
        Specified by:
        +
        getToken in interface IWindowsSecurityContext
        +
        Returns:
        +
        Array of bytes.
        +
        +
        +
      • +
      • +
        +

        getCurrent

        +
        public static IWindowsSecurityContext getCurrent(String securityPackage, + String targetName)
        +
        Get the current Windows security context for a given SSPI package.
        +
        +
        Parameters:
        +
        securityPackage - SSPI package.
        +
        targetName - The target of the context. The string contents are security-package specific.
        +
        Returns:
        +
        Windows security context.
        +
        +
        +
      • +
      • +
        +

        initialize

        +
        public void initialize(com.sun.jna.platform.win32.Sspi.CtxtHandle continueCtx, + com.sun.jna.platform.win32.Sspi.SecBufferDesc continueToken, + String targetName)
        +
        Description copied from interface: IWindowsSecurityContext
        +
        Initialize the security context, continuing from a previous one.
        +
        +
        Specified by:
        +
        initialize in interface IWindowsSecurityContext
        +
        Parameters:
        +
        continueCtx - Continue context.
        +
        continueToken - Continue token.
        +
        targetName - The target of the context. The string contents are security-package specific.
        +
        +
        +
      • +
      • +
        +

        dispose

        +
        public void dispose()
        +
        Description copied from interface: IWindowsSecurityContext
        +
        Disposes of the context.
        +
        +
        Specified by:
        +
        dispose in interface IWindowsSecurityContext
        +
        +
        +
      • +
      • +
        +

        dispose

        +
        public static boolean dispose(com.sun.jna.platform.win32.Sspi.CtxtHandle ctx)
        +
        Dispose a security context.
        +
        +
        Parameters:
        +
        ctx - Security context.
        +
        Returns:
        +
        True if a context was disposed.
        +
        +
        +
      • +
      • +
        +

        getPrincipalName

        +
        public String getPrincipalName()
        +
        Description copied from interface: IWindowsSecurityContext
        +
        Principal name.
        +
        +
        Specified by:
        +
        getPrincipalName in interface IWindowsSecurityContext
        +
        Returns:
        +
        String.
        +
        +
        +
      • +
      • +
        +

        setPrincipalName

        +
        public void setPrincipalName(String value)
        +
        Sets the principal name.
        +
        +
        Parameters:
        +
        value - the new principal name
        +
        +
        +
      • +
      • +
        +

        getHandle

        +
        public com.sun.jna.platform.win32.Sspi.CtxtHandle getHandle()
        +
        Description copied from interface: IWindowsSecurityContext
        +
        Context handle.
        +
        +
        Specified by:
        +
        getHandle in interface IWindowsSecurityContext
        +
        Returns:
        +
        Handle.
        +
        +
        +
      • +
      • +
        +

        setCredentialsHandle

        +
        public void setCredentialsHandle(IWindowsCredentialsHandle handle)
        +
        Sets the credentials handle.
        +
        +
        Parameters:
        +
        handle - the new credentials handle
        +
        +
        +
      • +
      • +
        +

        setToken

        +
        public void setToken(byte[] bytes)
        +
        Sets the token.
        +
        +
        Parameters:
        +
        bytes - the new token
        +
        +
        +
      • +
      • +
        +

        setSecurityPackage

        +
        public void setSecurityPackage(String value)
        +
        Sets the security package.
        +
        +
        Parameters:
        +
        value - the new security package
        +
        +
        +
      • +
      • +
        +

        setSecurityContext

        +
        public void setSecurityContext(com.sun.jna.platform.win32.Sspi.CtxtHandle phNewServerContext)
        +
        Sets the security context.
        +
        +
        Parameters:
        +
        phNewServerContext - the new security context
        +
        +
        +
      • +
      • +
        +

        isContinue

        +
        public boolean isContinue()
        +
        Description copied from interface: IWindowsSecurityContext
        +
        True if protocol requires continuation.
        +
        +
        Specified by:
        +
        isContinue in interface IWindowsSecurityContext
        +
        Returns:
        +
        True or false.
        +
        +
        +
      • +
      • +
        +

        setContinue

        +
        public void setContinue(boolean b)
        +
        Sets the continue.
        +
        +
        Parameters:
        +
        b - the new continue
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsAccountImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsAccountImpl.html new file mode 100644 index 0000000000..53e113b721 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsAccountImpl.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.windows.auth.impl.WindowsAccountImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.windows.auth.impl.WindowsAccountImpl

    +
    +No usage of waffle.windows.auth.impl.WindowsAccountImpl
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsAuthProviderImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsAuthProviderImpl.html new file mode 100644 index 0000000000..fb454c070c --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsAuthProviderImpl.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.windows.auth.impl.WindowsAuthProviderImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.windows.auth.impl.WindowsAuthProviderImpl

    +
    +No usage of waffle.windows.auth.impl.WindowsAuthProviderImpl
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsComputerImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsComputerImpl.html new file mode 100644 index 0000000000..2a37bbff6a --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsComputerImpl.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.windows.auth.impl.WindowsComputerImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.windows.auth.impl.WindowsComputerImpl

    +
    +No usage of waffle.windows.auth.impl.WindowsComputerImpl
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsCredentialsHandleImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsCredentialsHandleImpl.html new file mode 100644 index 0000000000..a1e1670e1f --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsCredentialsHandleImpl.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.windows.auth.impl.WindowsCredentialsHandleImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.windows.auth.impl.WindowsCredentialsHandleImpl

    +
    +No usage of waffle.windows.auth.impl.WindowsCredentialsHandleImpl
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsDomainImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsDomainImpl.html new file mode 100644 index 0000000000..13e5793d81 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsDomainImpl.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.windows.auth.impl.WindowsDomainImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.windows.auth.impl.WindowsDomainImpl

    +
    +No usage of waffle.windows.auth.impl.WindowsDomainImpl
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsIdentityImpersonationContextImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsIdentityImpersonationContextImpl.html new file mode 100644 index 0000000000..c35293ac92 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsIdentityImpersonationContextImpl.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.windows.auth.impl.WindowsIdentityImpersonationContextImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.windows.auth.impl.WindowsIdentityImpersonationContextImpl

    +
    +No usage of waffle.windows.auth.impl.WindowsIdentityImpersonationContextImpl
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsIdentityImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsIdentityImpl.html new file mode 100644 index 0000000000..feb435c3df --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsIdentityImpl.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.windows.auth.impl.WindowsIdentityImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.windows.auth.impl.WindowsIdentityImpl

    +
    +No usage of waffle.windows.auth.impl.WindowsIdentityImpl
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsSecurityContextImpersonationContextImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsSecurityContextImpersonationContextImpl.html new file mode 100644 index 0000000000..2cf9176843 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsSecurityContextImpersonationContextImpl.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl

    +
    +No usage of waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsSecurityContextImpl.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsSecurityContextImpl.html new file mode 100644 index 0000000000..a35a564a5b --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/class-use/WindowsSecurityContextImpl.html @@ -0,0 +1,62 @@ + + + + +Uses of Class waffle.windows.auth.impl.WindowsSecurityContextImpl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Class
    waffle.windows.auth.impl.WindowsSecurityContextImpl

    +
    +No usage of waffle.windows.auth.impl.WindowsSecurityContextImpl
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/package-summary.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/package-summary.html new file mode 100644 index 0000000000..051749b6ca --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/package-summary.html @@ -0,0 +1,147 @@ + + + + +waffle.windows.auth.impl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    + +

    Package waffle.windows.auth.impl

    +
    +
    +
    package waffle.windows.auth.impl
    +
    +
    Waffle JNA Windows Authorization Implementation Package.
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/package-tree.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/package-tree.html new file mode 100644 index 0000000000..843f4d15a5 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/package-tree.html @@ -0,0 +1,84 @@ + + + + +waffle.windows.auth.impl Class Hierarchy (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package waffle.windows.auth.impl

    +
    +Package Hierarchies: + +
    +

    Class Hierarchy

    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/package-use.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/package-use.html new file mode 100644 index 0000000000..ee3834cc5d --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/impl/package-use.html @@ -0,0 +1,62 @@ + + + + +Uses of Package waffle.windows.auth.impl (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    waffle.windows.auth.impl

    +
    +No usage of waffle.windows.auth.impl
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/package-summary.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/package-summary.html new file mode 100644 index 0000000000..d3e3587090 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/package-summary.html @@ -0,0 +1,153 @@ + + + + +waffle.windows.auth (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    + +

    Package waffle.windows.auth

    +
    +
    +
    package waffle.windows.auth
    +
    +
    Waffle JNA Windows Authorization Package.
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/package-tree.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/package-tree.html new file mode 100644 index 0000000000..3ad3cf7e79 --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/package-tree.html @@ -0,0 +1,103 @@ + + + + +waffle.windows.auth Class Hierarchy (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Hierarchy For Package waffle.windows.auth

    +
    +Package Hierarchies: + +
    +

    Class Hierarchy

    + +
    +
    +

    Interface Hierarchy

    + +
    +
    +

    Enum Hierarchy

    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/package-use.html b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/package-use.html new file mode 100644 index 0000000000..f168815e4d --- /dev/null +++ b/waffle-jna-jakarta/apidocs/waffle.jna.jakarta/waffle/windows/auth/package-use.html @@ -0,0 +1,241 @@ + + + + +Uses of Package waffle.windows.auth (waffle-jna-jakarta 3.5.1 API) + + + + + + + + + + + + + +
    + +
    +
    +
    +

    Uses of Package
    waffle.windows.auth

    +
    +
    Packages that use waffle.windows.auth
    +
    +
    Package
    +
    Description
    + +
    +
    Waffle JNA JAAS Package.
    +
    + +
    +
    Waffle JNA Servlet Package.
    +
    + +
    +
    Waffle JNA Servlet SPI Package.
    +
    + +
    +
    Waffle JNA Utility Package.
    +
    + +
    +
    Waffle JNA Windows Authorization Package.
    +
    + +
    +
    Waffle JNA Windows Authorization Implementation Package.
    +
    +
    +
    + +
    +
    + +
    +
    + + diff --git a/waffle-jna-jakarta/checkstyle.html b/waffle-jna-jakarta/checkstyle.html new file mode 100644 index 0000000000..5db4c17e50 --- /dev/null +++ b/waffle-jna-jakarta/checkstyle.html @@ -0,0 +1,1516 @@ + + + + + + + + + + Checkstyle Results – waffle-jna-jakarta + + + + + + + +
    +
    + + + +
    +
    +
    + + +
    +
    +
    +

    Checkstyle Results

    +

    The following document contains the results of Checkstyle 10.21.1 with checkstyle.xml ruleset.

    +

    Summary

    + + + + + + + + + + +
    Files Info Warnings Errors
    6701070
    +

    Files

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    File I W E
    waffle/jaas/GroupPrincipalTest.java010
    waffle/jaas/RolePrincipalTest.java010
    waffle/jaas/UserPrincipalTest.java010
    waffle/jaas/UsernamePasswordCallbackHandler.java010
    waffle/jaas/WindowsLoginModule.java030
    waffle/jaas/WindowsLoginModuleTest.java050
    waffle/servlet/AutoDisposableWindowsPrincipal.java010
    waffle/servlet/CorsAwareNegotiateSecurityFilter.java040
    waffle/servlet/CorsAwareNegotiateSecurityFilterTest.java030
    waffle/servlet/NegotiateRequestWrapper.java010
    waffle/servlet/NegotiateSecurityFilter.java050
    waffle/servlet/NegotiateSecurityFilterTest.java070
    waffle/servlet/WaffleInfoServlet.java040
    waffle/servlet/WindowsPrincipal.java020
    waffle/servlet/WindowsPrincipalTest.java020
    waffle/servlet/spi/BasicSecurityFilterProvider.java030
    waffle/servlet/spi/NegotiateSecurityFilterProvider.java030
    waffle/servlet/spi/SecurityFilterProvider.java020
    waffle/servlet/spi/SecurityFilterProviderCollection.java040
    waffle/servlet/spi/SecurityFilterProviderCollectionTest.java010
    waffle/util/AuthorizationHeader.java030
    waffle/util/CorsPreFlightCheck.java020
    waffle/util/CorsPreFlightCheckTest.java020
    waffle/util/SPNegoMessage.java010
    waffle/util/SPNegoMessageTest.java010
    waffle/util/WaffleInfo.java080
    waffle/util/WaffleInfoTest.java030
    waffle/util/cache/Cache.java060
    waffle/util/cache/CacheSupplier.java010
    waffle/util/cache/CaffeineCache.java020
    waffle/windows/auth/IWindowsAccount.java010
    waffle/windows/auth/IWindowsAuthProvider.java010
    waffle/windows/auth/IWindowsComputer.java010
    waffle/windows/auth/IWindowsCredentialsHandle.java010
    waffle/windows/auth/IWindowsDomain.java010
    waffle/windows/auth/IWindowsIdentity.java010
    waffle/windows/auth/IWindowsImpersonationContext.java010
    waffle/windows/auth/IWindowsSecurityContext.java010
    waffle/windows/auth/WindowsAccountTest.java020
    waffle/windows/auth/WindowsCredentialsHandleTest.java010
    waffle/windows/auth/WindowsSecurityContextTest.java010
    waffle/windows/auth/impl/WindowsAccountImpl.java010
    waffle/windows/auth/impl/WindowsAuthProviderImpl.java020
    waffle/windows/auth/impl/WindowsComputerImpl.java020
    waffle/windows/auth/impl/WindowsCredentialsHandleImpl.java010
    waffle/windows/auth/impl/WindowsDomainImpl.java010
    waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.java010
    waffle/windows/auth/impl/WindowsIdentityImpl.java020
    waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.java010
    waffle/windows/auth/impl/WindowsSecurityContextImpl.java010
    +

    Rules

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    CategoryRuleViolationsSeverity
    codingOverloadMethodsDeclarationOrder1 Warning
    importsCustomImportOrder +
      +
    • separateLineBetweenGroups: "true"
    • +
    • sortImportsInGroupAlphabetically: "true"
    • +
    • customImportOrderRules: "STATIC###THIRD_PARTY_PACKAGE"
    • +
    • tokens: "IMPORT, STATIC_IMPORT, PACKAGE_DEF"
    79 Warning
    javadocJavadocParagraph5 Warning
    SummaryJavadoc +
      +
    • forbiddenSummaryFragments: "^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"
    5 Warning
    namingAbbreviationAsWordInName +
      +
    • tokens: "CLASS_DEF, INTERFACE_DEF, ENUM_DEF, ANNOTATION_DEF, ANNOTATION_FIELD_DEF, PARAMETER_DEF, VARIABLE_DEF, METHOD_DEF, PATTERN_VARIABLE_DEF, RECORD_DEF, RECORD_COMPONENT_DEF"
    • +
    • ignoreFinal: "false"
    • +
    • allowedAbbreviations: "XML,URL"
    • +
    • allowedAbbreviationLength: "0"
    14 Warning
    sizesLineLength +
      +
    • fileExtensions: "java"
    • +
    • max: "120"
    • +
    • ignorePattern: "^package.*|^import.*|a href|href|http://|https://|ftp://"
    3 Error
    +

    Details

    +

    waffle/jaas/GroupPrincipalTest.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'org.junit.jupiter.api.Assertions'35
    +

    waffle/jaas/RolePrincipalTest.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'org.junit.jupiter.api.Assertions'35
    +

    waffle/jaas/UserPrincipalTest.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'org.junit.jupiter.api.Assertions'35
    +

    waffle/jaas/UsernamePasswordCallbackHandler.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'javax.security.auth.callback.Callback'28
    +

    waffle/jaas/WindowsLoginModule.java

    + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'javax.security.auth.Subject'35
     WarningimportsCustomImportOrderExtra separation in import group before 'org.slf4j.Logger'44
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsAccount'47
    +

    waffle/jaas/WindowsLoginModuleTest.java

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'javax.security.auth.Subject'33
     WarningimportsCustomImportOrderExtra separation in import group before 'mockit.Expectations'40
     WarningimportsCustomImportOrderExtra separation in import group before 'org.junit.jupiter.api.Assertions'43
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.PrincipalFormat'48
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'login_throwIOException' must contain no more than '1' consecutive capital letters.235
    +

    waffle/servlet/AutoDisposableWindowsPrincipal.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsIdentity'29
    +

    waffle/servlet/CorsAwareNegotiateSecurityFilter.java

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.io.IOException'34
     WarningimportsCustomImportOrderExtra separation in import group before 'org.slf4j.Logger'36
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.util.AuthorizationHeader'39
     WarningsizesLineLengthLine is longer than 120 characters (found 122).75
    +

    waffle/servlet/CorsAwareNegotiateSecurityFilterTest.java

    + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'mockit.Expectations'31
     WarningimportsCustomImportOrderExtra separation in import group before 'org.junit.jupiter.api.Test'36
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.util.CorsPreFlightCheck'38
    +

    waffle/servlet/NegotiateRequestWrapper.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.security.Principal'29
    +

    waffle/servlet/NegotiateSecurityFilter.java

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.io.IOException'36
     WarningimportsCustomImportOrderExtra separation in import group before 'javax.security.auth.Subject'45
     WarningimportsCustomImportOrderExtra separation in import group before 'org.slf4j.Logger'47
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.servlet.spi.SecurityFilterProvider'50
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'disableSSO' must contain no more than '1' consecutive capital letters.102
    +

    waffle/servlet/NegotiateSecurityFilterTest.java

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.lang.reflect.Field'31
     WarningimportsCustomImportOrderExtra separation in import group before 'mockit.Expectations'35
     WarningimportsCustomImportOrderExtra separation in import group before 'org.junit.jupiter.api.Assertions'40
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.util.CorsPreFlightCheck'43
     WarningsizesLineLengthLine is longer than 120 characters (found 131).99
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'testExcludeCorsAndOAUTHBearerAuthorization_doFilter' must contain no more than '1' consecutive capital letters.147
     WarningsizesLineLengthLine is longer than 120 characters (found 131).165
    +

    waffle/servlet/WaffleInfoServlet.java

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.io.IOException'30
     WarningimportsCustomImportOrderExtra separation in import group before 'javax.xml.XMLConstants'35
     WarningimportsCustomImportOrderExtra separation in import group before 'org.slf4j.Logger'44
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.util.WaffleInfo'49
    +

    waffle/servlet/WindowsPrincipal.java

    + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsAccount'33
     WarningcodingOverloadMethodsDeclarationOrderAll overloaded methods should be placed next to each other. Previous overloaded method located at line '124'.155
    +

    waffle/servlet/WindowsPrincipalTest.java

    + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'org.junit.jupiter.api.Assertions'29
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsAccount'32
    +

    waffle/servlet/spi/BasicSecurityFilterProvider.java

    + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.io.IOException'29
     WarningimportsCustomImportOrderExtra separation in import group before 'org.slf4j.Logger'33
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.util.AuthorizationHeader'36
    +

    waffle/servlet/spi/NegotiateSecurityFilterProvider.java

    + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.io.IOException'29
     WarningimportsCustomImportOrderExtra separation in import group before 'org.slf4j.Logger'35
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.util.AuthorizationHeader'38
    +

    waffle/servlet/spi/SecurityFilterProvider.java

    + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.io.IOException'29
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsIdentity'31
    +

    waffle/servlet/spi/SecurityFilterProviderCollection.java

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'jakarta.servlet.http.HttpServletRequest'28
     WarningimportsCustomImportOrderExtra separation in import group before 'java.io.IOException'31
     WarningimportsCustomImportOrderExtra separation in import group before 'org.slf4j.Logger'37
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.util.AuthorizationHeader'40
    +

    waffle/servlet/spi/SecurityFilterProviderCollectionTest.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.impl.WindowsAuthProviderImpl'29
    +

    waffle/util/AuthorizationHeader.java

    + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.util.Base64'28
     WarningimportsCustomImportOrderExtra separation in import group before 'org.slf4j.Logger'31
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'isSPNegTokenInitMessage' must contain no more than '1' consecutive capital letters.150
    +

    waffle/util/CorsPreFlightCheck.java

    + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.util.ArrayList'28
     WarningimportsCustomImportOrderExtra separation in import group before 'org.slf4j.Logger'32
    +

    waffle/util/CorsPreFlightCheckTest.java

    + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'mockit.Expectations'28
     WarningimportsCustomImportOrderExtra separation in import group before 'org.junit.jupiter.api.Assertions'32
    +

    waffle/util/SPNegoMessage.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'SPNegoMessage' must contain no more than '1' consecutive capital letters.29
    +

    waffle/util/SPNegoMessageTest.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'SPNegoMessageTest' must contain no more than '1' consecutive capital letters.32
    +

    waffle/util/WaffleInfo.java

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.awt.Desktop'32
     WarningimportsCustomImportOrderExtra separation in import group before 'javax.xml.XMLConstants'43
     WarningimportsCustomImportOrderExtra separation in import group before 'org.slf4j.Logger'53
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsAccount'58
     WarningjavadocJavadocParagraphEmpty line should be followed by <p> tag on the next line.71
     WarningjavadocJavadocParagraphEmpty line should be followed by <p> tag on the next line.79
     WarningjavadocJavadocParagraphEmpty line should be followed by <p> tag on the next line.87
     WarningjavadocJavadocParagraph<p> tag should be preceded with an empty line.103
    +

    waffle/util/WaffleInfoTest.java

    + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'javax.xml.parsers.ParserConfigurationException'28
     WarningimportsCustomImportOrderExtra separation in import group before 'org.junit.jupiter.api.Assertions'30
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsAccount'37
    +

    waffle/util/cache/Cache.java

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'org.slf4j.Logger'29
     WarningjavadocJavadocParagraph<p> tag should be preceded with an empty line.47
     WarningjavadocSummaryJavadocFirst sentence of Javadoc is missing an ending period.87
     WarningjavadocSummaryJavadocFirst sentence of Javadoc is missing an ending period.99
     WarningjavadocSummaryJavadocFirst sentence of Javadoc is missing an ending period.111
     WarningjavadocSummaryJavadocFirst sentence of Javadoc is missing an ending period.121
    +

    waffle/util/cache/CacheSupplier.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningjavadocSummaryJavadocFirst sentence of Javadoc is missing an ending period.31
    +

    waffle/util/cache/CaffeineCache.java

    + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.time.Duration'28
     WarningimportsCustomImportOrderExtra separation in import group before 'org.checkerframework.checker.index.qual.NonNegative'30
    +

    waffle/windows/auth/IWindowsAccount.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'IWindowsAccount' must contain no more than '1' consecutive capital letters.29
    +

    waffle/windows/auth/IWindowsAuthProvider.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'IWindowsAuthProvider' must contain no more than '1' consecutive capital letters.29
    +

    waffle/windows/auth/IWindowsComputer.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'IWindowsComputer' must contain no more than '1' consecutive capital letters.29
    +

    waffle/windows/auth/IWindowsCredentialsHandle.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'IWindowsCredentialsHandle' must contain no more than '1' consecutive capital letters.31
    +

    waffle/windows/auth/IWindowsDomain.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'IWindowsDomain' must contain no more than '1' consecutive capital letters.29
    +

    waffle/windows/auth/IWindowsIdentity.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'IWindowsIdentity' must contain no more than '1' consecutive capital letters.29
    +

    waffle/windows/auth/IWindowsImpersonationContext.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'IWindowsImpersonationContext' must contain no more than '1' consecutive capital letters.29
    +

    waffle/windows/auth/IWindowsSecurityContext.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningnamingAbbreviationAsWordInNameAbbreviation in name 'IWindowsSecurityContext' must contain no more than '1' consecutive capital letters.33
    +

    waffle/windows/auth/WindowsAccountTest.java

    + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'org.junit.jupiter.api.Assertions'30
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.impl.WindowsAccountImpl'35
    +

    waffle/windows/auth/WindowsCredentialsHandleTest.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.impl.WindowsCredentialsHandleImpl'29
    +

    waffle/windows/auth/WindowsSecurityContextTest.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.impl.WindowsAccountImpl'31
    +

    waffle/windows/auth/impl/WindowsAccountImpl.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsAccount'31
    +

    waffle/windows/auth/impl/WindowsAuthProviderImpl.java

    + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.net.InetAddress'40
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.util.cache.Cache'45
    +

    waffle/windows/auth/impl/WindowsComputerImpl.java

    + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.util.ArrayList'30
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsComputer'33
    +

    waffle/windows/auth/impl/WindowsCredentialsHandleImpl.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsCredentialsHandle'33
    +

    waffle/windows/auth/impl/WindowsDomainImpl.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsDomain'28
    +

    waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsImpersonationContext'31
    +

    waffle/windows/auth/impl/WindowsIdentityImpl.java

    + + + + + + + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'java.util.ArrayList'32
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsAccount'35
    +

    waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsImpersonationContext'31
    +

    waffle/windows/auth/impl/WindowsSecurityContextImpl.java

    + + + + + + + + + + + + +
    SeverityCategoryRuleMessageLine
     WarningimportsCustomImportOrderExtra separation in import group before 'waffle.windows.auth.IWindowsCredentialsHandle'36
    +
    +
    +
    + + + diff --git a/waffle-jna-jakarta/ci-management.html b/waffle-jna-jakarta/ci-management.html new file mode 100644 index 0000000000..e465c0c44b --- /dev/null +++ b/waffle-jna-jakarta/ci-management.html @@ -0,0 +1,154 @@ + + + + + + + + + + CI Management – waffle-jna-jakarta + + + + + + + +
    +
    + + + +
    +
    +
    + + +
    +
    +
    +

    Overview

    +

    This project uses GitHub Actions.

    +

    Access

    +

    The following is a link to the continuous integration system used by the project:

    +
    https://github.com/Waffle/waffle/actions
    +

    Notifiers

    +

    No notifiers are defined. Please check back at a later date.

    +
    +
    +
    + + + diff --git a/waffle-jna-jakarta/cpd.html b/waffle-jna-jakarta/cpd.html new file mode 100644 index 0000000000..edb3235ca8 --- /dev/null +++ b/waffle-jna-jakarta/cpd.html @@ -0,0 +1,152 @@ + + + + + + + + + + CPD Results – waffle-jna-jakarta + + + + + + + +
    +
    + + + +
    +
    +
    + + +
    +
    +
    +

    CPD Results

    +

    The following document contains the results of PMD's CPD 7.7.0.

    +

    CPD found no problems in your source code.

    +
    +
    +
    + + + diff --git a/waffle-jna-jakarta/css/apache-maven-fluido-2.0.0-M10.min.css b/waffle-jna-jakarta/css/apache-maven-fluido-2.0.0-M10.min.css new file mode 100644 index 0000000000..5b33638419 --- /dev/null +++ b/waffle-jna-jakarta/css/apache-maven-fluido-2.0.0-M10.min.css @@ -0,0 +1,20 @@ +/*! + * Bootstrap v2.3.2 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}a:hover,a:active{outline:0}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{width:auto\9;height:auto;max-width:100%;vertical-align:middle;border:0;-ms-interpolation-mode:bicubic}#map_canvas img,.google-maps img{max-width:none}button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle}button,input{*overflow:visible;line-height:normal}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}label,select,button,input[type="button"],input[type="reset"],input[type="submit"],input[type="radio"],input[type="checkbox"]{cursor:pointer}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}textarea{overflow:auto;vertical-align:top}@media print{*{color:#000 !important;text-shadow:none !important;background:transparent !important;box-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:20px;color:#333;background-color:#fff}a{color:#08c;text-decoration:none}a:hover,a:focus{color:#005580;text-decoration:underline}.img-rounded{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.img-polaroid{padding:4px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.1);box-shadow:0 1px 3px rgba(0,0,0,0.1)}.img-circle{-webkit-border-radius:500px;-moz-border-radius:500px;border-radius:500px}.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.span12{width:940px}.span11{width:860px}.span10{width:780px}.span9{width:700px}.span8{width:620px}.span7{width:540px}.span6{width:460px}.span5{width:380px}.span4{width:300px}.span3{width:220px}.span2{width:140px}.span1{width:60px}.offset12{margin-left:980px}.offset11{margin-left:900px}.offset10{margin-left:820px}.offset9{margin-left:740px}.offset8{margin-left:660px}.offset7{margin-left:580px}.offset6{margin-left:500px}.offset5{margin-left:420px}.offset4{margin-left:340px}.offset3{margin-left:260px}.offset2{margin-left:180px}.offset1{margin-left:100px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.127659574468085%;*margin-left:2.074468085106383%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.127659574468085%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.48936170212765%;*width:91.43617021276594%}.row-fluid .span10{width:82.97872340425532%;*width:82.92553191489361%}.row-fluid .span9{width:74.46808510638297%;*width:74.41489361702126%}.row-fluid .span8{width:65.95744680851064%;*width:65.90425531914893%}.row-fluid .span7{width:57.44680851063829%;*width:57.39361702127659%}.row-fluid .span6{width:48.93617021276595%;*width:48.88297872340425%}.row-fluid .span5{width:40.42553191489362%;*width:40.37234042553192%}.row-fluid .span4{width:31.914893617021278%;*width:31.861702127659576%}.row-fluid .span3{width:23.404255319148934%;*width:23.351063829787233%}.row-fluid .span2{width:14.893617021276595%;*width:14.840425531914894%}.row-fluid .span1{width:6.382978723404255%;*width:6.329787234042553%}.row-fluid .offset12{margin-left:104.25531914893617%;*margin-left:104.14893617021275%}.row-fluid .offset12:first-child{margin-left:102.12765957446808%;*margin-left:102.02127659574467%}.row-fluid .offset11{margin-left:95.74468085106382%;*margin-left:95.6382978723404%}.row-fluid .offset11:first-child{margin-left:93.61702127659574%;*margin-left:93.51063829787232%}.row-fluid .offset10{margin-left:87.23404255319149%;*margin-left:87.12765957446807%}.row-fluid .offset10:first-child{margin-left:85.1063829787234%;*margin-left:84.99999999999999%}.row-fluid .offset9{margin-left:78.72340425531914%;*margin-left:78.61702127659572%}.row-fluid .offset9:first-child{margin-left:76.59574468085106%;*margin-left:76.48936170212764%}.row-fluid .offset8{margin-left:70.2127659574468%;*margin-left:70.10638297872339%}.row-fluid .offset8:first-child{margin-left:68.08510638297872%;*margin-left:67.9787234042553%}.row-fluid .offset7{margin-left:61.70212765957446%;*margin-left:61.59574468085106%}.row-fluid .offset7:first-child{margin-left:59.574468085106375%;*margin-left:59.46808510638297%}.row-fluid .offset6{margin-left:53.191489361702125%;*margin-left:53.085106382978715%}.row-fluid .offset6:first-child{margin-left:51.063829787234035%;*margin-left:50.95744680851063%}.row-fluid .offset5{margin-left:44.68085106382979%;*margin-left:44.57446808510638%}.row-fluid .offset5:first-child{margin-left:42.5531914893617%;*margin-left:42.4468085106383%}.row-fluid .offset4{margin-left:36.170212765957444%;*margin-left:36.06382978723405%}.row-fluid .offset4:first-child{margin-left:34.04255319148936%;*margin-left:33.93617021276596%}.row-fluid .offset3{margin-left:27.659574468085104%;*margin-left:27.5531914893617%}.row-fluid .offset3:first-child{margin-left:25.53191489361702%;*margin-left:25.425531914893618%}.row-fluid .offset2{margin-left:19.148936170212764%;*margin-left:19.04255319148936%}.row-fluid .offset2:first-child{margin-left:17.02127659574468%;*margin-left:16.914893617021278%}.row-fluid .offset1{margin-left:10.638297872340425%;*margin-left:10.53191489361702%}.row-fluid .offset1:first-child{margin-left:8.51063829787234%;*margin-left:8.404255319148938%}[class*="span"].hide,.row-fluid [class*="span"].hide{display:none}[class*="span"].pull-right,.row-fluid [class*="span"].pull-right{float:right}.container{margin-right:auto;margin-left:auto;*zoom:1}.container:before,.container:after{display:table;line-height:0;content:""}.container:after{clear:both}.container-fluid{padding-right:20px;padding-left:20px;*zoom:1}.container-fluid:before,.container-fluid:after{display:table;line-height:0;content:""}.container-fluid:after{clear:both}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:30px}small{font-size:85%}strong{font-weight:bold}em{font-style:italic}cite{font-style:normal}.muted{color:#999}a.muted:hover,a.muted:focus{color:gray}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-error{color:#b94a48}a.text-error:hover,a.text-error:focus{color:#953b39}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6{margin:10px 0;font-family:inherit;font-weight:bold;line-height:20px;color:inherit;text-rendering:optimizelegibility}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{line-height:40px}h1{font-size:38.5px}h2{font-size:31.5px}h3{font-size:24.5px}h4{font-size:17.5px}h5{font-size:14px}h6{font-size:11.9px}h1 small{font-size:24.5px}h2 small{font-size:17.5px}h3 small{font-size:14px}h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:20px 0 30px;border-bottom:1px solid #eee}ul,ol{padding:0;margin:0 0 10px 25px}ul ul,ul ol,ol ol,ol ul{margin-bottom:0}li{line-height:20px}ul.unstyled,ol.unstyled{margin-left:0;list-style:none}ul.inline,ol.inline{margin-left:0;list-style:none}ul.inline>li,ol.inline>li{display:inline-block;*display:inline;padding-right:5px;padding-left:5px;*zoom:1}dl{margin-bottom:20px}dt,dd{line-height:20px}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal{*zoom:1}.dl-horizontal:before,.dl-horizontal:after{display:table;line-height:0;content:""}.dl-horizontal:after{clear:both}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}hr{margin:20px 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:0 0 0 15px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{margin-bottom:0;font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{display:block;line-height:20px;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:20px}code,pre{padding:0 3px 2px;font-family:Monaco,Menlo,Consolas,"Courier New",monospace;font-size:12px;color:#333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}code{padding:2px 4px;color:#d14;white-space:nowrap;background-color:#f7f7f9;border:1px solid #e1e1e8}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:20px;word-break:break-all;word-wrap:break-word;white-space:pre;white-space:pre-wrap;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}form{margin:0 0 20px}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5}legend small{font-size:15px;color:#999}label,input,button,select,textarea{font-size:14px;font-weight:normal;line-height:20px}input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}label{display:block;margin-bottom:5px}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{display:inline-block;height:20px;padding:4px 6px;margin-bottom:10px;font-size:14px;line-height:20px;color:#555;vertical-align:middle;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}input,textarea,.uneditable-input{width:206px}textarea{height:auto}textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"],.uneditable-input{background-color:#fff;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear .2s,box-shadow linear .2s;-moz-transition:border linear .2s,box-shadow linear .2s;-o-transition:border linear .2s,box-shadow linear .2s;transition:border linear .2s,box-shadow linear .2s}textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus,.uneditable-input:focus{border-color:rgba(82,168,236,0.8);outline:0;outline:thin dotted \9;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;*margin-top:0;line-height:normal}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}select,input[type="file"]{height:30px;*margin-top:4px;line-height:30px}select{width:220px;background-color:#fff;border:1px solid #ccc}select[multiple],select[size]{height:auto}select:focus,input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.uneditable-input,.uneditable-textarea{color:#999;cursor:not-allowed;background-color:#fcfcfc;border-color:#ccc;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.025);box-shadow:inset 0 1px 2px rgba(0,0,0,0.025)}.uneditable-input{overflow:hidden;white-space:nowrap}.uneditable-textarea{width:auto;height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{min-height:20px;padding-left:20px}.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-20px}.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px}.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle}.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px}.input-mini{width:60px}.input-small{width:90px}.input-medium{width:150px}.input-large{width:210px}.input-xlarge{width:270px}.input-xxlarge{width:530px}input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"]{float:none;margin-left:0}.input-append input[class*="span"],.input-append .uneditable-input[class*="span"],.input-prepend input[class*="span"],.input-prepend .uneditable-input[class*="span"],.row-fluid input[class*="span"],.row-fluid select[class*="span"],.row-fluid textarea[class*="span"],.row-fluid .uneditable-input[class*="span"],.row-fluid .input-prepend [class*="span"],.row-fluid .input-append [class*="span"]{display:inline-block}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:926px}input.span11,textarea.span11,.uneditable-input.span11{width:846px}input.span10,textarea.span10,.uneditable-input.span10{width:766px}input.span9,textarea.span9,.uneditable-input.span9{width:686px}input.span8,textarea.span8,.uneditable-input.span8{width:606px}input.span7,textarea.span7,.uneditable-input.span7{width:526px}input.span6,textarea.span6,.uneditable-input.span6{width:446px}input.span5,textarea.span5,.uneditable-input.span5{width:366px}input.span4,textarea.span4,.uneditable-input.span4{width:286px}input.span3,textarea.span3,.uneditable-input.span3{width:206px}input.span2,textarea.span2,.uneditable-input.span2{width:126px}input.span1,textarea.span1,.uneditable-input.span1{width:46px}.controls-row{*zoom:1}.controls-row:before,.controls-row:after{display:table;line-height:0;content:""}.controls-row:after{clear:both}.controls-row [class*="span"],.row-fluid .controls-row [class*="span"]{float:left}.controls-row .checkbox[class*="span"],.controls-row .radio[class*="span"]{padding-top:5px}input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#eee}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"][readonly],input[type="checkbox"][readonly]{background-color:transparent}.control-group.warning .control-label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853}.control-group.warning .checkbox,.control-group.warning .radio,.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853}.control-group.warning input,.control-group.warning select,.control-group.warning textarea{border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.control-group.error .control-label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48}.control-group.error .checkbox,.control-group.error .radio,.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48}.control-group.error input,.control-group.error select,.control-group.error textarea{border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.control-group.success .control-label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847}.control-group.success .checkbox,.control-group.success .radio,.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847}.control-group.success input,.control-group.success select,.control-group.success textarea{border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847}.control-group.info .control-label,.control-group.info .help-block,.control-group.info .help-inline{color:#3a87ad}.control-group.info .checkbox,.control-group.info .radio,.control-group.info input,.control-group.info select,.control-group.info textarea{color:#3a87ad}.control-group.info input,.control-group.info select,.control-group.info textarea{border-color:#3a87ad;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.control-group.info input:focus,.control-group.info select:focus,.control-group.info textarea:focus{border-color:#2d6987;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7ab5d3}.control-group.info .input-prepend .add-on,.control-group.info .input-append .add-on{color:#3a87ad;background-color:#d9edf7;border-color:#3a87ad}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#b94a48;border-color:#ee5f5b}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7}.form-actions{padding:19px 20px 20px;margin-top:20px;margin-bottom:20px;background-color:#f5f5f5;border-top:1px solid #e5e5e5;*zoom:1}.form-actions:before,.form-actions:after{display:table;line-height:0;content:""}.form-actions:after{clear:both}.help-block,.help-inline{color:#595959}.help-block{display:block;margin-bottom:10px}.help-inline{display:inline-block;*display:inline;padding-left:5px;vertical-align:middle;*zoom:1}.input-append,.input-prepend{display:inline-block;margin-bottom:10px;font-size:0;white-space:nowrap;vertical-align:middle}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input,.input-append .dropdown-menu,.input-prepend .dropdown-menu,.input-append .popover,.input-prepend .popover{font-size:14px}.input-append input,.input-prepend input,.input-append select,.input-prepend select,.input-append .uneditable-input,.input-prepend .uneditable-input{position:relative;margin-bottom:0;*margin-left:0;vertical-align:top;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append input:focus,.input-prepend input:focus,.input-append select:focus,.input-prepend select:focus,.input-append .uneditable-input:focus,.input-prepend .uneditable-input:focus{z-index:2}.input-append .add-on,.input-prepend .add-on{display:inline-block;width:auto;height:20px;min-width:16px;padding:4px 5px;font-size:14px;font-weight:normal;line-height:20px;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc}.input-append .add-on,.input-prepend .add-on,.input-append .btn,.input-prepend .btn,.input-append .btn-group>.dropdown-toggle,.input-prepend .btn-group>.dropdown-toggle{vertical-align:top;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-append .active,.input-prepend .active{background-color:#a9dba9;border-color:#46a546}.input-prepend .add-on,.input-prepend .btn{margin-right:-1px}.input-prepend .add-on:first-child,.input-prepend .btn:first-child{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input,.input-append select,.input-append .uneditable-input{-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-append input+.btn-group .btn:last-child,.input-append select+.btn-group .btn:last-child,.input-append .uneditable-input+.btn-group .btn:last-child{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-append .add-on,.input-append .btn,.input-append .btn-group{margin-left:-1px}.input-append .add-on:last-child,.input-append .btn:last-child,.input-append .btn-group:last-child>.dropdown-toggle{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.input-prepend.input-append input+.btn-group .btn,.input-prepend.input-append select+.btn-group .btn,.input-prepend.input-append .uneditable-input+.btn-group .btn{-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.input-prepend.input-append .btn-group:first-child{margin-left:0}input.search-query{padding-right:14px;padding-right:4px \9;padding-left:14px;padding-left:4px \9;margin-bottom:0;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.form-search .input-append .search-query,.form-search .input-prepend .search-query{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.form-search .input-append .search-query{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0}.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px}.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;*display:inline;margin-bottom:0;vertical-align:middle;*zoom:1}.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none}.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block}.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0}.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle}.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0}.control-group{margin-bottom:10px}legend+.control-group{margin-top:20px;-webkit-margin-top-collapse:separate}.form-horizontal .control-group{margin-bottom:20px;*zoom:1}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;line-height:0;content:""}.form-horizontal .control-group:after{clear:both}.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right}.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0}.form-horizontal .controls:first-child{*padding-left:180px}.form-horizontal .help-block{margin-bottom:0}.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-top:10px}.form-horizontal .form-actions{padding-left:180px}table{max-width:100%;background-color:transparent;border-collapse:collapse;border-spacing:0}.table{width:100%;margin-bottom:20px}.table th,.table td{padding:8px;line-height:20px;text-align:left;vertical-align:top;border-top:1px solid #ddd}.table th{font-weight:bold}.table thead th{vertical-align:bottom}.table caption+thead tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed th,.table-condensed td{padding:4px 5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;border-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.table-bordered th,.table-bordered td{border-left:1px solid #ddd}.table-bordered caption+thead tr:first-child th,.table-bordered caption+tbody tr:first-child th,.table-bordered caption+tbody tr:first-child td,.table-bordered colgroup+thead tr:first-child th,.table-bordered colgroup+tbody tr:first-child th,.table-bordered colgroup+tbody tr:first-child td,.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0}.table-bordered thead:first-child tr:first-child>th:first-child,.table-bordered tbody:first-child tr:first-child>td:first-child,.table-bordered tbody:first-child tr:first-child>th:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered thead:first-child tr:first-child>th:last-child,.table-bordered tbody:first-child tr:first-child>td:last-child,.table-bordered tbody:first-child tr:first-child>th:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-bordered thead:last-child tr:last-child>th:first-child,.table-bordered tbody:last-child tr:last-child>td:first-child,.table-bordered tbody:last-child tr:last-child>th:first-child,.table-bordered tfoot:last-child tr:last-child>td:first-child,.table-bordered tfoot:last-child tr:last-child>th:first-child{-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px}.table-bordered thead:last-child tr:last-child>th:last-child,.table-bordered tbody:last-child tr:last-child>td:last-child,.table-bordered tbody:last-child tr:last-child>th:last-child,.table-bordered tfoot:last-child tr:last-child>td:last-child,.table-bordered tfoot:last-child tr:last-child>th:last-child{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px}.table-bordered tfoot+tbody:last-child tr:last-child td:first-child{-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomleft:0}.table-bordered tfoot+tbody:last-child tr:last-child td:last-child{-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomright:0}.table-bordered caption+thead tr:first-child th:first-child,.table-bordered caption+tbody tr:first-child td:first-child,.table-bordered colgroup+thead tr:first-child th:first-child,.table-bordered colgroup+tbody tr:first-child td:first-child{-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topleft:4px}.table-bordered caption+thead tr:first-child th:last-child,.table-bordered caption+tbody tr:first-child td:last-child,.table-bordered colgroup+thead tr:first-child th:last-child,.table-bordered colgroup+tbody tr:first-child td:last-child{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-topright:4px}.table-striped tbody>tr:nth-child(odd)>td,.table-striped tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover tbody tr:hover>td,.table-hover tbody tr:hover>th{background-color:#f5f5f5}table td[class*="span"],table th[class*="span"],.row-fluid table td[class*="span"],.row-fluid table th[class*="span"]{display:table-cell;float:none;margin-left:0}.table td.span1,.table th.span1{float:none;width:44px;margin-left:0}.table td.span2,.table th.span2{float:none;width:124px;margin-left:0}.table td.span3,.table th.span3{float:none;width:204px;margin-left:0}.table td.span4,.table th.span4{float:none;width:284px;margin-left:0}.table td.span5,.table th.span5{float:none;width:364px;margin-left:0}.table td.span6,.table th.span6{float:none;width:444px;margin-left:0}.table td.span7,.table th.span7{float:none;width:524px;margin-left:0}.table td.span8,.table th.span8{float:none;width:604px;margin-left:0}.table td.span9,.table th.span9{float:none;width:684px;margin-left:0}.table td.span10,.table th.span10{float:none;width:764px;margin-left:0}.table td.span11,.table th.span11{float:none;width:844px;margin-left:0}.table td.span12,.table th.span12{float:none;width:924px;margin-left:0}.table tbody tr.success>td{background-color:#dff0d8}.table tbody tr.error>td{background-color:#f2dede}.table tbody tr.warning>td{background-color:#fcf8e3}.table tbody tr.info>td{background-color:#d9edf7}.table-hover tbody tr.success:hover>td{background-color:#d0e9c6}.table-hover tbody tr.error:hover>td{background-color:#ebcccc}.table-hover tbody tr.warning:hover>td{background-color:#faf2cc}.table-hover tbody tr.info:hover>td{background-color:#c4e3f3}[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;margin-top:1px;*margin-right:.3em;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat}.icon-white,.nav-pills>.active>a>[class^="icon-"],.nav-pills>.active>a>[class*=" icon-"],.nav-list>.active>a>[class^="icon-"],.nav-list>.active>a>[class*=" icon-"],.navbar-inverse .nav>.active>a>[class^="icon-"],.navbar-inverse .nav>.active>a>[class*=" icon-"],.dropdown-menu>li>a:hover>[class^="icon-"],.dropdown-menu>li>a:focus>[class^="icon-"],.dropdown-menu>li>a:hover>[class*=" icon-"],.dropdown-menu>li>a:focus>[class*=" icon-"],.dropdown-menu>.active>a>[class^="icon-"],.dropdown-menu>.active>a>[class*=" icon-"],.dropdown-submenu:hover>a>[class^="icon-"],.dropdown-submenu:focus>a>[class^="icon-"],.dropdown-submenu:hover>a>[class*=" icon-"],.dropdown-submenu:focus>a>[class*=" icon-"]{background-image:url("../img/glyphicons-halflings-white.png")}.icon-glass{background-position:0 0}.icon-music{background-position:-24px 0}.icon-search{background-position:-48px 0}.icon-envelope{background-position:-72px 0}.icon-heart{background-position:-96px 0}.icon-star{background-position:-120px 0}.icon-star-empty{background-position:-144px 0}.icon-user{background-position:-168px 0}.icon-film{background-position:-192px 0}.icon-th-large{background-position:-216px 0}.icon-th{background-position:-240px 0}.icon-th-list{background-position:-264px 0}.icon-ok{background-position:-288px 0}.icon-remove{background-position:-312px 0}.icon-zoom-in{background-position:-336px 0}.icon-zoom-out{background-position:-360px 0}.icon-off{background-position:-384px 0}.icon-signal{background-position:-408px 0}.icon-cog{background-position:-432px 0}.icon-trash{background-position:-456px 0}.icon-home{background-position:0 -24px}.icon-file{background-position:-24px -24px}.icon-time{background-position:-48px -24px}.icon-road{background-position:-72px -24px}.icon-download-alt{background-position:-96px -24px}.icon-download{background-position:-120px -24px}.icon-upload{background-position:-144px -24px}.icon-inbox{background-position:-168px -24px}.icon-play-circle{background-position:-192px -24px}.icon-repeat{background-position:-216px -24px}.icon-refresh{background-position:-240px -24px}.icon-list-alt{background-position:-264px -24px}.icon-lock{background-position:-287px -24px}.icon-flag{background-position:-312px -24px}.icon-headphones{background-position:-336px -24px}.icon-volume-off{background-position:-360px -24px}.icon-volume-down{background-position:-384px -24px}.icon-volume-up{background-position:-408px -24px}.icon-qrcode{background-position:-432px -24px}.icon-barcode{background-position:-456px -24px}.icon-tag{background-position:0 -48px}.icon-tags{background-position:-25px -48px}.icon-book{background-position:-48px -48px}.icon-bookmark{background-position:-72px -48px}.icon-print{background-position:-96px -48px}.icon-camera{background-position:-120px -48px}.icon-font{background-position:-144px -48px}.icon-bold{background-position:-167px -48px}.icon-italic{background-position:-192px -48px}.icon-text-height{background-position:-216px -48px}.icon-text-width{background-position:-240px -48px}.icon-align-left{background-position:-264px -48px}.icon-align-center{background-position:-288px -48px}.icon-align-right{background-position:-312px -48px}.icon-align-justify{background-position:-336px -48px}.icon-list{background-position:-360px -48px}.icon-indent-left{background-position:-384px -48px}.icon-indent-right{background-position:-408px -48px}.icon-facetime-video{background-position:-432px -48px}.icon-picture{background-position:-456px -48px}.icon-pencil{background-position:0 -72px}.icon-map-marker{background-position:-24px -72px}.icon-adjust{background-position:-48px -72px}.icon-tint{background-position:-72px -72px}.icon-edit{background-position:-96px -72px}.icon-share{background-position:-120px -72px}.icon-check{background-position:-144px -72px}.icon-move{background-position:-168px -72px}.icon-step-backward{background-position:-192px -72px}.icon-fast-backward{background-position:-216px -72px}.icon-backward{background-position:-240px -72px}.icon-play{background-position:-264px -72px}.icon-pause{background-position:-288px -72px}.icon-stop{background-position:-312px -72px}.icon-forward{background-position:-336px -72px}.icon-fast-forward{background-position:-360px -72px}.icon-step-forward{background-position:-384px -72px}.icon-eject{background-position:-408px -72px}.icon-chevron-left{background-position:-432px -72px}.icon-chevron-right{background-position:-456px -72px}.icon-plus-sign{background-position:0 -96px}.icon-minus-sign{background-position:-24px -96px}.icon-remove-sign{background-position:-48px -96px}.icon-ok-sign{background-position:-72px -96px}.icon-question-sign{background-position:-96px -96px}.icon-info-sign{background-position:-120px -96px}.icon-screenshot{background-position:-144px -96px}.icon-remove-circle{background-position:-168px -96px}.icon-ok-circle{background-position:-192px -96px}.icon-ban-circle{background-position:-216px -96px}.icon-arrow-left{background-position:-240px -96px}.icon-arrow-right{background-position:-264px -96px}.icon-arrow-up{background-position:-289px -96px}.icon-arrow-down{background-position:-312px -96px}.icon-share-alt{background-position:-336px -96px}.icon-resize-full{background-position:-360px -96px}.icon-resize-small{background-position:-384px -96px}.icon-plus{background-position:-408px -96px}.icon-minus{background-position:-433px -96px}.icon-asterisk{background-position:-456px -96px}.icon-exclamation-sign{background-position:0 -120px}.icon-gift{background-position:-24px -120px}.icon-leaf{background-position:-48px -120px}.icon-fire{background-position:-72px -120px}.icon-eye-open{background-position:-96px -120px}.icon-eye-close{background-position:-120px -120px}.icon-warning-sign{background-position:-144px -120px}.icon-plane{background-position:-168px -120px}.icon-calendar{background-position:-192px -120px}.icon-random{width:16px;background-position:-216px -120px}.icon-comment{background-position:-240px -120px}.icon-magnet{background-position:-264px -120px}.icon-chevron-up{background-position:-288px -120px}.icon-chevron-down{background-position:-313px -119px}.icon-retweet{background-position:-336px -120px}.icon-shopping-cart{background-position:-360px -120px}.icon-folder-close{width:16px;background-position:-384px -120px}.icon-folder-open{width:16px;background-position:-408px -120px}.icon-resize-vertical{background-position:-432px -119px}.icon-resize-horizontal{background-position:-456px -118px}.icon-hdd{background-position:0 -144px}.icon-bullhorn{background-position:-24px -144px}.icon-bell{background-position:-48px -144px}.icon-certificate{background-position:-72px -144px}.icon-thumbs-up{background-position:-96px -144px}.icon-thumbs-down{background-position:-120px -144px}.icon-hand-right{background-position:-144px -144px}.icon-hand-left{background-position:-168px -144px}.icon-hand-up{background-position:-192px -144px}.icon-hand-down{background-position:-216px -144px}.icon-circle-arrow-right{background-position:-240px -144px}.icon-circle-arrow-left{background-position:-264px -144px}.icon-circle-arrow-up{background-position:-288px -144px}.icon-circle-arrow-down{background-position:-312px -144px}.icon-globe{background-position:-336px -144px}.icon-wrench{background-position:-360px -144px}.icon-tasks{background-position:-384px -144px}.icon-filter{background-position:-408px -144px}.icon-briefcase{background-position:-432px -144px}.icon-fullscreen{background-position:-456px -144px}.dropup,.dropdown{position:relative}.dropdown-toggle{*margin-bottom:-3px}.dropdown-toggle:active,.open .dropdown-toggle{outline:0}.caret{display:inline-block;width:0;height:0;vertical-align:top;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown .caret{margin-top:8px;margin-left:2px}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-submenu:hover>a,.dropdown-submenu:focus>a{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#0081c2;background-image:-moz-linear-gradient(top,#08c,#0077b3);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#0077b3));background-image:-webkit-linear-gradient(top,#08c,#0077b3);background-image:-o-linear-gradient(top,#08c,#0077b3);background-image:linear-gradient(to bottom,#08c,#0077b3);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0077b3',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open{*z-index:1000}.open>.dropdown-menu{display:block}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropup .dropdown-submenu>.dropdown-menu{top:auto;bottom:0;margin-top:0;margin-bottom:-2px;-webkit-border-radius:5px 5px 5px 0;-moz-border-radius:5px 5px 5px 0;border-radius:5px 5px 5px 0}.dropdown-submenu>a:after{display:block;float:right;width:0;height:0;margin-top:5px;margin-right:-10px;border-color:transparent;border-left-color:#ccc;border-style:solid;border-width:5px 0 5px 5px;content:" "}.dropdown-submenu:hover>a:after{border-left-color:#fff}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.dropdown .dropdown-menu .nav-header{padding-right:20px;padding-left:20px}.typeahead{z-index:1051;margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.fade{opacity:0;-webkit-transition:opacity .15s linear;-moz-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-moz-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.close{float:right;font-size:20px;font-weight:bold;line-height:20px;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.4;filter:alpha(opacity=40)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.btn{display:inline-block;*display:inline;padding:4px 12px;margin-bottom:0;*margin-left:.3em;font-size:14px;line-height:20px;color:#333;text-align:center;text-shadow:0 1px 1px rgba(255,255,255,0.75);vertical-align:middle;cursor:pointer;background-color:#f5f5f5;*background-color:#e6e6e6;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;border:1px solid #ccc;*border:0;border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);*zoom:1;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;*background-color:#04c;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;*background-color:#f89406;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;*background-color:#bd362f;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;*background-color:#51a351;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;*background-color:#2f96b4;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;*background-color:#222;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{color:#08c;cursor:pointer;border-color:transparent;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.btn-group{position:relative;display:inline-block;*display:inline;*margin-left:.3em;font-size:0;white-space:nowrap;vertical-align:middle;*zoom:1}.btn-group:first-child{*margin-left:0}.btn-group+.btn-group{margin-left:5px}.btn-toolbar{margin-top:10px;margin-bottom:10px;font-size:0}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group{margin-left:5px}.btn-group>.btn{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group>.btn+.btn{margin-left:-1px}.btn-group>.btn,.btn-group>.dropdown-menu,.btn-group>.popover{font-size:14px}.btn-group>.btn-mini{font-size:10.5px}.btn-group>.btn-small{font-size:11.9px}.btn-group>.btn-large{font-size:17.5px}.btn-group>.btn:first-child{margin-left:0;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.btn-group>.btn:last-child,.btn-group>.dropdown-toggle{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.btn-group>.btn.large:first-child{margin-left:0;-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.btn-group>.btn.large:last-child,.btn-group>.large.dropdown-toggle{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active{z-index:2}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{*padding-top:5px;padding-right:8px;*padding-bottom:5px;padding-left:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 1px 0 0 rgba(255,255,255,0.125),inset 0 1px 0 rgba(255,255,255,0.2),0 1px 2px rgba(0,0,0,0.05)}.btn-group>.btn-mini+.dropdown-toggle{*padding-top:2px;padding-right:5px;*padding-bottom:2px;padding-left:5px}.btn-group>.btn-small+.dropdown-toggle{*padding-top:5px;*padding-bottom:4px}.btn-group>.btn-large+.dropdown-toggle{*padding-top:7px;padding-right:12px;*padding-bottom:7px;padding-left:12px}.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 2px 4px rgba(0,0,0,0.15),0 1px 2px rgba(0,0,0,0.05)}.btn-group.open .btn.dropdown-toggle{background-color:#e6e6e6}.btn-group.open .btn-primary.dropdown-toggle{background-color:#04c}.btn-group.open .btn-warning.dropdown-toggle{background-color:#f89406}.btn-group.open .btn-danger.dropdown-toggle{background-color:#bd362f}.btn-group.open .btn-success.dropdown-toggle{background-color:#51a351}.btn-group.open .btn-info.dropdown-toggle{background-color:#2f96b4}.btn-group.open .btn-inverse.dropdown-toggle{background-color:#222}.btn .caret{margin-top:8px;margin-left:0}.btn-large .caret{margin-top:6px}.btn-large .caret{border-top-width:5px;border-right-width:5px;border-left-width:5px}.btn-mini .caret,.btn-small .caret{margin-top:8px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#fff;border-bottom-color:#fff}.btn-group-vertical{display:inline-block;*display:inline;*zoom:1}.btn-group-vertical>.btn{display:block;float:none;max-width:100%;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-group-vertical>.btn+.btn{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.btn-group-vertical>.btn-large:first-child{-webkit-border-radius:6px 6px 0 0;-moz-border-radius:6px 6px 0 0;border-radius:6px 6px 0 0}.btn-group-vertical>.btn-large:last-child{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.alert{padding:8px 35px 8px 14px;margin-bottom:20px;text-shadow:0 1px 0 rgba(255,255,255,0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.alert,.alert h4{color:#c09853}.alert h4{margin:0}.alert .close{position:relative;top:-2px;right:-21px;line-height:20px}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success h4{color:#468847}.alert-danger,.alert-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger h4,.alert-error h4{color:#b94a48}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info h4{color:#3a87ad}.alert-block{padding-top:14px;padding-bottom:14px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.nav{margin-bottom:20px;margin-left:0;list-style:none}.nav>li>a{display:block}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li>a>img{max-width:none}.nav>.pull-right{float:right}.nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:20px;color:#999;text-shadow:0 1px 0 rgba(255,255,255,0.5);text-transform:uppercase}.nav li+.nav-header{margin-top:9px}.nav-list{padding-right:15px;padding-left:15px;margin-bottom:0}.nav-list>li>a,.nav-list .nav-header{margin-right:-15px;margin-left:-15px;text-shadow:0 1px 0 rgba(255,255,255,0.5)}.nav-list>li>a{padding:3px 15px}.nav-list>.active>a,.nav-list>.active>a:hover,.nav-list>.active>a:focus{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.2);background-color:#08c}.nav-list [class^="icon-"],.nav-list [class*=" icon-"]{margin-right:2px}.nav-list .divider{*width:100%;height:1px;margin:9px 1px;*margin:-5px 0 5px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs,.nav-pills{*zoom:1}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;line-height:0;content:""}.nav-tabs:after,.nav-pills:after{clear:both}.nav-tabs>li,.nav-pills>li{float:left}.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{margin-bottom:-1px}.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:20px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover,.nav-tabs>li>a:focus{border-color:#eee #eee #ddd}.nav-tabs>.active>a,.nav-tabs>.active>a:hover,.nav-tabs>.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nav-pills>.active>a,.nav-pills>.active>a:hover,.nav-pills>.active>a:focus{color:#fff;background-color:#08c}.nav-stacked>li{float:none}.nav-stacked>li>a{margin-right:0}.nav-tabs.nav-stacked{border-bottom:0}.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-topleft:4px}.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-moz-border-radius-bottomright:4px;-moz-border-radius-bottomleft:4px}.nav-tabs.nav-stacked>li>a:hover,.nav-tabs.nav-stacked>li>a:focus{z-index:2;border-color:#ddd}.nav-pills.nav-stacked>li>a{margin-bottom:3px}.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px}.nav-tabs .dropdown-menu{-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px}.nav-pills .dropdown-menu{-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.nav .dropdown-toggle .caret{margin-top:6px;border-top-color:#08c;border-bottom-color:#08c}.nav .dropdown-toggle:hover .caret,.nav .dropdown-toggle:focus .caret{border-top-color:#005580;border-bottom-color:#005580}.nav-tabs .dropdown-toggle .caret{margin-top:8px}.nav .active .dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.nav-tabs .active .dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.nav>.dropdown.active>a:hover,.nav>.dropdown.active>a:focus{cursor:pointer}.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>li.dropdown.open.active>a:hover,.nav>li.dropdown.open.active>a:focus{color:#fff;background-color:#999;border-color:#999}.nav li.dropdown.open .caret,.nav li.dropdown.open.active .caret,.nav li.dropdown.open a:hover .caret,.nav li.dropdown.open a:focus .caret{border-top-color:#fff;border-bottom-color:#fff;opacity:1;filter:alpha(opacity=100)}.tabs-stacked .open>a:hover,.tabs-stacked .open>a:focus{border-color:#999}.tabbable{*zoom:1}.tabbable:before,.tabbable:after{display:table;line-height:0;content:""}.tabbable:after{clear:both}.tab-content{overflow:auto}.tabs-below>.nav-tabs,.tabs-right>.nav-tabs,.tabs-left>.nav-tabs{border-bottom:0}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.tabs-below>.nav-tabs{border-top:1px solid #ddd}.tabs-below>.nav-tabs>li{margin-top:-1px;margin-bottom:0}.tabs-below>.nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px}.tabs-below>.nav-tabs>li>a:hover,.tabs-below>.nav-tabs>li>a:focus{border-top-color:#ddd;border-bottom-color:transparent}.tabs-below>.nav-tabs>.active>a,.tabs-below>.nav-tabs>.active>a:hover,.tabs-below>.nav-tabs>.active>a:focus{border-color:transparent #ddd #ddd #ddd}.tabs-left>.nav-tabs>li,.tabs-right>.nav-tabs>li{float:none}.tabs-left>.nav-tabs>li>a,.tabs-right>.nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px}.tabs-left>.nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd}.tabs-left>.nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px}.tabs-left>.nav-tabs>li>a:hover,.tabs-left>.nav-tabs>li>a:focus{border-color:#eee #ddd #eee #eee}.tabs-left>.nav-tabs .active>a,.tabs-left>.nav-tabs .active>a:hover,.tabs-left>.nav-tabs .active>a:focus{border-color:#ddd transparent #ddd #ddd;*border-right-color:#fff}.tabs-right>.nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd}.tabs-right>.nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0}.tabs-right>.nav-tabs>li>a:hover,.tabs-right>.nav-tabs>li>a:focus{border-color:#eee #eee #eee #ddd}.tabs-right>.nav-tabs .active>a,.tabs-right>.nav-tabs .active>a:hover,.tabs-right>.nav-tabs .active>a:focus{border-color:#ddd #ddd #ddd transparent;*border-left-color:#fff}.nav>.disabled>a{color:#999}.nav>.disabled>a:hover,.nav>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent}.navbar{*position:relative;*z-index:2;margin-bottom:20px;overflow:visible}.navbar-inner{min-height:40px;padding-right:20px;padding-left:20px;background-color:#fafafa;background-image:-moz-linear-gradient(top,#fff,#f2f2f2);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#f2f2f2));background-image:-webkit-linear-gradient(top,#fff,#f2f2f2);background-image:-o-linear-gradient(top,#fff,#f2f2f2);background-image:linear-gradient(to bottom,#fff,#f2f2f2);background-repeat:repeat-x;border:1px solid #d4d4d4;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff2f2f2',GradientType=0);*zoom:1;-webkit-box-shadow:0 1px 4px rgba(0,0,0,0.065);-moz-box-shadow:0 1px 4px rgba(0,0,0,0.065);box-shadow:0 1px 4px rgba(0,0,0,0.065)}.navbar-inner:before,.navbar-inner:after{display:table;line-height:0;content:""}.navbar-inner:after{clear:both}.navbar .container{width:auto}.nav-collapse.collapse{height:auto;overflow:visible}.navbar .brand{display:block;float:left;padding:10px 20px 10px;margin-left:-20px;font-size:20px;font-weight:200;color:#777;text-shadow:0 1px 0 #fff}.navbar .brand:hover,.navbar .brand:focus{text-decoration:none}.navbar-text{margin-bottom:0;line-height:40px;color:#777}.navbar-link{color:#777}.navbar-link:hover,.navbar-link:focus{color:#333}.navbar .divider-vertical{height:40px;margin:0 9px;border-right:1px solid #fff;border-left:1px solid #f2f2f2}.navbar .btn,.navbar .btn-group{margin-top:5px}.navbar .btn-group .btn,.navbar .input-prepend .btn,.navbar .input-append .btn,.navbar .input-prepend .btn-group,.navbar .input-append .btn-group{margin-top:0}.navbar-form{margin-bottom:0;*zoom:1}.navbar-form:before,.navbar-form:after{display:table;line-height:0;content:""}.navbar-form:after{clear:both}.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px}.navbar-form input,.navbar-form select,.navbar-form .btn{display:inline-block;margin-bottom:0}.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px}.navbar-form .input-append,.navbar-form .input-prepend{margin-top:5px;white-space:nowrap}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0}.navbar-search{position:relative;float:left;margin-top:5px;margin-bottom:0}.navbar-search .search-query{padding:4px 14px;margin-bottom:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.navbar-static-top{position:static;margin-bottom:0}.navbar-static-top .navbar-inner{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{border-width:0 0 1px}.navbar-fixed-bottom .navbar-inner{border-width:1px 0 0}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-right:0;padding-left:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px}.navbar-fixed-top{top:0}.navbar-fixed-top .navbar-inner,.navbar-static-top .navbar-inner{-webkit-box-shadow:0 1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 10px rgba(0,0,0,0.1);box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-fixed-bottom{bottom:0}.navbar-fixed-bottom .navbar-inner{-webkit-box-shadow:0 -1px 10px rgba(0,0,0,0.1);-moz-box-shadow:0 -1px 10px rgba(0,0,0,0.1);box-shadow:0 -1px 10px rgba(0,0,0,0.1)}.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0}.navbar .nav.pull-right{float:right;margin-right:0}.navbar .nav>li{float:left}.navbar .nav>li>a{float:none;padding:10px 15px 10px;color:#777;text-decoration:none;text-shadow:0 1px 0 #fff}.navbar .nav .dropdown-toggle .caret{margin-top:8px}.navbar .nav>li>a:focus,.navbar .nav>li>a:hover{color:#333;text-decoration:none;background-color:transparent}.navbar .nav>.active>a,.navbar .nav>.active>a:hover,.navbar .nav>.active>a:focus{color:#555;text-decoration:none;background-color:#e5e5e5;-webkit-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);-moz-box-shadow:inset 0 3px 8px rgba(0,0,0,0.125);box-shadow:inset 0 3px 8px rgba(0,0,0,0.125)}.navbar .btn-navbar{display:none;float:right;padding:7px 10px;margin-right:5px;margin-left:5px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#ededed;*background-color:#e5e5e5;background-image:-moz-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#e5e5e5));background-image:-webkit-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:-o-linear-gradient(top,#f2f2f2,#e5e5e5);background-image:linear-gradient(to bottom,#f2f2f2,#e5e5e5);background-repeat:repeat-x;border-color:#e5e5e5 #e5e5e5 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2',endColorstr='#ffe5e5e5',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.075)}.navbar .btn-navbar:hover,.navbar .btn-navbar:focus,.navbar .btn-navbar:active,.navbar .btn-navbar.active,.navbar .btn-navbar.disabled,.navbar .btn-navbar[disabled]{color:#fff;background-color:#e5e5e5;*background-color:#d9d9d9}.navbar .btn-navbar:active,.navbar .btn-navbar.active{background-color:#ccc \9}.navbar .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.25);-moz-box-shadow:0 1px 0 rgba(0,0,0,0.25);box-shadow:0 1px 0 rgba(0,0,0,0.25)}.btn-navbar .icon-bar+.icon-bar{margin-top:3px}.navbar .nav>li>.dropdown-menu:before{position:absolute;top:-7px;left:9px;display:inline-block;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-left:7px solid transparent;border-bottom-color:rgba(0,0,0,0.2);content:''}.navbar .nav>li>.dropdown-menu:after{position:absolute;top:-6px;left:10px;display:inline-block;border-right:6px solid transparent;border-bottom:6px solid #fff;border-left:6px solid transparent;content:''}.navbar-fixed-bottom .nav>li>.dropdown-menu:before{top:auto;bottom:-7px;border-top:7px solid #ccc;border-bottom:0;border-top-color:rgba(0,0,0,0.2)}.navbar-fixed-bottom .nav>li>.dropdown-menu:after{top:auto;bottom:-6px;border-top:6px solid #fff;border-bottom:0}.navbar .nav li.dropdown>a:hover .caret,.navbar .nav li.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar .nav li.dropdown.open>.dropdown-toggle,.navbar .nav li.dropdown.active>.dropdown-toggle,.navbar .nav li.dropdown.open.active>.dropdown-toggle{color:#555;background-color:#e5e5e5}.navbar .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#777;border-bottom-color:#777}.navbar .nav li.dropdown.open>.dropdown-toggle .caret,.navbar .nav li.dropdown.active>.dropdown-toggle .caret,.navbar .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#555;border-bottom-color:#555}.navbar .pull-right>li>.dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar .pull-right>li>.dropdown-menu:before,.navbar .nav>li>.dropdown-menu.pull-right:before{right:12px;left:auto}.navbar .pull-right>li>.dropdown-menu:after,.navbar .nav>li>.dropdown-menu.pull-right:after{right:13px;left:auto}.navbar .pull-right>li>.dropdown-menu .dropdown-menu,.navbar .nav>li>.dropdown-menu.pull-right .dropdown-menu{right:100%;left:auto;margin-right:-1px;margin-left:0;-webkit-border-radius:6px 0 6px 6px;-moz-border-radius:6px 0 6px 6px;border-radius:6px 0 6px 6px}.navbar-inverse .navbar-inner{background-color:#1b1b1b;background-image:-moz-linear-gradient(top,#222,#111);background-image:-webkit-gradient(linear,0 0,0 100%,from(#222),to(#111));background-image:-webkit-linear-gradient(top,#222,#111);background-image:-o-linear-gradient(top,#222,#111);background-image:linear-gradient(to bottom,#222,#111);background-repeat:repeat-x;border-color:#252525;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222',endColorstr='#ff111111',GradientType=0)}.navbar-inverse .brand,.navbar-inverse .nav>li>a{color:#999;text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-inverse .brand:hover,.navbar-inverse .nav>li>a:hover,.navbar-inverse .brand:focus,.navbar-inverse .nav>li>a:focus{color:#fff}.navbar-inverse .brand{color:#999}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .nav>li>a:focus,.navbar-inverse .nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .nav .active>a,.navbar-inverse .nav .active>a:hover,.navbar-inverse .nav .active>a:focus{color:#fff;background-color:#111}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover,.navbar-inverse .navbar-link:focus{color:#fff}.navbar-inverse .divider-vertical{border-right-color:#222;border-left-color:#111}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle{color:#fff;background-color:#111}.navbar-inverse .nav li.dropdown>a:hover .caret,.navbar-inverse .nav li.dropdown>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .nav li.dropdown>.dropdown-toggle .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .nav li.dropdown.open>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.active>.dropdown-toggle .caret,.navbar-inverse .nav li.dropdown.open.active>.dropdown-toggle .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-search .search-query{color:#fff;background-color:#515151;border-color:#111;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1),0 1px 0 rgba(255,255,255,0.15);-webkit-transition:none;-moz-transition:none;-o-transition:none;transition:none}.navbar-inverse .navbar-search .search-query:-moz-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:-ms-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder{color:#ccc}.navbar-inverse .navbar-search .search-query:focus,.navbar-inverse .navbar-search .search-query.focused{padding:5px 15px;color:#333;text-shadow:0 1px 0 #fff;background-color:#fff;border:0;outline:0;-webkit-box-shadow:0 0 3px rgba(0,0,0,0.15);-moz-box-shadow:0 0 3px rgba(0,0,0,0.15);box-shadow:0 0 3px rgba(0,0,0,0.15)}.navbar-inverse .btn-navbar{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e0e0e;*background-color:#040404;background-image:-moz-linear-gradient(top,#151515,#040404);background-image:-webkit-gradient(linear,0 0,0 100%,from(#151515),to(#040404));background-image:-webkit-linear-gradient(top,#151515,#040404);background-image:-o-linear-gradient(top,#151515,#040404);background-image:linear-gradient(to bottom,#151515,#040404);background-repeat:repeat-x;border-color:#040404 #040404 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515',endColorstr='#ff040404',GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.navbar-inverse .btn-navbar:hover,.navbar-inverse .btn-navbar:focus,.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active,.navbar-inverse .btn-navbar.disabled,.navbar-inverse .btn-navbar[disabled]{color:#fff;background-color:#040404;*background-color:#000}.navbar-inverse .btn-navbar:active,.navbar-inverse .btn-navbar.active{background-color:#000 \9}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.breadcrumb>li{display:inline-block;*display:inline;text-shadow:0 1px 0 #fff;*zoom:1}.breadcrumb>li>.divider{padding:0 5px;color:#ccc}.breadcrumb>.active{color:#999}.pagination{margin:20px 0}.pagination ul{display:inline-block;*display:inline;margin-bottom:0;margin-left:0;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*zoom:1;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);-moz-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.pagination ul>li{display:inline}.pagination ul>li>a,.pagination ul>li>span{float:left;padding:4px 12px;line-height:20px;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination ul>li>a:hover,.pagination ul>li>a:focus,.pagination ul>.active>a,.pagination ul>.active>span{background-color:#f5f5f5}.pagination ul>.active>a,.pagination ul>.active>span{color:#999;cursor:default}.pagination ul>.disabled>span,.pagination ul>.disabled>a,.pagination ul>.disabled>a:hover,.pagination ul>.disabled>a:focus{color:#999;cursor:default;background-color:transparent}.pagination ul>li:first-child>a,.pagination ul>li:first-child>span{border-left-width:1px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-bottomleft:4px;-moz-border-radius-topleft:4px}.pagination ul>li:last-child>a,.pagination ul>li:last-child>span{-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-topright:4px;-moz-border-radius-bottomright:4px}.pagination-centered{text-align:center}.pagination-right{text-align:right}.pagination-large ul>li>a,.pagination-large ul>li>span{padding:11px 19px;font-size:17.5px}.pagination-large ul>li:first-child>a,.pagination-large ul>li:first-child>span{-webkit-border-bottom-left-radius:6px;border-bottom-left-radius:6px;-webkit-border-top-left-radius:6px;border-top-left-radius:6px;-moz-border-radius-bottomleft:6px;-moz-border-radius-topleft:6px}.pagination-large ul>li:last-child>a,.pagination-large ul>li:last-child>span{-webkit-border-top-right-radius:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;border-bottom-right-radius:6px;-moz-border-radius-topright:6px;-moz-border-radius-bottomright:6px}.pagination-mini ul>li:first-child>a,.pagination-small ul>li:first-child>a,.pagination-mini ul>li:first-child>span,.pagination-small ul>li:first-child>span{-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-bottomleft:3px;-moz-border-radius-topleft:3px}.pagination-mini ul>li:last-child>a,.pagination-small ul>li:last-child>a,.pagination-mini ul>li:last-child>span,.pagination-small ul>li:last-child>span{-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-topright:3px;-moz-border-radius-bottomright:3px}.pagination-small ul>li>a,.pagination-small ul>li>span{padding:2px 10px;font-size:11.9px}.pagination-mini ul>li>a,.pagination-mini ul>li>span{padding:0 6px;font-size:10.5px}.pager{margin:20px 0;text-align:center;list-style:none;*zoom:1}.pager:before,.pager:after{display:table;line-height:0;content:""}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop,.modal-backdrop.fade.in{opacity:.8;filter:alpha(opacity=80)}.modal{position:fixed;top:10%;left:50%;z-index:1050;width:560px;margin-left:-280px;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;outline:0;-webkit-box-shadow:0 3px 7px rgba(0,0,0,0.3);-moz-box-shadow:0 3px 7px rgba(0,0,0,0.3);box-shadow:0 3px 7px rgba(0,0,0,0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;-moz-transition:opacity .3s linear,top .3s ease-out;-o-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:10%}.modal-header{padding:9px 15px;border-bottom:1px solid #eee}.modal-header .close{margin-top:2px}.modal-header h3{margin:0;line-height:30px}.modal-body{position:relative;max-height:400px;padding:15px;overflow-y:auto}.modal-form{margin-bottom:0}.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;*zoom:1;-webkit-box-shadow:inset 0 1px 0 #fff;-moz-box-shadow:inset 0 1px 0 #fff;box-shadow:inset 0 1px 0 #fff}.modal-footer:before,.modal-footer:after{display:table;line-height:0;content:""}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.tooltip{position:absolute;z-index:1030;display:block;font-size:11px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:.8;filter:alpha(opacity=80)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:#000;border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:#000;border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:#000;border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:#000;border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.popover-title:empty{display:none}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0}.thumbnails{margin-left:-20px;list-style:none;*zoom:1}.thumbnails:before,.thumbnails:after{display:table;line-height:0;content:""}.thumbnails:after{clear:both}.row-fluid .thumbnails{margin-left:0}.thumbnails>li{float:left;margin-bottom:20px;margin-left:20px}.thumbnail{display:block;padding:4px;line-height:20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.055);-moz-box-shadow:0 1px 3px rgba(0,0,0,0.055);box-shadow:0 1px 3px rgba(0,0,0,0.055);-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}a.thumbnail:hover,a.thumbnail:focus{border-color:#08c;-webkit-box-shadow:0 1px 4px rgba(0,105,214,0.25);-moz-box-shadow:0 1px 4px rgba(0,105,214,0.25);box-shadow:0 1px 4px rgba(0,105,214,0.25)}.thumbnail>img{display:block;max-width:100%;margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#555}.media,.media-body{overflow:hidden;*overflow:visible;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{margin-left:0;list-style:none}.label,.badge{display:inline-block;padding:2px 4px;font-size:11.844px;font-weight:bold;line-height:14px;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);white-space:nowrap;vertical-align:baseline;background-color:#999}.label{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.badge{padding-right:9px;padding-left:9px;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px}.label:empty,.badge:empty{display:none}a.label:hover,a.label:focus,a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.label-important,.badge-important{background-color:#b94a48}.label-important[href],.badge-important[href]{background-color:#953b39}.label-warning,.badge-warning{background-color:#f89406}.label-warning[href],.badge-warning[href]{background-color:#c67605}.label-success,.badge-success{background-color:#468847}.label-success[href],.badge-success[href]{background-color:#356635}.label-info,.badge-info{background-color:#3a87ad}.label-info[href],.badge-info[href]{background-color:#2d6987}.label-inverse,.badge-inverse{background-color:#333}.label-inverse[href],.badge-inverse[href]{background-color:#1a1a1a}.btn .label,.btn .badge{position:relative;top:-1px}.btn-mini .label,.btn-mini .badge{top:0}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f7f7f7;background-image:-moz-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f5f5f5),to(#f9f9f9));background-image:-webkit-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:-o-linear-gradient(top,#f5f5f5,#f9f9f9);background-image:linear-gradient(to bottom,#f5f5f5,#f9f9f9);background-repeat:repeat-x;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#fff9f9f9',GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress .bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top,#149bdf,#0480be);background-image:-webkit-gradient(linear,0 0,0 100%,from(#149bdf),to(#0480be));background-image:-webkit-linear-gradient(top,#149bdf,#0480be);background-image:-o-linear-gradient(top,#149bdf,#0480be);background-image:linear-gradient(to bottom,#149bdf,#0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf',endColorstr='#ff0480be',GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width .6s ease;-moz-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress .bar+.bar{-webkit-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);-moz-box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 1px 0 0 rgba(0,0,0,0.15),inset 0 -1px 0 rgba(0,0,0,0.15)}.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px}.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-danger .bar,.progress .bar-danger{background-color:#dd514c;background-image:-moz-linear-gradient(top,#ee5f5b,#c43c35);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#c43c35));background-image:-webkit-linear-gradient(top,#ee5f5b,#c43c35);background-image:-o-linear-gradient(top,#ee5f5b,#c43c35);background-image:linear-gradient(to bottom,#ee5f5b,#c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffc43c35',GradientType=0)}.progress-danger.progress-striped .bar,.progress-striped .bar-danger{background-color:#ee5f5b;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-success .bar,.progress .bar-success{background-color:#5eb95e;background-image:-moz-linear-gradient(top,#62c462,#57a957);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#57a957));background-image:-webkit-linear-gradient(top,#62c462,#57a957);background-image:-o-linear-gradient(top,#62c462,#57a957);background-image:linear-gradient(to bottom,#62c462,#57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff57a957',GradientType=0)}.progress-success.progress-striped .bar,.progress-striped .bar-success{background-color:#62c462;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-info .bar,.progress .bar-info{background-color:#4bb1cf;background-image:-moz-linear-gradient(top,#5bc0de,#339bb9);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#339bb9));background-image:-webkit-linear-gradient(top,#5bc0de,#339bb9);background-image:-o-linear-gradient(top,#5bc0de,#339bb9);background-image:linear-gradient(to bottom,#5bc0de,#339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff339bb9',GradientType=0)}.progress-info.progress-striped .bar,.progress-striped .bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-warning .bar,.progress .bar-warning{background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0)}.progress-warning.progress-striped .bar,.progress-striped .bar-warning{background-color:#fbb450;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px}.accordion-toggle{cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative;margin-bottom:20px;line-height:1}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-moz-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#fff;text-align:center;background:#222;border:3px solid #fff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:.5;filter:alpha(opacity=50)}.carousel-control.right{right:15px;left:auto}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-indicators{position:absolute;top:15px;right:15px;z-index:5;margin:0;list-style:none}.carousel-indicators li{display:block;float:left;width:10px;height:10px;margin-left:5px;text-indent:-999px;background-color:#ccc;background-color:rgba(255,255,255,0.25);border-radius:5px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:0;bottom:0;left:0;padding:15px;background:#333;background:rgba(0,0,0,0.75)}.carousel-caption h4,.carousel-caption p{line-height:20px;color:#fff}.carousel-caption h4{margin:0 0 5px}.carousel-caption p{margin-bottom:0}.hero-unit{padding:60px;margin-bottom:30px;font-size:18px;font-weight:200;line-height:30px;color:inherit;background-color:#eee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;color:inherit}.hero-unit li{line-height:30px}.pull-right{float:right}.pull-left{float:left}.hide{display:none}.show{display:block}.invisible{visibility:hidden}.affix{position:fixed}/*! + * Bootstrap Responsive v2.3.2 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none !important}.visible-tablet{display:none !important}.hidden-desktop{display:none !important}.visible-desktop{display:inherit !important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit !important}.visible-desktop{display:none !important}.visible-tablet{display:inherit !important}.hidden-tablet{display:none !important}}@media(max-width:767px){.hidden-desktop{display:inherit !important}.visible-desktop{display:none !important}.visible-phone{display:inherit !important}.hidden-phone{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:inherit !important}.hidden-print{display:none !important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto !important;overflow:visible !important}}.clear{clear:both;visibility:hidden}.clear hr{display:none}section>p,section>dt,section>dl,section>table.table,section>pre{margin-right:7px;margin-left:7px}#poweredBy{text-align:center}a.externalLink{padding-right:18px}a.newWindow{background:url('../images/window-new.png') right center no-repeat;padding-right:18px}a.externalLink[href^=http]{background:url('../images/internet-web-browser.png') right center no-repeat;padding-right:18px}a.externalLink[href$=".asc"]{background:url('../images/accessories-text-editor.png') right center no-repeat;padding-right:18px}a.externalLink[href$=".jpg"],a.externalLink[href$=".jpeg"],a.externalLink[href$=".gif"],a.externalLink[href$=".png"]{background:url('../images/image-x-generic.png') right center no-repeat;padding-right:18px}a.externalLink[href$=".tar.gz"],a.externalLink[href$=".zip"]{background:url('../images/package-x-generic.png') right center no-repeat;padding-right:18px}a.externalLink[href$=".md5"],a.externalLink[href$=".sha1"]{background:url('../images/document-properties.png') right center no-repeat;padding-right:18px}a.externalLink[href^=https]{background:url('../images/application-certificate.png') right center no-repeat;padding-right:18px}a.externalLink[href^=file]{background:url('../images/drive-harddisk.png') right center no-repeat;padding-right:18px}a.externalLink[href^=ftp]{background:url('../images/network-server.png') right center no-repeat;padding-right:18px}a.externalLink[href^=mailto]{background:url('../images/contact-new.png') right center no-repeat;padding-right:18px}li.none{list-style:none}.search-query{width:95%}.sidebar-nav .search-query{width:calc(100% - 30px)}body.topBarEnabled{padding-top:43px}div.container-top,div.container-fluid-top{padding-top:10px}.builtBy{display:block}img.builtBy{margin:10px auto}#search-form{margin-left:9px;margin-right:9px}li{color:#404040}table.zebra-striped{background-color:#FFF}.footer{background-color:#EEE}.sidebar-nav{padding-left:0;padding-right:0}.sidebar-nav .icon-chevron-right,.sidebar-nav .icon-chevron-down{margin-top:2px;margin-right:-6px;float:right;opacity:.25}li.pull-right{margin-left:3px;margin-right:3px}.well{margin-bottom:10px}a.dropdown-toggle{cursor:pointer}h1>code,h2>code,h3>code,h4>code,h5>code{font-size:unset}.table th,.table td{text-align:revert}.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0;padding-left:15px}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}/*! + * "Fork me on GitHub" CSS ribbon v0.2.3 | MIT License + * https://github.com/simonwhitaker/github-fork-ribbon-css +*/.github-fork-ribbon{width:12.1em;height:12.1em;position:absolute;overflow:hidden;top:0;right:0;z-index:9999;pointer-events:none;font-size:13px;text-decoration:none;text-indent:-999999px}.github-fork-ribbon.fixed{position:fixed}.github-fork-ribbon:hover,.github-fork-ribbon:active{background-color:rgba(0,0,0,0.0)}.github-fork-ribbon:before,.github-fork-ribbon:after{position:absolute;display:block;width:15.38em;height:1.54em;top:3.23em;right:-3.23em;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.github-fork-ribbon:before{content:"";padding:.38em 0;background-color:#a00;background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,0)),to(rgba(0,0,0,0.15)));background-image:-webkit-linear-gradient(top,rgba(0,0,0,0),rgba(0,0,0,0.15));background-image:-moz-linear-gradient(top,rgba(0,0,0,0),rgba(0,0,0,0.15));background-image:-ms-linear-gradient(top,rgba(0,0,0,0),rgba(0,0,0,0.15));background-image:-o-linear-gradient(top,rgba(0,0,0,0),rgba(0,0,0,0.15));background-image:linear-gradient(to bottom,rgba(0,0,0,0),rgba(0,0,0,0.15));-webkit-box-shadow:0 .15em .23em 0 rgba(0,0,0,0.5);-moz-box-shadow:0 .15em .23em 0 rgba(0,0,0,0.5);box-shadow:0 .15em .23em 0 rgba(0,0,0,0.5);pointer-events:auto}.github-fork-ribbon:after{content:attr(data-ribbon);color:#fff;font:700 1em "Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.54em;text-decoration:none;text-shadow:0 -.08em rgba(0,0,0,0.5);text-align:center;text-indent:0;padding:.15em 0;margin:.15em 0;border-width:.08em 0;border-style:dotted;border-color:#fff;border-color:rgba(255,255,255,0.7)}.github-fork-ribbon.left-top,.github-fork-ribbon.left-bottom{right:auto;left:0}.github-fork-ribbon.left-bottom,.github-fork-ribbon.right-bottom{top:auto;bottom:0}.github-fork-ribbon.left-top:before,.github-fork-ribbon.left-top:after,.github-fork-ribbon.left-bottom:before,.github-fork-ribbon.left-bottom:after{right:auto;left:-3.23em}.github-fork-ribbon.left-bottom:before,.github-fork-ribbon.left-bottom:after,.github-fork-ribbon.right-bottom:before,.github-fork-ribbon.right-bottom:after{top:auto;bottom:3.23em}.github-fork-ribbon.left-top:before,.github-fork-ribbon.left-top:after,.github-fork-ribbon.right-bottom:before,.github-fork-ribbon.right-bottom:after{-webkit-transform:rotate(-45deg);-moz-transform:rotate(-45deg);-ms-transform:rotate(-45deg);-o-transform:rotate(-45deg);transform:rotate(-45deg)} \ No newline at end of file diff --git a/waffle-jna-jakarta/css/print.css b/waffle-jna-jakarta/css/print.css new file mode 100644 index 0000000000..d637584360 --- /dev/null +++ b/waffle-jna-jakarta/css/print.css @@ -0,0 +1,35 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#banner, +#footer, +#leftcol, +#breadcrumbs, +.docs #toc, +.docs .courtesylinks, +#leftColumn, +#navColumn { + display: none !important; +} + +#bodyColumn, +body.docs div.docs { + margin: 0 !important; + border: none !important; +} diff --git a/waffle-jna-jakarta/css/site.css b/waffle-jna-jakarta/css/site.css new file mode 100644 index 0000000000..055e7e286a --- /dev/null +++ b/waffle-jna-jakarta/css/site.css @@ -0,0 +1 @@ +/* You can override this file with your own styles */ \ No newline at end of file diff --git a/waffle-jna-jakarta/dependencies.html b/waffle-jna-jakarta/dependencies.html new file mode 100644 index 0000000000..251fd8b66c --- /dev/null +++ b/waffle-jna-jakarta/dependencies.html @@ -0,0 +1,1103 @@ + + + + + + + + + + Project Dependencies – waffle-jna-jakarta + + + + + + + +
    +
    + + + +
    +
    +
    + + +
    +
    +
    +

    Project Dependencies

    +

    compile

    +

    The following is a list of compile dependencies for this project. These dependencies are required to compile and run the application:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GroupIdArtifactIdVersionTypeLicensesOptional
    com.github.ben-manes.caffeinecaffeine3.1.8jarApache License, Version 2.0No
    net.java.dev.jnajna5.16.0jarLGPL-2.1-or-laterApache-2.0No
    net.java.dev.jnajna-platform5.16.0jarLGPL-2.1-or-laterApache-2.0No
    org.checkerframeworkchecker-qual3.48.3jarThe MIT LicenseNo
    org.slf4jjcl-over-slf4j2.0.16jarApache License, Version 2.0No
    org.slf4jslf4j-api2.0.16jarMIT LicenseNo
    org.slf4jslf4j-simple2.0.16jarMIT LicenseYes
    +

    test

    +

    The following is a list of test dependencies for this project. These dependencies are only required to compile and run unit tests for the application:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GroupIdArtifactIdVersionTypeLicenses
    com.github.hazendaz.jmockitjmockit1.55.0jarThe MIT License
    net.bytebuddybyte-buddy1.15.11jarApache License, Version 2.0
    net.bytebuddybyte-buddy-agent1.15.11jarApache License, Version 2.0
    net.sf.jopt-simplejopt-simple5.0.4jarThe MIT License
    org.apache.commonscommons-math33.6.1jarApache License, Version 2.0
    org.assertjassertj-core3.27.0jarApache License, Version 2.0
    org.junit.jupiterjunit-jupiter-engine5.11.4jarEclipse Public License v2.0
    org.openjdk.jmhjmh-core1.37jarGNU General Public License (GPL), version 2, with the Classpath exception
    org.openjdk.jmhjmh-generator-annprocess1.37jarGNU General Public License (GPL), version 2, with the Classpath exception
    org.powermockpowermock-reflect2.0.9jarThe Apache Software License, Version 2.0
    +

    provided

    +

    The following is a list of provided dependencies for this project. These dependencies are required to compile the application, but should be provided by default when using the library:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GroupIdArtifactIdVersionTypeLicenses
    com.github.spotbugsspotbugs-annotations4.8.6jarGNU LESSER GENERAL PUBLIC LICENSE, Version 2.1
    com.google.errorproneerror_prone_annotations2.36.0jarApache 2.0
    com.google.j2objcj2objc-annotations3.0.0jarApache License, Version 2.0
    jakarta.servletjakarta.servlet-api6.1.0jarEPL 2.0GPL2 w/ CPE
    +

    Project Transitive Dependencies

    +

    The following is a list of transitive dependencies for this project. Transitive dependencies are the dependencies of the project dependencies.

    +

    test

    +

    The following is a list of test dependencies for this project. These dependencies are only required to compile and run unit tests for the application:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    GroupIdArtifactIdVersionTypeLicenses
    org.apiguardianapiguardian-api1.1.2jarThe Apache License, Version 2.0
    org.junit.jupiterjunit-jupiter-api5.11.4jarEclipse Public License v2.0
    org.junit.platformjunit-platform-commons1.11.4jarEclipse Public License v2.0
    org.junit.platformjunit-platform-engine1.11.4jarEclipse Public License v2.0
    org.objenesisobjenesis3.0.1jarApache 2
    org.opentest4jopentest4j1.3.0jarThe Apache License, Version 2.0
    +

    provided

    +

    The following is a list of provided dependencies for this project. These dependencies are required to compile the application, but should be provided by default when using the library:

    + + + + + + + + + + + + +
    GroupIdArtifactIdVersionTypeLicenses
    com.google.code.findbugsjsr3053.0.2jarThe Apache Software License, Version 2.0
    +

    Project Dependency Graph

    + +
    +

    Dependency Tree

    +
    +

    Licenses

    +

    Apache 2.0: error-prone annotations

    +

    The Apache License, Version 2.0: org.apiguardian:apiguardian-api, org.opentest4j:opentest4j

    +

    MIT License: SLF4J API Module, SLF4J Simple Provider

    +

    Eclipse Public License v2.0: JUnit Jupiter API, JUnit Jupiter Engine, JUnit Platform Commons, JUnit Platform Engine API

    +

    GPL2 w/ CPE: Jakarta Servlet

    +

    GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1: SpotBugs Annotations

    +

    Apache 2: Objenesis

    +

    LGPL-2.1-or-later: Java Native Access, Java Native Access Platform

    +

    The MIT License: Checker Qual, JOpt Simple, jmockit

    +

    Apache-2.0: Java Native Access, Java Native Access Platform

    +

    Apache License, Version 2.0: Apache Commons Math, AssertJ Core, Byte Buddy (without dependencies), Byte Buddy agent, Caffeine cache, J2ObjC Annotations, JCL 1.2 implemented over SLF4J

    +

    MIT: waffle-jna-jakarta

    +

    EPL 2.0: Jakarta Servlet

    +

    GNU General Public License (GPL), version 2, with the Classpath exception: JMH Core, JMH Generators: Annotation Processors

    +

    The Apache Software License, Version 2.0: FindBugs-jsr305, PowerMock

    +

    Dependency File Details

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FilenameSizeEntriesClassesPackagesJava VersionDebug Information
    caffeine-3.1.8.jar889.2 kB713704311Yes
    jmockit-1.55.0.jar775.4 kB4804104811Yes
    spotbugs-annotations-4.8.6.jar15.3 kB312411.8Yes
    jsr305-3.0.2.jar19.9 kB463531.5Yes
    error_prone_annotations-2.36.0.jar19.4 kB47----
       • Root-402721.8Yes
       • Versioned-7119No
    j2objc-annotations-3.0.0.jar12.5 kB31----
       • Root-291711.8Yes
       • Versioned-2119No
    jakarta.servlet-api-6.1.0.jar398.4 kB16585511Yes
    byte-buddy-1.15.11.jar8.5 MB5890----
       • Root-29502897381.5Yes
       • Versioned-29402898391.8Yes
    byte-buddy-agent-1.15.11.jar365.4 kB170----
       • Root-917221.5Yes
       • Versioned-797331.8Yes
    jna-5.16.0.jar2 MB19212541.8Yes
    jna-platform-5.16.0.jar1.4 MB13321284151.8Yes
    jopt-simple-5.0.4.jar78.1 kB715931.7Yes
    commons-math3-3.6.1.jar2.2 MB14021301751.5Yes
    apiguardian-api-1.1.2.jar6.8 kB9321.6Yes
    assertj-core-3.27.0.jar1.4 MB883----
       • Root-879840271.8Yes
       • Versioned-4119No
    checker-qual-3.48.3.jar238.6 kB454381331.8Yes
    junit-jupiter-api-5.11.4.jar216.4 kB19718281.8Yes
    junit-jupiter-engine-5.11.4.jar260.1 kB15213591.8Yes
    junit-platform-commons-1.11.4.jar142 kB88----
       • Root-786481.8Yes
       • Versioned-10419Yes
    junit-platform-engine-1.11.4.jar246.8 kB177158101.8Yes
    objenesis-3.0.1.jar61 kB6448101.8Yes
    jmh-core-1.37.jar553 kB363332131.8Yes
    jmh-generator-annprocess-1.37.jar30.9 kB26821.8Yes
    opentest4j-1.3.0.jar14.3 kB15921.6Yes
    powermock-reflect-2.0.9.jar68.4 kB523981.6Yes
    jcl-over-slf4j-2.0.16.jar18.4 kB26----
       • Root-24821.8Yes
       • Versioned-2119No
    slf4j-api-2.0.16.jar69.4 kB71----
       • Root-695541.8Yes
       • Versioned-2119No
    slf4j-simple-2.0.16.jar15.7 kB22----
       • Root-20611.8Yes
       • Versioned-2119No
    TotalSizeEntriesClassesPackagesJava VersionDebug Information
    2820 MB1316993083391128
    compile: 7compile: 4.6 MBcompile: 2810compile: 2563compile: 6211compile: 7
    provided: 5provided: 465.5 kBprovided: 320provided: 188provided: 12provided: 5
    test: 16test: 14.9 MBtest: 10039test: 6557test: 26511test: 16
    +
    +
    +
    + + + diff --git a/waffle-jna-jakarta/dependency-check-report.html b/waffle-jna-jakarta/dependency-check-report.html new file mode 100644 index 0000000000..96b2eb147c --- /dev/null +++ b/waffle-jna-jakarta/dependency-check-report.html @@ -0,0 +1,671 @@ + + + + + Dependency-Check Report + + + + + + + + + + +
    + +

    Dependency-Check is an open source tool performing a best effort analysis of 3rd party dependencies; +false positives and false negatives may exist in the analysis performed by the tool. Use of the tool and +the reporting provided constitutes acceptance for use in an AS IS condition, and there are NO warranties, +implied or otherwise, with regard to the analysis or its use. Any use of the tool and the reporting provided +is at the user’s risk. In no event shall the copyright holder or OWASP be held liable for any damages whatsoever +arising out of or in connection with the use of this tool, the analysis performed, or the resulting report.

    +

    How to read the report | +Suppressing false positives | +Getting Help: github issues

    + Sponsor

    +

    Project: waffle-jna-jakarta

    com.github.waffle:waffle-jna-jakarta:3.5.1

    Scan Information (show all):
    • dependency-check version: 11.1.1
    • Report Generated On: Wed, 1 Jan 2025 01:01:06 -0500
    • Dependencies Scanned: 15 (15 unique)
    • Vulnerable Dependencies0
    • Vulnerabilities Found: 0
    • Vulnerabilities Suppressed: 0
    • ...

    Summary

    Display: Showing Vulnerable Dependencies (click to show all)

    DependencyVulnerability IDsPackageHighest SeverityCVE CountConfidenceEvidence Count
    caffeine-3.1.8.jarpkg:maven/com.github.ben-manes.caffeine/caffeine@3.1.8 037
    checker-qual-3.48.3.jarpkg:maven/org.checkerframework/checker-qual@3.48.3 044
    error_prone_annotations-2.36.0.jarpkg:maven/com.google.errorprone/error_prone_annotations@2.36.0 029
    j2objc-annotations-3.0.0.jarpkg:maven/com.google.j2objc/j2objc-annotations@3.0.0 033
    jakarta.servlet-api-6.1.0.jarcpe:2.3:a:oracle:projects:6.1.0:*:*:*:*:*:*:*pkg:maven/jakarta.servlet/jakarta.servlet-api@6.1.0 0Low44
    jcl-over-slf4j-2.0.16.jarpkg:maven/org.slf4j/jcl-over-slf4j@2.0.16 031
    jna-5.16.0.jar: jnidispatch.dll 02
    jna-5.16.0.jar: jnidispatch.dll 02
    jna-5.16.0.jar: jnidispatch.dll 02
    jna-5.16.0.jarcpe:2.3:a:oracle:java_se:5.16.0:*:*:*:*:*:*:*pkg:maven/net.java.dev.jna/jna@5.16.0 0Low48
    jna-platform-5.16.0.jarpkg:maven/net.java.dev.jna/jna-platform@5.16.0 044
    jsr305-3.0.2.jarpkg:maven/com.google.code.findbugs/jsr305@3.0.2 017
    slf4j-api-2.0.16.jarpkg:maven/org.slf4j/slf4j-api@2.0.16 029
    slf4j-simple-2.0.16.jarpkg:maven/org.slf4j/slf4j-simple@2.0.16 037
    spotbugs-annotations-4.8.6.jarpkg:maven/com.github.spotbugs/spotbugs-annotations@4.8.6 053

    Dependencies (vulnerable)

    caffeine-3.1.8.jar

    Description:

    A high performance caching library

    License:

    Apache License, Version 2.0: https://www.apache.org/licenses/LICENSE-2.0.txt
    File Path: C:\Users\Jeremy\.m2\repository\com\github\ben-manes\caffeine\caffeine\3.1.8\caffeine-3.1.8.jar
    MD5: b19301179903e8781776397d9923f7c8
    SHA1: 24795585df8afaf70a2cd534786904ea5889c047
    SHA256:7dd15f9df1be238ffaa367ce6f556737a88031de4294dad18eef57c474ddf1d3
    Referenced In Project/Scope: waffle-jna-jakarta:compile
    caffeine-3.1.8.jar is in the transitive dependency tree of the listed items.Included by: pkg:maven/com.github.waffle/waffle-jna-jakarta@3.5.1

    Identifiers

    checker-qual-3.48.3.jar

    Description:

    checker-qual contains annotations (type qualifiers) that a programmerwrites to specify Java code for type-checking by the Checker Framework.

    License:

    The MIT License: http://opensource.org/licenses/MIT
    File Path: C:\Users\Jeremy\.m2\repository\org\checkerframework\checker-qual\3.48.3\checker-qual-3.48.3.jar
    MD5: 9fe3deae54d20bd78960459c952ac7d4
    SHA1: c48effe7d78de3cf5e8a98c614281ec6a2466a77
    SHA256:443685b1b232803baaf803c15d6f5a425473c6f7b81c5f276dfcf93288e389a5
    Referenced In Project/Scope: waffle-jna-jakarta:compile
    checker-qual-3.48.3.jar is in the transitive dependency tree of the listed items.Included by: pkg:maven/com.github.waffle/waffle-jna-jakarta@3.5.1

    Identifiers

    error_prone_annotations-2.36.0.jar

    Description:

    Error Prone is a static analysis tool for Java that catches common programming mistakes at compile-time.

    License:

    Apache 2.0: http://www.apache.org/licenses/LICENSE-2.0.txt
    File Path: C:\Users\Jeremy\.m2\repository\com\google\errorprone\error_prone_annotations\2.36.0\error_prone_annotations-2.36.0.jar
    MD5: 0e48e5ba2cd0a8d8d09bad849b99f6a6
    SHA1: 227d4d4957ccc3dc5761bd897e3a0ee587e750a7
    SHA256:77440e270b0bc9a249903c5a076c36a722c4886ca4f42675f2903a1c53ed61a5
    Referenced In Project/Scope: waffle-jna-jakarta:provided
    error_prone_annotations-2.36.0.jar is in the transitive dependency tree of the listed items.Included by: pkg:maven/com.github.waffle/waffle-jna-jakarta@3.5.1

    Identifiers

    j2objc-annotations-3.0.0.jar

    Description:

    +    A set of annotations that provide additional information to the J2ObjC
    +    translator to modify the result of translation.
    +  

    License:

    Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0.txt
    File Path: C:\Users\Jeremy\.m2\repository\com\google\j2objc\j2objc-annotations\3.0.0\j2objc-annotations-3.0.0.jar
    MD5: f59529b29202a5baf37f491ea5ec8627
    SHA1: 7399e65dd7e9ff3404f4535b2f017093bdb134c7
    SHA256:88241573467ddca44ffd4d74aa04c2bbfd11bf7c17e0c342c94c9de7a70a7c64
    Referenced In Project/Scope: waffle-jna-jakarta:provided
    j2objc-annotations-3.0.0.jar is in the transitive dependency tree of the listed items.Included by: pkg:maven/com.github.waffle/waffle-jna-jakarta@3.5.1

    Identifiers

    jakarta.servlet-api-6.1.0.jar

    Description:

    Jakarta Servlet 6.1

    License:

    EPL 2.0: http://www.eclipse.org/legal/epl-2.0
    +GPL2 w/ CPE: https://www.gnu.org/software/classpath/license.html
    File Path: C:\Users\Jeremy\.m2\repository\jakarta\servlet\jakarta.servlet-api\6.1.0\jakarta.servlet-api-6.1.0.jar
    MD5: 314c930b3e40ac1abc3529c7c9942f09
    SHA1: 1169a246913fe3823782af7943e7a103634867c5
    SHA256:8a31f465f3593bf2351531a5c952014eb839da96a605b5825b93dd54714c48c4
    Referenced In Project/Scope: waffle-jna-jakarta:provided
    jakarta.servlet-api-6.1.0.jar is in the transitive dependency tree of the listed items.Included by: pkg:maven/com.github.waffle/waffle-jna-jakarta@3.5.1

    Identifiers

    jcl-over-slf4j-2.0.16.jar

    Description:

    JCL 1.2 implemented over SLF4J

    License:

    Apache License, Version 2.0: https://www.apache.org/licenses/LICENSE-2.0.txt
    File Path: C:\Users\Jeremy\.m2\repository\org\slf4j\jcl-over-slf4j\2.0.16\jcl-over-slf4j-2.0.16.jar
    MD5: c077b88c43f9d63f64f9880fdb457efb
    SHA1: 9d08badad22f1ac07deac9188ade596472a2bfd9
    SHA256:5744d62c5af556e839ab922c9fa3f737f0a5971e478ba68b2eb5256b2842ec78
    Referenced In Project/Scope: waffle-jna-jakarta:compile
    jcl-over-slf4j-2.0.16.jar is in the transitive dependency tree of the listed items.Included by: pkg:maven/com.github.waffle/waffle-jna-jakarta@3.5.1

    Identifiers

    jna-5.16.0.jar: jnidispatch.dll

    File Path: C:\Users\Jeremy\.m2\repository\net\java\dev\jna\jna\5.16.0\jna-5.16.0.jar\com\sun\jna\win32-aarch64\jnidispatch.dll
    MD5: 302945a811fd8e21bcdd5226c73b6f74
    SHA1: 6b05e299ff2b3eb3b7b7aeac44263f715693607c
    SHA256:b8f98be314234cf12b5b46c29652f70c0f6abb93ae19b63d3fe2692062aa699d
    Referenced In Project/Scope: waffle-jna-jakarta:compile

    Identifiers

    • None

    jna-5.16.0.jar: jnidispatch.dll

    File Path: C:\Users\Jeremy\.m2\repository\net\java\dev\jna\jna\5.16.0\jna-5.16.0.jar\com\sun\jna\win32-x86-64\jnidispatch.dll
    MD5: 2d2475f1f026dd54e9f3e787ae4f81da
    SHA1: 27ff882ac271db547aee520b38e3ba9aa91e136c
    SHA256:5a7ff949f6d93d86491eb5b26b1cfc60051168a60622650224b89995ac420023
    Referenced In Project/Scope: waffle-jna-jakarta:compile

    Identifiers

    • None

    jna-5.16.0.jar: jnidispatch.dll

    File Path: C:\Users\Jeremy\.m2\repository\net\java\dev\jna\jna\5.16.0\jna-5.16.0.jar\com\sun\jna\win32-x86\jnidispatch.dll
    MD5: 0caa1ef75a807f9dde05084fa2219a5c
    SHA1: 2f5e1cd82cde192905c7510ce99037b67d980640
    SHA256:752d597cee7e95cb517327146bf42f124c0d6c0bc48b3ecc3b1b3b0531a52f44
    Referenced In Project/Scope: waffle-jna-jakarta:compile

    Identifiers

    • None

    jna-5.16.0.jar

    Description:

    Java Native Access

    License:

    LGPL-2.1-or-later: https://www.gnu.org/licenses/old-licenses/lgpl-2.1
    +Apache-2.0: https://www.apache.org/licenses/LICENSE-2.0.txt
    File Path: C:\Users\Jeremy\.m2\repository\net\java\dev\jna\jna\5.16.0\jna-5.16.0.jar
    MD5: accc2e2b8676434a87f4f73fb4d90b44
    SHA1: ebea09f91dc9f7048099f963fb8d6f919f0a4d9c
    SHA256:3f5233589a799eb66dc2969afa3433fb56859d3d787c58b9bc7dd9e86f0a250c
    Referenced In Project/Scope: waffle-jna-jakarta:compile
    jna-5.16.0.jar is in the transitive dependency tree of the listed items.Included by: pkg:maven/com.github.waffle/waffle-jna-jakarta@3.5.1

    Identifiers

    jna-platform-5.16.0.jar

    Description:

    Java Native Access Platform

    License:

    LGPL-2.1-or-later: https://www.gnu.org/licenses/old-licenses/lgpl-2.1
    +Apache-2.0: https://www.apache.org/licenses/LICENSE-2.0.txt
    File Path: C:\Users\Jeremy\.m2\repository\net\java\dev\jna\jna-platform\5.16.0\jna-platform-5.16.0.jar
    MD5: 12ba6b7a7752ecf0a5baed725f3192c2
    SHA1: b2a9065f97c166893d504b164706512338e3bbc2
    SHA256:e5a79523964509757555782bb60283e4902611013f107e4600dc93298f73f382
    Referenced In Project/Scope: waffle-jna-jakarta:compile
    jna-platform-5.16.0.jar is in the transitive dependency tree of the listed items.Included by: pkg:maven/com.github.waffle/waffle-jna-jakarta@3.5.1

    Identifiers

    jsr305-3.0.2.jar

    Description:

    JSR305 Annotations for Findbugs

    License:

    The Apache Software License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0.txt
    File Path: C:\Users\Jeremy\.m2\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar
    MD5: dd83accb899363c32b07d7a1b2e4ce40
    SHA1: 25ea2e8b0c338a877313bd4672d3fe056ea78f0d
    SHA256:766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7
    Referenced In Project/Scope: waffle-jna-jakarta:provided
    jsr305-3.0.2.jar is in the transitive dependency tree of the listed items.Included by: pkg:maven/com.github.spotbugs/spotbugs-annotations@4.8.6

    Identifiers

    slf4j-api-2.0.16.jar

    Description:

    The slf4j API

    License:

    http://www.opensource.org/licenses/mit-license.php
    File Path: C:\Users\Jeremy\.m2\repository\org\slf4j\slf4j-api\2.0.16\slf4j-api-2.0.16.jar
    MD5: c8de8f5d740584cb24b5652cfba8b3c4
    SHA1: 0172931663a09a1fa515567af5fbef00897d3c04
    SHA256:a12578dde1ba00bd9b816d388a0b879928d00bab3c83c240f7013bf4196c579a
    Referenced In Project/Scope: waffle-jna-jakarta:compile
    slf4j-api-2.0.16.jar is in the transitive dependency tree of the listed items.Included by: pkg:maven/com.github.waffle/waffle-jna-jakarta@3.5.1

    Identifiers

    slf4j-simple-2.0.16.jar

    Description:

    SLF4J Simple Provider

    License:

    http://www.opensource.org/licenses/mit-license.php
    File Path: C:\Users\Jeremy\.m2\repository\org\slf4j\slf4j-simple\2.0.16\slf4j-simple-2.0.16.jar
    MD5: 58c531dfe60020700c53c45fdf6234bf
    SHA1: 56d3d8e59293543780ad35af4ee4a5d9c111a588
    SHA256:effc32018658bea09d1e08c7d1060ccad46c086960f583d07dd7ffe9c1172a47
    Referenced In Project/Scope: waffle-jna-jakarta:compile
    slf4j-simple-2.0.16.jar is in the transitive dependency tree of the listed items.Included by: pkg:maven/com.github.waffle/waffle-jna-jakarta@3.5.1

    Identifiers

    spotbugs-annotations-4.8.6.jar

    Description:

    Annotations the SpotBugs tool supports

    License:

    GNU LESSER GENERAL PUBLIC LICENSE, Version 2.1: https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html
    File Path: C:\Users\Jeremy\.m2\repository\com\github\spotbugs\spotbugs-annotations\4.8.6\spotbugs-annotations-4.8.6.jar
    MD5: 0806b237c67c69869506ce3ced9a722f
    SHA1: 1dcffed3e561ed32134a0dff4717f19bc2fdf4d8
    SHA256:4548b74a815ed44f5480ca4f06204a8b00809dc7e5f6a825a9edf18f40377b65
    Referenced In Project/Scope: waffle-jna-jakarta:provided
    spotbugs-annotations-4.8.6.jar is in the transitive dependency tree of the listed items.Included by: pkg:maven/com.github.waffle/waffle-jna-jakarta@3.5.1

    Identifiers



    This report contains data retrieved from the National Vulnerability Database.
    This report may contain data retrieved from the CISA Known Exploited Vulnerability Catalog.
    This report may contain data retrieved from the Github Advisory Database (via NPM Audit API).
    This report may contain data retrieved from RetireJS.
    This report may contain data retrieved from the Sonatype OSS Index.
    \ No newline at end of file diff --git a/waffle-jna-jakarta/dependency-info.html b/waffle-jna-jakarta/dependency-info.html new file mode 100644 index 0000000000..d1d018762b --- /dev/null +++ b/waffle-jna-jakarta/dependency-info.html @@ -0,0 +1,168 @@ + + + + + + + + + + Maven Coordinates – waffle-jna-jakarta + + + + + + + +
    +
    + + + +
    +
    +
    + + +
    +
    +
    +

    Maven Coordinates

    +

    Apache Maven

    +
    <dependency>
    +  <groupId>com.github.waffle</groupId>
    +  <artifactId>waffle-jna-jakarta</artifactId>
    +  <version>3.5.1</version>
    +</dependency>
    +

    Apache Ivy

    +
    <dependency org="com.github.waffle" name="waffle-jna-jakarta" rev="3.5.1">
    +  <artifact name="waffle-jna-jakarta" type="jar" />
    +</dependency>
    +

    Groovy Grape

    +
    @Grapes(
    +@Grab(group='com.github.waffle', module='waffle-jna-jakarta', version='3.5.1')
    +)
    +

    Gradle/Grails

    +
    implementation 'com.github.waffle:waffle-jna-jakarta:3.5.1'
    +

    Scala SBT

    +
    libraryDependencies += "com.github.waffle" % "waffle-jna-jakarta" % "3.5.1"
    +

    Leiningen

    +
    [com.github.waffle/waffle-jna-jakarta "3.5.1"]
    +
    +
    +
    + + + diff --git a/waffle-jna-jakarta/dependency-management.html b/waffle-jna-jakarta/dependency-management.html new file mode 100644 index 0000000000..ed977973af --- /dev/null +++ b/waffle-jna-jakarta/dependency-management.html @@ -0,0 +1,169 @@ + + + + + + + + + + Project Dependency Management – waffle-jna-jakarta + + + + + + + +
    +
    + + + +
    +
    +
    + + +
    +
    +
    +

    Project Dependency Management

    +

    compile

    +

    The following is a list of compile dependencies in the DependencyManagement of this project. These dependencies can be included in the submodules to compile and run the submodule:

    + + + + + + + + + + + + + + + + + + +
    GroupIdArtifactIdVersionTypeLicense
    net.java.dev.jnajna5.16.0jarLGPL-2.1-or-later, Apache-2.0
    net.java.dev.jnajna-platform5.16.0jarLGPL-2.1-or-later, Apache-2.0
    +
    +
    +
    + + + diff --git a/waffle-jna-jakarta/dependency-updates-report.html b/waffle-jna-jakarta/dependency-updates-report.html new file mode 100644 index 0000000000..a4bd7de98a --- /dev/null +++ b/waffle-jna-jakarta/dependency-updates-report.html @@ -0,0 +1,974 @@ + + + + + + + + + + Dependency Updates Report – waffle-jna-jakarta + + + + + + + +
    +
    + + + +
    +
    +
    + + +
    +
    +
    +

    Overview

    +

    This report summarizes newer versions that may be available for your project's various dependencies.

    + + + + + + + + + + + + + + + + + + + + + +
    # of dependencies using the latest version available17
    # of dependencies where the next version available is smaller than an incremental version update0
    # of dependencies where the next version available is an incremental version update0
    # of dependencies where the next version available is a minor version update3
    # of dependencies where the next version available is a major version update1
    +

    Dependency Management

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    StatusGroup IdArtifact IdCurrent VersionScopeClassifierTypeLatest SubincrementalLatest IncrementalLatest MinorLatest Major
    net.java.dev.jnajna5.16.0jar
    net.java.dev.jnajna-platform5.16.0jar
    StatusGroup IdArtifact IdCurrent VersionScopeClassifierTypeLatest SubincrementalLatest IncrementalLatest MinorLatest Major
    +

    Dependencies

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    StatusGroup IdArtifact IdCurrent VersionScopeClassifierTypeLatest SubincrementalLatest IncrementalLatest MinorLatest Major
    com.github.ben-manes.caffeinecaffeine3.1.8compilejar
    com.github.hazendaz.jmockitjmockit1.55.0testjar
    com.github.spotbugsspotbugs-annotations4.8.6providedjar
    com.google.errorproneerror_prone_annotations2.36.0providedjar
    com.google.j2objcj2objc-annotations3.0.0providedjar
    jakarta.servletjakarta.servlet-api6.1.0providedjar
    net.bytebuddybyte-buddy1.15.11testjar
    net.bytebuddybyte-buddy-agent1.15.11testjar
    net.sf.jopt-simplejopt-simple5.0.4testjar6.0-alpha-3
    org.apache.commonscommons-math33.6.1testjar
    org.assertjassertj-core3.27.0testjar
    org.checkerframeworkchecker-qual3.48.3compilejar
    org.junit.jupiterjunit-jupiter-engine5.11.4testjar
    org.openjdk.jmhjmh-core1.37testjar
    org.openjdk.jmhjmh-generator-annprocess1.37testjar
    org.powermockpowermock-reflect2.0.9testjar
    org.slf4jjcl-over-slf4j2.0.16compilejar2.1.0-alpha1
    org.slf4jslf4j-api2.0.16compilejar2.1.0-alpha1
    org.slf4jslf4j-simple2.0.16compilejar2.1.0-alpha1
    StatusGroup IdArtifact IdCurrent VersionScopeClassifierTypeLatest SubincrementalLatest IncrementalLatest MinorLatest Major
    +

    Dependency Updates

    +

    -

    +

    com.github.ben-manes.caffeine:caffeine

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idcom.github.ben-manes.caffeine
    Artifact Idcaffeine
    Current Version3.1.8
    Scopecompile
    Classifier
    Typejar
    +

    com.github.hazendaz.jmockit:jmockit

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idcom.github.hazendaz.jmockit
    Artifact Idjmockit
    Current Version1.55.0
    Scopetest
    Classifier
    Typejar
    +

    com.github.spotbugs:spotbugs-annotations

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idcom.github.spotbugs
    Artifact Idspotbugs-annotations
    Current Version4.8.6
    Scopeprovided
    Classifier
    Typejar
    +

    com.google.errorprone:error_prone_annotations

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idcom.google.errorprone
    Artifact Iderror_prone_annotations
    Current Version2.36.0
    Scopeprovided
    Classifier
    Typejar
    +

    com.google.j2objc:j2objc-annotations

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idcom.google.j2objc
    Artifact Idj2objc-annotations
    Current Version3.0.0
    Scopeprovided
    Classifier
    Typejar
    +

    jakarta.servlet:jakarta.servlet-api

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idjakarta.servlet
    Artifact Idjakarta.servlet-api
    Current Version6.1.0
    Scopeprovided
    Classifier
    Typejar
    +

    net.bytebuddy:byte-buddy

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idnet.bytebuddy
    Artifact Idbyte-buddy
    Current Version1.15.11
    Scopetest
    Classifier
    Typejar
    +

    net.bytebuddy:byte-buddy-agent

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idnet.bytebuddy
    Artifact Idbyte-buddy-agent
    Current Version1.15.11
    Scopetest
    Classifier
    Typejar
    +

    net.java.dev.jna:jna

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idnet.java.dev.jna
    Artifact Idjna
    Current Version5.16.0
    Scope
    Classifier
    Typejar
    +

    net.java.dev.jna:jna-platform

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idnet.java.dev.jna
    Artifact Idjna-platform
    Current Version5.16.0
    Scope
    Classifier
    Typejar
    +

    net.sf.jopt-simple:jopt-simple

    + + + + + + + + + + + + + + + + + + + + + + + + +
    Status There is at least one newer major version available. Major updates are rarely passive.
    Group Idnet.sf.jopt-simple
    Artifact Idjopt-simple
    Current Version5.0.4
    Scopetest
    Classifier
    Typejar
    Newer versions6.0-alpha-1
    6.0-alpha-2
    6.0-alpha-3 Latest Major
    +

    org.apache.commons:commons-math3

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idorg.apache.commons
    Artifact Idcommons-math3
    Current Version3.6.1
    Scopetest
    Classifier
    Typejar
    +

    org.assertj:assertj-core

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idorg.assertj
    Artifact Idassertj-core
    Current Version3.27.0
    Scopetest
    Classifier
    Typejar
    +

    org.checkerframework:checker-qual

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idorg.checkerframework
    Artifact Idchecker-qual
    Current Version3.48.3
    Scopecompile
    Classifier
    Typejar
    +

    org.junit.jupiter:junit-jupiter-engine

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idorg.junit.jupiter
    Artifact Idjunit-jupiter-engine
    Current Version5.11.4
    Scopetest
    Classifier
    Typejar
    +

    org.openjdk.jmh:jmh-core

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idorg.openjdk.jmh
    Artifact Idjmh-core
    Current Version1.37
    Scopetest
    Classifier
    Typejar
    +

    org.openjdk.jmh:jmh-generator-annprocess

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idorg.openjdk.jmh
    Artifact Idjmh-generator-annprocess
    Current Version1.37
    Scopetest
    Classifier
    Typejar
    +

    org.powermock:powermock-reflect

    + + + + + + + + + + + + + + + + + + + + + +
    Status No newer versions available.
    Group Idorg.powermock
    Artifact Idpowermock-reflect
    Current Version2.0.9
    Scopetest
    Classifier
    Typejar
    +

    org.slf4j:jcl-over-slf4j

    + + + + + + + + + + + + + + + + + + + + + + + + +
    Status There is at least one newer minor version available. Minor updates are sometimes passive.
    Group Idorg.slf4j
    Artifact Idjcl-over-slf4j
    Current Version2.0.16
    Scopecompile
    Classifier
    Typejar
    Newer versions2.1.0-alpha0
    2.1.0-alpha1 Latest Minor
    +

    org.slf4j:slf4j-api

    + + + + + + + + + + + + + + + + + + + + + + + + +
    Status There is at least one newer minor version available. Minor updates are sometimes passive.
    Group Idorg.slf4j
    Artifact Idslf4j-api
    Current Version2.0.16
    Scopecompile
    Classifier
    Typejar
    Newer versions2.1.0-alpha0
    2.1.0-alpha1 Latest Minor
    +

    org.slf4j:slf4j-simple

    + + + + + + + + + + + + + + + + + + + + + + + + +
    Status There is at least one newer minor version available. Minor updates are sometimes passive.
    Group Idorg.slf4j
    Artifact Idslf4j-simple
    Current Version2.0.16
    Scopecompile
    Classifier
    Typejar
    Newer versions2.1.0-alpha0
    2.1.0-alpha1 Latest Minor
    +
    +
    +
    + + + diff --git a/waffle-jna-jakarta/distribution-management.html b/waffle-jna-jakarta/distribution-management.html new file mode 100644 index 0000000000..2410d829d9 --- /dev/null +++ b/waffle-jna-jakarta/distribution-management.html @@ -0,0 +1,153 @@ + + + + + + + + + + Project Distribution Management – waffle-jna-jakarta + + + + + + + +
    +
    + + + +
    +
    +
    + + +
    +
    +
    +

    Overview

    +

    The following is the distribution management information used by this project.

    +

    Repository - ossrh

    https://oss.sonatype.org/service/local/staging/deploy/maven2/
    +

    Snapshot Repository - ossrh

    https://oss.sonatype.org/content/repositories/snapshots
    +

    Site - gh-pages-scm

    +

    scm:git:ssh://git@github.com/Waffle/waffle.git/waffle-jna-jakarta

    +
    +
    +
    + + + diff --git a/waffle-jna-jakarta/fonts/glyphicons-halflings-regular.eot b/waffle-jna-jakarta/fonts/glyphicons-halflings-regular.eot new file mode 100644 index 0000000000..423bd5d3a2 Binary files /dev/null and b/waffle-jna-jakarta/fonts/glyphicons-halflings-regular.eot differ diff --git a/waffle-jna-jakarta/fonts/glyphicons-halflings-regular.svg b/waffle-jna-jakarta/fonts/glyphicons-halflings-regular.svg new file mode 100644 index 0000000000..4469488747 --- /dev/null +++ b/waffle-jna-jakarta/fonts/glyphicons-halflings-regular.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/waffle-jna-jakarta/fonts/glyphicons-halflings-regular.ttf b/waffle-jna-jakarta/fonts/glyphicons-halflings-regular.ttf new file mode 100644 index 0000000000..a498ef4e7c Binary files /dev/null and b/waffle-jna-jakarta/fonts/glyphicons-halflings-regular.ttf differ diff --git a/waffle-jna-jakarta/fonts/glyphicons-halflings-regular.woff b/waffle-jna-jakarta/fonts/glyphicons-halflings-regular.woff new file mode 100644 index 0000000000..d83c539b82 Binary files /dev/null and b/waffle-jna-jakarta/fonts/glyphicons-halflings-regular.woff differ diff --git a/waffle-jna-jakarta/images/accessories-text-editor.png b/waffle-jna-jakarta/images/accessories-text-editor.png new file mode 100644 index 0000000000..abc3366eda Binary files /dev/null and b/waffle-jna-jakarta/images/accessories-text-editor.png differ diff --git a/waffle-jna-jakarta/images/add.gif b/waffle-jna-jakarta/images/add.gif new file mode 100644 index 0000000000..1cb3dbf936 Binary files /dev/null and b/waffle-jna-jakarta/images/add.gif differ diff --git a/waffle-jna-jakarta/images/apache-maven-project-2.png b/waffle-jna-jakarta/images/apache-maven-project-2.png new file mode 100644 index 0000000000..a44db6ed08 Binary files /dev/null and b/waffle-jna-jakarta/images/apache-maven-project-2.png differ diff --git a/waffle-jna-jakarta/images/application-certificate.png b/waffle-jna-jakarta/images/application-certificate.png new file mode 100644 index 0000000000..cc6aff616f Binary files /dev/null and b/waffle-jna-jakarta/images/application-certificate.png differ diff --git a/waffle-jna-jakarta/images/close.gif b/waffle-jna-jakarta/images/close.gif new file mode 100644 index 0000000000..1c26bbc526 Binary files /dev/null and b/waffle-jna-jakarta/images/close.gif differ diff --git a/waffle-jna-jakarta/images/contact-new.png b/waffle-jna-jakarta/images/contact-new.png new file mode 100644 index 0000000000..ebc4316d84 Binary files /dev/null and b/waffle-jna-jakarta/images/contact-new.png differ diff --git a/waffle-jna-jakarta/images/document-properties.png b/waffle-jna-jakarta/images/document-properties.png new file mode 100644 index 0000000000..34c2409a7c Binary files /dev/null and b/waffle-jna-jakarta/images/document-properties.png differ diff --git a/waffle-jna-jakarta/images/drive-harddisk.png b/waffle-jna-jakarta/images/drive-harddisk.png new file mode 100644 index 0000000000..d7ce475f83 Binary files /dev/null and b/waffle-jna-jakarta/images/drive-harddisk.png differ diff --git a/waffle-jna-jakarta/images/fix.gif b/waffle-jna-jakarta/images/fix.gif new file mode 100644 index 0000000000..b7eb3dc442 Binary files /dev/null and b/waffle-jna-jakarta/images/fix.gif differ diff --git a/waffle-jna-jakarta/images/icon_error_sml.gif b/waffle-jna-jakarta/images/icon_error_sml.gif new file mode 100644 index 0000000000..12e9a01a93 Binary files /dev/null and b/waffle-jna-jakarta/images/icon_error_sml.gif differ diff --git a/waffle-jna-jakarta/images/icon_help_sml.gif b/waffle-jna-jakarta/images/icon_help_sml.gif new file mode 100644 index 0000000000..aaf20e6eea Binary files /dev/null and b/waffle-jna-jakarta/images/icon_help_sml.gif differ diff --git a/waffle-jna-jakarta/images/icon_info_sml.gif b/waffle-jna-jakarta/images/icon_info_sml.gif new file mode 100644 index 0000000000..b776326703 Binary files /dev/null and b/waffle-jna-jakarta/images/icon_info_sml.gif differ diff --git a/waffle-jna-jakarta/images/icon_success_sml.gif b/waffle-jna-jakarta/images/icon_success_sml.gif new file mode 100644 index 0000000000..0a195279b3 Binary files /dev/null and b/waffle-jna-jakarta/images/icon_success_sml.gif differ diff --git a/waffle-jna-jakarta/images/icon_warning_sml.gif b/waffle-jna-jakarta/images/icon_warning_sml.gif new file mode 100644 index 0000000000..ac6ad6ada3 Binary files /dev/null and b/waffle-jna-jakarta/images/icon_warning_sml.gif differ diff --git a/waffle-jna-jakarta/images/image-x-generic.png b/waffle-jna-jakarta/images/image-x-generic.png new file mode 100644 index 0000000000..ab49efb345 Binary files /dev/null and b/waffle-jna-jakarta/images/image-x-generic.png differ diff --git a/waffle-jna-jakarta/images/internet-web-browser.png b/waffle-jna-jakarta/images/internet-web-browser.png new file mode 100644 index 0000000000..307d6aca61 Binary files /dev/null and b/waffle-jna-jakarta/images/internet-web-browser.png differ diff --git a/waffle-jna-jakarta/images/logos/build-by-maven-black.png b/waffle-jna-jakarta/images/logos/build-by-maven-black.png new file mode 100644 index 0000000000..919fd0f66a Binary files /dev/null and b/waffle-jna-jakarta/images/logos/build-by-maven-black.png differ diff --git a/waffle-jna-jakarta/images/logos/build-by-maven-white.png b/waffle-jna-jakarta/images/logos/build-by-maven-white.png new file mode 100644 index 0000000000..7d44c9c2e5 Binary files /dev/null and b/waffle-jna-jakarta/images/logos/build-by-maven-white.png differ diff --git a/waffle-jna-jakarta/images/logos/maven-feather.png b/waffle-jna-jakarta/images/logos/maven-feather.png new file mode 100644 index 0000000000..b5ada836e9 Binary files /dev/null and b/waffle-jna-jakarta/images/logos/maven-feather.png differ diff --git a/waffle-jna-jakarta/images/network-server.png b/waffle-jna-jakarta/images/network-server.png new file mode 100644 index 0000000000..1d12e1938a Binary files /dev/null and b/waffle-jna-jakarta/images/network-server.png differ diff --git a/waffle-jna-jakarta/images/package-x-generic.png b/waffle-jna-jakarta/images/package-x-generic.png new file mode 100644 index 0000000000..8b7e9e67b5 Binary files /dev/null and b/waffle-jna-jakarta/images/package-x-generic.png differ diff --git a/waffle-jna-jakarta/images/profiles/pre-release.png b/waffle-jna-jakarta/images/profiles/pre-release.png new file mode 100644 index 0000000000..d448e850cd Binary files /dev/null and b/waffle-jna-jakarta/images/profiles/pre-release.png differ diff --git a/waffle-jna-jakarta/images/profiles/retired.png b/waffle-jna-jakarta/images/profiles/retired.png new file mode 100644 index 0000000000..f89f6a29c6 Binary files /dev/null and b/waffle-jna-jakarta/images/profiles/retired.png differ diff --git a/waffle-jna-jakarta/images/profiles/sandbox.png b/waffle-jna-jakarta/images/profiles/sandbox.png new file mode 100644 index 0000000000..f88b362676 Binary files /dev/null and b/waffle-jna-jakarta/images/profiles/sandbox.png differ diff --git a/waffle-jna-jakarta/images/remove.gif b/waffle-jna-jakarta/images/remove.gif new file mode 100644 index 0000000000..fc65631cad Binary files /dev/null and b/waffle-jna-jakarta/images/remove.gif differ diff --git a/waffle-jna-jakarta/images/rss.png b/waffle-jna-jakarta/images/rss.png new file mode 100644 index 0000000000..a9850ee2cd Binary files /dev/null and b/waffle-jna-jakarta/images/rss.png differ diff --git a/waffle-jna-jakarta/images/update.gif b/waffle-jna-jakarta/images/update.gif new file mode 100644 index 0000000000..b2a6d0bf63 Binary files /dev/null and b/waffle-jna-jakarta/images/update.gif differ diff --git a/waffle-jna-jakarta/images/waffle.jpg b/waffle-jna-jakarta/images/waffle.jpg new file mode 100644 index 0000000000..00455a8db4 Binary files /dev/null and b/waffle-jna-jakarta/images/waffle.jpg differ diff --git a/waffle-jna-jakarta/images/window-new.png b/waffle-jna-jakarta/images/window-new.png new file mode 100644 index 0000000000..0e12ef954c Binary files /dev/null and b/waffle-jna-jakarta/images/window-new.png differ diff --git a/waffle-jna-jakarta/img/glyphicons-halflings-white.png b/waffle-jna-jakarta/img/glyphicons-halflings-white.png new file mode 100644 index 0000000000..3bf6484a29 Binary files /dev/null and b/waffle-jna-jakarta/img/glyphicons-halflings-white.png differ diff --git a/waffle-jna-jakarta/img/glyphicons-halflings.png b/waffle-jna-jakarta/img/glyphicons-halflings.png new file mode 100644 index 0000000000..a996999320 Binary files /dev/null and b/waffle-jna-jakarta/img/glyphicons-halflings.png differ diff --git a/waffle-jna-jakarta/index.html b/waffle-jna-jakarta/index.html new file mode 100644 index 0000000000..9f4a62abd4 --- /dev/null +++ b/waffle-jna-jakarta/index.html @@ -0,0 +1,149 @@ + + + + + + + + + + About – waffle-jna-jakarta + + + + + + + +
    +
    + + + +
    +
    +
    + + +
    +
    +
    +

    About waffle-jna-jakarta

    +

    WAFFLE JNA Jakarta Pakage implementation

    +
    +
    +
    + + + diff --git a/waffle-jna-jakarta/issue-management.html b/waffle-jna-jakarta/issue-management.html new file mode 100644 index 0000000000..ddb616b71c --- /dev/null +++ b/waffle-jna-jakarta/issue-management.html @@ -0,0 +1,152 @@ + + + + + + + + + + Issue Management – waffle-jna-jakarta + + + + + + + +
    +
    + + + +
    +
    +
    + + +
    +
    +
    +

    Overview

    +

    This project uses Github to manage its issues.

    +

    Issue Management

    +

    Issues, bugs, and feature requests should be submitted to the following issue management system for this project.

    +
    https://github.com/Waffle/waffle/issues
    +
    +
    +
    + + + diff --git a/waffle-jna-jakarta/jacoco/index.html b/waffle-jna-jakarta/jacoco/index.html new file mode 100644 index 0000000000..e0aa7f7da2 --- /dev/null +++ b/waffle-jna-jakarta/jacoco/index.html @@ -0,0 +1 @@ +waffle-jna-jakarta

    waffle-jna-jakarta

    ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
    Total2,873 of 4,86540%318 of 46231%3104727111,2001132281236
    waffle.servlet93638429%953024%96123253357355436
    waffle.windows.auth.impl71635132%871817%901251732663569712
    waffle.util42862659%634642%518696231103116
    waffle.servlet.spi39120634%341632%335495141162903
    waffle.jaas30435653%323350%25646416062904
    waffle.windows.auth522734%40%91016217812
    waffle.util.cache464247%325%61014244803
    \ No newline at end of file diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/branchfc.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/branchfc.gif new file mode 100644 index 0000000000..989b46d304 Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/branchfc.gif differ diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/branchnc.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/branchnc.gif new file mode 100644 index 0000000000..1933e07c37 Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/branchnc.gif differ diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/branchpc.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/branchpc.gif new file mode 100644 index 0000000000..cbf711b703 Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/branchpc.gif differ diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/bundle.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/bundle.gif new file mode 100644 index 0000000000..fca9c53e62 Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/bundle.gif differ diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/class.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/class.gif new file mode 100644 index 0000000000..eb348fb0d4 Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/class.gif differ diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/down.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/down.gif new file mode 100644 index 0000000000..440a14db74 Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/down.gif differ diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/greenbar.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/greenbar.gif new file mode 100644 index 0000000000..0ba6567253 Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/greenbar.gif differ diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/group.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/group.gif new file mode 100644 index 0000000000..a4ea580d27 Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/group.gif differ diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/method.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/method.gif new file mode 100644 index 0000000000..7d24707ee8 Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/method.gif differ diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/package.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/package.gif new file mode 100644 index 0000000000..131c28da40 Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/package.gif differ diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/prettify.css b/waffle-jna-jakarta/jacoco/jacoco-resources/prettify.css new file mode 100644 index 0000000000..be5166e0fc --- /dev/null +++ b/waffle-jna-jakarta/jacoco/jacoco-resources/prettify.css @@ -0,0 +1,13 @@ +/* Pretty printing styles. Used with prettify.js. */ + +.str { color: #2A00FF; } +.kwd { color: #7F0055; font-weight:bold; } +.com { color: #3F5FBF; } +.typ { color: #606; } +.lit { color: #066; } +.pun { color: #660; } +.pln { color: #000; } +.tag { color: #008; } +.atn { color: #606; } +.atv { color: #080; } +.dec { color: #606; } diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/prettify.js b/waffle-jna-jakarta/jacoco/jacoco-resources/prettify.js new file mode 100644 index 0000000000..b2766fe0a3 --- /dev/null +++ b/waffle-jna-jakarta/jacoco/jacoco-resources/prettify.js @@ -0,0 +1,1510 @@ +// Copyright (C) 2006 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +/** + * @fileoverview + * some functions for browser-side pretty printing of code contained in html. + *

    + * + * For a fairly comprehensive set of languages see the + * README + * file that came with this source. At a minimum, the lexer should work on a + * number of languages including C and friends, Java, Python, Bash, SQL, HTML, + * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk + * and a subset of Perl, but, because of commenting conventions, doesn't work on + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. + *

    + * Usage:

      + *
    1. include this source file in an html page via + * {@code } + *
    2. define style rules. See the example page for examples. + *
    3. mark the {@code
      } and {@code } tags in your source with
      + *    {@code class=prettyprint.}
      + *    You can also use the (html deprecated) {@code } tag, but the pretty
      + *    printer needs to do more substantial DOM manipulations to support that, so
      + *    some css styles may not be preserved.
      + * </ol>
      + * That's it.  I wanted to keep the API as simple as possible, so there's no
      + * need to specify which language the code is in, but if you wish, you can add
      + * another class to the {@code <pre>} or {@code <code>} element to specify the
      + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
      + * starts with "lang-" followed by a file extension, specifies the file type.
      + * See the "lang-*.js" files in this directory for code that implements
      + * per-language file handlers.
      + * <p>
      + * Change log:<br>
      + * cbeust, 2006/08/22
      + * <blockquote>
      + *   Java annotations (start with "@") are now captured as literals ("lit")
      + * </blockquote>
      + * @requires console
      + */
      +
      +// JSLint declarations
      +/*global console, document, navigator, setTimeout, window */
      +
      +/**
      + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
      + * UI events.
      + * If set to {@code false}, {@code prettyPrint()} is synchronous.
      + */
      +window['PR_SHOULD_USE_CONTINUATION'] = true;
      +
      +/** the number of characters between tab columns */
      +window['PR_TAB_WIDTH'] = 8;
      +
      +/** Walks the DOM returning a properly escaped version of innerHTML.
      +  * @param {Node} node
      +  * @param {Array.<string>} out output buffer that receives chunks of HTML.
      +  */
      +window['PR_normalizedHtml']
      +
      +/** Contains functions for creating and registering new language handlers.
      +  * @type {Object}
      +  */
      +  = window['PR']
      +
      +/** Pretty print a chunk of code.
      +  *
      +  * @param {string} sourceCodeHtml code as html
      +  * @return {string} code as html, but prettier
      +  */
      +  = window['prettyPrintOne']
      +/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
      +  * {@code class=prettyprint} and prettify them.
      +  * @param {Function?} opt_whenDone if specified, called when the last entry
      +  *     has been finished.
      +  */
      +  = window['prettyPrint'] = void 0;
      +
      +/** browser detection. @extern @returns false if not IE, otherwise the major version. */
      +window['_pr_isIE6'] = function () {
      +  var ieVersion = navigator && navigator.userAgent &&
      +      navigator.userAgent.match(/\bMSIE ([678])\./);
      +  ieVersion = ieVersion ? +ieVersion[1] : false;
      +  window['_pr_isIE6'] = function () { return ieVersion; };
      +  return ieVersion;
      +};
      +
      +
      +(function () {
      +  // Keyword lists for various languages.
      +  var FLOW_CONTROL_KEYWORDS =
      +      "break continue do else for if return while ";
      +  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
      +      "double enum extern float goto int long register short signed sizeof " +
      +      "static struct switch typedef union unsigned void volatile ";
      +  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
      +      "new operator private protected public this throw true try typeof ";
      +  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
      +      "concept concept_map const_cast constexpr decltype " +
      +      "dynamic_cast explicit export friend inline late_check " +
      +      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
      +      "template typeid typename using virtual wchar_t where ";
      +  var JAVA_KEYWORDS = COMMON_KEYWORDS +
      +      "abstract boolean byte extends final finally implements import " +
      +      "instanceof null native package strictfp super synchronized throws " +
      +      "transient ";
      +  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
      +      "as base by checked decimal delegate descending event " +
      +      "fixed foreach from group implicit in interface internal into is lock " +
      +      "object out override orderby params partial readonly ref sbyte sealed " +
      +      "stackalloc string select uint ulong unchecked unsafe ushort var ";
      +  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
      +      "debugger eval export function get null set undefined var with " +
      +      "Infinity NaN ";
      +  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
      +      "goto if import last local my next no our print package redo require " +
      +      "sub undef unless until use wantarray while BEGIN END ";
      +  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
      +      "elif except exec finally from global import in is lambda " +
      +      "nonlocal not or pass print raise try with yield " +
      +      "False True None ";
      +  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
      +      " defined elsif end ensure false in module next nil not or redo rescue " +
      +      "retry self super then true undef unless until when yield BEGIN END ";
      +  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
      +      "function in local set then until ";
      +  var ALL_KEYWORDS = (
      +      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
      +      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
      +
      +  // token style names.  correspond to css classes
      +  /** token style for a string literal */
      +  var PR_STRING = 'str';
      +  /** token style for a keyword */
      +  var PR_KEYWORD = 'kwd';
      +  /** token style for a comment */
      +  var PR_COMMENT = 'com';
      +  /** token style for a type */
      +  var PR_TYPE = 'typ';
      +  /** token style for a literal value.  e.g. 1, null, true. */
      +  var PR_LITERAL = 'lit';
      +  /** token style for a punctuation string. */
      +  var PR_PUNCTUATION = 'pun';
      +  /** token style for a punctuation string. */
      +  var PR_PLAIN = 'pln';
      +
      +  /** token style for an sgml tag. */
      +  var PR_TAG = 'tag';
      +  /** token style for a markup declaration such as a DOCTYPE. */
      +  var PR_DECLARATION = 'dec';
      +  /** token style for embedded source. */
      +  var PR_SOURCE = 'src';
      +  /** token style for an sgml attribute name. */
      +  var PR_ATTRIB_NAME = 'atn';
      +  /** token style for an sgml attribute value. */
      +  var PR_ATTRIB_VALUE = 'atv';
      +
      +  /**
      +   * A class that indicates a section of markup that is not code, e.g. to allow
      +   * embedding of line numbers within code listings.
      +   */
      +  var PR_NOCODE = 'nocode';
      +
      +  /** A set of tokens that can precede a regular expression literal in
      +    * javascript.
      +    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
      +    * list, but I've removed ones that might be problematic when seen in
      +    * languages that don't support regular expression literals.
      +    *
      +    * <p>Specifically, I've removed any keywords that can't precede a regexp
      +    * literal in a syntactically legal javascript program, and I've removed the
      +    * "in" keyword since it's not a keyword in many languages, and might be used
      +    * as a count of inches.
      +    *
      +    * <p>The link a above does not accurately describe EcmaScript rules since
      +    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
      +    * very well in practice.
      +    *
      +    * @private
      +    */
      +  var REGEXP_PRECEDER_PATTERN = function () {
      +      var preceders = [
      +          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
      +          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
      +          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
      +          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
      +          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
      +          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
      +          "||=", "~" /* handles =~ and !~ */,
      +          "break", "case", "continue", "delete",
      +          "do", "else", "finally", "instanceof",
      +          "return", "throw", "try", "typeof"
      +          ];
      +      var pattern = '(?:^^|[+-]';
      +      for (var i = 0; i < preceders.length; ++i) {
      +        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
      +      }
      +      pattern += ')\\s*';  // matches at end, and matches empty string
      +      return pattern;
      +      // CAVEAT: this does not properly handle the case where a regular
      +      // expression immediately follows another since a regular expression may
      +      // have flags for case-sensitivity and the like.  Having regexp tokens
      +      // adjacent is not valid in any language I'm aware of, so I'm punting.
      +      // TODO: maybe style special characters inside a regexp as punctuation.
      +    }();
      +
      +  // Define regexps here so that the interpreter doesn't have to create an
      +  // object each time the function containing them is called.
      +  // The language spec requires a new object created even if you don't access
      +  // the $1 members.
      +  var pr_amp = /&/g;
      +  var pr_lt = /</g;
      +  var pr_gt = />/g;
      +  var pr_quot = /\"/g;
      +  /** like textToHtml but escapes double quotes to be attribute safe. */
      +  function attribToHtml(str) {
      +    return str.replace(pr_amp, '&amp;')
      +        .replace(pr_lt, '&lt;')
      +        .replace(pr_gt, '&gt;')
      +        .replace(pr_quot, '&quot;');
      +  }
      +
      +  /** escapest html special characters to html. */
      +  function textToHtml(str) {
      +    return str.replace(pr_amp, '&amp;')
      +        .replace(pr_lt, '&lt;')
      +        .replace(pr_gt, '&gt;');
      +  }
      +
      +
      +  var pr_ltEnt = /&lt;/g;
      +  var pr_gtEnt = /&gt;/g;
      +  var pr_aposEnt = /&apos;/g;
      +  var pr_quotEnt = /&quot;/g;
      +  var pr_ampEnt = /&amp;/g;
      +  var pr_nbspEnt = /&nbsp;/g;
      +  /** unescapes html to plain text. */
      +  function htmlToText(html) {
      +    var pos = html.indexOf('&');
      +    if (pos < 0) { return html; }
      +    // Handle numeric entities specially.  We can't use functional substitution
      +    // since that doesn't work in older versions of Safari.
      +    // These should be rare since most browsers convert them to normal chars.
      +    for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
      +      var end = html.indexOf(';', pos);
      +      if (end >= 0) {
      +        var num = html.substring(pos + 3, end);
      +        var radix = 10;
      +        if (num && num.charAt(0) === 'x') {
      +          num = num.substring(1);
      +          radix = 16;
      +        }
      +        var codePoint = parseInt(num, radix);
      +        if (!isNaN(codePoint)) {
      +          html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
      +                  html.substring(end + 1));
      +        }
      +      }
      +    }
      +
      +    return html.replace(pr_ltEnt, '<')
      +        .replace(pr_gtEnt, '>')
      +        .replace(pr_aposEnt, "'")
      +        .replace(pr_quotEnt, '"')
      +        .replace(pr_nbspEnt, ' ')
      +        .replace(pr_ampEnt, '&');
      +  }
      +
      +  /** is the given node's innerHTML normally unescaped? */
      +  function isRawContent(node) {
      +    return 'XMP' === node.tagName;
      +  }
      +
      +  var newlineRe = /[\r\n]/g;
      +  /**
      +   * Are newlines and adjacent spaces significant in the given node's innerHTML?
      +   */
      +  function isPreformatted(node, content) {
      +    // PRE means preformatted, and is a very common case, so don't create
      +    // unnecessary computed style objects.
      +    if ('PRE' === node.tagName) { return true; }
      +    if (!newlineRe.test(content)) { return true; }  // Don't care
      +    var whitespace = '';
      +    // For disconnected nodes, IE has no currentStyle.
      +    if (node.currentStyle) {
      +      whitespace = node.currentStyle.whiteSpace;
      +    } else if (window.getComputedStyle) {
      +      // Firefox makes a best guess if node is disconnected whereas Safari
      +      // returns the empty string.
      +      whitespace = window.getComputedStyle(node, null).whiteSpace;
      +    }
      +    return !whitespace || whitespace === 'pre';
      +  }
      +
      +  function normalizedHtml(node, out, opt_sortAttrs) {
      +    switch (node.nodeType) {
      +      case 1:  // an element
      +        var name = node.tagName.toLowerCase();
      +
      +        out.push('<', name);
      +        var attrs = node.attributes;
      +        var n = attrs.length;
      +        if (n) {
      +          if (opt_sortAttrs) {
      +            var sortedAttrs = [];
      +            for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
      +            sortedAttrs.sort(function (a, b) {
      +                return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
      +              });
      +            attrs = sortedAttrs;
      +          }
      +          for (var i = 0; i < n; ++i) {
      +            var attr = attrs[i];
      +            if (!attr.specified) { continue; }
      +            out.push(' ', attr.name.toLowerCase(),
      +                     '="', attribToHtml(attr.value), '"');
      +          }
      +        }
      +        out.push('>');
      +        for (var child = node.firstChild; child; child = child.nextSibling) {
      +          normalizedHtml(child, out, opt_sortAttrs);
      +        }
      +        if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
      +          out.push('<\/', name, '>');
      +        }
      +        break;
      +      case 3: case 4: // text
      +        out.push(textToHtml(node.nodeValue));
      +        break;
      +    }
      +  }
      +
      +  /**
      +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
      +   * matches the union o the sets o strings matched d by the input RegExp.
      +   * Since it matches globally, if the input strings have a start-of-input
      +   * anchor (/^.../), it is ignored for the purposes of unioning.
      +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
      +   * @return {RegExp} a global regex.
      +   */
      +  function combinePrefixPatterns(regexs) {
      +    var capturedGroupIndex = 0;
      +
      +    var needToFoldCase = false;
      +    var ignoreCase = false;
      +    for (var i = 0, n = regexs.length; i < n; ++i) {
      +      var regex = regexs[i];
      +      if (regex.ignoreCase) {
      +        ignoreCase = true;
      +      } else if (/[a-z]/i.test(regex.source.replace(
      +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
      +        needToFoldCase = true;
      +        ignoreCase = false;
      +        break;
      +      }
      +    }
      +
      +    function decodeEscape(charsetPart) {
      +      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
      +      switch (charsetPart.charAt(1)) {
      +        case 'b': return 8;
      +        case 't': return 9;
      +        case 'n': return 0xa;
      +        case 'v': return 0xb;
      +        case 'f': return 0xc;
      +        case 'r': return 0xd;
      +        case 'u': case 'x':
      +          return parseInt(charsetPart.substring(2), 16)
      +              || charsetPart.charCodeAt(1);
      +        case '0': case '1': case '2': case '3': case '4':
      +        case '5': case '6': case '7':
      +          return parseInt(charsetPart.substring(1), 8);
      +        default: return charsetPart.charCodeAt(1);
      +      }
      +    }
      +
      +    function encodeEscape(charCode) {
      +      if (charCode < 0x20) {
      +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
      +      }
      +      var ch = String.fromCharCode(charCode);
      +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
      +        ch = '\\' + ch;
      +      }
      +      return ch;
      +    }
      +
      +    function caseFoldCharset(charSet) {
      +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
      +          new RegExp(
      +              '\\\\u[0-9A-Fa-f]{4}'
      +              + '|\\\\x[0-9A-Fa-f]{2}'
      +              + '|\\\\[0-3][0-7]{0,2}'
      +              + '|\\\\[0-7]{1,2}'
      +              + '|\\\\[\\s\\S]'
      +              + '|-'
      +              + '|[^-\\\\]',
      +              'g'));
      +      var groups = [];
      +      var ranges = [];
      +      var inverse = charsetParts[0] === '^';
      +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
      +        var p = charsetParts[i];
      +        switch (p) {
      +          case '\\B': case '\\b':
      +          case '\\D': case '\\d':
      +          case '\\S': case '\\s':
      +          case '\\W': case '\\w':
      +            groups.push(p);
      +            continue;
      +        }
      +        var start = decodeEscape(p);
      +        var end;
      +        if (i + 2 < n && '-' === charsetParts[i + 1]) {
      +          end = decodeEscape(charsetParts[i + 2]);
      +          i += 2;
      +        } else {
      +          end = start;
      +        }
      +        ranges.push([start, end]);
      +        // If the range might intersect letters, then expand it.
      +        if (!(end < 65 || start > 122)) {
      +          if (!(end < 65 || start > 90)) {
      +            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
      +          }
      +          if (!(end < 97 || start > 122)) {
      +            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
      +          }
      +        }
      +      }
      +
      +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
      +      // -> [[1, 12], [14, 14], [16, 17]]
      +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
      +      var consolidatedRanges = [];
      +      var lastRange = [NaN, NaN];
      +      for (var i = 0; i < ranges.length; ++i) {
      +        var range = ranges[i];
      +        if (range[0] <= lastRange[1] + 1) {
      +          lastRange[1] = Math.max(lastRange[1], range[1]);
      +        } else {
      +          consolidatedRanges.push(lastRange = range);
      +        }
      +      }
      +
      +      var out = ['['];
      +      if (inverse) { out.push('^'); }
      +      out.push.apply(out, groups);
      +      for (var i = 0; i < consolidatedRanges.length; ++i) {
      +        var range = consolidatedRanges[i];
      +        out.push(encodeEscape(range[0]));
      +        if (range[1] > range[0]) {
      +          if (range[1] + 1 > range[0]) { out.push('-'); }
      +          out.push(encodeEscape(range[1]));
      +        }
      +      }
      +      out.push(']');
      +      return out.join('');
      +    }
      +
      +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
      +      // Split into character sets, escape sequences, punctuation strings
      +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
      +      // include any of the above.
      +      var parts = regex.source.match(
      +          new RegExp(
      +              '(?:'
      +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
      +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
      +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
      +              + '|\\\\[0-9]+'  // a back-reference or octal escape
      +              + '|\\\\[^ux0-9]'  // other escape sequence
      +              + '|\\(\\?[:!=]'  // start of a non-capturing group
      +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
      +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
      +              + ')',
      +              'g'));
      +      var n = parts.length;
      +
      +      // Maps captured group numbers to the number they will occupy in
      +      // the output or to -1 if that has not been determined, or to
      +      // undefined if they need not be capturing in the output.
      +      var capturedGroups = [];
      +
      +      // Walk over and identify back references to build the capturedGroups
      +      // mapping.
      +      for (var i = 0, groupIndex = 0; i < n; ++i) {
      +        var p = parts[i];
      +        if (p === '(') {
      +          // groups are 1-indexed, so max group index is count of '('
      +          ++groupIndex;
      +        } else if ('\\' === p.charAt(0)) {
      +          var decimalValue = +p.substring(1);
      +          if (decimalValue && decimalValue <= groupIndex) {
      +            capturedGroups[decimalValue] = -1;
      +          }
      +        }
      +      }
      +
      +      // Renumber groups and reduce capturing groups to non-capturing groups
      +      // where possible.
      +      for (var i = 1; i < capturedGroups.length; ++i) {
      +        if (-1 === capturedGroups[i]) {
      +          capturedGroups[i] = ++capturedGroupIndex;
      +        }
      +      }
      +      for (var i = 0, groupIndex = 0; i < n; ++i) {
      +        var p = parts[i];
      +        if (p === '(') {
      +          ++groupIndex;
      +          if (capturedGroups[groupIndex] === undefined) {
      +            parts[i] = '(?:';
      +          }
      +        } else if ('\\' === p.charAt(0)) {
      +          var decimalValue = +p.substring(1);
      +          if (decimalValue && decimalValue <= groupIndex) {
      +            parts[i] = '\\' + capturedGroups[groupIndex];
      +          }
      +        }
      +      }
      +
      +      // Remove any prefix anchors so that the output will match anywhere.
      +      // ^^ really does mean an anchored match though.
      +      for (var i = 0, groupIndex = 0; i < n; ++i) {
      +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
      +      }
      +
      +      // Expand letters to groupts to handle mixing of case-sensitive and
      +      // case-insensitive patterns if necessary.
      +      if (regex.ignoreCase && needToFoldCase) {
      +        for (var i = 0; i < n; ++i) {
      +          var p = parts[i];
      +          var ch0 = p.charAt(0);
      +          if (p.length >= 2 && ch0 === '[') {
      +            parts[i] = caseFoldCharset(p);
      +          } else if (ch0 !== '\\') {
      +            // TODO: handle letters in numeric escapes.
      +            parts[i] = p.replace(
      +                /[a-zA-Z]/g,
      +                function (ch) {
      +                  var cc = ch.charCodeAt(0);
      +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
      +                });
      +          }
      +        }
      +      }
      +
      +      return parts.join('');
      +    }
      +
      +    var rewritten = [];
      +    for (var i = 0, n = regexs.length; i < n; ++i) {
      +      var regex = regexs[i];
      +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
      +      rewritten.push(
      +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
      +    }
      +
      +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
      +  }
      +
      +  var PR_innerHtmlWorks = null;
      +  function getInnerHtml(node) {
      +    // inner html is hopelessly broken in Safari 2.0.4 when the content is
      +    // an html description of well formed XML and the containing tag is a PRE
      +    // tag, so we detect that case and emulate innerHTML.
      +    if (null === PR_innerHtmlWorks) {
      +      var testNode = document.createElement('PRE');
      +      testNode.appendChild(
      +          document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
      +      PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
      +    }
      +
      +    if (PR_innerHtmlWorks) {
      +      var content = node.innerHTML;
      +      // XMP tags contain unescaped entities so require special handling.
      +      if (isRawContent(node)) {
      +        content = textToHtml(content);
      +      } else if (!isPreformatted(node, content)) {
      +        content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
      +            .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
      +      }
      +      return content;
      +    }
      +
      +    var out = [];
      +    for (var child = node.firstChild; child; child = child.nextSibling) {
      +      normalizedHtml(child, out);
      +    }
      +    return out.join('');
      +  }
      +
      +  /** returns a function that expand tabs to spaces.  This function can be fed
      +    * successive chunks of text, and will maintain its own internal state to
      +    * keep track of how tabs are expanded.
      +    * @return {function (string) : string} a function that takes
      +    *   plain text and return the text with tabs expanded.
      +    * @private
      +    */
      +  function makeTabExpander(tabWidth) {
      +    var SPACES = '                ';
      +    var charInLine = 0;
      +
      +    return function (plainText) {
      +      // walk over each character looking for tabs and newlines.
      +      // On tabs, expand them.  On newlines, reset charInLine.
      +      // Otherwise increment charInLine
      +      var out = null;
      +      var pos = 0;
      +      for (var i = 0, n = plainText.length; i < n; ++i) {
      +        var ch = plainText.charAt(i);
      +
      +        switch (ch) {
      +          case '\t':
      +            if (!out) { out = []; }
      +            out.push(plainText.substring(pos, i));
      +            // calculate how much space we need in front of this part
      +            // nSpaces is the amount of padding -- the number of spaces needed
      +            // to move us to the next column, where columns occur at factors of
      +            // tabWidth.
      +            var nSpaces = tabWidth - (charInLine % tabWidth);
      +            charInLine += nSpaces;
      +            for (; nSpaces >= 0; nSpaces -= SPACES.length) {
      +              out.push(SPACES.substring(0, nSpaces));
      +            }
      +            pos = i + 1;
      +            break;
      +          case '\n':
      +            charInLine = 0;
      +            break;
      +          default:
      +            ++charInLine;
      +        }
      +      }
      +      if (!out) { return plainText; }
      +      out.push(plainText.substring(pos));
      +      return out.join('');
      +    };
      +  }
      +
      +  var pr_chunkPattern = new RegExp(
      +      '[^<]+'  // A run of characters other than '<'
      +      + '|<\!--[\\s\\S]*?--\>'  // an HTML comment
      +      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>'  // a CDATA section
      +      // a probable tag that should not be highlighted
      +      + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
      +      + '|<',  // A '<' that does not begin a larger chunk
      +      'g');
      +  var pr_commentPrefix = /^<\!--/;
      +  var pr_cdataPrefix = /^<!\[CDATA\[/;
      +  var pr_brPrefix = /^<br\b/i;
      +  var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
      +
      +  /** split markup into chunks of html tags (style null) and
      +    * plain text (style {@link #PR_PLAIN}), converting tags which are
      +    * significant for tokenization (<br>) into their textual equivalent.
      +    *
      +    * @param {string} s html where whitespace is considered significant.
      +    * @return {Object} source code and extracted tags.
      +    * @private
      +    */
      +  function extractTags(s) {
      +    // since the pattern has the 'g' modifier and defines no capturing groups,
      +    // this will return a list of all chunks which we then classify and wrap as
      +    // PR_Tokens
      +    var matches = s.match(pr_chunkPattern);
      +    var sourceBuf = [];
      +    var sourceBufLen = 0;
      +    var extractedTags = [];
      +    if (matches) {
      +      for (var i = 0, n = matches.length; i < n; ++i) {
      +        var match = matches[i];
      +        if (match.length > 1 && match.charAt(0) === '<') {
      +          if (pr_commentPrefix.test(match)) { continue; }
      +          if (pr_cdataPrefix.test(match)) {
      +            // strip CDATA prefix and suffix.  Don't unescape since it's CDATA
      +            sourceBuf.push(match.substring(9, match.length - 3));
      +            sourceBufLen += match.length - 12;
      +          } else if (pr_brPrefix.test(match)) {
      +            // <br> tags are lexically significant so convert them to text.
      +            // This is undone later.
      +            sourceBuf.push('\n');
      +            ++sourceBufLen;
      +          } else {
      +            if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
      +              // A <span class="nocode"> will start a section that should be
      +              // ignored.  Continue walking the list until we see a matching end
      +              // tag.
      +              var name = match.match(pr_tagNameRe)[2];
      +              var depth = 1;
      +              var j;
      +              end_tag_loop:
      +              for (j = i + 1; j < n; ++j) {
      +                var name2 = matches[j].match(pr_tagNameRe);
      +                if (name2 && name2[2] === name) {
      +                  if (name2[1] === '/') {
      +                    if (--depth === 0) { break end_tag_loop; }
      +                  } else {
      +                    ++depth;
      +                  }
      +                }
      +              }
      +              if (j < n) {
      +                extractedTags.push(
      +                    sourceBufLen, matches.slice(i, j + 1).join(''));
      +                i = j;
      +              } else {  // Ignore unclosed sections.
      +                extractedTags.push(sourceBufLen, match);
      +              }
      +            } else {
      +              extractedTags.push(sourceBufLen, match);
      +            }
      +          }
      +        } else {
      +          var literalText = htmlToText(match);
      +          sourceBuf.push(literalText);
      +          sourceBufLen += literalText.length;
      +        }
      +      }
      +    }
      +    return { source: sourceBuf.join(''), tags: extractedTags };
      +  }
      +
      +  /** True if the given tag contains a class attribute with the nocode class. */
      +  function isNoCodeTag(tag) {
      +    return !!tag
      +        // First canonicalize the representation of attributes
      +        .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
      +                 ' $1="$2$3$4"')
      +        // Then look for the attribute we want.
      +        .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
      +  }
      +
      +  /**
      +   * Apply the given language handler to sourceCode and add the resulting
      +   * decorations to out.
      +   * @param {number} basePos the index of sourceCode within the chunk of source
      +   *    whose decorations are already present on out.
      +   */
      +  function appendDecorations(basePos, sourceCode, langHandler, out) {
      +    if (!sourceCode) { return; }
      +    var job = {
      +      source: sourceCode,
      +      basePos: basePos
      +    };
      +    langHandler(job);
      +    out.push.apply(out, job.decorations);
      +  }
      +
      +  /** Given triples of [style, pattern, context] returns a lexing function,
      +    * The lexing function interprets the patterns to find token boundaries and
      +    * returns a decoration list of the form
      +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
      +    * where index_n is an index into the sourceCode, and style_n is a style
      +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
      +    * all characters in sourceCode[index_n-1:index_n].
      +    *
      +    * The stylePatterns is a list whose elements have the form
      +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
      +    *
      +    * Style is a style constant like PR_PLAIN, or can be a string of the
      +    * form 'lang-FOO', where FOO is a language extension describing the
      +    * language of the portion of the token in $1 after pattern executes.
      +    * E.g., if style is 'lang-lisp', and group 1 contains the text
      +    * '(hello (world))', then that portion of the token will be passed to the
      +    * registered lisp handler for formatting.
      +    * The text before and after group 1 will be restyled using this decorator
      +    * so decorators should take care that this doesn't result in infinite
      +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
      +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
      +    * '<script>foo()<\/script>', which would cause the current decorator to
      +    * be called with '<script>' which would not match the same rule since
      +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
      +    * the generic tag rule.  The handler registered for the 'js' extension would
      +    * then be called with 'foo()', and finally, the current decorator would
      +    * be called with '<\/script>' which would not match the original rule and
      +    * so the generic tag rule would identify it as a tag.
      +    *
      +    * Pattern must only match prefixes, and if it matches a prefix, then that
      +    * match is considered a token with the same style.
      +    *
      +    * Context is applied to the last non-whitespace, non-comment token
      +    * recognized.
      +    *
      +    * Shortcut is an optional string of characters, any of which, if the first
      +    * character, gurantee that this pattern and only this pattern matches.
      +    *
      +    * @param {Array} shortcutStylePatterns patterns that always start with
      +    *   a known character.  Must have a shortcut string.
      +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
      +    *   order if the shortcut ones fail.  May have shortcuts.
      +    *
      +    * @return {function (Object)} a
      +    *   function that takes source code and returns a list of decorations.
      +    */
      +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
      +    var shortcuts = {};
      +    var tokenizer;
      +    (function () {
      +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
      +      var allRegexs = [];
      +      var regexKeys = {};
      +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
      +        var patternParts = allPatterns[i];
      +        var shortcutChars = patternParts[3];
      +        if (shortcutChars) {
      +          for (var c = shortcutChars.length; --c >= 0;) {
      +            shortcuts[shortcutChars.charAt(c)] = patternParts;
      +          }
      +        }
      +        var regex = patternParts[1];
      +        var k = '' + regex;
      +        if (!regexKeys.hasOwnProperty(k)) {
      +          allRegexs.push(regex);
      +          regexKeys[k] = null;
      +        }
      +      }
      +      allRegexs.push(/[\0-\uffff]/);
      +      tokenizer = combinePrefixPatterns(allRegexs);
      +    })();
      +
      +    var nPatterns = fallthroughStylePatterns.length;
      +    var notWs = /\S/;
      +
      +    /**
      +     * Lexes job.source and produces an output array job.decorations of style
      +     * classes preceded by the position at which they start in job.source in
      +     * order.
      +     *
      +     * @param {Object} job an object like {@code
      +     *    source: {string} sourceText plain text,
      +     *    basePos: {int} position of job.source in the larger chunk of
      +     *        sourceCode.
      +     * }
      +     */
      +    var decorate = function (job) {
      +      var sourceCode = job.source, basePos = job.basePos;
      +      /** Even entries are positions in source in ascending order.  Odd enties
      +        * are style markers (e.g., PR_COMMENT) that run from that position until
      +        * the end.
      +        * @type {Array.<number|string>}
      +        */
      +      var decorations = [basePos, PR_PLAIN];
      +      var pos = 0;  // index into sourceCode
      +      var tokens = sourceCode.match(tokenizer) || [];
      +      var styleCache = {};
      +
      +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
      +        var token = tokens[ti];
      +        var style = styleCache[token];
      +        var match = void 0;
      +
      +        var isEmbedded;
      +        if (typeof style === 'string') {
      +          isEmbedded = false;
      +        } else {
      +          var patternParts = shortcuts[token.charAt(0)];
      +          if (patternParts) {
      +            match = token.match(patternParts[1]);
      +            style = patternParts[0];
      +          } else {
      +            for (var i = 0; i < nPatterns; ++i) {
      +              patternParts = fallthroughStylePatterns[i];
      +              match = token.match(patternParts[1]);
      +              if (match) {
      +                style = patternParts[0];
      +                break;
      +              }
      +            }
      +
      +            if (!match) {  // make sure that we make progress
      +              style = PR_PLAIN;
      +            }
      +          }
      +
      +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
      +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
      +            isEmbedded = false;
      +            style = PR_SOURCE;
      +          }
      +
      +          if (!isEmbedded) { styleCache[token] = style; }
      +        }
      +
      +        var tokenStart = pos;
      +        pos += token.length;
      +
      +        if (!isEmbedded) {
      +          decorations.push(basePos + tokenStart, style);
      +        } else {  // Treat group 1 as an embedded block of source code.
      +          var embeddedSource = match[1];
      +          var embeddedSourceStart = token.indexOf(embeddedSource);
      +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
      +          if (match[2]) {
      +            // If embeddedSource can be blank, then it would match at the
      +            // beginning which would cause us to infinitely recurse on the
      +            // entire token, so we catch the right context in match[2].
      +            embeddedSourceEnd = token.length - match[2].length;
      +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
      +          }
      +          var lang = style.substring(5);
      +          // Decorate the left of the embedded source
      +          appendDecorations(
      +              basePos + tokenStart,
      +              token.substring(0, embeddedSourceStart),
      +              decorate, decorations);
      +          // Decorate the embedded source
      +          appendDecorations(
      +              basePos + tokenStart + embeddedSourceStart,
      +              embeddedSource,
      +              langHandlerForExtension(lang, embeddedSource),
      +              decorations);
      +          // Decorate the right of the embedded section
      +          appendDecorations(
      +              basePos + tokenStart + embeddedSourceEnd,
      +              token.substring(embeddedSourceEnd),
      +              decorate, decorations);
      +        }
      +      }
      +      job.decorations = decorations;
      +    };
      +    return decorate;
      +  }
      +
      +  /** returns a function that produces a list of decorations from source text.
      +    *
      +    * This code treats ", ', and ` as string delimiters, and \ as a string
      +    * escape.  It does not recognize perl's qq() style strings.
      +    * It has no special handling for double delimiter escapes as in basic, or
      +    * the tripled delimiters used in python, but should work on those regardless
      +    * although in those cases a single string literal may be broken up into
      +    * multiple adjacent string literals.
      +    *
      +    * It recognizes C, C++, and shell style comments.
      +    *
      +    * @param {Object} options a set of optional parameters.
      +    * @return {function (Object)} a function that examines the source code
      +    *     in the input job and builds the decoration list.
      +    */
      +  function sourceDecorator(options) {
      +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
      +    if (options['tripleQuotedStrings']) {
      +      // '''multi-line-string''', 'single-line-string', and double-quoted
      +      shortcutStylePatterns.push(
      +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
      +           null, '\'"']);
      +    } else if (options['multiLineStrings']) {
      +      // 'multi-line-string', "multi-line-string"
      +      shortcutStylePatterns.push(
      +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
      +           null, '\'"`']);
      +    } else {
      +      // 'single-line-string', "single-line-string"
      +      shortcutStylePatterns.push(
      +          [PR_STRING,
      +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
      +           null, '"\'']);
      +    }
      +    if (options['verbatimStrings']) {
      +      // verbatim-string-literal production from the C# grammar.  See issue 93.
      +      fallthroughStylePatterns.push(
      +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
      +    }
      +    if (options['hashComments']) {
      +      if (options['cStyleComments']) {
      +        // Stop C preprocessor declarations at an unclosed open comment
      +        shortcutStylePatterns.push(
      +            [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
      +             null, '#']);
      +        fallthroughStylePatterns.push(
      +            [PR_STRING,
      +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
      +             null]);
      +      } else {
      +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
      +      }
      +    }
      +    if (options['cStyleComments']) {
      +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
      +      fallthroughStylePatterns.push(
      +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
      +    }
      +    if (options['regexLiterals']) {
      +      var REGEX_LITERAL = (
      +          // A regular expression literal starts with a slash that is
      +          // not followed by * or / so that it is not confused with
      +          // comments.
      +          '/(?=[^/*])'
      +          // and then contains any number of raw characters,
      +          + '(?:[^/\\x5B\\x5C]'
      +          // escape sequences (\x5C),
      +          +    '|\\x5C[\\s\\S]'
      +          // or non-nesting character sets (\x5B\x5D);
      +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
      +          // finally closed by a /.
      +          + '/');
      +      fallthroughStylePatterns.push(
      +          ['lang-regex',
      +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
      +           ]);
      +    }
      +
      +    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
      +    if (keywords.length) {
      +      fallthroughStylePatterns.push(
      +          [PR_KEYWORD,
      +           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
      +    }
      +
      +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
      +    fallthroughStylePatterns.push(
      +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
      +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
      +        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
      +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
      +        [PR_LITERAL,
      +         new RegExp(
      +             '^(?:'
      +             // A hex number
      +             + '0x[a-f0-9]+'
      +             // or an octal or decimal number,
      +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
      +             // possibly in scientific notation
      +             + '(?:e[+\\-]?\\d+)?'
      +             + ')'
      +             // with an optional modifier like UL for unsigned long
      +             + '[a-z]*', 'i'),
      +         null, '0123456789'],
      +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
      +
      +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
      +  }
      +
      +  var decorateSource = sourceDecorator({
      +        'keywords': ALL_KEYWORDS,
      +        'hashComments': true,
      +        'cStyleComments': true,
      +        'multiLineStrings': true,
      +        'regexLiterals': true
      +      });
      +
      +  /** Breaks {@code job.source} around style boundaries in
      +    * {@code job.decorations} while re-interleaving {@code job.extractedTags},
      +    * and leaves the result in {@code job.prettyPrintedHtml}.
      +    * @param {Object} job like {
      +    *    source: {string} source as plain text,
      +    *    extractedTags: {Array.<number|string>} extractedTags chunks of raw
      +    *                   html preceded by their position in {@code job.source}
      +    *                   in order
      +    *    decorations: {Array.<number|string} an array of style classes preceded
      +    *                 by the position at which they start in job.source in order
      +    * }
      +    * @private
      +    */
      +  function recombineTagsAndDecorations(job) {
      +    var sourceText = job.source;
      +    var extractedTags = job.extractedTags;
      +    var decorations = job.decorations;
      +
      +    var html = [];
      +    // index past the last char in sourceText written to html
      +    var outputIdx = 0;
      +
      +    var openDecoration = null;
      +    var currentDecoration = null;
      +    var tagPos = 0;  // index into extractedTags
      +    var decPos = 0;  // index into decorations
      +    var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
      +
      +    var adjacentSpaceRe = /([\r\n ]) /g;
      +    var startOrSpaceRe = /(^| ) /gm;
      +    var newlineRe = /\r\n?|\n/g;
      +    var trailingSpaceRe = /[ \r\n]$/;
      +    var lastWasSpace = true;  // the last text chunk emitted ended with a space.
      +
      +    // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
      +    var isIE678 = window['_pr_isIE6']();
      +    var lineBreakHtml = (
      +        isIE678
      +        ? (job.sourceNode.tagName === 'PRE'
      +           // Use line feeds instead of <br>s so that copying and pasting works
      +           // on IE.
      +           // Doing this on other browsers breaks lots of stuff since \r\n is
      +           // treated as two newlines on Firefox.
      +           ? (isIE678 === 6 ? '&#160;\r\n' :
      +              isIE678 === 7 ? '&#160;<br>\r' : '&#160;\r')
      +           // IE collapses multiple adjacent <br>s into 1 line break.
      +           // Prefix every newline with '&#160;' to prevent such behavior.
      +           // &nbsp; is the same as &#160; but works in XML as well as HTML.
      +           : '&#160;<br />')
      +        : '<br />');
      +
      +    // Look for a class like linenums or linenums:<n> where <n> is the 1-indexed
      +    // number of the first line.
      +    var numberLines = job.sourceNode.className.match(/\blinenums\b(?::(\d+))?/);
      +    var lineBreaker;
      +    if (numberLines) {
      +      var lineBreaks = [];
      +      for (var i = 0; i < 10; ++i) {
      +        lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
      +      }
      +      var lineNum = numberLines[1] && numberLines[1].length
      +          ? numberLines[1] - 1 : 0;  // Lines are 1-indexed
      +      html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
      +      if (lineNum) {
      +        html.push(' value="', lineNum + 1, '"');
      +      }
      +      html.push('>');
      +      lineBreaker = function () {
      +        var lb = lineBreaks[++lineNum % 10];
      +        // If a decoration is open, we need to close it before closing a list-item
      +        // and reopen it on the other side of the list item.
      +        return openDecoration
      +            ? ('</span>' + lb + '<span class="' + openDecoration + '">') : lb;
      +      };
      +    } else {
      +      lineBreaker = lineBreakHtml;
      +    }
      +
      +    // A helper function that is responsible for opening sections of decoration
      +    // and outputing properly escaped chunks of source
      +    function emitTextUpTo(sourceIdx) {
      +      if (sourceIdx > outputIdx) {
      +        if (openDecoration && openDecoration !== currentDecoration) {
      +          // Close the current decoration
      +          html.push('</span>');
      +          openDecoration = null;
      +        }
      +        if (!openDecoration && currentDecoration) {
      +          openDecoration = currentDecoration;
      +          html.push('<span class="', openDecoration, '">');
      +        }
      +        // This interacts badly with some wikis which introduces paragraph tags
      +        // into pre blocks for some strange reason.
      +        // It's necessary for IE though which seems to lose the preformattedness
      +        // of <pre> tags when their innerHTML is assigned.
      +        // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
      +        // and it serves to undo the conversion of <br>s to newlines done in
      +        // chunkify.
      +        var htmlChunk = textToHtml(
      +            tabExpander(sourceText.substring(outputIdx, sourceIdx)))
      +            .replace(lastWasSpace
      +                     ? startOrSpaceRe
      +                     : adjacentSpaceRe, '$1&#160;');
      +        // Keep track of whether we need to escape space at the beginning of the
      +        // next chunk.
      +        lastWasSpace = trailingSpaceRe.test(htmlChunk);
      +        html.push(htmlChunk.replace(newlineRe, lineBreaker));
      +        outputIdx = sourceIdx;
      +      }
      +    }
      +
      +    while (true) {
      +      // Determine if we're going to consume a tag this time around.  Otherwise
      +      // we consume a decoration or exit.
      +      var outputTag;
      +      if (tagPos < extractedTags.length) {
      +        if (decPos < decorations.length) {
      +          // Pick one giving preference to extractedTags since we shouldn't open
      +          // a new style that we're going to have to immediately close in order
      +          // to output a tag.
      +          outputTag = extractedTags[tagPos] <= decorations[decPos];
      +        } else {
      +          outputTag = true;
      +        }
      +      } else {
      +        outputTag = false;
      +      }
      +      // Consume either a decoration or a tag or exit.
      +      if (outputTag) {
      +        emitTextUpTo(extractedTags[tagPos]);
      +        if (openDecoration) {
      +          // Close the current decoration
      +          html.push('</span>');
      +          openDecoration = null;
      +        }
      +        html.push(extractedTags[tagPos + 1]);
      +        tagPos += 2;
      +      } else if (decPos < decorations.length) {
      +        emitTextUpTo(decorations[decPos]);
      +        currentDecoration = decorations[decPos + 1];
      +        decPos += 2;
      +      } else {
      +        break;
      +      }
      +    }
      +    emitTextUpTo(sourceText.length);
      +    if (openDecoration) {
      +      html.push('</span>');
      +    }
      +    if (numberLines) { html.push('</li></ol>'); }
      +    job.prettyPrintedHtml = html.join('');
      +  }
      +
      +  /** Maps language-specific file extensions to handlers. */
      +  var langHandlerRegistry = {};
      +  /** Register a language handler for the given file extensions.
      +    * @param {function (Object)} handler a function from source code to a list
      +    *      of decorations.  Takes a single argument job which describes the
      +    *      state of the computation.   The single parameter has the form
      +    *      {@code {
      +    *        source: {string} as plain text.
      +    *        decorations: {Array.<number|string>} an array of style classes
      +    *                     preceded by the position at which they start in
      +    *                     job.source in order.
      +    *                     The language handler should assigned this field.
      +    *        basePos: {int} the position of source in the larger source chunk.
      +    *                 All positions in the output decorations array are relative
      +    *                 to the larger source chunk.
      +    *      } }
      +    * @param {Array.<string>} fileExtensions
      +    */
      +  function registerLangHandler(handler, fileExtensions) {
      +    for (var i = fileExtensions.length; --i >= 0;) {
      +      var ext = fileExtensions[i];
      +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
      +        langHandlerRegistry[ext] = handler;
      +      } else if ('console' in window) {
      +        console['warn']('cannot override language handler %s', ext);
      +      }
      +    }
      +  }
      +  function langHandlerForExtension(extension, source) {
      +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
      +      // Treat it as markup if the first non whitespace character is a < and
      +      // the last non-whitespace character is a >.
      +      extension = /^\s*</.test(source)
      +          ? 'default-markup'
      +          : 'default-code';
      +    }
      +    return langHandlerRegistry[extension];
      +  }
      +  registerLangHandler(decorateSource, ['default-code']);
      +  registerLangHandler(
      +      createSimpleLexer(
      +          [],
      +          [
      +           [PR_PLAIN,       /^[^<?]+/],
      +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
      +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
      +           // Unescaped content in an unknown language
      +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
      +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
      +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
      +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
      +           // Unescaped content in javascript.  (Or possibly vbscript).
      +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
      +           // Contains unescaped stylesheet content
      +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
      +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
      +          ]),
      +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
      +  registerLangHandler(
      +      createSimpleLexer(
      +          [
      +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
      +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
      +           ],
      +          [
      +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
      +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
      +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
      +           [PR_PUNCTUATION,  /^[=<>\/]+/],
      +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
      +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
      +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
      +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
      +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
      +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
      +           ]),
      +      ['in.tag']);
      +  registerLangHandler(
      +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
      +  registerLangHandler(sourceDecorator({
      +          'keywords': CPP_KEYWORDS,
      +          'hashComments': true,
      +          'cStyleComments': true
      +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
      +  registerLangHandler(sourceDecorator({
      +          'keywords': 'null true false'
      +        }), ['json']);
      +  registerLangHandler(sourceDecorator({
      +          'keywords': CSHARP_KEYWORDS,
      +          'hashComments': true,
      +          'cStyleComments': true,
      +          'verbatimStrings': true
      +        }), ['cs']);
      +  registerLangHandler(sourceDecorator({
      +          'keywords': JAVA_KEYWORDS,
      +          'cStyleComments': true
      +        }), ['java']);
      +  registerLangHandler(sourceDecorator({
      +          'keywords': SH_KEYWORDS,
      +          'hashComments': true,
      +          'multiLineStrings': true
      +        }), ['bsh', 'csh', 'sh']);
      +  registerLangHandler(sourceDecorator({
      +          'keywords': PYTHON_KEYWORDS,
      +          'hashComments': true,
      +          'multiLineStrings': true,
      +          'tripleQuotedStrings': true
      +        }), ['cv', 'py']);
      +  registerLangHandler(sourceDecorator({
      +          'keywords': PERL_KEYWORDS,
      +          'hashComments': true,
      +          'multiLineStrings': true,
      +          'regexLiterals': true
      +        }), ['perl', 'pl', 'pm']);
      +  registerLangHandler(sourceDecorator({
      +          'keywords': RUBY_KEYWORDS,
      +          'hashComments': true,
      +          'multiLineStrings': true,
      +          'regexLiterals': true
      +        }), ['rb']);
      +  registerLangHandler(sourceDecorator({
      +          'keywords': JSCRIPT_KEYWORDS,
      +          'cStyleComments': true,
      +          'regexLiterals': true
      +        }), ['js']);
      +  registerLangHandler(
      +      createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
      +
      +  function applyDecorator(job) {
      +    var sourceCodeHtml = job.sourceCodeHtml;
      +    var opt_langExtension = job.langExtension;
      +
      +    // Prepopulate output in case processing fails with an exception.
      +    job.prettyPrintedHtml = sourceCodeHtml;
      +
      +    try {
      +      // Extract tags, and convert the source code to plain text.
      +      var sourceAndExtractedTags = extractTags(sourceCodeHtml);
      +      /** Plain text. @type {string} */
      +      var source = sourceAndExtractedTags.source;
      +      job.source = source;
      +      job.basePos = 0;
      +
      +      /** Even entries are positions in source in ascending order.  Odd entries
      +        * are tags that were extracted at that position.
      +        * @type {Array.<number|string>}
      +        */
      +      job.extractedTags = sourceAndExtractedTags.tags;
      +
      +      // Apply the appropriate language handler
      +      langHandlerForExtension(opt_langExtension, source)(job);
      +      // Integrate the decorations and tags back into the source code to produce
      +      // a decorated html string which is left in job.prettyPrintedHtml.
      +      recombineTagsAndDecorations(job);
      +    } catch (e) {
      +      if ('console' in window) {
      +        console['log'](e && e['stack'] ? e['stack'] : e);
      +      }
      +    }
      +  }
      +
      +  function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
      +    var job = {
      +      sourceCodeHtml: sourceCodeHtml,
      +      langExtension: opt_langExtension
      +    };
      +    applyDecorator(job);
      +    return job.prettyPrintedHtml;
      +  }
      +
      +  function prettyPrint(opt_whenDone) {
      +    function byTagName(tn) { return document.getElementsByTagName(tn); }
      +    // fetch a list of nodes to rewrite
      +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
      +    var elements = [];
      +    for (var i = 0; i < codeSegments.length; ++i) {
      +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
      +        elements.push(codeSegments[i][j]);
      +      }
      +    }
      +    codeSegments = null;
      +
      +    var clock = Date;
      +    if (!clock['now']) {
      +      clock = { 'now': function () { return (new Date).getTime(); } };
      +    }
      +
      +    // The loop is broken into a series of continuations to make sure that we
      +    // don't make the browser unresponsive when rewriting a large page.
      +    var k = 0;
      +    var prettyPrintingJob;
      +
      +    function doWork() {
      +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
      +                     clock.now() + 250 /* ms */ :
      +                     Infinity);
      +      for (; k < elements.length && clock.now() < endTime; k++) {
      +        var cs = elements[k];
      +        // [JACOCO] 'prettyprint' -> 'source'
      +        if (cs.className && cs.className.indexOf('source') >= 0) {
      +          // If the classes includes a language extensions, use it.
      +          // Language extensions can be specified like
      +          //     <pre class="prettyprint lang-cpp">
      +          // the language extension "cpp" is used to find a language handler as
      +          // passed to PR_registerLangHandler.
      +          var langExtension = cs.className.match(/\blang-(\w+)\b/);
      +          if (langExtension) { langExtension = langExtension[1]; }
      +
      +          // make sure this is not nested in an already prettified element
      +          var nested = false;
      +          for (var p = cs.parentNode; p; p = p.parentNode) {
      +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
      +                 p.tagName === 'xmp') &&
      +                // [JACOCO] 'prettyprint' -> 'source'
      +                p.className && p.className.indexOf('source') >= 0) {
      +              nested = true;
      +              break;
      +            }
      +          }
      +          if (!nested) {
      +            // fetch the content as a snippet of properly escaped HTML.
      +            // Firefox adds newlines at the end.
      +            var content = getInnerHtml(cs);
      +            content = content.replace(/(?:\r\n?|\n)$/, '');
      +
      +            // do the pretty printing
      +            prettyPrintingJob = {
      +              sourceCodeHtml: content,
      +              langExtension: langExtension,
      +              sourceNode: cs
      +            };
      +            applyDecorator(prettyPrintingJob);
      +            replaceWithPrettyPrintedHtml();
      +          }
      +        }
      +      }
      +      if (k < elements.length) {
      +        // finish up in a continuation
      +        setTimeout(doWork, 250);
      +      } else if (opt_whenDone) {
      +        opt_whenDone();
      +      }
      +    }
      +
      +    function replaceWithPrettyPrintedHtml() {
      +      var newContent = prettyPrintingJob.prettyPrintedHtml;
      +      if (!newContent) { return; }
      +      var cs = prettyPrintingJob.sourceNode;
      +
      +      // push the prettified html back into the tag.
      +      if (!isRawContent(cs)) {
      +        // just replace the old html with the new
      +        cs.innerHTML = newContent;
      +      } else {
      +        // we need to change the tag to a <pre> since <xmp>s do not allow
      +        // embedded tags such as the span tags used to attach styles to
      +        // sections of source code.
      +        var pre = document.createElement('PRE');
      +        for (var i = 0; i < cs.attributes.length; ++i) {
      +          var a = cs.attributes[i];
      +          if (a.specified) {
      +            var aname = a.name.toLowerCase();
      +            if (aname === 'class') {
      +              pre.className = a.value;  // For IE 6
      +            } else {
      +              pre.setAttribute(a.name, a.value);
      +            }
      +          }
      +        }
      +        pre.innerHTML = newContent;
      +
      +        // remove the old
      +        cs.parentNode.replaceChild(pre, cs);
      +        cs = pre;
      +      }
      +    }
      +
      +    doWork();
      +  }
      +
      +  window['PR_normalizedHtml'] = normalizedHtml;
      +  window['prettyPrintOne'] = prettyPrintOne;
      +  window['prettyPrint'] = prettyPrint;
      +  window['PR'] = {
      +        'combinePrefixPatterns': combinePrefixPatterns,
      +        'createSimpleLexer': createSimpleLexer,
      +        'registerLangHandler': registerLangHandler,
      +        'sourceDecorator': sourceDecorator,
      +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
      +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
      +        'PR_COMMENT': PR_COMMENT,
      +        'PR_DECLARATION': PR_DECLARATION,
      +        'PR_KEYWORD': PR_KEYWORD,
      +        'PR_LITERAL': PR_LITERAL,
      +        'PR_NOCODE': PR_NOCODE,
      +        'PR_PLAIN': PR_PLAIN,
      +        'PR_PUNCTUATION': PR_PUNCTUATION,
      +        'PR_SOURCE': PR_SOURCE,
      +        'PR_STRING': PR_STRING,
      +        'PR_TAG': PR_TAG,
      +        'PR_TYPE': PR_TYPE
      +      };
      +})();
      diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/redbar.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/redbar.gif
      new file mode 100644
      index 0000000000..c2f71469ba
      Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/redbar.gif differ
      diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/report.css b/waffle-jna-jakarta/jacoco/jacoco-resources/report.css
      new file mode 100644
      index 0000000000..dd936bca54
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/jacoco-resources/report.css
      @@ -0,0 +1,243 @@
      +body, td {
      +  font-family:sans-serif;
      +  font-size:10pt;
      +}
      +
      +h1 {
      +  font-weight:bold;
      +  font-size:18pt;
      +}
      +
      +.breadcrumb {
      +  border:#d6d3ce 1px solid;
      +  padding:2px 4px 2px 4px;
      +}
      +
      +.breadcrumb .info {
      +  float:right;
      +}
      +
      +.breadcrumb .info a {
      +  margin-left:8px;
      +}
      +
      +.el_report {
      +  padding-left:18px;
      +  background-image:url(report.gif);
      +  background-position:left center;
      +  background-repeat:no-repeat;
      +}
      +
      +.el_group {
      +  padding-left:18px;
      +  background-image:url(group.gif);
      +  background-position:left center;
      +  background-repeat:no-repeat;
      +}
      +
      +.el_bundle {
      +  padding-left:18px;
      +  background-image:url(bundle.gif);
      +  background-position:left center;
      +  background-repeat:no-repeat;
      +}
      +
      +.el_package {
      +  padding-left:18px;
      +  background-image:url(package.gif);
      +  background-position:left center;
      +  background-repeat:no-repeat;
      +}
      +
      +.el_class {
      +  padding-left:18px;
      +  background-image:url(class.gif);
      +  background-position:left center;
      +  background-repeat:no-repeat;
      +}
      +
      +.el_source {
      +  padding-left:18px;
      +  background-image:url(source.gif);
      +  background-position:left center;
      +  background-repeat:no-repeat;
      +}
      +
      +.el_method {
      +  padding-left:18px;
      +  background-image:url(method.gif);
      +  background-position:left center;
      +  background-repeat:no-repeat;
      +}
      +
      +.el_session {
      +  padding-left:18px;
      +  background-image:url(session.gif);
      +  background-position:left center;
      +  background-repeat:no-repeat;
      +}
      +
      +pre.source {
      +  border:#d6d3ce 1px solid;
      +  font-family:monospace;
      +}
      +
      +pre.source ol {
      +  margin-bottom: 0px;
      +  margin-top: 0px;
      +}
      +
      +pre.source li {
      +  border-left: 1px solid #D6D3CE;
      +  color: #A0A0A0;
      +  padding-left: 0px;
      +}
      +
      +pre.source span.fc {
      +  background-color:#ccffcc;
      +}
      +
      +pre.source span.nc {
      +  background-color:#ffaaaa;
      +}
      +
      +pre.source span.pc {
      +  background-color:#ffffcc;
      +}
      +
      +pre.source span.bfc {
      +  background-image: url(branchfc.gif);
      +  background-repeat: no-repeat;
      +  background-position: 2px center;
      +}
      +
      +pre.source span.bfc:hover {
      +  background-color:#80ff80;
      +}
      +
      +pre.source span.bnc {
      +  background-image: url(branchnc.gif);
      +  background-repeat: no-repeat;
      +  background-position: 2px center;
      +}
      +
      +pre.source span.bnc:hover {
      +  background-color:#ff8080;
      +}
      +
      +pre.source span.bpc {
      +  background-image: url(branchpc.gif);
      +  background-repeat: no-repeat;
      +  background-position: 2px center;
      +}
      +
      +pre.source span.bpc:hover {
      +  background-color:#ffff80;
      +}
      +
      +table.coverage {
      +  empty-cells:show;
      +  border-collapse:collapse;
      +}
      +
      +table.coverage thead {
      +  background-color:#e0e0e0;
      +}
      +
      +table.coverage thead td {
      +  white-space:nowrap;
      +  padding:2px 14px 0px 6px;
      +  border-bottom:#b0b0b0 1px solid;
      +}
      +
      +table.coverage thead td.bar {
      +  border-left:#cccccc 1px solid;
      +}
      +
      +table.coverage thead td.ctr1 {
      +  text-align:right;
      +  border-left:#cccccc 1px solid;
      +}
      +
      +table.coverage thead td.ctr2 {
      +  text-align:right;
      +  padding-left:2px;
      +}
      +
      +table.coverage thead td.sortable {
      +  cursor:pointer;
      +  background-image:url(sort.gif);
      +  background-position:right center;
      +  background-repeat:no-repeat;
      +}
      +
      +table.coverage thead td.up {
      +  background-image:url(up.gif);
      +}
      +
      +table.coverage thead td.down {
      +  background-image:url(down.gif);
      +}
      +
      +table.coverage tbody td {
      +  white-space:nowrap;
      +  padding:2px 6px 2px 6px;
      +  border-bottom:#d6d3ce 1px solid;
      +}
      +
      +table.coverage tbody tr:hover {
      +  background: #f0f0d0 !important;
      +}
      +
      +table.coverage tbody td.bar {
      +  border-left:#e8e8e8 1px solid;
      +}
      +
      +table.coverage tbody td.ctr1 {
      +  text-align:right;
      +  padding-right:14px;
      +  border-left:#e8e8e8 1px solid;
      +}
      +
      +table.coverage tbody td.ctr2 {
      +  text-align:right;
      +  padding-right:14px;
      +  padding-left:2px;
      +}
      +
      +table.coverage tfoot td {
      +  white-space:nowrap;
      +  padding:2px 6px 2px 6px;
      +}
      +
      +table.coverage tfoot td.bar {
      +  border-left:#e8e8e8 1px solid;
      +}
      +
      +table.coverage tfoot td.ctr1 {
      +  text-align:right;
      +  padding-right:14px;
      +  border-left:#e8e8e8 1px solid;
      +}
      +
      +table.coverage tfoot td.ctr2 {
      +  text-align:right;
      +  padding-right:14px;
      +  padding-left:2px;
      +}
      +
      +.footer {
      +  margin-top:20px;
      +  border-top:#d6d3ce 1px solid;
      +  padding-top:2px;
      +  font-size:8pt;
      +  color:#a0a0a0;
      +}
      +
      +.footer a {
      +  color:#a0a0a0;
      +}
      +
      +.right {
      +  float:right;
      +}
      diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/report.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/report.gif
      new file mode 100644
      index 0000000000..8547be50bf
      Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/report.gif differ
      diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/session.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/session.gif
      new file mode 100644
      index 0000000000..0151bad8a0
      Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/session.gif differ
      diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/sort.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/sort.gif
      new file mode 100644
      index 0000000000..6757c2c32b
      Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/sort.gif differ
      diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/sort.js b/waffle-jna-jakarta/jacoco/jacoco-resources/sort.js
      new file mode 100644
      index 0000000000..9dcb0e8bbf
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/jacoco-resources/sort.js
      @@ -0,0 +1,148 @@
      +/*******************************************************************************
      + * Copyright (c) 2009, 2024 Mountainminds GmbH & Co. KG and Contributors
      + * This program and the accompanying materials are made available under
      + * the terms of the Eclipse Public License 2.0 which is available at
      + * http://www.eclipse.org/legal/epl-2.0
      + *
      + * SPDX-License-Identifier: EPL-2.0
      + *
      + * Contributors:
      + *    Marc R. Hoffmann - initial API and implementation
      + *
      + *******************************************************************************/
      +
      +(function () {
      +
      +  /**
      +   * Sets the initial sorting derived from the hash.
      +   *
      +   * @param linkelementids
      +   *          list of element ids to search for links to add sort inidcator
      +   *          hash links
      +   */
      +  function initialSort(linkelementids) {
      +    window.linkelementids = linkelementids;
      +    var hash = window.location.hash;
      +    if (hash) {
      +      var m = hash.match(/up-./);
      +      if (m) {
      +        var header = window.document.getElementById(m[0].charAt(3));
      +        if (header) {
      +          sortColumn(header, true);
      +        }
      +        return;
      +      }
      +      var m = hash.match(/dn-./);
      +      if (m) {
      +        var header = window.document.getElementById(m[0].charAt(3));
      +        if (header) {
      +          sortColumn(header, false);
      +        }
      +        return
      +      }
      +    }
      +  }
      +
      +  /**
      +   * Sorts the columns with the given header dependening on the current sort state.
      +   */
      +  function toggleSort(header) {
      +    var sortup = header.className.indexOf('down ') == 0;
      +    sortColumn(header, sortup);
      +  }
      +
      +  /**
      +   * Sorts the columns with the given header in the given direction.
      +   */
      +  function sortColumn(header, sortup) {
      +    var table = header.parentNode.parentNode.parentNode;
      +    var body = table.tBodies[0];
      +    var colidx = getNodePosition(header);
      +
      +    resetSortedStyle(table);
      +
      +    var rows = body.rows;
      +    var sortedrows = [];
      +    for (var i = 0; i < rows.length; i++) {
      +      r = rows[i];
      +      sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
      +    }
      +
      +    var hash;
      +
      +    if (sortup) {
      +      for (var i = sortedrows.length - 1; i >= 0; i--) {
      +        body.appendChild(sortedrows[i]);
      +      }
      +      header.className = 'up ' + header.className;
      +      hash = 'up-' + header.id;
      +    } else {
      +      for (var i = 0; i < sortedrows.length; i++) {
      +        body.appendChild(sortedrows[i]);
      +      }
      +      header.className = 'down ' + header.className;
      +      hash = 'dn-' + header.id;
      +    }
      +
      +    setHash(hash);
      +  }
      +
      +  /**
      +   * Adds the sort indicator as a hash to the document URL and all links.
      +   */
      +  function setHash(hash) {
      +    window.document.location.hash = hash;
      +    ids = window.linkelementids;
      +    for (var i = 0; i < ids.length; i++) {
      +        setHashOnAllLinks(document.getElementById(ids[i]), hash);
      +    }
      +  }
      +
      +  /**
      +   * Extend all links within the given tag with the given hash.
      +   */
      +  function setHashOnAllLinks(tag, hash) {
      +    links = tag.getElementsByTagName("a");
      +    for (var i = 0; i < links.length; i++) {
      +        var a = links[i];
      +        var href = a.href;
      +        var hashpos = href.indexOf("#");
      +        if (hashpos != -1) {
      +            href = href.substring(0, hashpos);
      +        }
      +        a.href = href + "#" + hash;
      +    }
      +  }
      +
      +  /**
      +   * Calculates the position of a element within its parent.
      +   */
      +  function getNodePosition(element) {
      +    var pos = -1;
      +    while (element) {
      +      element = element.previousSibling;
      +      pos++;
      +    }
      +    return pos;
      +  }
      +
      +  /**
      +   * Remove the sorting indicator style from all headers.
      +   */
      +  function resetSortedStyle(table) {
      +    for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
      +      if (c.className) {
      +        if (c.className.indexOf('down ') == 0) {
      +          c.className = c.className.slice(5);
      +        }
      +        if (c.className.indexOf('up ') == 0) {
      +          c.className = c.className.slice(3);
      +        }
      +      }
      +    }
      +  }
      +
      +  window['initialSort'] = initialSort;
      +  window['toggleSort'] = toggleSort;
      +
      +})();
      diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/source.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/source.gif
      new file mode 100644
      index 0000000000..b226e41c52
      Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/source.gif differ
      diff --git a/waffle-jna-jakarta/jacoco/jacoco-resources/up.gif b/waffle-jna-jakarta/jacoco/jacoco-resources/up.gif
      new file mode 100644
      index 0000000000..58ed21660e
      Binary files /dev/null and b/waffle-jna-jakarta/jacoco/jacoco-resources/up.gif differ
      diff --git a/waffle-jna-jakarta/jacoco/jacoco-sessions.html b/waffle-jna-jakarta/jacoco/jacoco-sessions.html
      new file mode 100644
      index 0000000000..b1f29ff4b1
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/jacoco-sessions.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>Sessions</title></head><body><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><a href="index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_session">Sessions</span></div><h1>Sessions</h1><p>This coverage report is based on execution data from the following sessions:</p><table class="coverage" cellspacing="0"><thead><tr><td>Session</td><td>Start Time</td><td>Dump Time</td></tr></thead><tbody><tr><td><span class="el_session">JeremyDesktop-1b0e9d4d</span></td><td>2025 Jan 1 01:00:28</td><td>2025 Jan 1 01:00:30</td></tr></tbody></table><p>Execution data for the following classes is considered in this report:</p><table class="coverage" cellspacing="0"><thead><tr><td>Class</td><td>Id</td></tr></thead><tbody><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.AbstractLinkedDeque</span></td><td><code>2a77ffa24d5d9be7</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.BLCHeader.DrainStatusRef</span></td><td><code>f84773f97a6736ed</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.BLCHeader.PadDrainStatus</span></td><td><code>7d9a5319a41b9ca8</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueue</span></td><td><code>c00926e9a449c6ff</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueueColdProducerFields</span></td><td><code>a09cd70d23ecaf3d</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueueConsumerFields</span></td><td><code>6aa34cb249547b49</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueuePad1</span></td><td><code>fba0a1f26e123349</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueuePad2</span></td><td><code>659c8423778e5829</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueuePad3</span></td><td><code>4c5dd3b7ab6320a4</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.BaseMpscLinkedArrayQueueProducerFields</span></td><td><code>2c89335480f8e1a3</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.BoundedLocalCache</span></td><td><code>c40895bd13c08a30</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.BoundedLocalCache.BoundedLocalManualCache</span></td><td><code>2e99a20c317be260</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.BoundedLocalCache.PerformCleanupTask</span></td><td><code>325653349ec9abfb</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.Buffer</span></td><td><code>b1599ea3d29c0bdd</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.Caffeine</span></td><td><code>3033f4dc9a559439</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.DisabledBuffer</span></td><td><code>bae42ed77b9c7bab</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.DisabledScheduler</span></td><td><code>367cc347203f24c6</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.LocalCacheFactory</span></td><td><code>eafc83c4690285c7</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.MpscChunkedArrayQueue</span></td><td><code>bbccdde9ba05cf42</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.MpscChunkedArrayQueueColdProducerFields</span></td><td><code>977fd31d4bc0a927</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.MpscGrowableArrayQueue</span></td><td><code>56727eedb72e9c12</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.Node</span></td><td><code>c9d7459d5e88dfe5</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.NodeFactory</span></td><td><code>09fd07b81651c244</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.NodeFactory.DeadStrongKey</span></td><td><code>8d763f90e68321d1</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.NodeFactory.DeadWeakKey</span></td><td><code>14c5fc6c93daea06</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.NodeFactory.RetiredStrongKey</span></td><td><code>8ba46556c0fe9ae2</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.NodeFactory.RetiredWeakKey</span></td><td><code>fcd9c1d025ed4138</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.PS</span></td><td><code>b8394d3b1e9a2204</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.PSW</span></td><td><code>5831cb345519a101</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.References.WeakKeyReference</span></td><td><code>35b9176751619591</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.SS</span></td><td><code>81263068a75eb751</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.SSW</span></td><td><code>ca19b3f66d87c91c</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.Scheduler</span></td><td><code>8ba6d50828293955</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.SingletonWeigher</span></td><td><code>f15cdba8a06e8d8c</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.SystemTicker</span></td><td><code>8ddf9883f173703f</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.Ticker</span></td><td><code>4cdd1e09fe54e663</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.Weigher</span></td><td><code>250db2c53ab263c8</code></td></tr><tr><td><span class="el_class">com.github.benmanes.caffeine.cache.WriteOrderDeque</span></td><td><code>ef7fb210f1f19988</code></td></tr><tr><td><span class="el_class">com.sun.jna.Callback</span></td><td><code>434efcdf485821aa</code></td></tr><tr><td><span class="el_class">com.sun.jna.CallbackReference</span></td><td><code>b338cbfc6770d971</code></td></tr><tr><td><span class="el_class">com.sun.jna.CallbackReference.AttachOptions</span></td><td><code>112330ffdc516f64</code></td></tr><tr><td><span class="el_class">com.sun.jna.DefaultTypeMapper</span></td><td><code>86028cb7ac241e13</code></td></tr><tr><td><span class="el_class">com.sun.jna.DefaultTypeMapper.Entry</span></td><td><code>dcdeaaa861c940a1</code></td></tr><tr><td><span class="el_class">com.sun.jna.FromNativeContext</span></td><td><code>40994fdd441efd8b</code></td></tr><tr><td><span class="el_class">com.sun.jna.Function</span></td><td><code>61a6466c513aec4b</code></td></tr><tr><td><span class="el_class">com.sun.jna.FunctionParameterContext</span></td><td><code>8a741ba61be9844f</code></td></tr><tr><td><span class="el_class">com.sun.jna.FunctionResultContext</span></td><td><code>7efc8f5dc5b70008</code></td></tr><tr><td><span class="el_class">com.sun.jna.IntegerType</span></td><td><code>ccfd0c669f8c00de</code></td></tr><tr><td><span class="el_class">com.sun.jna.JNIEnv</span></td><td><code>50a7c0699da27f8c</code></td></tr><tr><td><span class="el_class">com.sun.jna.Klass</span></td><td><code>ee8a7cc34d94dedc</code></td></tr><tr><td><span class="el_class">com.sun.jna.LastErrorException</span></td><td><code>7315be387b0f1366</code></td></tr><tr><td><span class="el_class">com.sun.jna.Library.Handler</span></td><td><code>271195e9e75dbdeb</code></td></tr><tr><td><span class="el_class">com.sun.jna.Library.Handler.FunctionInfo</span></td><td><code>d9b0ade05420b393</code></td></tr><tr><td><span class="el_class">com.sun.jna.Memory</span></td><td><code>88f71f582793148b</code></td></tr><tr><td><span class="el_class">com.sun.jna.Memory.MemoryDisposer</span></td><td><code>7cf0238361da29a1</code></td></tr><tr><td><span class="el_class">com.sun.jna.Memory.SharedMemory</span></td><td><code>060c20236cd99563</code></td></tr><tr><td><span class="el_class">com.sun.jna.MethodParameterContext</span></td><td><code>f1cb05e60286b6fb</code></td></tr><tr><td><span class="el_class">com.sun.jna.MethodResultContext</span></td><td><code>fb78f286fcfc2319</code></td></tr><tr><td><span class="el_class">com.sun.jna.Native</span></td><td><code>d7a6c665abe5fc32</code></td></tr><tr><td><span class="el_class">com.sun.jna.Native.1</span></td><td><code>3a0446487a7a5991</code></td></tr><tr><td><span class="el_class">com.sun.jna.Native.2</span></td><td><code>f65a2d6f496c39fe</code></td></tr><tr><td><span class="el_class">com.sun.jna.Native.5</span></td><td><code>cb479c1d000e4d09</code></td></tr><tr><td><span class="el_class">com.sun.jna.Native.7</span></td><td><code>7b06cba0dd94a5ec</code></td></tr><tr><td><span class="el_class">com.sun.jna.Native.Buffers</span></td><td><code>d4d0384e3ede9683</code></td></tr><tr><td><span class="el_class">com.sun.jna.NativeLibrary</span></td><td><code>dccba72a21cca387</code></td></tr><tr><td><span class="el_class">com.sun.jna.NativeLibrary.1</span></td><td><code>4f6359dafbb1de14</code></td></tr><tr><td><span class="el_class">com.sun.jna.NativeLibrary.2</span></td><td><code>2344f2740e04dbd8</code></td></tr><tr><td><span class="el_class">com.sun.jna.NativeLibrary.NativeLibraryDisposer</span></td><td><code>f8b03d9288b882f5</code></td></tr><tr><td><span class="el_class">com.sun.jna.NativeLong</span></td><td><code>aa72e99971baa1b1</code></td></tr><tr><td><span class="el_class">com.sun.jna.NativeMappedConverter</span></td><td><code>2b9223675c1535f8</code></td></tr><tr><td><span class="el_class">com.sun.jna.NativeString</span></td><td><code>3d28aed2b6c13d41</code></td></tr><tr><td><span class="el_class">com.sun.jna.NativeString.StringMemory</span></td><td><code>ead13a5db1177ab8</code></td></tr><tr><td><span class="el_class">com.sun.jna.Platform</span></td><td><code>3745629b5e34f0f0</code></td></tr><tr><td><span class="el_class">com.sun.jna.Pointer</span></td><td><code>764763ec4e1c97bc</code></td></tr><tr><td><span class="el_class">com.sun.jna.PointerType</span></td><td><code>6f69fbe02f0f9f9b</code></td></tr><tr><td><span class="el_class">com.sun.jna.Structure</span></td><td><code>9fb0c4f3f16b5ba5</code></td></tr><tr><td><span class="el_class">com.sun.jna.Structure.1</span></td><td><code>0638697bbe80e6d7</code></td></tr><tr><td><span class="el_class">com.sun.jna.Structure.2</span></td><td><code>d8bdcc39d3ccb5bb</code></td></tr><tr><td><span class="el_class">com.sun.jna.Structure.3</span></td><td><code>c49e694d509ea7fc</code></td></tr><tr><td><span class="el_class">com.sun.jna.Structure.AutoAllocated</span></td><td><code>788b1d628aacda70</code></td></tr><tr><td><span class="el_class">com.sun.jna.Structure.LayoutInfo</span></td><td><code>ac985b99d0086bbf</code></td></tr><tr><td><span class="el_class">com.sun.jna.Structure.NativeStringTracking</span></td><td><code>5f5816f9a475c448</code></td></tr><tr><td><span class="el_class">com.sun.jna.Structure.StructField</span></td><td><code>2d8f416086d6d7a2</code></td></tr><tr><td><span class="el_class">com.sun.jna.Structure.StructureSet</span></td><td><code>62c90ea3c3226fbc</code></td></tr><tr><td><span class="el_class">com.sun.jna.StructureReadContext</span></td><td><code>d4dc46395a7224e9</code></td></tr><tr><td><span class="el_class">com.sun.jna.StructureWriteContext</span></td><td><code>bfa000b79135b078</code></td></tr><tr><td><span class="el_class">com.sun.jna.ToNativeContext</span></td><td><code>65c16cf68ab964ac</code></td></tr><tr><td><span class="el_class">com.sun.jna.VarArgsChecker</span></td><td><code>f065ed464f2b4194</code></td></tr><tr><td><span class="el_class">com.sun.jna.VarArgsChecker.RealVarArgsChecker</span></td><td><code>8adbc20c1979b81f</code></td></tr><tr><td><span class="el_class">com.sun.jna.WString</span></td><td><code>cc3ec3150181c10b</code></td></tr><tr><td><span class="el_class">com.sun.jna.WeakMemoryHolder</span></td><td><code>154292fbd52e87e2</code></td></tr><tr><td><span class="el_class">com.sun.jna.internal.Cleaner</span></td><td><code>2aa35b38a95f3b08</code></td></tr><tr><td><span class="el_class">com.sun.jna.internal.Cleaner.CleanerRef</span></td><td><code>e869958fc56960c1</code></td></tr><tr><td><span class="el_class">com.sun.jna.internal.Cleaner.CleanerThread</span></td><td><code>627aa76ee12b9514</code></td></tr><tr><td><span class="el_class">com.sun.jna.internal.ReflectionUtils</span></td><td><code>610b059d03270bdf</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Advapi32</span></td><td><code>f8e1a0a2ea73383d</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Advapi32Util</span></td><td><code>102d9a3137a78152</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Advapi32Util.Account</span></td><td><code>46e5dfdd5143c365</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Kernel32</span></td><td><code>472dc22bc0cfe59d</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Kernel32Util</span></td><td><code>6d7560615c5efc20</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.LMAccess.LOCALGROUP_INFO_1</span></td><td><code>d11067830f6656c8</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Netapi32</span></td><td><code>d4f30a9b6e88dad1</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Netapi32Util</span></td><td><code>30dd3c3f9131cb40</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Netapi32Util.Group</span></td><td><code>c8c459cb4a1c09bd</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Netapi32Util.LocalGroup</span></td><td><code>1221575126d755d0</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Secur32</span></td><td><code>0d61638b4ca5acd9</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Secur32Util</span></td><td><code>68e13b4f9a5977df</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Sspi</span></td><td><code>fa6aa844c76e70ee</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Sspi.CredHandle</span></td><td><code>3baea375a2c7d471</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Sspi.CtxtHandle</span></td><td><code>e4d89fe73ef49299</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Sspi.SECURITY_INTEGER</span></td><td><code>f41a693837de22e3</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Sspi.SecBuffer</span></td><td><code>701b05d165336697</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Sspi.SecBufferDesc</span></td><td><code>d62eea0528a539d2</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Sspi.SecHandle</span></td><td><code>13f2de26c224ca14</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Sspi.TimeStamp</span></td><td><code>5ff64302a5eb5698</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.SspiUtil.ManagedSecBufferDesc</span></td><td><code>b922167678020fd8</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.VersionHelpers</span></td><td><code>1d1771eb9d30e778</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.W32Errors</span></td><td><code>5701361c3faf1592</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.Win32Exception</span></td><td><code>6a8d6bf8aac4b9c6</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.WinDef.DWORD</span></td><td><code>3feb999281b8ec0f</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.WinDef.WORD</span></td><td><code>0a0cf2d428ca57ae</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.WinNT.HANDLEByReference</span></td><td><code>4a5954dd001ac818</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.WinNT.HRESULT</span></td><td><code>afb3c452a4d553d8</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.WinNT.LocaleMacros</span></td><td><code>9e196ff1ed954e27</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.WinNT.OSVERSIONINFOEX</span></td><td><code>6c398e0f5ab8abf2</code></td></tr><tr><td><span class="el_class">com.sun.jna.platform.win32.WinNT.PSID</span></td><td><code>dfcc50eab60ac362</code></td></tr><tr><td><span class="el_class">com.sun.jna.ptr.ByReference</span></td><td><code>4b4ccdf4837f8e37</code></td></tr><tr><td><span class="el_class">com.sun.jna.ptr.IntByReference</span></td><td><code>08a380733d32a8a9</code></td></tr><tr><td><span class="el_class">com.sun.jna.ptr.PointerByReference</span></td><td><code>35283d86e7a60f68</code></td></tr><tr><td><span class="el_class">com.sun.jna.win32.W32APIFunctionMapper</span></td><td><code>ba0d3e734fac140b</code></td></tr><tr><td><span class="el_class">com.sun.jna.win32.W32APIOptions</span></td><td><code>f4cb5ad08fef16dd</code></td></tr><tr><td><span class="el_class">com.sun.jna.win32.W32APIOptions.1</span></td><td><code>5383c92c07560c19</code></td></tr><tr><td><span class="el_class">com.sun.jna.win32.W32APIOptions.2</span></td><td><code>3f322c8368523ab9</code></td></tr><tr><td><span class="el_class">com.sun.jna.win32.W32APITypeMapper</span></td><td><code>3fce234ec90e0283</code></td></tr><tr><td><span class="el_class">com.sun.jna.win32.W32APITypeMapper.1</span></td><td><code>c86c2ee3fff50376</code></td></tr><tr><td><span class="el_class">com.sun.jna.win32.W32APITypeMapper.2</span></td><td><code>c07bb09d9c767885</code></td></tr><tr><td><span class="el_class">mockit.Expectations</span></td><td><code>7a26ef36dfc51562</code></td></tr><tr><td><span class="el_class">mockit.Invocations</span></td><td><code>7f0fc5adf193bc07</code></td></tr><tr><td><span class="el_class">mockit.Verifications</span></td><td><code>2a4b943e51450801</code></td></tr><tr><td><span class="el_class">mockit.asm.AnnotatedReader</span></td><td><code>3f8b15d63d5b1223</code></td></tr><tr><td><span class="el_class">mockit.asm.BaseWriter</span></td><td><code>2f5216f3902a031d</code></td></tr><tr><td><span class="el_class">mockit.asm.SignatureWriter</span></td><td><code>004a622ec556d71a</code></td></tr><tr><td><span class="el_class">mockit.asm.annotations.AnnotationReader</span></td><td><code>e0378165fe5828ad</code></td></tr><tr><td><span class="el_class">mockit.asm.annotations.AnnotationVisitor</span></td><td><code>cce79663883beb24</code></td></tr><tr><td><span class="el_class">mockit.asm.classes.BootstrapMethodsWriter</span></td><td><code>20f41b42fbdb1bb2</code></td></tr><tr><td><span class="el_class">mockit.asm.classes.ClassInfo</span></td><td><code>4fc39bbd4b2dd78d</code></td></tr><tr><td><span class="el_class">mockit.asm.classes.ClassReader</span></td><td><code>3df0678d6d1c626f</code></td></tr><tr><td><span class="el_class">mockit.asm.classes.ClassVisitor</span></td><td><code>f1490a92ec992dd6</code></td></tr><tr><td><span class="el_class">mockit.asm.classes.ClassWriter</span></td><td><code>6a072a3a94756d04</code></td></tr><tr><td><span class="el_class">mockit.asm.classes.ConstantPoolCopying</span></td><td><code>441e20196d8cb640</code></td></tr><tr><td><span class="el_class">mockit.asm.classes.InnerClassesWriter</span></td><td><code>388c8c2f4a3e4e36</code></td></tr><tr><td><span class="el_class">mockit.asm.classes.InterfaceWriter</span></td><td><code>18686be666fe08ff</code></td></tr><tr><td><span class="el_class">mockit.asm.classes.NestHostWriter</span></td><td><code>c5052d5920ff1894</code></td></tr><tr><td><span class="el_class">mockit.asm.classes.NestMembersWriter</span></td><td><code>b6c1d948c533d80c</code></td></tr><tr><td><span class="el_class">mockit.asm.classes.SourceFileWriter</span></td><td><code>0b780c04e58abeb3</code></td></tr><tr><td><span class="el_class">mockit.asm.classes.WrappingClassVisitor</span></td><td><code>b3e5b03e17c38275</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.AttributeWriter</span></td><td><code>25c74aa04b899d45</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.BootstrapMethodItem</span></td><td><code>aa369b05674ff114</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.ClassMemberItem</span></td><td><code>1caa3d17729e0e2b</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.ConstantPoolGeneration</span></td><td><code>4d653e6bc9863f4b</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.DoubleItem</span></td><td><code>c06b8443f6b1c15a</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.DynamicItem</span></td><td><code>42989c8bbc5328ee</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.FloatItem</span></td><td><code>c122155f2db80e38</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.IntItem</span></td><td><code>740e7027bc8d49eb</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.IntValueItem</span></td><td><code>af1e6b78d7348342</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.Item</span></td><td><code>58e9ad848cf0d674</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.LongItem</span></td><td><code>78ab9bc24adae6cb</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.LongValueItem</span></td><td><code>fbb6589ad2a3fcd9</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.MergedTypeTableItem</span></td><td><code>c1bde84156e1aaf6</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.MethodHandleItem</span></td><td><code>9f60dccaac1cd812</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.NameAndTypeItem</span></td><td><code>f778e904acdcd5f6</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.NormalTypeTableItem</span></td><td><code>0f28c381dacbff33</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.StringItem</span></td><td><code>8e05125fb952552d</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.TypeOrMemberItem</span></td><td><code>3b03047dd0c1d2bc</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.TypeTableItem</span></td><td><code>203911eb396b6673</code></td></tr><tr><td><span class="el_class">mockit.asm.constantPool.UninitializedTypeTableItem</span></td><td><code>20975b327dc8fb42</code></td></tr><tr><td><span class="el_class">mockit.asm.controlFlow.CFGAnalysis</span></td><td><code>657843ccc84ac82d</code></td></tr><tr><td><span class="el_class">mockit.asm.controlFlow.Edge</span></td><td><code>a8df1c9ee7d28d9c</code></td></tr><tr><td><span class="el_class">mockit.asm.controlFlow.Frame</span></td><td><code>56163feb0a0ab003</code></td></tr><tr><td><span class="el_class">mockit.asm.controlFlow.Label</span></td><td><code>0ce1d53145507166</code></td></tr><tr><td><span class="el_class">mockit.asm.controlFlow.StackMapTableWriter</span></td><td><code>814243b602750b62</code></td></tr><tr><td><span class="el_class">mockit.asm.exceptionHandling.ExceptionHandler</span></td><td><code>75a7fc0ac9dfe487</code></td></tr><tr><td><span class="el_class">mockit.asm.exceptionHandling.ExceptionHandling</span></td><td><code>89c40897c167ea92</code></td></tr><tr><td><span class="el_class">mockit.asm.fields.FieldReader</span></td><td><code>2dec1d4b3188c63d</code></td></tr><tr><td><span class="el_class">mockit.asm.fields.FieldVisitor</span></td><td><code>5e80e7d57378bce0</code></td></tr><tr><td><span class="el_class">mockit.asm.jvmConstants.Access</span></td><td><code>44f9a6befa0d7f16</code></td></tr><tr><td><span class="el_class">mockit.asm.jvmConstants.JVMInstruction</span></td><td><code>3e3e99cdb9710f4c</code></td></tr><tr><td><span class="el_class">mockit.asm.metadata.ClassMetadataReader</span></td><td><code>3f55d3e6a0d11cd3</code></td></tr><tr><td><span class="el_class">mockit.asm.metadata.ClassMetadataReader.Attribute</span></td><td><code>e985a1a1cfbcda93</code></td></tr><tr><td><span class="el_class">mockit.asm.metadata.ClassMetadataReader.ConstantPoolTag</span></td><td><code>59bc74d3e6f420f0</code></td></tr><tr><td><span class="el_class">mockit.asm.metadata.ClassMetadataReader.MemberInfo</span></td><td><code>c14d45405b2d204a</code></td></tr><tr><td><span class="el_class">mockit.asm.metadata.ClassMetadataReader.MethodInfo</span></td><td><code>c761410564f15f46</code></td></tr><tr><td><span class="el_class">mockit.asm.metadata.ObjectWithAttributes</span></td><td><code>e003e6ea548861b0</code></td></tr><tr><td><span class="el_class">mockit.asm.methods.ExceptionsWriter</span></td><td><code>d5e082c8f010a044</code></td></tr><tr><td><span class="el_class">mockit.asm.methods.LineNumberTableWriter</span></td><td><code>be6163340dfadc65</code></td></tr><tr><td><span class="el_class">mockit.asm.methods.LocalVariableTableWriter</span></td><td><code>d541feb0a9c19962</code></td></tr><tr><td><span class="el_class">mockit.asm.methods.MethodReader</span></td><td><code>033e4e6df7e5f7f4</code></td></tr><tr><td><span class="el_class">mockit.asm.methods.MethodVisitor</span></td><td><code>58d05007728aa171</code></td></tr><tr><td><span class="el_class">mockit.asm.methods.MethodWriter</span></td><td><code>dc33fbd2a4105dce</code></td></tr><tr><td><span class="el_class">mockit.asm.methods.WrappingMethodVisitor</span></td><td><code>8dfd35348df79999</code></td></tr><tr><td><span class="el_class">mockit.asm.types.ArrayType</span></td><td><code>9ebee9e3d7dcb66f</code></td></tr><tr><td><span class="el_class">mockit.asm.types.JavaType</span></td><td><code>7a4290d165920664</code></td></tr><tr><td><span class="el_class">mockit.asm.types.ObjectType</span></td><td><code>9eddb14b705b9f29</code></td></tr><tr><td><span class="el_class">mockit.asm.types.PrimitiveType</span></td><td><code>d1e4c8aed8c87893</code></td></tr><tr><td><span class="el_class">mockit.asm.types.ReferenceType</span></td><td><code>9617f56c8a752247</code></td></tr><tr><td><span class="el_class">mockit.asm.util.ByteVector</span></td><td><code>318ab749bbb19a73</code></td></tr><tr><td><span class="el_class">mockit.asm.util.BytecodeReader</span></td><td><code>babad71a4e2748b7</code></td></tr><tr><td><span class="el_class">mockit.asm.util.MethodHandle</span></td><td><code>93296730c904dc15</code></td></tr><tr><td><span class="el_class">mockit.coverage.CodeCoverage</span></td><td><code>6bd6041105c94b0d</code></td></tr><tr><td><span class="el_class">mockit.coverage.Configuration</span></td><td><code>ee3e0a8e5ad38345</code></td></tr><tr><td><span class="el_class">mockit.integration.TestRunnerDecorator</span></td><td><code>208ee8fde89d3897</code></td></tr><tr><td><span class="el_class">mockit.integration.junit5.JMockitExtension</span></td><td><code>1fadb1fba9eff25c</code></td></tr><tr><td><span class="el_class">mockit.integration.junit5.JMockitExtension.ParamValueInitContext</span></td><td><code>4356925d279708de</code></td></tr><tr><td><span class="el_class">mockit.internal.BaseClassModifier</span></td><td><code>437220472fe6bdfd</code></td></tr><tr><td><span class="el_class">mockit.internal.BaseClassModifier.1</span></td><td><code>fc6c64cf5b59fb61</code></td></tr><tr><td><span class="el_class">mockit.internal.BaseClassModifier.DynamicModifier</span></td><td><code>88686ae7e8482bf7</code></td></tr><tr><td><span class="el_class">mockit.internal.ClassFile</span></td><td><code>29596b644bbf9923</code></td></tr><tr><td><span class="el_class">mockit.internal.ClassLoadingBridge</span></td><td><code>15f24762849122c1</code></td></tr><tr><td><span class="el_class">mockit.internal.classGeneration.ImplementationClass</span></td><td><code>4e77fb4abdc4b79a</code></td></tr><tr><td><span class="el_class">mockit.internal.classGeneration.ImplementationClass.1</span></td><td><code>d8095aa238215b46</code></td></tr><tr><td><span class="el_class">mockit.internal.classGeneration.MockedTypeInfo</span></td><td><code>b99474624967f2d8</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.ActiveInvocations</span></td><td><code>4eccb20f2a5f86b1</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.BaseVerificationPhase</span></td><td><code>6d98103e52b273d0</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.EquivalentInstances</span></td><td><code>4c437eafa03a42a2</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.ExecutionMode</span></td><td><code>5072e5d769324541</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.ExecutionMode.1</span></td><td><code>8231b81c6d6208c7</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.ExecutionMode.2</span></td><td><code>58a2925fb6dee872</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.ExecutionMode.3</span></td><td><code>b08f5ec7b33cbb7c</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.Expectation</span></td><td><code>adf7f6392392983f</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.FailureState</span></td><td><code>cc17a255e2078b26</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.InstanceBasedMatching</span></td><td><code>3d9e79c39b9bf9ca</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.MockingFilters</span></td><td><code>f7a6fe223c55cae1</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.Phase</span></td><td><code>9c34712d90f1c918</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.PhasedExecutionState</span></td><td><code>e9d0b26bc014e035</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.RecordAndReplayExecution</span></td><td><code>cf17c0b3ce437488</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.RecordPhase</span></td><td><code>6b0a6c0723058932</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.ReplayPhase</span></td><td><code>64cfc795e675cb34</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.TestOnlyPhase</span></td><td><code>cc9a79a666754158</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.UnorderedVerificationPhase</span></td><td><code>90e6de08cfb7d19d</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.VerifiedExpectation</span></td><td><code>e244b10dd525c9dc</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.argumentMatching.ClassMatcher</span></td><td><code>1b7d13caca84a7f9</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.argumentMatching.EqualityMatcher</span></td><td><code>ce0196945d1a9591</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.invocation.ArgumentValuesAndMatchers</span></td><td><code>f9aac0624fb73c05</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.invocation.ArgumentValuesAndMatchersWithoutVarargs</span></td><td><code>d5637188e8cc4aeb</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.invocation.ExpectationError</span></td><td><code>1ee16adc610723ff</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.invocation.ExpectedInvocation</span></td><td><code>a81962b694e9ce5e</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.invocation.InvocationArguments</span></td><td><code>47042e13cf0ebd6d</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.invocation.InvocationConstraints</span></td><td><code>662637b27f8f9f54</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.invocation.InvocationResult</span></td><td><code>af4e45ce249d30b6</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.invocation.InvocationResult.ReturnValueResult</span></td><td><code>bbace4ad37b26e85</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.invocation.InvocationResult.ThrowableResult</span></td><td><code>3207e5332062a182</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.invocation.InvocationResults</span></td><td><code>08afce9b0e58e824</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.invocation.ReturnTypeConversion</span></td><td><code>d18d9aadf1f373df</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.BaseTypeRedefinition</span></td><td><code>1c628a1a87fd61cc</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.BaseTypeRedefinition.1</span></td><td><code>135608c5a79f3baf</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.FieldTypeRedefinition</span></td><td><code>e877170731a6eb1e</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.FieldTypeRedefinitions</span></td><td><code>35630960e9213938</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.InstanceFactory</span></td><td><code>b059b857c9659afd</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.InstanceFactory.InterfaceInstanceFactory</span></td><td><code>b7d572b72e3d3236</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.InterfaceImplementationGenerator</span></td><td><code>9b5087ca2f1048aa</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.MockedBridge</span></td><td><code>11ebc7261cc3cb49</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.MockedClassModifier</span></td><td><code>378a3628c36a0287</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.MockedType</span></td><td><code>df48b180ec3682fb</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.ParameterTypeRedefinitions</span></td><td><code>e2abde05df3b1c64</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.TypeRedefinition</span></td><td><code>4177d9428cbd2e81</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.mocking.TypeRedefinitions</span></td><td><code>a4af6d88279c79a3</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.state.CascadingTypes</span></td><td><code>e9433ca41b315d72</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.state.ExecutingTest</span></td><td><code>2fc1937508a2fa8a</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.state.MockedTypeCascade</span></td><td><code>e587fabb1aafa7d2</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.transformation.ArgumentCapturing</span></td><td><code>948b2632ffea9745</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.transformation.ArgumentMatching</span></td><td><code>558350e104310aef</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.transformation.ExpectationsTransformer</span></td><td><code>a28815043857aef2</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.transformation.ExpectationsTransformer.1</span></td><td><code>2bba08fe3f19ce07</code></td></tr><tr><td><span class="el_class">mockit.internal.expectations.transformation.InvocationBlockModifier</span></td><td><code>c96d1a2f5c77bdf5</code></td></tr><tr><td><span class="el_class">mockit.internal.faking.FakeBridge</span></td><td><code>d5c7bf36e16d2186</code></td></tr><tr><td><span class="el_class">mockit.internal.faking.FakeClasses</span></td><td><code>ecd18691572198ca</code></td></tr><tr><td><span class="el_class">mockit.internal.faking.FakeClasses.SavePoint</span></td><td><code>ca6b2f2cb18f5f14</code></td></tr><tr><td><span class="el_class">mockit.internal.faking.FakeMethodBridge</span></td><td><code>283dc1fcb5d58bad</code></td></tr><tr><td><span class="el_class">mockit.internal.faking.FakeStates</span></td><td><code>d3de3753be2ecde3</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.InjectionPoint</span></td><td><code>3b574be4e12bbeed</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.InjectionPoint.KindOfInjectionPoint</span></td><td><code>bee8419ef3fc95e3</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.InjectionProvider</span></td><td><code>6ff449a642886939</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.InjectionProviders</span></td><td><code>7dbea24730c7c152</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.InjectionState</span></td><td><code>31831b185f8e2f41</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.Injector</span></td><td><code>87710729687d1e5c</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.InterfaceResolution</span></td><td><code>3aee6d087d50d3a1</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.LifecycleMethods</span></td><td><code>376296af3032aead</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.TestedClass</span></td><td><code>85a8d312e076891e</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.TestedClassInstantiations</span></td><td><code>aee5214f3e2696bc</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.TestedField</span></td><td><code>2f512647b969ded7</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.TestedObject</span></td><td><code>136985dd3d64eb64</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.TestedObjectCreation</span></td><td><code>5c4bc1ecfbbb192d</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.TestedParameters</span></td><td><code>2a781347c9e613af</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.constructor.ConstructorInjection</span></td><td><code>71ab26920c31f7c4</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.constructor.ConstructorSearch</span></td><td><code>ad565adfdf3c33e0</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.field.FieldInjection</span></td><td><code>0e450e6527a7711c</code></td></tr><tr><td><span class="el_class">mockit.internal.injection.field.FieldToInject</span></td><td><code>5187aa7687813ee4</code></td></tr><tr><td><span class="el_class">mockit.internal.reflection.ConstructorReflection</span></td><td><code>fe0c09ff97f2a3ce</code></td></tr><tr><td><span class="el_class">mockit.internal.reflection.FieldReflection</span></td><td><code>abd12061bd4283a1</code></td></tr><tr><td><span class="el_class">mockit.internal.reflection.GenericTypeReflection</span></td><td><code>b7aa45cedb777f0a</code></td></tr><tr><td><span class="el_class">mockit.internal.reflection.GenericTypeReflection.GenericSignature</span></td><td><code>653701ce149724d6</code></td></tr><tr><td><span class="el_class">mockit.internal.reflection.MethodReflection</span></td><td><code>e9211c66af0990f5</code></td></tr><tr><td><span class="el_class">mockit.internal.reflection.ParameterReflection</span></td><td><code>75296e515beb647c</code></td></tr><tr><td><span class="el_class">mockit.internal.startup.ClassLoadingBridgeFields</span></td><td><code>3ebd7aada25f5a8a</code></td></tr><tr><td><span class="el_class">mockit.internal.startup.ClassLoadingBridgeFields.FieldAdditionTransformer</span></td><td><code>ed1206875ae014cf</code></td></tr><tr><td><span class="el_class">mockit.internal.startup.ClassLoadingBridgeFields.FieldAdditionTransformer.1</span></td><td><code>ec57dc6d9a4881f8</code></td></tr><tr><td><span class="el_class">mockit.internal.startup.JMockitInitialization</span></td><td><code>0cd55b58aee06d7b</code></td></tr><tr><td><span class="el_class">mockit.internal.startup.Startup</span></td><td><code>1d083da07ec4fdf7</code></td></tr><tr><td><span class="el_class">mockit.internal.state.CachedClassfiles</span></td><td><code>210df8762ca2e895</code></td></tr><tr><td><span class="el_class">mockit.internal.state.MockFixture</span></td><td><code>ffebddc45b811643</code></td></tr><tr><td><span class="el_class">mockit.internal.state.ParameterNames</span></td><td><code>820a3b47bf64ce8f</code></td></tr><tr><td><span class="el_class">mockit.internal.state.SavePoint</span></td><td><code>898f466122816107</code></td></tr><tr><td><span class="el_class">mockit.internal.state.TestRun</span></td><td><code>44a16518219034d7</code></td></tr><tr><td><span class="el_class">mockit.internal.state.TestRun.1</span></td><td><code>89ddc43d7d4169c3</code></td></tr><tr><td><span class="el_class">mockit.internal.util.AutoBoxing</span></td><td><code>304a1b4e500ea2bf</code></td></tr><tr><td><span class="el_class">mockit.internal.util.ClassLoad</span></td><td><code>7a804751dfac4c20</code></td></tr><tr><td><span class="el_class">mockit.internal.util.DefaultValues</span></td><td><code>586ef07b130db778</code></td></tr><tr><td><span class="el_class">mockit.internal.util.DefaultValues.1</span></td><td><code>1880b785d46249f0</code></td></tr><tr><td><span class="el_class">mockit.internal.util.DefaultValues.2</span></td><td><code>3b37fc59ddb47d37</code></td></tr><tr><td><span class="el_class">mockit.internal.util.DefaultValues.3</span></td><td><code>ab3ba8d96a396d9d</code></td></tr><tr><td><span class="el_class">mockit.internal.util.GeneratedClasses</span></td><td><code>2b34bcb398d81e27</code></td></tr><tr><td><span class="el_class">mockit.internal.util.ObjectMethods</span></td><td><code>55ae7fb2803ca101</code></td></tr><tr><td><span class="el_class">mockit.internal.util.ParameterNameExtractor</span></td><td><code>ce314cc47e2bddac</code></td></tr><tr><td><span class="el_class">mockit.internal.util.TestMethod</span></td><td><code>651527a55f1be97c</code></td></tr><tr><td><span class="el_class">mockit.internal.util.TypeConversionBytecode</span></td><td><code>7f8024ac9fd6e5b3</code></td></tr><tr><td><span class="el_class">mockit.internal.util.TypeDescriptor</span></td><td><code>1e88781829c35013</code></td></tr><tr><td><span class="el_class">mockit.internal.util.Utilities</span></td><td><code>8500120edad3d9da</code></td></tr><tr><td><span class="el_class">net.bytebuddy.agent.Installer</span></td><td><code>8bf7b5c7d2be2c5c</code></td></tr><tr><td><span class="el_class">org.apache.maven.plugin.surefire.log.api.NullConsoleLogger</span></td><td><code>50e0945fec76b333</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.BaseProviderFactory</span></td><td><code>da939a0152866a4b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.BiProperty</span></td><td><code>ed0281592f3976b4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Command</span></td><td><code>52d7b732759793ff</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Constants</span></td><td><code>8f58b0da27218c74</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.DumpErrorSingleton</span></td><td><code>ea25742803c9e73f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkedProcessEventType</span></td><td><code>4f32ae2d4e670365</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkingReporterFactory</span></td><td><code>be06f83accc5a8aa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkingRunListener</span></td><td><code>c34d0a9f28f66585</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.MasterProcessCommand</span></td><td><code>fc8c116a509256d1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Shutdown</span></td><td><code>47a37ed2a684ef1d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.cli.CommandLineOption</span></td><td><code>5825f848ee2abcd7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.provider.AbstractProvider</span></td><td><code>0fea65ed91d7c12a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture</span></td><td><code>7ee3451cf95e2f70</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture.ForwardingPrintStream</span></td><td><code>804935f758ebaea3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture.NullOutputStream</span></td><td><code>a81300d2d50decb6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ReporterConfiguration</span></td><td><code>bf4075c0385296c2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.RunMode</span></td><td><code>70edc0a9dea60143</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.SimpleReportEntry</span></td><td><code>5acc6a35bed0445f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.TestOutputReportEntry</span></td><td><code>42f823601e9c6877</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder</span></td><td><code>c6f3b2781f9ac881</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.BufferedStream</span></td><td><code>11f69a75bc1c7211</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.Memento</span></td><td><code>e504a9e8cfc028af</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.Segment</span></td><td><code>773004ac6cd115ef</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.StreamReadStatus</span></td><td><code>8d5ee1d510b5c935</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamEncoder</span></td><td><code>9547668418a858ad</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.SegmentType</span></td><td><code>77b0d78ed3ddd126</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.suite.RunResult</span></td><td><code>54776a4f781eda02</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.DirectoryScannerParameters</span></td><td><code>529e83b831c47f72</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.IncludedExcludedPatterns</span></td><td><code>e12220ce508068df</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest</span></td><td><code>119a5faa0ae08a91</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.ClassMatcher</span></td><td><code>cb9dd1b6069a872b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.MethodMatcher</span></td><td><code>1d5196f3dfcebd52</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.Type</span></td><td><code>6f46eedd1917ca66</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.RunOrderParameters</span></td><td><code>f74f6b3eb9f1a132</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestArtifactInfo</span></td><td><code>6d162cddde2db959</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestListResolver</span></td><td><code>0f4645f0d7fd02c8</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestRequest</span></td><td><code>1cb2946d8f0dc9e4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.CloseableIterator</span></td><td><code>01846c357efacb7b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.DefaultRunOrderCalculator</span></td><td><code>21a42ec0f6d63b8e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.DefaultScanResult</span></td><td><code>01695a339c66ab8d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.ReflectionUtils</span></td><td><code>7f9a430ae144c985</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.RunOrder</span></td><td><code>02d51e3d43c45761</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.TestsToRun</span></td><td><code>db4e8195893ece6d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.TestsToRun.ClassesIterator</span></td><td><code>543f26bfbdd04ce0</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleReadableChannel</span></td><td><code>6826ce793980b64e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleWritableChannel</span></td><td><code>484afcc5593fbc9a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels</span></td><td><code>eb60281181a1dc33</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels.3</span></td><td><code>605144c3f67338aa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels.4</span></td><td><code>4834cf9402eabd28</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.ClassMethod</span></td><td><code>817ad544e129b000</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DaemonThreadFactory</span></td><td><code>b2161e778265b95d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DaemonThreadFactory.NamedThreadFactory</span></td><td><code>e3fb668fa8792230</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DumpFileUtils</span></td><td><code>9cc0f89ffb46ba32</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.ImmutableMap</span></td><td><code>c7398d64c0977b06</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.ImmutableMap.Node</span></td><td><code>3a9862055afaee58</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.ObjectUtils</span></td><td><code>992d9f9f62042416</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.AbstractPathConfiguration</span></td><td><code>f8b4034fe9c934d2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BooterDeserializer</span></td><td><code>d2b4a565d2c195cc</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClassLoaderConfiguration</span></td><td><code>c511fbfeb1f35c23</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.Classpath</span></td><td><code>d05af49602124353</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClasspathConfiguration</span></td><td><code>d14c58928ac6aa7b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader</span></td><td><code>8bc1181d0c5af474</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.1</span></td><td><code>72a8e2906ddc1c93</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.CommandRunnable</span></td><td><code>f6a6b02be2fb0964</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter</span></td><td><code>c8ce6ed3be8ec9bc</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.1</span></td><td><code>68f2dae15ae26cc2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.3</span></td><td><code>fc217f2c1d87c099</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.4</span></td><td><code>2afb302f7c81f991</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.6</span></td><td><code>850ef2748b5ef5e6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.7</span></td><td><code>9577114e02a5bdef</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.8</span></td><td><code>3c8febd047cd2b0c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.PingScheduler</span></td><td><code>c83e3af27d5d3c47</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedNodeArg</span></td><td><code>9dbb0ff22dfc1303</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PpidChecker</span></td><td><code>5ebcebb7a3e691d5</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProcessCheckerType</span></td><td><code>e554be35191ff5a7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PropertiesWrapper</span></td><td><code>1e4e30276db2e62e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProviderConfiguration</span></td><td><code>ec2cd1e39ec4278e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.StartupConfiguration</span></td><td><code>70176a3dd903d57a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.SystemPropertyManager</span></td><td><code>a843c08e9b5c79ad</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.TypeEncodedValue</span></td><td><code>355d20d53741b604</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory</span></td><td><code>67a1c051e3809086</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory.1</span></td><td><code>cc936f6c85f9235a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory.2</span></td><td><code>a1fa70e4af42c555</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.CommandChannelDecoder</span></td><td><code>6684e6bad0b7c71e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.EventChannelEncoder</span></td><td><code>b69d9287bf010b1a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.EventChannelEncoder.StackTrace</span></td><td><code>265e85a5e039b0af</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelProcessorFactory</span></td><td><code>3b29862697f79d34</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.SurefireMasterProcessChannelProcessorFactory</span></td><td><code>8c14c673718fba9e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.CommandDecoder</span></td><td><code>a23a4082e2bbd1ed</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.CommandDecoder.1</span></td><td><code>950700970edca54a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.EventEncoder</span></td><td><code>7c894cb22c8c16ca</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.JUnitPlatformProvider</span></td><td><code>958f7eb4311b3c2f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.LazyLauncher</span></td><td><code>a3841276826f155c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.RunListenerAdapter</span></td><td><code>94dea888dddc8baf</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.RunListenerAdapter.1</span></td><td><code>967ebdaaeef83363</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.TestPlanScannerFilter</span></td><td><code>db2b13639af3176e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ClassMethodIndexer</span></td><td><code>0e8f3008aec84fcb</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.JavaVersion</span></td><td><code>363a8d75e6cd432e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.StringUtils</span></td><td><code>4dc496aad4d8c8ec</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.SystemProperties</span></td><td><code>45d027bffac2edd4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.SystemUtils</span></td><td><code>db6b6930fe523518</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.function.Suppliers</span></td><td><code>cca733b85f832b5f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.math.NumberUtils</span></td><td><code>c9f62ce6c986c2d4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.utils.StringUtils</span></td><td><code>abd8480c7152bf46</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.utils.cli.ShutdownHookUtils</span></td><td><code>011b23cd829ec86c</code></td></tr><tr><td><span class="el_class">org.apiguardian.api.API.Status</span></td><td><code>95d0ffea805fc01a</code></td></tr><tr><td><span class="el_class">org.assertj.core.api.AbstractArrayAssert</span></td><td><code>52a83e4c5b0d885a</code></td></tr><tr><td><span class="el_class">org.assertj.core.api.AbstractAssert</span></td><td><code>9153c59c9866e7b8</code></td></tr><tr><td><span class="el_class">org.assertj.core.api.AbstractByteArrayAssert</span></td><td><code>2713facd24e3832c</code></td></tr><tr><td><span class="el_class">org.assertj.core.api.AbstractCharSequenceAssert</span></td><td><code>79830f5bfa4f3aa4</code></td></tr><tr><td><span class="el_class">org.assertj.core.api.AbstractEnumerableAssert</span></td><td><code>85ebcc1938625274</code></td></tr><tr><td><span class="el_class">org.assertj.core.api.AbstractStringAssert</span></td><td><code>d34c6c7d30471cbf</code></td></tr><tr><td><span class="el_class">org.assertj.core.api.Assertions</span></td><td><code>8b5d1d363cfc106f</code></td></tr><tr><td><span class="el_class">org.assertj.core.api.AssertionsForClassTypes</span></td><td><code>3bb26d1a64f753ac</code></td></tr><tr><td><span class="el_class">org.assertj.core.api.ByteArrayAssert</span></td><td><code>7906904d804b762a</code></td></tr><tr><td><span class="el_class">org.assertj.core.api.StringAssert</span></td><td><code>276d8048089fdd6d</code></td></tr><tr><td><span class="el_class">org.assertj.core.api.WritableAssertionInfo</span></td><td><code>cfe8767c89787032</code></td></tr><tr><td><span class="el_class">org.assertj.core.configuration.Configuration</span></td><td><code>6ea356a40ee80ccf</code></td></tr><tr><td><span class="el_class">org.assertj.core.configuration.ConfigurationProvider</span></td><td><code>3346c4801f784bb9</code></td></tr><tr><td><span class="el_class">org.assertj.core.configuration.PreferredAssumptionException</span></td><td><code>2789214dba489051</code></td></tr><tr><td><span class="el_class">org.assertj.core.configuration.PreferredAssumptionException.1</span></td><td><code>1eab9d24cce924d2</code></td></tr><tr><td><span class="el_class">org.assertj.core.configuration.Services</span></td><td><code>3dc1dd22400d3099</code></td></tr><tr><td><span class="el_class">org.assertj.core.error.AssertionErrorCreator</span></td><td><code>543f029a329b7766</code></td></tr><tr><td><span class="el_class">org.assertj.core.error.ConstructorInvoker</span></td><td><code>dbd17ff2cbb8bc28</code></td></tr><tr><td><span class="el_class">org.assertj.core.error.GroupTypeDescription</span></td><td><code>e2d30a487eec2c68</code></td></tr><tr><td><span class="el_class">org.assertj.core.internal.AbstractComparisonStrategy</span></td><td><code>9fcb1f09c849da9e</code></td></tr><tr><td><span class="el_class">org.assertj.core.internal.Arrays</span></td><td><code>3fbd1fe7048fa682</code></td></tr><tr><td><span class="el_class">org.assertj.core.internal.ByteArrays</span></td><td><code>cab4c1affc126670</code></td></tr><tr><td><span class="el_class">org.assertj.core.internal.Comparables</span></td><td><code>492c5254e1e386a8</code></td></tr><tr><td><span class="el_class">org.assertj.core.internal.Conditions</span></td><td><code>9baff3cf7a28d7f0</code></td></tr><tr><td><span class="el_class">org.assertj.core.internal.Failures</span></td><td><code>8ba67cf50de48759</code></td></tr><tr><td><span class="el_class">org.assertj.core.internal.Objects</span></td><td><code>4df2f0c084d1fac2</code></td></tr><tr><td><span class="el_class">org.assertj.core.internal.StandardComparisonStrategy</span></td><td><code>cb180b5c43beb144</code></td></tr><tr><td><span class="el_class">org.assertj.core.internal.Strings</span></td><td><code>7e045dfabe913b45</code></td></tr><tr><td><span class="el_class">org.assertj.core.presentation.CompositeRepresentation</span></td><td><code>3230199b443ac68a</code></td></tr><tr><td><span class="el_class">org.assertj.core.presentation.StandardRepresentation</span></td><td><code>c5356b8393ecdf92</code></td></tr><tr><td><span class="el_class">org.assertj.core.util.Arrays</span></td><td><code>20c1f3363764d24e</code></td></tr><tr><td><span class="el_class">org.assertj.core.util.Lists</span></td><td><code>5895215344293d99</code></td></tr><tr><td><span class="el_class">org.assertj.core.util.Streams</span></td><td><code>d730dd591d3325a8</code></td></tr><tr><td><span class="el_class">org.assertj.core.util.introspection.FieldSupport</span></td><td><code>1f44f51b62bb0ce5</code></td></tr><tr><td><span class="el_class">org.assertj.core.util.introspection.PropertySupport</span></td><td><code>381c5ad4b48534d7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertEquals</span></td><td><code>aea44e892a85baf5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertFalse</span></td><td><code>490b1f992b8daa2c</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertNotEquals</span></td><td><code>cbd0225f6ecb5cb3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertNotNull</span></td><td><code>e2884cd35b13d591</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertNull</span></td><td><code>33d846259de857a9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertThrows</span></td><td><code>b610f9f2b407653a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertTrue</span></td><td><code>f0647c0dd50bd0ca</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.AssertionUtils</span></td><td><code>6c2dda6a293d5c0e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.Assertions</span></td><td><code>6fe7bd6cc744a068</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator</span></td><td><code>43ef10ce77605f90</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator.IndicativeSentences</span></td><td><code>9ab9100f1735780b</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator.ReplaceUnderscores</span></td><td><code>f15d5590363b49dd</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator.Simple</span></td><td><code>e125babed463cf50</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.DisplayNameGenerator.Standard</span></td><td><code>1342164bd94b6208</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.TestInstance.Lifecycle</span></td><td><code>824d5aabc76a4e92</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ConditionEvaluationResult</span></td><td><code>35e14124a607c6e0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ExtensionContext</span></td><td><code>7c86fcf714cebd4b</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ExtensionContext.Namespace</span></td><td><code>f54a3d73ed88c765</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ExtensionContext.Store</span></td><td><code>e944780f81f4a619</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.InvocationInterceptor</span></td><td><code>4b39cae55e027ad8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.TestInstancePreDestroyCallback</span></td><td><code>3ae4d9d89c44523e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.JupiterTestEngine</span></td><td><code>e2ae6d11698760d5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.CachingJupiterConfiguration</span></td><td><code>7e7fdcd1b43926e2</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.DefaultJupiterConfiguration</span></td><td><code>3264494f5452162d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.EnumConfigurationParameterConverter</span></td><td><code>bab380425dca8d4f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter</span></td><td><code>518e1c643c30f164</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.AbstractExtensionContext</span></td><td><code>92d1cbb782871d54</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor</span></td><td><code>6bd43b670d3d109a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ClassExtensionContext</span></td><td><code>e06c010a57c8fe35</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ClassTestDescriptor</span></td><td><code>cbcf684282c128ae</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.DefaultTestInstanceFactoryContext</span></td><td><code>92e45b48982d1267</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.DisplayNameUtils</span></td><td><code>9775811d058104a0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.ExtensionUtils</span></td><td><code>99569ba69e99ecc5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor</span></td><td><code>4b5e361d03d8e2d8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineExtensionContext</span></td><td><code>95abf612d36312bc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterTestDescriptor</span></td><td><code>2edd5e083fbd4650</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.LifecycleMethodUtils</span></td><td><code>1338a13e54c3417d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.MethodBasedTestDescriptor</span></td><td><code>95f79302a3c3bfc9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.MethodExtensionContext</span></td><td><code>98cadb8bc0242165</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.TestInstanceLifecycleUtils</span></td><td><code>6fdb52a1560f3f07</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor</span></td><td><code>4a4b21b6873750d1</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractAnnotatedDescriptorWrapper</span></td><td><code>4c3051cd66ae8274</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor</span></td><td><code>2747cc3e148c57d9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor.DescriptorWrapperOrderer</span></td><td><code>01a66e5fdf0989e5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassOrderingVisitor</span></td><td><code>dbd6c4e35e0c9807</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassSelectorResolver</span></td><td><code>8192a76b48a09183</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.DefaultClassDescriptor</span></td><td><code>f1ea1aa229787830</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.DiscoverySelectorResolver</span></td><td><code>0493a46e2481b698</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodFinder</span></td><td><code>943e016148cf5f16</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodOrderingVisitor</span></td><td><code>1c057f4243f10c0e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver</span></td><td><code>340dbe384622c6a6</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver.MethodType</span></td><td><code>c7fa66a429b1a169</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver.MethodType.1</span></td><td><code>d532d669ad917197</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver.MethodType.2</span></td><td><code>c4e9f930d2a0da9e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver.MethodType.3</span></td><td><code>5582d95f7c8ba333</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsInnerClass</span></td><td><code>373ab803cd4c3f71</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsNestedTestClass</span></td><td><code>5b959cc55c1f4f91</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsPotentialTestContainer</span></td><td><code>4134835721917de5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests</span></td><td><code>cb8d6d2ffc57432f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod</span></td><td><code>671448bb3682a8b7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestMethod</span></td><td><code>53d31c5fa4778cc3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod</span></td><td><code>db07bccfb8a7df73</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestableMethod</span></td><td><code>8a0a6571eef022fb</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ConditionEvaluator</span></td><td><code>3bb7965905521dbe</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ConstructorInvocation</span></td><td><code>f53a3f70cf473b9d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.DefaultExecutableInvoker</span></td><td><code>8974ffb77e1cf465</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.DefaultParameterContext</span></td><td><code>96c6273036c2db02</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.DefaultTestInstances</span></td><td><code>d098f31a49ce3334</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InterceptingExecutableInvoker</span></td><td><code>ab30414a2f357de2</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.ReflectiveInterceptorCall</span></td><td><code>d077167b1b3ad9de</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InvocationInterceptorChain</span></td><td><code>22131ce04612244a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InvocationInterceptorChain.InterceptedInvocation</span></td><td><code>b7b2338a38c29871</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.InvocationInterceptorChain.ValidatingInvocation</span></td><td><code>10e75cb36574e272</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext</span></td><td><code>50163587b45842fe</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.Builder</span></td><td><code>b39a5e63227384a5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.State</span></td><td><code>0766343b70481496</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.MethodInvocation</span></td><td><code>58ecfbfde557e87f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.NamespaceAwareStore</span></td><td><code>bcf4aaea269ea610</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.ParameterResolutionUtils</span></td><td><code>cd7f5d13b9a64866</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.TestInstancesProvider</span></td><td><code>2ebaf1272ef59bc5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.AutoCloseExtension</span></td><td><code>b0c206c116575b65</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.DisabledCondition</span></td><td><code>ae3c30ff8f7ce050</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.ExtensionRegistry</span></td><td><code>9b67ba9d9cc3e810</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.MutableExtensionRegistry</span></td><td><code>2445286ad5728ba3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.MutableExtensionRegistry.Entry</span></td><td><code>2c27256a5e9eeb22</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.RepeatedTestExtension</span></td><td><code>134b5213d4cb80ac</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TempDirectory</span></td><td><code>797b378613d1c2c3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TempDirectory.Scope</span></td><td><code>0acad3073640ecc4</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestInfoParameterResolver</span></td><td><code>1977e7bd25ea66b8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestReporterParameterResolver</span></td><td><code>24002b8886de1936</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutConfiguration</span></td><td><code>1e8a45682947503e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutDurationParser</span></td><td><code>363c8531b5e8d2d4</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutExtension</span></td><td><code>62b73ea4d52632c9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.JupiterThrowableCollectorFactory</span></td><td><code>46546a446de4c9c0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector</span></td><td><code>de05466420699f92</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try</span></td><td><code>d1970dd64ce22fa4</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try.Failure</span></td><td><code>2135634bf7e7ad88</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try.Success</span></td><td><code>88f304668c6ff14e</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory</span></td><td><code>7b57f78fc724ac54</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory.DelegatingLogger</span></td><td><code>835c9a026ac4df32</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.support.AnnotationSupport</span></td><td><code>3f97027aa7ba84bf</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.support.ReflectionSupport</span></td><td><code>a54544f01875c65f</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.AnnotationUtils</span></td><td><code>1da637c10cbda39c</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassLoaderUtils</span></td><td><code>41a8b61339cf4862</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassNamePatternFilterUtils</span></td><td><code>484cfeb1dc3b6e93</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassUtils</span></td><td><code>76e509e75c23c314</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClasspathScanner</span></td><td><code>23726102aeb1c0ca</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.CollectionUtils</span></td><td><code>6cb29bed5c13bb1d</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.LruCache</span></td><td><code>fd8ff40dff05b112</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.Preconditions</span></td><td><code>99362b29a037afdc</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils</span></td><td><code>f1c34b50fa11302d</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode</span></td><td><code>ecf76570811abc50</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.StringUtils</span></td><td><code>372dfca6fa74c1ea</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.UnrecoverableExceptions</span></td><td><code>2ffa834710d16849</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter</span></td><td><code>cecade1862d00032</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter.1</span></td><td><code>ed62b01b8b763511</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener</span></td><td><code>22e0c8566a0701f5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener.1</span></td><td><code>a4cdbe8dd38d8f57</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener</span></td><td><code>73f93afa543ca74a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener.1</span></td><td><code>999902b68f81dd9a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.ExecutionRequest</span></td><td><code>83d3937d6c2e4880</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.Filter</span></td><td><code>c8d2fba4bb555492</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.FilterResult</span></td><td><code>1b4753bc794e8388</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult</span></td><td><code>02b8934961bdea6f</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult.Status</span></td><td><code>22866b13273482bd</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor</span></td><td><code>a5f736d88185f693</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor.Type</span></td><td><code>8530bdf90ae8fa6b</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult</span></td><td><code>29479a0ae9db2840</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult.Status</span></td><td><code>9e54a6b249ea167a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId</span></td><td><code>a5ee26b408b26ea1</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId.Segment</span></td><td><code>03b0ccd7b69c9fc2</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueIdFormat</span></td><td><code>455c5b5eb27d1f81</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.ClassSelector</span></td><td><code>a6b2f6753eef3ff0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.DiscoverySelectors</span></td><td><code>8b2cda0d30b056d5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.MethodSelector</span></td><td><code>6c04eeae9238dc1c</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.AbstractTestDescriptor</span></td><td><code>17948dfe4c8d10c0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.ClassSource</span></td><td><code>02f1eaa5b7b685aa</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.EngineDescriptor</span></td><td><code>4ba3237c7e6b18d6</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.MethodSource</span></td><td><code>ace231244bac7856</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.ClassContainerSelectorResolver</span></td><td><code>fde8e703faa64574</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution</span></td><td><code>4937cdb1a041a120</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.DefaultContext</span></td><td><code>151f6fae99911199</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver</span></td><td><code>0ad8786b2f016b1a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.Builder</span></td><td><code>29666059b7fb2614</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.DefaultInitializationContext</span></td><td><code>1b0484c56b030686</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver</span></td><td><code>458b4a4e46b6b868</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match</span></td><td><code>3c16d4dff276f57a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match.Type</span></td><td><code>bd8402e1232e1a40</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Resolution</span></td><td><code>ba500d6ba9a79953</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource</span></td><td><code>fa0dc5b65de1b0a0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource.LockMode</span></td><td><code>705f9e9f579aeab0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine</span></td><td><code>599b10c51fe35ea3</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor</span></td><td><code>a78f13d5e60b7d08</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.LockManager</span></td><td><code>99cdeecddb4ca68b</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node</span></td><td><code>3f2ca9c1749a3d5a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node.SkipResult</span></td><td><code>42796aad70055913</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeExecutionAdvisor</span></td><td><code>c8bf7d7bb2e19471</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask</span></td><td><code>c4c004e32fc81aac</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask.DefaultDynamicTestExecutor</span></td><td><code>9048d6cd4a8e05d3</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTaskContext</span></td><td><code>f68790b28827581e</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTreeWalker</span></td><td><code>c9f34e2fe83d5caa</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils</span></td><td><code>732ad1771b71d292</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils.1</span></td><td><code>5a44a7e2cbf864b4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NopLock</span></td><td><code>2234b58e6ffa6ea1</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService</span></td><td><code>512f5438a4d56505</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SingleLock</span></td><td><code>f0bfd18cc662d7fc</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ThrowableCollector</span></td><td><code>a891c129fd2a01df</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore</span></td><td><code>fb95e61bdaf5378c</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore.CompositeKey</span></td><td><code>a34d604b86522ded</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore.EvaluatedValue</span></td><td><code>158ca2dfb82179f2</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore.MemoizingSupplier</span></td><td><code>cf599a824eea18cf</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore.StoredValue</span></td><td><code>3db67e78dde11925</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.EngineDiscoveryResult</span></td><td><code>c9df2add13bcb88f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.EngineDiscoveryResult.Status</span></td><td><code>f767a377012b98ff</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherDiscoveryListener</span></td><td><code>088911f06a0807a1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherDiscoveryListener.1</span></td><td><code>d946f222ae757dc1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherSessionListener</span></td><td><code>694596eba9b0c85e</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherSessionListener.1</span></td><td><code>44b3640faa83f474</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestExecutionListener</span></td><td><code>f2d1545415335fda</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestIdentifier</span></td><td><code>fef478667b042ad5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestPlan</span></td><td><code>f4faaefa1c9341ff</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.CompositeEngineExecutionListener</span></td><td><code>8321b18dbabfecb3</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.CompositeTestExecutionListener</span></td><td><code>04623991ddcc58da</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultDiscoveryRequest</span></td><td><code>e6360c7333fc842d</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncher</span></td><td><code>95dfc056bdb1d2d2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherConfig</span></td><td><code>b4cd1fb6724efdef</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession</span></td><td><code>e040225d1f67e564</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession.1</span></td><td><code>bcc6e4bee671ccad</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession.ClosedLauncher</span></td><td><code>aa7b08954aea78f5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DelegatingEngineExecutionListener</span></td><td><code>61bd4de41739236f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DelegatingLauncher</span></td><td><code>cdc9b7e4e1a576e0</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryOrchestrator</span></td><td><code>e4e806767310de9f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.Phase</span></td><td><code>67a547a561eee0f4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryResultValidator</span></td><td><code>552f6c5833b8f8bd</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineExecutionOrchestrator</span></td><td><code>6e65b7c784b87efc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineFilterer</span></td><td><code>53cf37d963f8b58c</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineIdValidator</span></td><td><code>b0288378227ce052</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ExecutionListenerAdapter</span></td><td><code>d91ab455a4c89f9b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.InternalTestPlan</span></td><td><code>ce2dcedb783e6f56</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder</span></td><td><code>452edacea5001e83</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder.1</span></td><td><code>0736e6add61b3334</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder.2</span></td><td><code>0d0d72b6e503c372</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig</span></td><td><code>58100dc14c875cb9</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig.Builder</span></td><td><code>64729ce9bd729578</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters</span></td><td><code>4b25c1714dc335ec</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.Builder</span></td><td><code>ba76828012d853d8</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider</span></td><td><code>52b5b9d7814ff3b1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.2</span></td><td><code>886f3c723ddb9556</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.3</span></td><td><code>0d89b6f56eb4db06</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder</span></td><td><code>fb76ce235ae5247b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryResult</span></td><td><code>9833a129382c2ccc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherFactory</span></td><td><code>79c2095302f261bb</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherListenerRegistry</span></td><td><code>64d5f2a8ac991f94</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ListenerRegistry</span></td><td><code>7fe9373f303770d1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener</span></td><td><code>3840931f19c9d795</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener.Outcome</span></td><td><code>730ad6d2d5641536</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderRegistry</span></td><td><code>08e28076c727f8e6</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry</span></td><td><code>771f386239bb3682</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener</span></td><td><code>f6f65efcfd071c8e</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StreamInterceptingTestExecutionListener</span></td><td><code>0f855b867dc3eac4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.UniqueIdTrackingListener</span></td><td><code>aaf56096b3079d53</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener</span></td><td><code>0a9a375bd99ca30a</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners</span></td><td><code>408046ed24478736</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners.LauncherDiscoveryListenerType</span></td><td><code>bf2a372dcc5e43f7</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.session.LauncherSessionListeners</span></td><td><code>46b8848a888d4d59</code></td></tr><tr><td><span class="el_class">org.powermock.reflect.Whitebox</span></td><td><code>91b7994ebab09824</code></td></tr><tr><td><span class="el_class">org.powermock.reflect.internal.WhiteboxImpl</span></td><td><code>1d8a2be3a73717cd</code></td></tr><tr><td><span class="el_class">org.powermock.reflect.internal.matcherstrategies.AssignableFromFieldTypeMatcherStrategy</span></td><td><code>14706a37e69083f3</code></td></tr><tr><td><span class="el_class">org.powermock.reflect.internal.matcherstrategies.FieldMatcherStrategy</span></td><td><code>536d3c5aa5d64af9</code></td></tr><tr><td><span class="el_class">org.powermock.reflect.internal.matcherstrategies.FieldNameMatcherStrategy</span></td><td><code>3c6155039eca3443</code></td></tr><tr><td><span class="el_class">org.powermock.reflect.internal.matcherstrategies.FieldTypeMatcherStrategy</span></td><td><code>fcf3669ccaa42eda</code></td></tr><tr><td><span class="el_class">org.powermock.reflect.internal.primitivesupport.PrimitiveWrapper</span></td><td><code>194730767cc8c069</code></td></tr><tr><td><span class="el_class">org.powermock.reflect.internal.proxy.ProxyFrameworks</span></td><td><code>0aa2f6667c969f9c</code></td></tr><tr><td><span class="el_class">org.powermock.reflect.internal.proxy.UnproxiedTypeFactory</span></td><td><code>eef31833c4906809</code></td></tr><tr><td><span class="el_class">org.slf4j.LoggerFactory</span></td><td><code>d4f8bf028cb667a7</code></td></tr><tr><td><span class="el_class">org.slf4j.event.Level</span></td><td><code>4ced2c509667233d</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.AbstractLogger</span></td><td><code>0927772f80afa51d</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.BasicMDCAdapter</span></td><td><code>354fafb117483fdb</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.BasicMDCAdapter.1</span></td><td><code>8f0671fb507009fb</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.BasicMarkerFactory</span></td><td><code>d8e0b7e9d11b515c</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.FormattingTuple</span></td><td><code>f769e1b68746078d</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.LegacyAbstractLogger</span></td><td><code>9c0bab469712e43b</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.MessageFormatter</span></td><td><code>e2bc58b82ebe1d3d</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.NOPLoggerFactory</span></td><td><code>eaf704972ef7000c</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.NOPMDCAdapter</span></td><td><code>d816a97d0b663014</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.NOP_FallbackServiceProvider</span></td><td><code>44c4aa253bad3620</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.Reporter</span></td><td><code>c9b912a7116daa87</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.Reporter.Level</span></td><td><code>07530b930aa1c996</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.Reporter.TargetChoice</span></td><td><code>0aa347cd82827a6b</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.SubstituteLoggerFactory</span></td><td><code>2c5fb1b0f92b644d</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.SubstituteServiceProvider</span></td><td><code>1caf06178d203dfd</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.ThreadLocalMapOfStacks</span></td><td><code>2b24a935616f8730</code></td></tr><tr><td><span class="el_class">org.slf4j.helpers.Util</span></td><td><code>859d67cf0632e467</code></td></tr><tr><td><span class="el_class">org.slf4j.simple.OutputChoice</span></td><td><code>1210473ae6c23a02</code></td></tr><tr><td><span class="el_class">org.slf4j.simple.OutputChoice.OutputChoiceType</span></td><td><code>b1a3560a9741f5b4</code></td></tr><tr><td><span class="el_class">org.slf4j.simple.SimpleLogger</span></td><td><code>1d2d4d9ea2830f3d</code></td></tr><tr><td><span class="el_class">org.slf4j.simple.SimpleLoggerConfiguration</span></td><td><code>1f2875dbbf5941d4</code></td></tr><tr><td><span class="el_class">org.slf4j.simple.SimpleLoggerFactory</span></td><td><code>e94c2f64e0e452e9</code></td></tr><tr><td><span class="el_class">org.slf4j.simple.SimpleServiceProvider</span></td><td><code>99b66f9433a7c345</code></td></tr><tr><td><span class="el_class">sun.util.resources.cldr.provider.CLDRLocaleDataMetaInfo</span></td><td><code>cea799461486d92b</code></td></tr><tr><td><a href="waffle.jaas/GroupPrincipal.html" class="el_class">waffle.jaas.GroupPrincipal</a></td><td><code>7a241290f32dfe9a</code></td></tr><tr><td><span class="el_class">waffle.jaas.GroupPrincipalTest</span></td><td><code>cde648b32c8c82b6</code></td></tr><tr><td><a href="waffle.jaas/RolePrincipal.html" class="el_class">waffle.jaas.RolePrincipal</a></td><td><code>06e042484292f65f</code></td></tr><tr><td><span class="el_class">waffle.jaas.RolePrincipalTest</span></td><td><code>ba1adda81f3c15f6</code></td></tr><tr><td><a href="waffle.jaas/UserPrincipal.html" class="el_class">waffle.jaas.UserPrincipal</a></td><td><code>c411c34d69d98910</code></td></tr><tr><td><span class="el_class">waffle.jaas.UserPrincipalTest</span></td><td><code>071b9feb85310b6b</code></td></tr><tr><td><span class="el_class">waffle.jaas.UsernamePasswordCallbackHandler</span></td><td><code>47cb998acd7447a4</code></td></tr><tr><td><a href="waffle.jaas/WindowsLoginModule.html" class="el_class">waffle.jaas.WindowsLoginModule</a></td><td><code>01fd7c02cd3e086f</code></td></tr><tr><td><span class="el_class">waffle.jaas.WindowsLoginModuleTest</span></td><td><code>34308bffb5c5fbcb</code></td></tr><tr><td><span class="el_class">waffle.jaas.WindowsLoginModuleTest.1</span></td><td><code>ec571f4e5d3dcd88</code></td></tr><tr><td><span class="el_class">waffle.jaas.WindowsLoginModuleTest.2</span></td><td><code>7891660689516053</code></td></tr><tr><td><a href="waffle.servlet/CorsAwareNegotiateSecurityFilter.html" class="el_class">waffle.servlet.CorsAwareNegotiateSecurityFilter</a></td><td><code>2774671444c1bb44</code></td></tr><tr><td><span class="el_class">waffle.servlet.CorsAwareNegotiateSecurityFilterTest</span></td><td><code>1206a67ee4140ff4</code></td></tr><tr><td><span class="el_class">waffle.servlet.CorsAwareNegotiateSecurityFilterTest.1</span></td><td><code>95c02219ab5f2908</code></td></tr><tr><td><span class="el_class">waffle.servlet.CorsAwareNegotiateSecurityFilterTest.2</span></td><td><code>6635e58b55f3b07c</code></td></tr><tr><td><a href="waffle.servlet/NegotiateSecurityFilter.html" class="el_class">waffle.servlet.NegotiateSecurityFilter</a></td><td><code>132d50c61e99bfac</code></td></tr><tr><td><span class="el_class">waffle.servlet.NegotiateSecurityFilterTest</span></td><td><code>405ca709f462fc01</code></td></tr><tr><td><span class="el_class">waffle.servlet.NegotiateSecurityFilterTest.1</span></td><td><code>11cfcb1505a865de</code></td></tr><tr><td><span class="el_class">waffle.servlet.NegotiateSecurityFilterTest.2</span></td><td><code>8f842c52982f7f65</code></td></tr><tr><td><span class="el_class">waffle.servlet.NegotiateSecurityFilterTest.3</span></td><td><code>ce7865a054b3d431</code></td></tr><tr><td><span class="el_class">waffle.servlet.NegotiateSecurityFilterTest.4</span></td><td><code>f692533f789865a0</code></td></tr><tr><td><span class="el_class">waffle.servlet.NegotiateSecurityFilterTest.5</span></td><td><code>8225c73352f8538a</code></td></tr><tr><td><a href="waffle.servlet/WindowsPrincipal.html" class="el_class">waffle.servlet.WindowsPrincipal</a></td><td><code>ffbe7246e4fdb7ae</code></td></tr><tr><td><span class="el_class">waffle.servlet.WindowsPrincipal.1</span></td><td><code>994c921f0b058e73</code></td></tr><tr><td><span class="el_class">waffle.servlet.WindowsPrincipalTest</span></td><td><code>302b33b17ce7d3ec</code></td></tr><tr><td><span class="el_class">waffle.servlet.WindowsPrincipalTest.1</span></td><td><code>aeefed7f3c6f3733</code></td></tr><tr><td><span class="el_class">waffle.servlet.WindowsPrincipalTest.2</span></td><td><code>d4c93e3a08412c44</code></td></tr><tr><td><a href="waffle.servlet.spi/BasicSecurityFilterProvider.html" class="el_class">waffle.servlet.spi.BasicSecurityFilterProvider</a></td><td><code>b4e26af0ac5c3bd9</code></td></tr><tr><td><a href="waffle.servlet.spi/NegotiateSecurityFilterProvider.html" class="el_class">waffle.servlet.spi.NegotiateSecurityFilterProvider</a></td><td><code>52d2fbb1faa62b2f</code></td></tr><tr><td><a href="waffle.servlet.spi/SecurityFilterProviderCollection.html" class="el_class">waffle.servlet.spi.SecurityFilterProviderCollection</a></td><td><code>2cd48528a549e87e</code></td></tr><tr><td><span class="el_class">waffle.servlet.spi.SecurityFilterProviderCollectionTest</span></td><td><code>7d0a61a280a84269</code></td></tr><tr><td><a href="waffle.util/AuthorizationHeader.html" class="el_class">waffle.util.AuthorizationHeader</a></td><td><code>62fb3edb694c2b44</code></td></tr><tr><td><a href="waffle.util/CorsPreFlightCheck.html" class="el_class">waffle.util.CorsPreFlightCheck</a></td><td><code>221a3908c5a19625</code></td></tr><tr><td><span class="el_class">waffle.util.CorsPreFlightCheckTest</span></td><td><code>8d8089c43e460f2c</code></td></tr><tr><td><span class="el_class">waffle.util.CorsPreFlightCheckTest.1</span></td><td><code>8e8b4c1ed279fb22</code></td></tr><tr><td><span class="el_class">waffle.util.CorsPreFlightCheckTest.2</span></td><td><code>389f0c4eaab634e1</code></td></tr><tr><td><span class="el_class">waffle.util.CorsPreFlightCheckTest.3</span></td><td><code>c96892cbc5b03acc</code></td></tr><tr><td><span class="el_class">waffle.util.CorsPreFlightCheckTest.4</span></td><td><code>e3af78f898e3d856</code></td></tr><tr><td><span class="el_class">waffle.util.CorsPreFlightCheckTest.5</span></td><td><code>ec4c971181c100f4</code></td></tr><tr><td><span class="el_class">waffle.util.CorsPreFlightCheckTest.6</span></td><td><code>d1160de81b47d909</code></td></tr><tr><td><span class="el_class">waffle.util.CorsPreFlightCheckTest.7</span></td><td><code>b5aab3e1ccafeba0</code></td></tr><tr><td><span class="el_class">waffle.util.CorsPreFlightCheckTest.8</span></td><td><code>45b59d32afb8bb67</code></td></tr><tr><td><a href="waffle.util/NtlmMessage.html" class="el_class">waffle.util.NtlmMessage</a></td><td><code>211eb2f285c1fce4</code></td></tr><tr><td><span class="el_class">waffle.util.NtlmMessageTest</span></td><td><code>7e9c01245ca6323b</code></td></tr><tr><td><a href="waffle.util/SPNegoMessage.html" class="el_class">waffle.util.SPNegoMessage</a></td><td><code>ced795522ca751a6</code></td></tr><tr><td><span class="el_class">waffle.util.SPNegoMessageTest</span></td><td><code>5cfed25625befcea</code></td></tr><tr><td><a href="waffle.util/WaffleInfo.html" class="el_class">waffle.util.WaffleInfo</a></td><td><code>5781c60844fcbe45</code></td></tr><tr><td><span class="el_class">waffle.util.WaffleInfoTest</span></td><td><code>c5697a531f6f3c78</code></td></tr><tr><td><a href="waffle.util.cache/Cache.html" class="el_class">waffle.util.cache.Cache</a></td><td><code>4834c62e196a34c3</code></td></tr><tr><td><a href="waffle.util.cache/CaffeineCache.html" class="el_class">waffle.util.cache.CaffeineCache</a></td><td><code>f8d174ba89bd9d4e</code></td></tr><tr><td><a href="waffle.util.cache/CaffeineCacheSupplier.html" class="el_class">waffle.util.cache.CaffeineCacheSupplier</a></td><td><code>8c6df1c1e1227bff</code></td></tr><tr><td><a href="waffle.windows.auth/PrincipalFormat.html" class="el_class">waffle.windows.auth.PrincipalFormat</a></td><td><code>192ecbec772c84ec</code></td></tr><tr><td><span class="el_class">waffle.windows.auth.PrincipalFormatTest</span></td><td><code>9df50cc9db6a9e20</code></td></tr><tr><td><span class="el_class">waffle.windows.auth.WindowsAccountTest</span></td><td><code>ff7a9a447c120ff9</code></td></tr><tr><td><span class="el_class">waffle.windows.auth.WindowsCredentialsHandleTest</span></td><td><code>ac3397a071acdcb9</code></td></tr><tr><td><span class="el_class">waffle.windows.auth.WindowsSecurityContextTest</span></td><td><code>1ee9c0d19a7201bd</code></td></tr><tr><td><a href="waffle.windows.auth.impl/WindowsAccountImpl.html" class="el_class">waffle.windows.auth.impl.WindowsAccountImpl</a></td><td><code>5646d75e33e39b8b</code></td></tr><tr><td><a href="waffle.windows.auth.impl/WindowsAuthProviderImpl.html" class="el_class">waffle.windows.auth.impl.WindowsAuthProviderImpl</a></td><td><code>ecc0e84957504fda</code></td></tr><tr><td><a href="waffle.windows.auth.impl/WindowsComputerImpl.html" class="el_class">waffle.windows.auth.impl.WindowsComputerImpl</a></td><td><code>ada2978209232bc1</code></td></tr><tr><td><a href="waffle.windows.auth.impl/WindowsCredentialsHandleImpl.html" class="el_class">waffle.windows.auth.impl.WindowsCredentialsHandleImpl</a></td><td><code>4a0094b0a80bc68d</code></td></tr><tr><td><a href="waffle.windows.auth.impl/WindowsSecurityContextImpl.html" class="el_class">waffle.windows.auth.impl.WindowsSecurityContextImpl</a></td><td><code>36f0a4fc5ee1c3d4</code></td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/jacoco.csv b/waffle-jna-jakarta/jacoco/jacoco.csv
      new file mode 100644
      index 0000000000..0c55e2360f
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/jacoco.csv
      @@ -0,0 +1,37 @@
      +GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED
      +waffle-jna-jakarta,waffle.servlet.spi,NegotiateSecurityFilterProvider,201,45,20,4,52,12,16,5,6,3
      +waffle-jna-jakarta,waffle.servlet.spi,BasicSecurityFilterProvider,72,17,4,0,17,6,8,3,6,3
      +waffle-jna-jakarta,waffle.servlet.spi,SecurityFilterProviderCollection,118,144,10,12,26,28,9,13,4,7
      +waffle-jna-jakarta,waffle.util.cache,Cache,22,24,3,1,8,5,2,1,0,1
      +waffle-jna-jakarta,waffle.util.cache,CaffeineCacheSupplier,0,8,0,0,0,2,0,2,0,2
      +waffle-jna-jakarta,waffle.util.cache,CaffeineCache,24,10,0,0,6,3,4,1,4,1
      +waffle-jna-jakarta,waffle.servlet,WindowsPrincipal,106,114,11,5,25,28,17,9,7,9
      +waffle-jna-jakarta,waffle.servlet,NegotiateRequestWrapper,21,0,0,0,7,0,5,0,5,0
      +waffle-jna-jakarta,waffle.servlet,NegotiateSecurityFilter,539,237,69,24,143,65,54,15,11,7
      +waffle-jna-jakarta,waffle.servlet,WaffleInfoServlet,214,0,10,0,54,0,11,0,6,0
      +waffle-jna-jakarta,waffle.servlet,AutoDisposableWindowsPrincipal,18,0,2,0,8,0,5,0,4,0
      +waffle-jna-jakarta,waffle.servlet,CorsAwareNegotiateSecurityFilter,38,33,3,1,16,11,4,3,2,3
      +waffle-jna-jakarta,waffle.jaas,GroupPrincipal,94,30,13,1,22,9,11,3,4,3
      +waffle-jna-jakarta,waffle.jaas,UserPrincipal,0,30,0,4,0,10,0,6,0,4
      +waffle-jna-jakarta,waffle.jaas,WindowsLoginModule,210,266,19,24,42,67,14,24,2,12
      +waffle-jna-jakarta,waffle.jaas,RolePrincipal,0,30,0,4,0,10,0,6,0,4
      +waffle-jna-jakarta,waffle.util,WaffleInfo,236,304,20,7,55,77,15,8,2,7
      +waffle-jna-jakarta,waffle.util,NtlmMessage,0,69,0,8,0,8,0,7,0,3
      +waffle-jna-jakarta,waffle.util,AuthorizationHeader,115,50,27,5,25,13,22,6,6,6
      +waffle-jna-jakarta,waffle.util,NtlmServletRequest,31,0,4,0,3,0,4,0,2,0
      +waffle-jna-jakarta,waffle.util,CorsPreFlightCheck,6,78,3,9,2,20,2,6,0,2
      +waffle-jna-jakarta,waffle.util,SPNegoMessage,40,125,9,17,11,17,8,8,0,3
      +waffle-jna-jakarta,waffle.windows.auth,WindowsAccount,52,0,4,0,16,0,9,0,7,0
      +waffle-jna-jakarta,waffle.windows.auth,PrincipalFormat,0,27,0,0,0,5,0,1,0,1
      +waffle-jna-jakarta,waffle.windows.auth.impl,WindowsComputerImpl,12,59,4,3,4,14,4,6,0,5
      +waffle-jna-jakarta,waffle.windows.auth.impl,WindowsCredentialsHandleImpl,10,71,4,4,2,18,4,5,0,5
      +waffle-jna-jakarta,waffle.windows.auth.impl,WindowsDomainImpl.TrustDirection,21,0,0,0,4,0,1,0,1,0
      +waffle-jna-jakarta,waffle.windows.auth.impl,WindowsIdentityImpl,140,0,16,0,30,0,18,0,10,0
      +waffle-jna-jakarta,waffle.windows.auth.impl,WindowsAuthProviderImpl.ContinueContext,9,0,0,0,4,0,1,0,1,0
      +waffle-jna-jakarta,waffle.windows.auth.impl,WindowsAccountImpl,0,36,0,0,0,12,0,8,0,8
      +waffle-jna-jakarta,waffle.windows.auth.impl,WindowsSecurityContextImpl,77,144,14,10,22,39,20,11,7,11
      +waffle-jna-jakarta,waffle.windows.auth.impl,WindowsAuthProviderImpl,272,41,27,1,60,10,21,5,6,5
      +waffle-jna-jakarta,waffle.windows.auth.impl,WindowsDomainImpl.TrustType,45,0,0,0,8,0,1,0,1,0
      +waffle-jna-jakarta,waffle.windows.auth.impl,WindowsIdentityImpersonationContextImpl,17,0,2,0,6,0,3,0,2,0
      +waffle-jna-jakarta,waffle.windows.auth.impl,WindowsDomainImpl,83,0,16,0,23,0,13,0,5,0
      +waffle-jna-jakarta,waffle.windows.auth.impl,WindowsSecurityContextImpersonationContextImpl,30,0,4,0,10,0,4,0,2,0
      diff --git a/waffle-jna-jakarta/jacoco/jacoco.xml b/waffle-jna-jakarta/jacoco/jacoco.xml
      new file mode 100644
      index 0000000000..8816943419
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/jacoco.xml
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.1//EN" "report.dtd"><report name="waffle-jna-jakarta"><sessioninfo id="JeremyDesktop-1b0e9d4d" start="1735711228765" dump="1735711230739"/><package name="waffle/servlet/spi"><class name="waffle/servlet/spi/NegotiateSecurityFilterProvider" sourcefilename="NegotiateSecurityFilterProvider.java"><method name="&lt;init&gt;" desc="(Lwaffle/windows/auth/IWindowsAuthProvider;)V" line="65"><counter type="INSTRUCTION" missed="0" covered="21"/><counter type="LINE" missed="0" covered="6"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getProtocols" desc="()Ljava/util/List;" line="88"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setProtocols" desc="(Ljava/util/List;)V" line="98"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="sendUnauthorized" desc="(Ljakarta/servlet/http/HttpServletResponse;)V" line="103"><counter type="INSTRUCTION" missed="17" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isPrincipalException" desc="(Ljakarta/servlet/http/HttpServletRequest;)Z" line="110"><counter type="INSTRUCTION" missed="16" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="doFilter" desc="(Ljakarta/servlet/http/HttpServletRequest;Ljakarta/servlet/http/HttpServletResponse;)Lwaffle/windows/auth/IWindowsIdentity;" line="121"><counter type="INSTRUCTION" missed="90" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="25" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isSecurityPackageSupported" desc="(Ljava/lang/String;)Z" line="163"><counter type="INSTRUCTION" missed="0" covered="20"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="initParameter" desc="(Ljava/lang/String;Ljava/lang/String;)V" line="173"><counter type="INSTRUCTION" missed="71" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="15" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="50"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="201" covered="45"/><counter type="BRANCH" missed="20" covered="4"/><counter type="LINE" missed="52" covered="12"/><counter type="COMPLEXITY" missed="16" covered="5"/><counter type="METHOD" missed="6" covered="3"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/servlet/spi/SecurityFilterProvider" sourcefilename="SecurityFilterProvider.java"/><class name="waffle/servlet/spi/BasicSecurityFilterProvider" sourcefilename="BasicSecurityFilterProvider.java"><method name="&lt;init&gt;" desc="(Lwaffle/windows/auth/IWindowsAuthProvider;)V" line="49"><counter type="INSTRUCTION" missed="0" covered="9"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="doFilter" desc="(Ljakarta/servlet/http/HttpServletRequest;Ljakarta/servlet/http/HttpServletResponse;)Lwaffle/windows/auth/IWindowsIdentity;" line="68"><counter type="INSTRUCTION" missed="42" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isPrincipalException" desc="(Ljakarta/servlet/http/HttpServletRequest;)Z" line="80"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isSecurityPackageSupported" desc="(Ljava/lang/String;)Z" line="85"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="sendUnauthorized" desc="(Ljakarta/servlet/http/HttpServletResponse;)V" line="90"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRealm" desc="()Ljava/lang/String;" line="99"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRealm" desc="(Ljava/lang/String;)V" line="109"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="initParameter" desc="(Ljava/lang/String;Ljava/lang/String;)V" line="122"><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="46"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="72" covered="17"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="17" covered="6"/><counter type="COMPLEXITY" missed="8" covered="3"/><counter type="METHOD" missed="6" covered="3"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/servlet/spi/SecurityFilterProviderCollection" sourcefilename="SecurityFilterProviderCollection.java"><method name="&lt;init&gt;" desc="([Lwaffle/servlet/spi/SecurityFilterProvider;)V" line="53"><counter type="INSTRUCTION" missed="35" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="([Ljava/lang/String;Lwaffle/windows/auth/IWindowsAuthProvider;)V" line="53"><counter type="INSTRUCTION" missed="17" covered="59"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="5" covered="11"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;init&gt;" desc="(Lwaffle/windows/auth/IWindowsAuthProvider;)V" line="53"><counter type="INSTRUCTION" missed="0" covered="24"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="isSecurityPackageSupported" desc="(Ljava/lang/String;)Z" line="118"><counter type="INSTRUCTION" missed="0" covered="8"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="get" desc="(Ljava/lang/String;)Lwaffle/servlet/spi/SecurityFilterProvider;" line="130"><counter type="INSTRUCTION" missed="0" covered="20"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="doFilter" desc="(Ljakarta/servlet/http/HttpServletRequest;Ljakarta/servlet/http/HttpServletResponse;)Lwaffle/windows/auth/IWindowsIdentity;" line="153"><counter type="INSTRUCTION" missed="30" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isPrincipalException" desc="(Ljakarta/servlet/http/HttpServletRequest;)Z" line="174"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="sendUnauthorized" desc="(Ljakarta/servlet/http/HttpServletResponse;)V" line="189"><counter type="INSTRUCTION" missed="16" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="size" desc="()I" line="200"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getByClassName" desc="(Ljava/lang/String;)Lwaffle/servlet/spi/SecurityFilterProvider;" line="215"><counter type="INSTRUCTION" missed="0" covered="25"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="50"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="118" covered="144"/><counter type="BRANCH" missed="10" covered="12"/><counter type="LINE" missed="26" covered="28"/><counter type="COMPLEXITY" missed="9" covered="13"/><counter type="METHOD" missed="4" covered="7"/><counter type="CLASS" missed="0" covered="1"/></class><sourcefile name="SecurityFilterProvider.java"/><sourcefile name="BasicSecurityFilterProvider.java"><line nr="46" mi="0" ci="4" mb="0" cb="0"/><line nr="49" mi="0" ci="3" mb="0" cb="0"/><line nr="60" mi="0" ci="2" mb="0" cb="0"/><line nr="61" mi="0" ci="3" mb="0" cb="0"/><line nr="62" mi="0" ci="1" mb="0" cb="0"/><line nr="68" mi="5" ci="0" mb="0" cb="0"/><line nr="69" mi="7" ci="0" mb="0" cb="0"/><line nr="70" mi="5" ci="0" mb="0" cb="0"/><line nr="71" mi="4" ci="0" mb="2" cb="0"/><line nr="72" mi="5" ci="0" mb="0" cb="0"/><line nr="74" mi="6" ci="0" mb="0" cb="0"/><line nr="75" mi="10" ci="0" mb="0" cb="0"/><line nr="80" mi="2" ci="0" mb="0" cb="0"/><line nr="85" mi="0" ci="4" mb="0" cb="0"/><line nr="90" mi="6" ci="0" mb="0" cb="0"/><line nr="91" mi="1" ci="0" mb="0" cb="0"/><line nr="99" mi="3" ci="0" mb="0" cb="0"/><line nr="109" mi="3" ci="0" mb="0" cb="0"/><line nr="110" mi="1" ci="0" mb="0" cb="0"/><line nr="122" mi="4" ci="0" mb="2" cb="0"/><line nr="123" mi="4" ci="0" mb="0" cb="0"/><line nr="125" mi="5" ci="0" mb="0" cb="0"/><line nr="127" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="72" covered="17"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="17" covered="6"/><counter type="COMPLEXITY" missed="8" covered="3"/><counter type="METHOD" missed="6" covered="3"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="SecurityFilterProviderCollection.java"><line nr="50" mi="0" ci="4" mb="0" cb="0"/><line nr="53" mi="5" ci="10" mb="0" cb="0"/><line nr="61" mi="2" ci="0" mb="0" cb="0"/><line nr="62" mi="16" ci="0" mb="2" cb="0"/><line nr="63" mi="6" ci="0" mb="0" cb="0"/><line nr="64" mi="5" ci="0" mb="0" cb="0"/><line nr="66" mi="1" ci="0" mb="0" cb="0"/><line nr="77" mi="0" ci="2" mb="0" cb="0"/><line nr="80" mi="0" ci="16" mb="0" cb="2"/><line nr="81" mi="0" ci="3" mb="0" cb="0"/><line nr="82" mi="0" ci="4" mb="0" cb="0"/><line nr="84" mi="0" ci="3" mb="0" cb="0"/><line nr="85" mi="0" ci="9" mb="0" cb="0"/><line nr="86" mi="0" ci="10" mb="0" cb="0"/><line nr="87" mi="0" ci="5" mb="0" cb="0"/><line nr="88" mi="1" ci="0" mb="0" cb="0"/><line nr="89" mi="5" ci="0" mb="0" cb="0"/><line nr="90" mi="1" ci="0" mb="0" cb="0"/><line nr="92" mi="6" ci="0" mb="0" cb="0"/><line nr="93" mi="4" ci="0" mb="0" cb="0"/><line nr="94" mi="0" ci="1" mb="0" cb="0"/><line nr="96" mi="0" ci="1" mb="0" cb="0"/><line nr="104" mi="0" ci="2" mb="0" cb="0"/><line nr="105" mi="0" ci="8" mb="0" cb="0"/><line nr="106" mi="0" ci="8" mb="0" cb="0"/><line nr="107" mi="0" ci="1" mb="0" cb="0"/><line nr="118" mi="0" ci="8" mb="0" cb="2"/><line nr="130" mi="0" ci="11" mb="0" cb="2"/><line nr="131" mi="0" ci="4" mb="0" cb="2"/><line nr="132" mi="0" ci="2" mb="0" cb="0"/><line nr="134" mi="0" ci="1" mb="0" cb="0"/><line nr="135" mi="0" ci="2" mb="0" cb="0"/><line nr="153" mi="5" ci="0" mb="0" cb="0"/><line nr="154" mi="5" ci="0" mb="0" cb="0"/><line nr="155" mi="2" ci="0" mb="2" cb="0"/><line nr="156" mi="7" ci="0" mb="0" cb="0"/><line nr="159" mi="5" ci="0" mb="0" cb="0"/><line nr="160" mi="1" ci="0" mb="0" cb="0"/><line nr="161" mi="5" ci="0" mb="0" cb="0"/><line nr="174" mi="11" ci="0" mb="2" cb="0"/><line nr="175" mi="4" ci="0" mb="2" cb="0"/><line nr="176" mi="2" ci="0" mb="0" cb="0"/><line nr="178" mi="1" ci="0" mb="0" cb="0"/><line nr="179" mi="2" ci="0" mb="0" cb="0"/><line nr="189" mi="11" ci="0" mb="2" cb="0"/><line nr="190" mi="3" ci="0" mb="0" cb="0"/><line nr="191" mi="1" ci="0" mb="0" cb="0"/><line nr="192" mi="1" ci="0" mb="0" cb="0"/><line nr="200" mi="0" ci="4" mb="0" cb="0"/><line nr="215" mi="0" ci="11" mb="0" cb="2"/><line nr="216" mi="0" ci="6" mb="0" cb="2"/><line nr="217" mi="0" ci="2" mb="0" cb="0"/><line nr="219" mi="0" ci="1" mb="0" cb="0"/><line nr="220" mi="0" ci="5" mb="0" cb="0"/><counter type="INSTRUCTION" missed="118" covered="144"/><counter type="BRANCH" missed="10" covered="12"/><counter type="LINE" missed="26" covered="28"/><counter type="COMPLEXITY" missed="9" covered="13"/><counter type="METHOD" missed="4" covered="7"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="NegotiateSecurityFilterProvider.java"><line nr="50" mi="0" ci="4" mb="0" cb="0"/><line nr="65" mi="0" ci="5" mb="0" cb="0"/><line nr="76" mi="0" ci="2" mb="0" cb="0"/><line nr="77" mi="0" ci="3" mb="0" cb="0"/><line nr="78" mi="0" ci="5" mb="0" cb="0"/><line nr="79" mi="0" ci="5" mb="0" cb="0"/><line nr="80" mi="0" ci="1" mb="0" cb="0"/><line nr="88" mi="3" ci="0" mb="0" cb="0"/><line nr="98" mi="3" ci="0" mb="0" cb="0"/><line nr="99" mi="1" ci="0" mb="0" cb="0"/><line nr="103" mi="11" ci="0" mb="2" cb="0"/><line nr="104" mi="4" ci="0" mb="0" cb="0"/><line nr="105" mi="1" ci="0" mb="0" cb="0"/><line nr="106" mi="1" ci="0" mb="0" cb="0"/><line nr="110" mi="5" ci="0" mb="0" cb="0"/><line nr="111" mi="3" ci="0" mb="0" cb="0"/><line nr="112" mi="5" ci="0" mb="0" cb="0"/><line nr="113" mi="1" ci="0" mb="0" cb="0"/><line nr="114" mi="2" ci="0" mb="0" cb="0"/><line nr="121" mi="5" ci="0" mb="0" cb="0"/><line nr="122" mi="3" ci="0" mb="0" cb="0"/><line nr="125" mi="3" ci="0" mb="0" cb="0"/><line nr="126" mi="3" ci="0" mb="0" cb="0"/><line nr="127" mi="5" ci="0" mb="0" cb="0"/><line nr="130" mi="2" ci="0" mb="2" cb="0"/><line nr="132" mi="4" ci="0" mb="0" cb="0"/><line nr="135" mi="3" ci="0" mb="0" cb="0"/><line nr="136" mi="6" ci="0" mb="0" cb="0"/><line nr="137" mi="7" ci="0" mb="0" cb="0"/><line nr="140" mi="3" ci="0" mb="0" cb="0"/><line nr="141" mi="5" ci="0" mb="4" cb="0"/><line nr="142" mi="4" ci="0" mb="0" cb="0"/><line nr="143" mi="4" ci="0" mb="0" cb="0"/><line nr="144" mi="6" ci="0" mb="0" cb="0"/><line nr="147" mi="4" ci="0" mb="0" cb="0"/><line nr="148" mi="2" ci="0" mb="0" cb="0"/><line nr="149" mi="3" ci="0" mb="2" cb="0"/><line nr="150" mi="4" ci="0" mb="0" cb="0"/><line nr="151" mi="3" ci="0" mb="0" cb="0"/><line nr="152" mi="2" ci="0" mb="0" cb="0"/><line nr="153" mi="2" ci="0" mb="0" cb="0"/><line nr="156" mi="3" ci="0" mb="0" cb="0"/><line nr="157" mi="2" ci="0" mb="0" cb="0"/><line nr="158" mi="2" ci="0" mb="0" cb="0"/><line nr="163" mi="0" ci="11" mb="0" cb="2"/><line nr="164" mi="0" ci="4" mb="0" cb="2"/><line nr="165" mi="0" ci="2" mb="0" cb="0"/><line nr="167" mi="0" ci="1" mb="0" cb="0"/><line nr="168" mi="0" ci="2" mb="0" cb="0"/><line nr="173" mi="4" ci="0" mb="2" cb="0"/><line nr="174" mi="5" ci="0" mb="0" cb="0"/><line nr="175" mi="5" ci="0" mb="0" cb="0"/><line nr="176" mi="16" ci="0" mb="2" cb="0"/><line nr="177" mi="3" ci="0" mb="0" cb="0"/><line nr="178" mi="3" ci="0" mb="2" cb="0"/><line nr="179" mi="4" ci="0" mb="0" cb="0"/><line nr="180" mi="6" ci="0" mb="2" cb="0"/><line nr="181" mi="2" ci="0" mb="2" cb="0"/><line nr="182" mi="6" ci="0" mb="0" cb="0"/><line nr="184" mi="4" ci="0" mb="0" cb="0"/><line nr="185" mi="6" ci="0" mb="0" cb="0"/><line nr="189" mi="1" ci="0" mb="0" cb="0"/><line nr="190" mi="5" ci="0" mb="0" cb="0"/><line nr="192" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="201" covered="45"/><counter type="BRANCH" missed="20" covered="4"/><counter type="LINE" missed="52" covered="12"/><counter type="COMPLEXITY" missed="16" covered="5"/><counter type="METHOD" missed="6" covered="3"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><counter type="INSTRUCTION" missed="391" covered="206"/><counter type="BRANCH" missed="34" covered="16"/><counter type="LINE" missed="95" covered="46"/><counter type="COMPLEXITY" missed="33" covered="21"/><counter type="METHOD" missed="16" covered="13"/><counter type="CLASS" missed="0" covered="3"/></package><package name="waffle/util/cache"><class name="waffle/util/cache/Cache" sourcefilename="Cache.java"><method name="newCache" desc="(I)Lwaffle/util/cache/Cache;" line="65"><counter type="INSTRUCTION" missed="22" covered="24"/><counter type="BRANCH" missed="3" covered="1"/><counter type="LINE" missed="8" covered="5"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="22" covered="24"/><counter type="BRANCH" missed="3" covered="1"/><counter type="LINE" missed="8" covered="5"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/util/cache/CaffeineCacheSupplier" sourcefilename="CaffeineCacheSupplier.java"><method name="&lt;init&gt;" desc="()V" line="29"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="newCache" desc="(J)Lwaffle/util/cache/Cache;" line="33"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="8"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="2"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/util/cache/CacheSupplier" sourcefilename="CacheSupplier.java"/><class name="waffle/util/cache/CaffeineCache" sourcefilename="CaffeineCache.java"><method name="&lt;init&gt;" desc="(J)V" line="51"><counter type="INSTRUCTION" missed="0" covered="10"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="get" desc="(Ljava/lang/Object;)Ljava/lang/Object;" line="57"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="put" desc="(Ljava/lang/Object;Ljava/lang/Object;)V" line="62"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="remove" desc="(Ljava/lang/Object;)V" line="67"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="size" desc="()I" line="72"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="24" covered="10"/><counter type="LINE" missed="6" covered="3"/><counter type="COMPLEXITY" missed="4" covered="1"/><counter type="METHOD" missed="4" covered="1"/><counter type="CLASS" missed="0" covered="1"/></class><sourcefile name="CaffeineCacheSupplier.java"><line nr="29" mi="0" ci="3" mb="0" cb="0"/><line nr="33" mi="0" ci="5" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="8"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="2"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="CacheSupplier.java"/><sourcefile name="Cache.java"><line nr="65" mi="0" ci="4" mb="0" cb="0"/><line nr="66" mi="0" ci="2" mb="0" cb="0"/><line nr="67" mi="0" ci="11" mb="1" cb="1"/><line nr="68" mi="0" ci="2" mb="0" cb="0"/><line nr="70" mi="0" ci="5" mb="0" cb="0"/><line nr="71" mi="1" ci="0" mb="0" cb="0"/><line nr="72" mi="3" ci="0" mb="0" cb="0"/><line nr="74" mi="1" ci="0" mb="0" cb="0"/><line nr="76" mi="2" ci="0" mb="2" cb="0"/><line nr="77" mi="3" ci="0" mb="0" cb="0"/><line nr="78" mi="4" ci="0" mb="0" cb="0"/><line nr="81" mi="6" ci="0" mb="0" cb="0"/><line nr="84" mi="2" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="22" covered="24"/><counter type="BRANCH" missed="3" covered="1"/><counter type="LINE" missed="8" covered="5"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="CaffeineCache.java"><line nr="51" mi="0" ci="2" mb="0" cb="0"/><line nr="52" mi="0" ci="7" mb="0" cb="0"/><line nr="53" mi="0" ci="1" mb="0" cb="0"/><line nr="57" mi="6" ci="0" mb="0" cb="0"/><line nr="62" mi="5" ci="0" mb="0" cb="0"/><line nr="63" mi="1" ci="0" mb="0" cb="0"/><line nr="67" mi="6" ci="0" mb="0" cb="0"/><line nr="68" mi="1" ci="0" mb="0" cb="0"/><line nr="72" mi="5" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="24" covered="10"/><counter type="LINE" missed="6" covered="3"/><counter type="COMPLEXITY" missed="4" covered="1"/><counter type="METHOD" missed="4" covered="1"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><counter type="INSTRUCTION" missed="46" covered="42"/><counter type="BRANCH" missed="3" covered="1"/><counter type="LINE" missed="14" covered="10"/><counter type="COMPLEXITY" missed="6" covered="4"/><counter type="METHOD" missed="4" covered="4"/><counter type="CLASS" missed="0" covered="3"/></package><package name="waffle/servlet"><class name="waffle/servlet/WindowsPrincipal" sourcefilename="WindowsPrincipal.java"><method name="&lt;init&gt;" desc="(Lwaffle/windows/auth/IWindowsIdentity;)V" line="71"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;init&gt;" desc="(Lwaffle/windows/auth/IWindowsIdentity;Lwaffle/windows/auth/PrincipalFormat;Lwaffle/windows/auth/PrincipalFormat;)V" line="85"><counter type="INSTRUCTION" missed="0" covered="29"/><counter type="LINE" missed="0" covered="8"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getRoles" desc="(Lwaffle/windows/auth/IWindowsIdentity;Lwaffle/windows/auth/PrincipalFormat;Lwaffle/windows/auth/PrincipalFormat;)Ljava/util/List;" line="108"><counter type="INSTRUCTION" missed="12" covered="23"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="1" covered="4"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getGroups" desc="([Lwaffle/windows/auth/IWindowsAccount;)Ljava/util/Map;" line="125"><counter type="INSTRUCTION" missed="15" covered="16"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="1" covered="3"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getSid" desc="()[B" line="138"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSidString" desc="()Ljava/lang/String;" line="147"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getGroups" desc="()Ljava/util/Map;" line="156"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRoleNames" desc="(Lwaffle/windows/auth/IWindowsAccount;Lwaffle/windows/auth/PrincipalFormat;)Ljava/util/List;" line="170"><counter type="INSTRUCTION" missed="34" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPrincipalNames" desc="(Lwaffle/windows/auth/IWindowsIdentity;Lwaffle/windows/auth/PrincipalFormat;)Ljava/util/List;" line="201"><counter type="INSTRUCTION" missed="17" covered="17"/><counter type="BRANCH" missed="3" covered="1"/><counter type="LINE" missed="5" covered="5"/><counter type="COMPLEXITY" missed="3" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getRolesString" desc="()Ljava/lang/String;" line="226"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hasRole" desc="(Ljava/lang/String;)Z" line="238"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getName" desc="()Ljava/lang/String;" line="248"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getIdentity" desc="()Lwaffle/windows/auth/IWindowsIdentity;" line="257"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="262"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="267"><counter type="INSTRUCTION" missed="4" covered="13"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="2" covered="3"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="hashCode" desc="()I" line="280"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="106" covered="114"/><counter type="BRANCH" missed="11" covered="5"/><counter type="LINE" missed="25" covered="28"/><counter type="COMPLEXITY" missed="17" covered="9"/><counter type="METHOD" missed="7" covered="9"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/servlet/NegotiateRequestWrapper" sourcefilename="NegotiateRequestWrapper.java"><method name="&lt;init&gt;" desc="(Ljakarta/servlet/http/HttpServletRequest;Lwaffle/servlet/WindowsPrincipal;)V" line="48"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUserPrincipal" desc="()Ljava/security/Principal;" line="59"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAuthType" desc="()Ljava/lang/String;" line="69"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRemoteUser" desc="()Ljava/lang/String;" line="79"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isUserInRole" desc="(Ljava/lang/String;)Z" line="92"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="21" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="waffle/servlet/NegotiateSecurityFilter" sourcefilename="NegotiateSecurityFilter.java"><method name="&lt;init&gt;" desc="()V" line="75"><counter type="INSTRUCTION" missed="0" covered="15"/><counter type="LINE" missed="0" covered="6"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="destroy" desc="()V" line="113"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="doFilter" desc="(Ljakarta/servlet/ServletRequest;Ljakarta/servlet/ServletResponse;Ljakarta/servlet/FilterChain;)V" line="120"><counter type="INSTRUCTION" missed="234" covered="60"/><counter type="BRANCH" missed="35" covered="7"/><counter type="LINE" missed="61" covered="13"/><counter type="COMPLEXITY" missed="21" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="doFilterPrincipal" desc="(Ljakarta/servlet/http/HttpServletRequest;Ljakarta/servlet/http/HttpServletResponse;Ljakarta/servlet/FilterChain;)Z" line="270"><counter type="INSTRUCTION" missed="90" covered="0"/><counter type="BRANCH" missed="20" covered="0"/><counter type="LINE" missed="27" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="init" desc="(Ljakarta/servlet/FilterConfig;)V" line="324"><counter type="INSTRUCTION" missed="139" covered="135"/><counter type="BRANCH" missed="11" covered="16"/><counter type="LINE" missed="29" covered="39"/><counter type="COMPLEXITY" missed="10" covered="9"/><counter type="METHOD" missed="0" covered="1"/></method><method name="setPrincipalFormat" desc="(Ljava/lang/String;)V" line="438"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPrincipalFormat" desc="()Lwaffle/windows/auth/PrincipalFormat;" line="448"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRoleFormat" desc="(Ljava/lang/String;)V" line="458"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRoleFormat" desc="()Lwaffle/windows/auth/PrincipalFormat;" line="468"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="sendUnauthorized" desc="(Ljakarta/servlet/http/HttpServletResponse;Z)V" line="481"><counter type="INSTRUCTION" missed="28" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getAuth" desc="()Lwaffle/windows/auth/IWindowsAuthProvider;" line="500"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setAuth" desc="(Lwaffle/windows/auth/IWindowsAuthProvider;)V" line="510"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isAllowGuestLogin" desc="()Z" line="519"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="setImpersonate" desc="(Z)V" line="529"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isImpersonate" desc="()Z" line="538"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getProviders" desc="()Lwaffle/servlet/spi/SecurityFilterProviderCollection;" line="547"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isWindows" desc="()Z" line="551"><counter type="INSTRUCTION" missed="0" covered="13"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="66"><counter type="INSTRUCTION" missed="0" covered="8"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="539" covered="237"/><counter type="BRANCH" missed="69" covered="24"/><counter type="LINE" missed="143" covered="65"/><counter type="COMPLEXITY" missed="54" covered="15"/><counter type="METHOD" missed="11" covered="7"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/servlet/WaffleInfoServlet" sourcefilename="WaffleInfoServlet.java"><method name="&lt;init&gt;" desc="()V" line="54"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="doGet" desc="(Ljakarta/servlet/http/HttpServletRequest;Ljakarta/servlet/http/HttpServletResponse;)V" line="64"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="doPost" desc="(Ljakarta/servlet/http/HttpServletRequest;Ljakarta/servlet/http/HttpServletResponse;)V" line="69"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getWaffleInfoResponse" desc="(Ljakarta/servlet/http/HttpServletRequest;Ljakarta/servlet/http/HttpServletResponse;)V" line="81"><counter type="INSTRUCTION" missed="97" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="23" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRequestInfo" desc="(Lorg/w3c/dom/Document;Ljakarta/servlet/http/HttpServletRequest;)Lorg/w3c/dom/Element;" line="127"><counter type="INSTRUCTION" missed="100" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="25" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="60"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="214" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="54" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="waffle/servlet/AutoDisposableWindowsPrincipal" sourcefilename="AutoDisposableWindowsPrincipal.java"><method name="&lt;init&gt;" desc="(Lwaffle/windows/auth/IWindowsIdentity;)V" line="47"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lwaffle/windows/auth/IWindowsIdentity;Lwaffle/windows/auth/PrincipalFormat;Lwaffle/windows/auth/PrincipalFormat;)V" line="62"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="valueBound" desc="(Ljakarta/servlet/http/HttpSessionBindingEvent;)V" line="68"><counter type="INSTRUCTION" missed="1" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="valueUnbound" desc="(Ljakarta/servlet/http/HttpSessionBindingEvent;)V" line="72"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="waffle/servlet/CorsAwareNegotiateSecurityFilter" sourcefilename="CorsAwareNegotiateSecurityFilter.java"><method name="&lt;init&gt;" desc="()V" line="53"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="init" desc="(Ljakarta/servlet/FilterConfig;)V" line="59"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="doFilter" desc="(Ljakarta/servlet/ServletRequest;Ljakarta/servlet/ServletResponse;Ljakarta/servlet/FilterChain;)V" line="68"><counter type="INSTRUCTION" missed="22" covered="23"/><counter type="BRANCH" missed="3" covered="1"/><counter type="LINE" missed="9" covered="7"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="destroy" desc="()V" line="94"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="48"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="38" covered="33"/><counter type="BRANCH" missed="3" covered="1"/><counter type="LINE" missed="16" covered="11"/><counter type="COMPLEXITY" missed="4" covered="3"/><counter type="METHOD" missed="2" covered="3"/><counter type="CLASS" missed="0" covered="1"/></class><sourcefile name="WaffleInfoServlet.java"><line nr="54" mi="3" ci="0" mb="0" cb="0"/><line nr="60" mi="4" ci="0" mb="0" cb="0"/><line nr="64" mi="4" ci="0" mb="0" cb="0"/><line nr="65" mi="1" ci="0" mb="0" cb="0"/><line nr="69" mi="4" ci="0" mb="0" cb="0"/><line nr="70" mi="1" ci="0" mb="0" cb="0"/><line nr="81" mi="4" ci="0" mb="0" cb="0"/><line nr="83" mi="3" ci="0" mb="0" cb="0"/><line nr="84" mi="3" ci="0" mb="0" cb="0"/><line nr="87" mi="5" ci="0" mb="0" cb="0"/><line nr="88" mi="6" ci="0" mb="0" cb="0"/><line nr="91" mi="4" ci="0" mb="0" cb="0"/><line nr="92" mi="2" ci="0" mb="2" cb="0"/><line nr="93" mi="16" ci="0" mb="2" cb="0"/><line nr="94" mi="7" ci="0" mb="0" cb="0"/><line nr="99" mi="2" ci="0" mb="0" cb="0"/><line nr="100" mi="4" ci="0" mb="0" cb="0"/><line nr="101" mi="4" ci="0" mb="0" cb="0"/><line nr="103" mi="3" ci="0" mb="0" cb="0"/><line nr="104" mi="4" ci="0" mb="0" cb="0"/><line nr="106" mi="6" ci="0" mb="0" cb="0"/><line nr="107" mi="5" ci="0" mb="0" cb="0"/><line nr="108" mi="4" ci="0" mb="0" cb="0"/><line nr="109" mi="3" ci="0" mb="0" cb="0"/><line nr="110" mi="1" ci="0" mb="0" cb="0"/><line nr="111" mi="4" ci="0" mb="0" cb="0"/><line nr="112" mi="5" ci="0" mb="0" cb="0"/><line nr="113" mi="1" ci="0" mb="0" cb="0"/><line nr="114" mi="1" ci="0" mb="0" cb="0"/><line nr="127" mi="4" ci="0" mb="0" cb="0"/><line nr="129" mi="4" ci="0" mb="0" cb="0"/><line nr="130" mi="4" ci="0" mb="0" cb="0"/><line nr="131" mi="4" ci="0" mb="0" cb="0"/><line nr="133" mi="3" ci="0" mb="0" cb="0"/><line nr="134" mi="2" ci="0" mb="2" cb="0"/><line nr="135" mi="4" ci="0" mb="0" cb="0"/><line nr="136" mi="6" ci="0" mb="0" cb="0"/><line nr="138" mi="4" ci="0" mb="0" cb="0"/><line nr="139" mi="4" ci="0" mb="0" cb="0"/><line nr="140" mi="4" ci="0" mb="0" cb="0"/><line nr="142" mi="4" ci="0" mb="0" cb="0"/><line nr="143" mi="4" ci="0" mb="0" cb="0"/><line nr="144" mi="4" ci="0" mb="0" cb="0"/><line nr="146" mi="4" ci="0" mb="0" cb="0"/><line nr="149" mi="4" ci="0" mb="0" cb="0"/><line nr="150" mi="3" ci="0" mb="2" cb="0"/><line nr="151" mi="4" ci="0" mb="0" cb="0"/><line nr="152" mi="10" ci="0" mb="2" cb="0"/><line nr="153" mi="4" ci="0" mb="0" cb="0"/><line nr="154" mi="5" ci="0" mb="0" cb="0"/><line nr="155" mi="4" ci="0" mb="0" cb="0"/><line nr="156" mi="1" ci="0" mb="0" cb="0"/><line nr="157" mi="4" ci="0" mb="0" cb="0"/><line nr="159" mi="2" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="214" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="54" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="WindowsPrincipal.java"><line nr="71" mi="0" ci="5" mb="0" cb="0"/><line nr="72" mi="0" ci="1" mb="0" cb="0"/><line nr="85" mi="0" ci="2" mb="0" cb="0"/><line nr="86" mi="0" ci="3" mb="0" cb="0"/><line nr="87" mi="0" ci="4" mb="0" cb="0"/><line nr="88" mi="0" ci="4" mb="0" cb="0"/><line nr="89" mi="0" ci="4" mb="0" cb="0"/><line nr="90" mi="0" ci="5" mb="0" cb="0"/><line nr="91" mi="0" ci="6" mb="0" cb="0"/><line nr="92" mi="0" ci="1" mb="0" cb="0"/><line nr="108" mi="0" ci="4" mb="0" cb="0"/><line nr="109" mi="0" ci="6" mb="0" cb="0"/><line nr="110" mi="6" ci="11" mb="1" cb="1"/><line nr="111" mi="6" ci="0" mb="0" cb="0"/><line nr="113" mi="0" ci="2" mb="0" cb="0"/><line nr="125" mi="0" ci="4" mb="0" cb="0"/><line nr="126" mi="6" ci="10" mb="1" cb="1"/><line nr="127" mi="9" ci="0" mb="0" cb="0"/><line nr="129" mi="0" ci="2" mb="0" cb="0"/><line nr="138" mi="5" ci="0" mb="0" cb="0"/><line nr="147" mi="3" ci="0" mb="0" cb="0"/><line nr="156" mi="3" ci="0" mb="0" cb="0"/><line nr="170" mi="4" ci="0" mb="0" cb="0"/><line nr="171" mi="5" ci="0" mb="4" cb="0"/><line nr="173" mi="5" ci="0" mb="0" cb="0"/><line nr="174" mi="1" ci="0" mb="0" cb="0"/><line nr="176" mi="5" ci="0" mb="0" cb="0"/><line nr="177" mi="1" ci="0" mb="0" cb="0"/><line nr="179" mi="5" ci="0" mb="0" cb="0"/><line nr="180" mi="5" ci="0" mb="0" cb="0"/><line nr="181" mi="1" ci="0" mb="0" cb="0"/><line nr="186" mi="2" ci="0" mb="0" cb="0"/><line nr="201" mi="0" ci="4" mb="0" cb="0"/><line nr="202" mi="0" ci="5" mb="3" cb="1"/><line nr="204" mi="0" ci="5" mb="0" cb="0"/><line nr="205" mi="0" ci="1" mb="0" cb="0"/><line nr="207" mi="5" ci="0" mb="0" cb="0"/><line nr="208" mi="1" ci="0" mb="0" cb="0"/><line nr="210" mi="5" ci="0" mb="0" cb="0"/><line nr="211" mi="5" ci="0" mb="0" cb="0"/><line nr="212" mi="1" ci="0" mb="0" cb="0"/><line nr="217" mi="0" ci="2" mb="0" cb="0"/><line nr="226" mi="5" ci="0" mb="0" cb="0"/><line nr="238" mi="5" ci="0" mb="0" cb="0"/><line nr="248" mi="0" ci="3" mb="0" cb="0"/><line nr="257" mi="3" ci="0" mb="0" cb="0"/><line nr="262" mi="0" ci="3" mb="0" cb="0"/><line nr="267" mi="0" ci="3" mb="1" cb="1"/><line nr="268" mi="2" ci="0" mb="0" cb="0"/><line nr="271" mi="0" ci="3" mb="1" cb="1"/><line nr="272" mi="0" ci="7" mb="0" cb="0"/><line nr="275" mi="2" ci="0" mb="0" cb="0"/><line nr="280" mi="0" ci="4" mb="0" cb="0"/><counter type="INSTRUCTION" missed="106" covered="114"/><counter type="BRANCH" missed="11" covered="5"/><counter type="LINE" missed="25" covered="28"/><counter type="COMPLEXITY" missed="17" covered="9"/><counter type="METHOD" missed="7" covered="9"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="AutoDisposableWindowsPrincipal.java"><line nr="47" mi="3" ci="0" mb="0" cb="0"/><line nr="48" mi="1" ci="0" mb="0" cb="0"/><line nr="62" mi="5" ci="0" mb="0" cb="0"/><line nr="63" mi="1" ci="0" mb="0" cb="0"/><line nr="68" mi="1" ci="0" mb="0" cb="0"/><line nr="72" mi="3" ci="0" mb="2" cb="0"/><line nr="73" mi="3" ci="0" mb="0" cb="0"/><line nr="75" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="CorsAwareNegotiateSecurityFilter.java"><line nr="48" mi="0" ci="4" mb="0" cb="0"/><line nr="53" mi="0" ci="2" mb="0" cb="0"/><line nr="54" mi="0" ci="3" mb="0" cb="0"/><line nr="55" mi="0" ci="1" mb="0" cb="0"/><line nr="59" mi="3" ci="0" mb="0" cb="0"/><line nr="60" mi="3" ci="0" mb="0" cb="0"/><line nr="61" mi="3" ci="0" mb="0" cb="0"/><line nr="62" mi="1" ci="0" mb="0" cb="0"/><line nr="68" mi="0" ci="3" mb="0" cb="0"/><line nr="70" mi="0" ci="3" mb="0" cb="0"/><line nr="71" mi="0" ci="5" mb="0" cb="0"/><line nr="73" mi="0" ci="3" mb="1" cb="1"/><line nr="74" mi="0" ci="3" mb="0" cb="0"/><line nr="76" mi="0" ci="5" mb="0" cb="0"/><line nr="77" mi="3" ci="0" mb="2" cb="0"/><line nr="78" mi="2" ci="0" mb="0" cb="0"/><line nr="79" mi="1" ci="0" mb="0" cb="0"/><line nr="80" mi="5" ci="0" mb="0" cb="0"/><line nr="82" mi="2" ci="0" mb="0" cb="0"/><line nr="83" mi="1" ci="0" mb="0" cb="0"/><line nr="85" mi="5" ci="0" mb="0" cb="0"/><line nr="87" mi="2" ci="0" mb="0" cb="0"/><line nr="88" mi="1" ci="0" mb="0" cb="0"/><line nr="90" mi="0" ci="1" mb="0" cb="0"/><line nr="94" mi="2" ci="0" mb="0" cb="0"/><line nr="95" mi="3" ci="0" mb="0" cb="0"/><line nr="96" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="38" covered="33"/><counter type="BRANCH" missed="3" covered="1"/><counter type="LINE" missed="16" covered="11"/><counter type="COMPLEXITY" missed="4" covered="3"/><counter type="METHOD" missed="2" covered="3"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="NegotiateRequestWrapper.java"><line nr="48" mi="3" ci="0" mb="0" cb="0"/><line nr="49" mi="3" ci="0" mb="0" cb="0"/><line nr="50" mi="1" ci="0" mb="0" cb="0"/><line nr="59" mi="3" ci="0" mb="0" cb="0"/><line nr="69" mi="2" ci="0" mb="0" cb="0"/><line nr="79" mi="4" ci="0" mb="0" cb="0"/><line nr="92" mi="5" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="21" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="NegotiateSecurityFilter.java"><line nr="66" mi="0" ci="3" mb="0" cb="0"/><line nr="69" mi="0" ci="5" mb="0" cb="0"/><line nr="75" mi="0" ci="3" mb="0" cb="0"/><line nr="78" mi="0" ci="3" mb="0" cb="0"/><line nr="90" mi="0" ci="3" mb="0" cb="0"/><line nr="107" mi="0" ci="2" mb="0" cb="0"/><line nr="108" mi="0" ci="3" mb="0" cb="0"/><line nr="109" mi="0" ci="1" mb="0" cb="0"/><line nr="113" mi="3" ci="0" mb="0" cb="0"/><line nr="114" mi="1" ci="0" mb="0" cb="0"/><line nr="120" mi="0" ci="3" mb="0" cb="0"/><line nr="121" mi="0" ci="3" mb="0" cb="0"/><line nr="123" mi="0" ci="18" mb="0" cb="0"/><line nr="124" mi="0" ci="3" mb="0" cb="0"/><line nr="127" mi="0" ci="2" mb="1" cb="1"/><line nr="128" mi="3" ci="0" mb="0" cb="0"/><line nr="129" mi="4" ci="0" mb="0" cb="0"/><line nr="130" mi="1" ci="0" mb="0" cb="0"/><line nr="134" mi="0" ci="3" mb="1" cb="1"/><line nr="135" mi="3" ci="0" mb="0" cb="0"/><line nr="136" mi="4" ci="0" mb="0" cb="0"/><line nr="137" mi="1" ci="0" mb="0" cb="0"/><line nr="141" mi="3" ci="3" mb="3" cb="1"/><line nr="142" mi="4" ci="0" mb="0" cb="0"/><line nr="143" mi="17" ci="0" mb="2" cb="0"/><line nr="144" mi="4" ci="0" mb="2" cb="0"/><line nr="145" mi="5" ci="0" mb="0" cb="0"/><line nr="146" mi="4" ci="0" mb="0" cb="0"/><line nr="147" mi="1" ci="0" mb="0" cb="0"/><line nr="153" mi="0" ci="6" mb="2" cb="2"/><line nr="154" mi="3" ci="0" mb="0" cb="0"/><line nr="155" mi="4" ci="0" mb="0" cb="0"/><line nr="156" mi="1" ci="0" mb="0" cb="0"/><line nr="159" mi="0" ci="5" mb="0" cb="0"/><line nr="162" mi="0" ci="6" mb="2" cb="2"/><line nr="163" mi="0" ci="3" mb="0" cb="0"/><line nr="164" mi="0" ci="4" mb="0" cb="0"/><line nr="165" mi="0" ci="1" mb="0" cb="0"/><line nr="168" mi="6" ci="0" mb="2" cb="0"/><line nr="170" mi="1" ci="0" mb="0" cb="0"/><line nr="174" mi="3" ci="0" mb="2" cb="0"/><line nr="179" mi="6" ci="0" mb="0" cb="0"/><line nr="180" mi="2" ci="0" mb="2" cb="0"/><line nr="181" mi="1" ci="0" mb="0" cb="0"/><line nr="183" mi="1" ci="0" mb="0" cb="0"/><line nr="184" mi="5" ci="0" mb="0" cb="0"/><line nr="185" mi="4" ci="0" mb="0" cb="0"/><line nr="186" mi="4" ci="0" mb="0" cb="0"/><line nr="187" mi="1" ci="0" mb="0" cb="0"/><line nr="188" mi="1" ci="0" mb="0" cb="0"/><line nr="190" mi="2" ci="0" mb="0" cb="0"/><line nr="192" mi="6" ci="0" mb="4" cb="0"/><line nr="193" mi="5" ci="0" mb="0" cb="0"/><line nr="194" mi="4" ci="0" mb="0" cb="0"/><line nr="195" mi="1" ci="0" mb="0" cb="0"/><line nr="198" mi="6" ci="0" mb="0" cb="0"/><line nr="199" mi="1" ci="0" mb="0" cb="0"/><line nr="201" mi="4" ci="0" mb="0" cb="0"/><line nr="202" mi="2" ci="0" mb="2" cb="0"/><line nr="203" mi="5" ci="0" mb="0" cb="0"/><line nr="206" mi="5" ci="0" mb="0" cb="0"/><line nr="207" mi="2" ci="0" mb="2" cb="0"/><line nr="208" mi="4" ci="0" mb="0" cb="0"/><line nr="212" mi="3" ci="0" mb="2" cb="0"/><line nr="213" mi="10" ci="0" mb="0" cb="0"/><line nr="216" mi="9" ci="0" mb="0" cb="0"/><line nr="219" mi="5" ci="0" mb="0" cb="0"/><line nr="220" mi="5" ci="0" mb="0" cb="0"/><line nr="221" mi="6" ci="0" mb="0" cb="0"/><line nr="223" mi="5" ci="0" mb="0" cb="0"/><line nr="225" mi="6" ci="0" mb="0" cb="0"/><line nr="227" mi="6" ci="0" mb="0" cb="0"/><line nr="229" mi="3" ci="0" mb="2" cb="0"/><line nr="230" mi="3" ci="0" mb="0" cb="0"/><line nr="231" mi="3" ci="0" mb="0" cb="0"/><line nr="234" mi="4" ci="0" mb="0" cb="0"/><line nr="236" mi="5" ci="0" mb="4" cb="0"/><line nr="237" mi="3" ci="0" mb="0" cb="0"/><line nr="238" mi="3" ci="0" mb="0" cb="0"/><line nr="240" mi="2" ci="0" mb="0" cb="0"/><line nr="244" mi="1" ci="0" mb="0" cb="0"/><line nr="247" mi="3" ci="0" mb="0" cb="0"/><line nr="248" mi="4" ci="0" mb="0" cb="0"/><line nr="249" mi="1" ci="0" mb="0" cb="0"/><line nr="270" mi="3" ci="0" mb="0" cb="0"/><line nr="271" mi="2" ci="0" mb="2" cb="0"/><line nr="272" mi="4" ci="0" mb="0" cb="0"/><line nr="273" mi="2" ci="0" mb="2" cb="0"/><line nr="274" mi="5" ci="0" mb="0" cb="0"/><line nr="278" mi="2" ci="0" mb="2" cb="0"/><line nr="280" mi="2" ci="0" mb="0" cb="0"/><line nr="283" mi="5" ci="0" mb="2" cb="0"/><line nr="285" mi="2" ci="0" mb="0" cb="0"/><line nr="289" mi="3" ci="0" mb="2" cb="0"/><line nr="290" mi="5" ci="0" mb="0" cb="0"/><line nr="291" mi="3" ci="0" mb="0" cb="0"/><line nr="293" mi="6" ci="0" mb="4" cb="0"/><line nr="297" mi="2" ci="0" mb="0" cb="0"/><line nr="300" mi="6" ci="0" mb="0" cb="0"/><line nr="302" mi="2" ci="0" mb="0" cb="0"/><line nr="303" mi="3" ci="0" mb="2" cb="0"/><line nr="304" mi="3" ci="0" mb="0" cb="0"/><line nr="305" mi="4" ci="0" mb="0" cb="0"/><line nr="308" mi="4" ci="0" mb="0" cb="0"/><line nr="310" mi="5" ci="0" mb="4" cb="0"/><line nr="311" mi="3" ci="0" mb="0" cb="0"/><line nr="312" mi="2" ci="0" mb="0" cb="0"/><line nr="315" mi="1" ci="0" mb="0" cb="0"/><line nr="316" mi="5" ci="0" mb="0" cb="0"/><line nr="317" mi="4" ci="0" mb="0" cb="0"/><line nr="319" mi="2" ci="0" mb="0" cb="0"/><line nr="324" mi="0" ci="4" mb="0" cb="0"/><line nr="326" mi="0" ci="3" mb="0" cb="0"/><line nr="328" mi="0" ci="2" mb="0" cb="0"/><line nr="329" mi="0" ci="2" mb="0" cb="0"/><line nr="330" mi="0" ci="2" mb="1" cb="1"/><line nr="331" mi="0" ci="4" mb="0" cb="0"/><line nr="332" mi="0" ci="3" mb="0" cb="0"/><line nr="333" mi="0" ci="10" mb="0" cb="2"/><line nr="334" mi="0" ci="4" mb="0" cb="0"/><line nr="335" mi="0" ci="5" mb="0" cb="0"/><line nr="336" mi="0" ci="8" mb="3" cb="8"/><line nr="338" mi="0" ci="6" mb="0" cb="0"/><line nr="339" mi="0" ci="1" mb="0" cb="0"/><line nr="341" mi="0" ci="6" mb="0" cb="0"/><line nr="342" mi="0" ci="1" mb="0" cb="0"/><line nr="344" mi="0" ci="4" mb="0" cb="0"/><line nr="345" mi="0" ci="1" mb="0" cb="0"/><line nr="347" mi="0" ci="4" mb="0" cb="0"/><line nr="348" mi="0" ci="1" mb="0" cb="0"/><line nr="350" mi="0" ci="5" mb="0" cb="0"/><line nr="351" mi="0" ci="1" mb="0" cb="0"/><line nr="353" mi="2" ci="0" mb="0" cb="0"/><line nr="354" mi="1" ci="0" mb="0" cb="0"/><line nr="356" mi="0" ci="6" mb="0" cb="0"/><line nr="357" mi="0" ci="1" mb="0" cb="0"/><line nr="359" mi="0" ci="4" mb="0" cb="0"/><line nr="360" mi="0" ci="1" mb="0" cb="0"/><line nr="362" mi="0" ci="4" mb="0" cb="0"/><line nr="363" mi="0" ci="1" mb="0" cb="0"/><line nr="365" mi="4" ci="0" mb="0" cb="0"/><line nr="366" mi="1" ci="0" mb="0" cb="0"/><line nr="368" mi="5" ci="0" mb="0" cb="0"/><line nr="371" mi="0" ci="1" mb="0" cb="0"/><line nr="374" mi="0" ci="3" mb="0" cb="0"/><line nr="375" mi="0" ci="2" mb="1" cb="1"/><line nr="377" mi="10" ci="0" mb="0" cb="0"/><line nr="378" mi="3" ci="0" mb="0" cb="0"/><line nr="379" mi="1" ci="0" mb="0" cb="0"/><line nr="382" mi="5" ci="0" mb="0" cb="0"/><line nr="383" mi="1" ci="0" mb="0" cb="0"/><line nr="386" mi="0" ci="3" mb="1" cb="1"/><line nr="387" mi="0" ci="5" mb="0" cb="0"/><line nr="390" mi="0" ci="2" mb="1" cb="1"/><line nr="391" mi="0" ci="8" mb="0" cb="0"/><line nr="395" mi="0" ci="3" mb="1" cb="1"/><line nr="396" mi="3" ci="0" mb="0" cb="0"/><line nr="397" mi="7" ci="0" mb="0" cb="0"/><line nr="401" mi="0" ci="3" mb="0" cb="0"/><line nr="402" mi="4" ci="7" mb="1" cb="1"/><line nr="403" mi="7" ci="0" mb="0" cb="0"/><line nr="404" mi="4" ci="0" mb="2" cb="0"/><line nr="407" mi="20" ci="0" mb="0" cb="0"/><line nr="408" mi="2" ci="0" mb="0" cb="0"/><line nr="410" mi="7" ci="0" mb="0" cb="0"/><line nr="411" mi="8" ci="0" mb="0" cb="0"/><line nr="413" mi="1" ci="0" mb="0" cb="0"/><line nr="414" mi="7" ci="0" mb="0" cb="0"/><line nr="415" mi="1" ci="0" mb="0" cb="0"/><line nr="416" mi="5" ci="0" mb="0" cb="0"/><line nr="417" mi="1" ci="0" mb="0" cb="0"/><line nr="418" mi="9" ci="0" mb="0" cb="0"/><line nr="420" mi="5" ci="0" mb="0" cb="0"/><line nr="421" mi="1" ci="0" mb="0" cb="0"/><line nr="423" mi="5" ci="0" mb="0" cb="0"/><line nr="424" mi="8" ci="0" mb="0" cb="0"/><line nr="426" mi="1" ci="0" mb="0" cb="0"/><line nr="428" mi="0" ci="3" mb="0" cb="0"/><line nr="429" mi="0" ci="1" mb="0" cb="0"/><line nr="438" mi="6" ci="0" mb="0" cb="0"/><line nr="439" mi="5" ci="0" mb="0" cb="0"/><line nr="440" mi="1" ci="0" mb="0" cb="0"/><line nr="448" mi="3" ci="0" mb="0" cb="0"/><line nr="458" mi="6" ci="0" mb="0" cb="0"/><line nr="459" mi="5" ci="0" mb="0" cb="0"/><line nr="460" mi="1" ci="0" mb="0" cb="0"/><line nr="468" mi="3" ci="0" mb="0" cb="0"/><line nr="481" mi="4" ci="0" mb="0" cb="0"/><line nr="482" mi="2" ci="0" mb="2" cb="0"/><line nr="483" mi="5" ci="0" mb="0" cb="0"/><line nr="485" mi="4" ci="0" mb="0" cb="0"/><line nr="487" mi="3" ci="0" mb="0" cb="0"/><line nr="488" mi="2" ci="0" mb="0" cb="0"/><line nr="489" mi="1" ci="0" mb="0" cb="0"/><line nr="490" mi="5" ci="0" mb="0" cb="0"/><line nr="491" mi="1" ci="0" mb="0" cb="0"/><line nr="492" mi="1" ci="0" mb="0" cb="0"/><line nr="500" mi="3" ci="0" mb="0" cb="0"/><line nr="510" mi="3" ci="0" mb="0" cb="0"/><line nr="511" mi="1" ci="0" mb="0" cb="0"/><line nr="519" mi="0" ci="3" mb="0" cb="0"/><line nr="529" mi="3" ci="0" mb="0" cb="0"/><line nr="530" mi="1" ci="0" mb="0" cb="0"/><line nr="538" mi="0" ci="3" mb="0" cb="0"/><line nr="547" mi="3" ci="0" mb="0" cb="0"/><line nr="551" mi="0" ci="2" mb="1" cb="1"/><line nr="552" mi="0" ci="8" mb="0" cb="0"/><line nr="554" mi="0" ci="3" mb="0" cb="0"/><counter type="INSTRUCTION" missed="539" covered="237"/><counter type="BRANCH" missed="69" covered="24"/><counter type="LINE" missed="143" covered="65"/><counter type="COMPLEXITY" missed="54" covered="15"/><counter type="METHOD" missed="11" covered="7"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><counter type="INSTRUCTION" missed="936" covered="384"/><counter type="BRANCH" missed="95" covered="30"/><counter type="LINE" missed="253" covered="104"/><counter type="COMPLEXITY" missed="96" covered="27"/><counter type="METHOD" missed="35" covered="19"/><counter type="CLASS" missed="3" covered="3"/></package><package name="waffle/jaas"><class name="waffle/jaas/GroupPrincipal" sourcefilename="GroupPrincipal.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="58"><counter type="INSTRUCTION" missed="0" covered="12"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getName" desc="()Ljava/lang/String;" line="66"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="addMember" desc="(Ljava/security/Principal;)Z" line="78"><counter type="INSTRUCTION" missed="0" covered="15"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="isMember" desc="(Ljava/security/Principal;)Z" line="94"><counter type="INSTRUCTION" missed="37" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="members" desc="()Ljava/util/Enumeration;" line="116"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="removeMember" desc="(Ljava/security/Principal;)Z" line="128"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="134"><counter type="INSTRUCTION" missed="41" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="94" covered="30"/><counter type="BRANCH" missed="13" covered="1"/><counter type="LINE" missed="22" covered="9"/><counter type="COMPLEXITY" missed="11" covered="3"/><counter type="METHOD" missed="4" covered="3"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/jaas/UserPrincipal" sourcefilename="UserPrincipal.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="46"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getName" desc="()Ljava/lang/String;" line="57"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="63"><counter type="INSTRUCTION" missed="0" covered="17"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="hashCode" desc="()I" line="76"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="30"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="10"/><counter type="COMPLEXITY" missed="0" covered="6"/><counter type="METHOD" missed="0" covered="4"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/jaas/WindowsLoginModule" sourcefilename="WindowsLoginModule.java"><method name="&lt;init&gt;" desc="()V" line="58"><counter type="INSTRUCTION" missed="0" covered="17"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="initialize" desc="(Ljavax/security/auth/Subject;Ljavax/security/auth/callback/CallbackHandler;Ljava/util/Map;Ljava/util/Map;)V" line="94"><counter type="INSTRUCTION" missed="0" covered="61"/><counter type="BRANCH" missed="0" covered="8"/><counter type="LINE" missed="0" covered="12"/><counter type="COMPLEXITY" missed="0" covered="5"/><counter type="METHOD" missed="0" covered="1"/></method><method name="login" desc="()Z" line="119"><counter type="INSTRUCTION" missed="117" covered="89"/><counter type="BRANCH" missed="10" covered="4"/><counter type="LINE" missed="21" covered="22"/><counter type="COMPLEXITY" missed="5" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="abort" desc="()Z" line="199"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="commit" desc="()Z" line="212"><counter type="INSTRUCTION" missed="0" covered="52"/><counter type="BRANCH" missed="0" covered="8"/><counter type="LINE" missed="0" covered="13"/><counter type="COMPLEXITY" missed="0" covered="5"/><counter type="METHOD" missed="0" covered="1"/></method><method name="logout" desc="()Z" line="244"><counter type="INSTRUCTION" missed="0" covered="23"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="6"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="isDebug" desc="()Z" line="263"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getAuth" desc="()Lwaffle/windows/auth/IWindowsAuthProvider;" line="272"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="setAuth" desc="(Lwaffle/windows/auth/IWindowsAuthProvider;)V" line="282"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getUserPrincipals" desc="(Lwaffle/windows/auth/IWindowsIdentity;Lwaffle/windows/auth/PrincipalFormat;)Ljava/util/List;" line="298"><counter type="INSTRUCTION" missed="46" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRolePrincipals" desc="(Lwaffle/windows/auth/IWindowsAccount;Lwaffle/windows/auth/PrincipalFormat;)Ljava/util/List;" line="330"><counter type="INSTRUCTION" missed="47" covered="0"/><counter type="BRANCH" missed="5" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isAllowGuestLogin" desc="()Z" line="356"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="setAllowGuestLogin" desc="(Z)V" line="367"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="61"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="210" covered="266"/><counter type="BRANCH" missed="19" covered="24"/><counter type="LINE" missed="42" covered="67"/><counter type="COMPLEXITY" missed="14" covered="24"/><counter type="METHOD" missed="2" covered="12"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/jaas/RolePrincipal" sourcefilename="RolePrincipal.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="46"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getName" desc="()Ljava/lang/String;" line="57"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="71"><counter type="INSTRUCTION" missed="0" covered="17"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="hashCode" desc="()I" line="89"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="30"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="10"/><counter type="COMPLEXITY" missed="0" covered="6"/><counter type="METHOD" missed="0" covered="4"/><counter type="CLASS" missed="0" covered="1"/></class><sourcefile name="WindowsLoginModule.java"><line nr="58" mi="0" ci="2" mb="0" cb="0"/><line nr="61" mi="0" ci="4" mb="0" cb="0"/><line nr="76" mi="0" ci="5" mb="0" cb="0"/><line nr="82" mi="0" ci="3" mb="0" cb="0"/><line nr="85" mi="0" ci="3" mb="0" cb="0"/><line nr="88" mi="0" ci="4" mb="0" cb="0"/><line nr="94" mi="0" ci="3" mb="0" cb="0"/><line nr="95" mi="0" ci="3" mb="0" cb="0"/><line nr="97" mi="0" ci="11" mb="0" cb="2"/><line nr="98" mi="0" ci="6" mb="0" cb="2"/><line nr="99" mi="0" ci="7" mb="0" cb="0"/><line nr="100" mi="0" ci="6" mb="0" cb="2"/><line nr="101" mi="0" ci="2" mb="0" cb="0"/><line nr="102" mi="0" ci="7" mb="0" cb="0"/><line nr="103" mi="0" ci="6" mb="0" cb="2"/><line nr="104" mi="0" ci="8" mb="0" cb="0"/><line nr="106" mi="0" ci="1" mb="0" cb="0"/><line nr="107" mi="0" ci="1" mb="0" cb="0"/><line nr="119" mi="0" ci="3" mb="0" cb="2"/><line nr="120" mi="0" ci="5" mb="0" cb="0"/><line nr="123" mi="0" ci="5" mb="0" cb="0"/><line nr="124" mi="0" ci="6" mb="0" cb="0"/><line nr="126" mi="0" ci="3" mb="0" cb="0"/><line nr="127" mi="0" ci="4" mb="0" cb="0"/><line nr="128" mi="0" ci="4" mb="0" cb="0"/><line nr="134" mi="0" ci="4" mb="0" cb="0"/><line nr="135" mi="0" ci="3" mb="0" cb="0"/><line nr="136" mi="0" ci="11" mb="0" cb="2"/><line nr="137" mi="0" ci="2" mb="0" cb="0"/><line nr="138" mi="0" ci="1" mb="0" cb="0"/><line nr="139" mi="0" ci="4" mb="0" cb="0"/><line nr="140" mi="0" ci="6" mb="0" cb="0"/><line nr="141" mi="0" ci="1" mb="0" cb="0"/><line nr="142" mi="0" ci="4" mb="0" cb="0"/><line nr="143" mi="0" ci="5" mb="0" cb="0"/><line nr="144" mi="0" ci="6" mb="0" cb="0"/><line nr="145" mi="0" ci="1" mb="0" cb="0"/><line nr="149" mi="6" ci="0" mb="0" cb="0"/><line nr="150" mi="0" ci="1" mb="0" cb="0"/><line nr="151" mi="0" ci="4" mb="0" cb="0"/><line nr="152" mi="0" ci="6" mb="0" cb="0"/><line nr="153" mi="1" ci="0" mb="0" cb="0"/><line nr="157" mi="6" ci="0" mb="4" cb="0"/><line nr="158" mi="5" ci="0" mb="0" cb="0"/><line nr="159" mi="5" ci="0" mb="0" cb="0"/><line nr="162" mi="5" ci="0" mb="0" cb="0"/><line nr="164" mi="8" ci="0" mb="0" cb="0"/><line nr="165" mi="4" ci="0" mb="2" cb="0"/><line nr="167" mi="5" ci="0" mb="0" cb="0"/><line nr="168" mi="17" ci="0" mb="2" cb="0"/><line nr="169" mi="8" ci="0" mb="0" cb="0"/><line nr="170" mi="13" ci="0" mb="2" cb="0"/><line nr="171" mi="5" ci="0" mb="0" cb="0"/><line nr="172" mi="8" ci="0" mb="0" cb="0"/><line nr="173" mi="1" ci="0" mb="0" cb="0"/><line nr="176" mi="5" ci="0" mb="0" cb="0"/><line nr="179" mi="4" ci="0" mb="0" cb="0"/><line nr="180" mi="6" ci="0" mb="0" cb="0"/><line nr="181" mi="1" ci="0" mb="0" cb="0"/><line nr="183" mi="2" ci="0" mb="0" cb="0"/><line nr="186" mi="2" ci="0" mb="0" cb="0"/><line nr="199" mi="0" ci="3" mb="0" cb="0"/><line nr="212" mi="0" ci="3" mb="0" cb="2"/><line nr="213" mi="0" ci="2" mb="0" cb="0"/><line nr="216" mi="0" ci="4" mb="0" cb="2"/><line nr="217" mi="0" ci="5" mb="0" cb="0"/><line nr="220" mi="0" ci="4" mb="0" cb="0"/><line nr="221" mi="0" ci="5" mb="0" cb="0"/><line nr="223" mi="0" ci="5" mb="0" cb="0"/><line nr="224" mi="0" ci="3" mb="0" cb="0"/><line nr="225" mi="0" ci="3" mb="0" cb="2"/><line nr="226" mi="0" ci="10" mb="0" cb="2"/><line nr="227" mi="0" ci="5" mb="0" cb="0"/><line nr="228" mi="0" ci="1" mb="0" cb="0"/><line nr="231" mi="0" ci="2" mb="0" cb="0"/><line nr="244" mi="0" ci="4" mb="0" cb="2"/><line nr="245" mi="0" ci="5" mb="0" cb="0"/><line nr="248" mi="0" ci="4" mb="0" cb="0"/><line nr="250" mi="0" ci="3" mb="0" cb="2"/><line nr="251" mi="0" ci="5" mb="0" cb="0"/><line nr="254" mi="0" ci="2" mb="0" cb="0"/><line nr="263" mi="0" ci="3" mb="0" cb="0"/><line nr="272" mi="0" ci="3" mb="0" cb="0"/><line nr="282" mi="0" ci="3" mb="0" cb="0"/><line nr="283" mi="0" ci="1" mb="0" cb="0"/><line nr="298" mi="4" ci="0" mb="0" cb="0"/><line nr="299" mi="5" ci="0" mb="4" cb="0"/><line nr="301" mi="8" ci="0" mb="0" cb="0"/><line nr="302" mi="1" ci="0" mb="0" cb="0"/><line nr="304" mi="8" ci="0" mb="0" cb="0"/><line nr="305" mi="1" ci="0" mb="0" cb="0"/><line nr="307" mi="8" ci="0" mb="0" cb="0"/><line nr="308" mi="8" ci="0" mb="0" cb="0"/><line nr="309" mi="1" ci="0" mb="0" cb="0"/><line nr="314" mi="2" ci="0" mb="0" cb="0"/><line nr="330" mi="4" ci="0" mb="0" cb="0"/><line nr="331" mi="5" ci="0" mb="5" cb="0"/><line nr="333" mi="8" ci="0" mb="0" cb="0"/><line nr="334" mi="1" ci="0" mb="0" cb="0"/><line nr="336" mi="8" ci="0" mb="0" cb="0"/><line nr="337" mi="1" ci="0" mb="0" cb="0"/><line nr="339" mi="8" ci="0" mb="0" cb="0"/><line nr="340" mi="8" ci="0" mb="0" cb="0"/><line nr="341" mi="1" ci="0" mb="0" cb="0"/><line nr="343" mi="1" ci="0" mb="0" cb="0"/><line nr="347" mi="2" ci="0" mb="0" cb="0"/><line nr="356" mi="0" ci="3" mb="0" cb="0"/><line nr="367" mi="0" ci="3" mb="0" cb="0"/><line nr="368" mi="0" ci="1" mb="0" cb="0"/><counter type="INSTRUCTION" missed="210" covered="266"/><counter type="BRANCH" missed="19" covered="24"/><counter type="LINE" missed="42" covered="67"/><counter type="COMPLEXITY" missed="14" covered="24"/><counter type="METHOD" missed="2" covered="12"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="UserPrincipal.java"><line nr="46" mi="0" ci="2" mb="0" cb="0"/><line nr="47" mi="0" ci="3" mb="0" cb="0"/><line nr="48" mi="0" ci="1" mb="0" cb="0"/><line nr="57" mi="0" ci="3" mb="0" cb="0"/><line nr="63" mi="0" ci="3" mb="0" cb="2"/><line nr="64" mi="0" ci="2" mb="0" cb="0"/><line nr="67" mi="0" ci="3" mb="0" cb="2"/><line nr="68" mi="0" ci="7" mb="0" cb="0"/><line nr="71" mi="0" ci="2" mb="0" cb="0"/><line nr="76" mi="0" ci="4" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="30"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="10"/><counter type="COMPLEXITY" missed="0" covered="6"/><counter type="METHOD" missed="0" covered="4"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="GroupPrincipal.java"><line nr="58" mi="0" ci="3" mb="0" cb="0"/><line nr="60" mi="0" ci="3" mb="0" cb="0"/><line nr="61" mi="0" ci="5" mb="0" cb="0"/><line nr="62" mi="0" ci="1" mb="0" cb="0"/><line nr="66" mi="0" ci="3" mb="0" cb="0"/><line nr="78" mi="0" ci="5" mb="0" cb="0"/><line nr="79" mi="0" ci="2" mb="1" cb="1"/><line nr="80" mi="0" ci="6" mb="0" cb="0"/><line nr="82" mi="0" ci="2" mb="0" cb="0"/><line nr="94" mi="5" ci="0" mb="0" cb="0"/><line nr="95" mi="2" ci="0" mb="2" cb="0"/><line nr="96" mi="4" ci="0" mb="0" cb="0"/><line nr="97" mi="10" ci="0" mb="2" cb="0"/><line nr="98" mi="3" ci="0" mb="2" cb="0"/><line nr="99" mi="3" ci="0" mb="0" cb="0"/><line nr="100" mi="4" ci="0" mb="0" cb="0"/><line nr="101" mi="2" ci="0" mb="2" cb="0"/><line nr="102" mi="1" ci="0" mb="0" cb="0"/><line nr="105" mi="1" ci="0" mb="0" cb="0"/><line nr="107" mi="2" ci="0" mb="0" cb="0"/><line nr="116" mi="5" ci="0" mb="0" cb="0"/><line nr="128" mi="5" ci="0" mb="0" cb="0"/><line nr="129" mi="6" ci="0" mb="2" cb="0"/><line nr="134" mi="6" ci="0" mb="0" cb="0"/><line nr="135" mi="4" ci="0" mb="0" cb="0"/><line nr="136" mi="12" ci="0" mb="2" cb="0"/><line nr="137" mi="4" ci="0" mb="0" cb="0"/><line nr="138" mi="4" ci="0" mb="0" cb="0"/><line nr="139" mi="1" ci="0" mb="0" cb="0"/><line nr="140" mi="7" ci="0" mb="0" cb="0"/><line nr="141" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="94" covered="30"/><counter type="BRANCH" missed="13" covered="1"/><counter type="LINE" missed="22" covered="9"/><counter type="COMPLEXITY" missed="11" covered="3"/><counter type="METHOD" missed="4" covered="3"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="RolePrincipal.java"><line nr="46" mi="0" ci="2" mb="0" cb="0"/><line nr="47" mi="0" ci="3" mb="0" cb="0"/><line nr="48" mi="0" ci="1" mb="0" cb="0"/><line nr="57" mi="0" ci="3" mb="0" cb="0"/><line nr="71" mi="0" ci="3" mb="0" cb="2"/><line nr="72" mi="0" ci="2" mb="0" cb="0"/><line nr="75" mi="0" ci="3" mb="0" cb="2"/><line nr="76" mi="0" ci="7" mb="0" cb="0"/><line nr="79" mi="0" ci="2" mb="0" cb="0"/><line nr="89" mi="0" ci="4" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="30"/><counter type="BRANCH" missed="0" covered="4"/><counter type="LINE" missed="0" covered="10"/><counter type="COMPLEXITY" missed="0" covered="6"/><counter type="METHOD" missed="0" covered="4"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><counter type="INSTRUCTION" missed="304" covered="356"/><counter type="BRANCH" missed="32" covered="33"/><counter type="LINE" missed="64" covered="96"/><counter type="COMPLEXITY" missed="25" covered="39"/><counter type="METHOD" missed="6" covered="23"/><counter type="CLASS" missed="0" covered="4"/></package><package name="waffle/util"><class name="waffle/util/WaffleInfo" sourcefilename="WaffleInfo.java"><method name="&lt;init&gt;" desc="()V" line="96"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getWaffleInfo" desc="()Lorg/w3c/dom/Document;" line="112"><counter type="INSTRUCTION" missed="4" covered="59"/><counter type="BRANCH" missed="3" covered="3"/><counter type="LINE" missed="1" covered="17"/><counter type="COMPLEXITY" missed="3" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getAuthProviderInfo" desc="(Lorg/w3c/dom/Document;)Lorg/w3c/dom/Element;" line="151"><counter type="INSTRUCTION" missed="69" covered="120"/><counter type="BRANCH" missed="3" covered="3"/><counter type="LINE" missed="14" covered="27"/><counter type="COMPLEXITY" missed="2" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="addAccountInfo" desc="(Lorg/w3c/dom/Document;Lorg/w3c/dom/Element;Lwaffle/windows/auth/IWindowsAccount;)V" line="226"><counter type="INSTRUCTION" missed="0" covered="49"/><counter type="LINE" missed="0" covered="13"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getLookupInfo" desc="(Lorg/w3c/dom/Document;Ljava/lang/String;)Lorg/w3c/dom/Element;" line="254"><counter type="INSTRUCTION" missed="0" covered="29"/><counter type="LINE" missed="0" covered="8"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getException" desc="(Lorg/w3c/dom/Document;Ljava/lang/Exception;)Lorg/w3c/dom/Element;" line="276"><counter type="INSTRUCTION" missed="0" covered="40"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="10"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toPrettyXML" desc="(Lorg/w3c/dom/Document;)Ljava/lang/String;" line="304"><counter type="INSTRUCTION" missed="42" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="main" desc="([Ljava/lang/String;)V" line="327"><counter type="INSTRUCTION" missed="121" covered="0"/><counter type="BRANCH" missed="13" covered="0"/><counter type="LINE" missed="29" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="99"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="236" covered="304"/><counter type="BRANCH" missed="20" covered="7"/><counter type="LINE" missed="55" covered="77"/><counter type="COMPLEXITY" missed="15" covered="8"/><counter type="METHOD" missed="2" covered="7"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/util/NtlmMessage" sourcefilename="NtlmMessage.java"><method name="isNtlmMessage" desc="([B)Z" line="44"><counter type="INSTRUCTION" missed="0" covered="28"/><counter type="BRANCH" missed="0" covered="8"/><counter type="LINE" missed="0" covered="6"/><counter type="COMPLEXITY" missed="0" covered="5"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getMessageType" desc="([B)I" line="66"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="33"><counter type="INSTRUCTION" missed="0" covered="36"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="69"/><counter type="BRANCH" missed="0" covered="8"/><counter type="LINE" missed="0" covered="8"/><counter type="COMPLEXITY" missed="0" covered="7"/><counter type="METHOD" missed="0" covered="3"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/util/AuthorizationHeader" sourcefilename="AuthorizationHeader.java"><method name="&lt;init&gt;" desc="(Ljakarta/servlet/http/HttpServletRequest;)V" line="51"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getHeader" desc="()Ljava/lang/String;" line="61"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="isNull" desc="()Z" line="70"><counter type="INSTRUCTION" missed="2" covered="9"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getSecurityPackage" desc="()Ljava/lang/String;" line="85"><counter type="INSTRUCTION" missed="11" covered="16"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="2" covered="5"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="toString" desc="()Ljava/lang/String;" line="101"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getToken" desc="()Ljava/lang/String;" line="110"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTokenBytes" desc="()[B" line="120"><counter type="INSTRUCTION" missed="15" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isNtlmType1Message" desc="()Z" line="133"><counter type="INSTRUCTION" missed="21" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isSPNegTokenInitMessage" desc="()Z" line="152"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isNtlmType1PostAuthorizationHeader" desc="()Z" line="169"><counter type="INSTRUCTION" missed="36" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isBearerAuthorizationHeader" desc="()Z" line="187"><counter type="INSTRUCTION" missed="2" covered="10"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="1" covered="2"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="40"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="115" covered="50"/><counter type="BRANCH" missed="27" covered="5"/><counter type="LINE" missed="25" covered="13"/><counter type="COMPLEXITY" missed="22" covered="6"/><counter type="METHOD" missed="6" covered="6"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/util/NtlmServletRequest" sourcefilename="NtlmServletRequest.java"><method name="getConnectionId" desc="(Ljakarta/servlet/http/HttpServletRequest;)Ljava/lang/String;" line="49"><counter type="INSTRUCTION" missed="22" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRemoteHost" desc="(Ljakarta/servlet/http/HttpServletRequest;)Ljava/lang/String;" line="62"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="31" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="waffle/util/CorsPreFlightCheck" sourcefilename="CorsPreFlightCheck.java"><method name="isPreflight" desc="(Ljakarta/servlet/http/HttpServletRequest;)Z" line="67"><counter type="INSTRUCTION" missed="6" covered="55"/><counter type="BRANCH" missed="3" covered="9"/><counter type="LINE" missed="2" covered="17"/><counter type="COMPLEXITY" missed="2" covered="5"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="41"><counter type="INSTRUCTION" missed="0" covered="23"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="6" covered="78"/><counter type="BRANCH" missed="3" covered="9"/><counter type="LINE" missed="2" covered="20"/><counter type="COMPLEXITY" missed="2" covered="6"/><counter type="METHOD" missed="0" covered="2"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/util/SPNegoMessage" sourcefilename="SPNegoMessage.java"><method name="isNegTokenInit" desc="([B)Z" line="54"><counter type="INSTRUCTION" missed="12" covered="53"/><counter type="BRANCH" missed="4" covered="10"/><counter type="LINE" missed="3" covered="10"/><counter type="COMPLEXITY" missed="4" covered="4"/><counter type="METHOD" missed="0" covered="1"/></method><method name="isNegTokenArg" desc="([B)Z" line="101"><counter type="INSTRUCTION" missed="28" covered="36"/><counter type="BRANCH" missed="5" covered="7"/><counter type="LINE" missed="8" covered="6"/><counter type="COMPLEXITY" missed="4" covered="3"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;clinit&gt;" desc="()V" line="34"><counter type="INSTRUCTION" missed="0" covered="36"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="40" covered="125"/><counter type="BRANCH" missed="9" covered="17"/><counter type="LINE" missed="11" covered="17"/><counter type="COMPLEXITY" missed="8" covered="8"/><counter type="METHOD" missed="0" covered="3"/><counter type="CLASS" missed="0" covered="1"/></class><sourcefile name="NtlmServletRequest.java"><line nr="49" mi="3" ci="0" mb="0" cb="0"/><line nr="50" mi="19" ci="0" mb="2" cb="0"/><line nr="62" mi="9" ci="0" mb="2" cb="0"/><counter type="INSTRUCTION" missed="31" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="SPNegoMessage.java"><line nr="34" mi="0" ci="36" mb="0" cb="0"/><line nr="54" mi="0" ci="6" mb="2" cb="2"/><line nr="55" mi="2" ci="0" mb="0" cb="0"/><line nr="59" mi="0" ci="5" mb="0" cb="2"/><line nr="60" mi="0" ci="2" mb="0" cb="0"/><line nr="65" mi="0" ci="2" mb="0" cb="0"/><line nr="66" mi="0" ci="6" mb="1" cb="1"/><line nr="67" mi="8" ci="0" mb="0" cb="0"/><line nr="70" mi="0" ci="9" mb="0" cb="2"/><line nr="71" mi="0" ci="2" mb="0" cb="0"/><line nr="75" mi="0" ci="8" mb="0" cb="2"/><line nr="76" mi="0" ci="11" mb="1" cb="1"/><line nr="77" mi="2" ci="0" mb="0" cb="0"/><line nr="81" mi="0" ci="2" mb="0" cb="0"/><line nr="101" mi="0" ci="6" mb="2" cb="2"/><line nr="102" mi="2" ci="0" mb="0" cb="0"/><line nr="106" mi="0" ci="7" mb="0" cb="2"/><line nr="107" mi="0" ci="2" mb="0" cb="0"/><line nr="114" mi="0" ci="6" mb="1" cb="1"/><line nr="115" mi="0" ci="5" mb="0" cb="0"/><line nr="117" mi="6" ci="0" mb="0" cb="0"/><line nr="118" mi="2" ci="0" mb="0" cb="0"/><line nr="119" mi="2" ci="0" mb="0" cb="0"/><line nr="120" mi="2" ci="0" mb="2" cb="0"/><line nr="121" mi="4" ci="0" mb="0" cb="0"/><line nr="122" mi="8" ci="0" mb="0" cb="0"/><line nr="123" mi="2" ci="0" mb="0" cb="0"/><line nr="127" mi="0" ci="10" mb="0" cb="2"/><counter type="INSTRUCTION" missed="40" covered="125"/><counter type="BRANCH" missed="9" covered="17"/><counter type="LINE" missed="11" covered="17"/><counter type="COMPLEXITY" missed="8" covered="8"/><counter type="METHOD" missed="0" covered="3"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="CorsPreFlightCheck.java"><line nr="41" mi="0" ci="3" mb="0" cb="0"/><line nr="47" mi="0" ci="17" mb="0" cb="0"/><line nr="48" mi="0" ci="3" mb="0" cb="0"/><line nr="67" mi="0" ci="5" mb="0" cb="0"/><line nr="69" mi="0" ci="2" mb="0" cb="0"/><line nr="70" mi="0" ci="1" mb="0" cb="0"/><line nr="73" mi="0" ci="3" mb="0" cb="0"/><line nr="74" mi="0" ci="6" mb="0" cb="4"/><line nr="75" mi="0" ci="2" mb="0" cb="0"/><line nr="78" mi="0" ci="3" mb="0" cb="0"/><line nr="83" mi="2" ci="2" mb="1" cb="1"/><line nr="84" mi="2" ci="0" mb="2" cb="0"/><line nr="85" mi="2" ci="0" mb="0" cb="0"/><line nr="91" mi="0" ci="3" mb="0" cb="0"/><line nr="93" mi="0" ci="10" mb="0" cb="2"/><line nr="94" mi="0" ci="4" mb="0" cb="0"/><line nr="95" mi="0" ci="4" mb="0" cb="0"/><line nr="97" mi="0" ci="2" mb="0" cb="2"/><line nr="99" mi="0" ci="2" mb="0" cb="0"/><line nr="101" mi="0" ci="1" mb="0" cb="0"/><line nr="102" mi="0" ci="3" mb="0" cb="0"/><line nr="104" mi="0" ci="2" mb="0" cb="0"/><counter type="INSTRUCTION" missed="6" covered="78"/><counter type="BRANCH" missed="3" covered="9"/><counter type="LINE" missed="2" covered="20"/><counter type="COMPLEXITY" missed="2" covered="6"/><counter type="METHOD" missed="0" covered="2"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="NtlmMessage.java"><line nr="33" mi="0" ci="36" mb="0" cb="0"/><line nr="44" mi="0" ci="7" mb="0" cb="4"/><line nr="45" mi="0" ci="2" mb="0" cb="0"/><line nr="48" mi="0" ci="8" mb="0" cb="2"/><line nr="49" mi="0" ci="7" mb="0" cb="2"/><line nr="50" mi="0" ci="2" mb="0" cb="0"/><line nr="54" mi="0" ci="2" mb="0" cb="0"/><line nr="66" mi="0" ci="5" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="69"/><counter type="BRANCH" missed="0" covered="8"/><counter type="LINE" missed="0" covered="8"/><counter type="COMPLEXITY" missed="0" covered="7"/><counter type="METHOD" missed="0" covered="3"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="AuthorizationHeader.java"><line nr="40" mi="0" ci="4" mb="0" cb="0"/><line nr="51" mi="0" ci="2" mb="0" cb="0"/><line nr="52" mi="0" ci="3" mb="0" cb="0"/><line nr="53" mi="0" ci="1" mb="0" cb="0"/><line nr="61" mi="0" ci="5" mb="0" cb="0"/><line nr="70" mi="2" ci="9" mb="2" cb="2"/><line nr="85" mi="0" ci="3" mb="0" cb="0"/><line nr="87" mi="0" ci="2" mb="1" cb="1"/><line nr="88" mi="5" ci="0" mb="0" cb="0"/><line nr="91" mi="0" ci="4" mb="0" cb="0"/><line nr="92" mi="0" ci="2" mb="1" cb="1"/><line nr="93" mi="0" ci="5" mb="0" cb="0"/><line nr="96" mi="6" ci="0" mb="0" cb="0"/><line nr="101" mi="8" ci="0" mb="2" cb="0"/><line nr="110" mi="9" ci="0" mb="0" cb="0"/><line nr="120" mi="5" ci="0" mb="0" cb="0"/><line nr="121" mi="1" ci="0" mb="0" cb="0"/><line nr="122" mi="4" ci="0" mb="0" cb="0"/><line nr="123" mi="5" ci="0" mb="0" cb="0"/><line nr="133" mi="3" ci="0" mb="2" cb="0"/><line nr="134" mi="2" ci="0" mb="0" cb="0"/><line nr="137" mi="3" ci="0" mb="0" cb="0"/><line nr="138" mi="3" ci="0" mb="2" cb="0"/><line nr="139" mi="2" ci="0" mb="0" cb="0"/><line nr="142" mi="8" ci="0" mb="2" cb="0"/><line nr="152" mi="3" ci="0" mb="2" cb="0"/><line nr="153" mi="2" ci="0" mb="0" cb="0"/><line nr="156" mi="3" ci="0" mb="0" cb="0"/><line nr="157" mi="3" ci="0" mb="0" cb="0"/><line nr="169" mi="15" ci="0" mb="4" cb="0"/><line nr="170" mi="3" ci="0" mb="2" cb="0"/><line nr="171" mi="2" ci="0" mb="0" cb="0"/><line nr="174" mi="4" ci="0" mb="2" cb="0"/><line nr="175" mi="2" ci="0" mb="0" cb="0"/><line nr="178" mi="10" ci="0" mb="4" cb="0"/><line nr="187" mi="0" ci="3" mb="1" cb="1"/><line nr="188" mi="2" ci="0" mb="0" cb="0"/><line nr="191" mi="0" ci="7" mb="0" cb="0"/><counter type="INSTRUCTION" missed="115" covered="50"/><counter type="BRANCH" missed="27" covered="5"/><counter type="LINE" missed="25" covered="13"/><counter type="COMPLEXITY" missed="22" covered="6"/><counter type="METHOD" missed="6" covered="6"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="WaffleInfo.java"><line nr="96" mi="0" ci="3" mb="0" cb="0"/><line nr="99" mi="0" ci="4" mb="0" cb="0"/><line nr="112" mi="0" ci="2" mb="0" cb="0"/><line nr="113" mi="0" ci="4" mb="0" cb="0"/><line nr="114" mi="0" ci="4" mb="0" cb="0"/><line nr="115" mi="0" ci="3" mb="0" cb="0"/><line nr="117" mi="0" ci="4" mb="0" cb="0"/><line nr="120" mi="0" ci="4" mb="0" cb="0"/><line nr="123" mi="0" ci="4" mb="0" cb="0"/><line nr="124" mi="0" ci="2" mb="1" cb="1"/><line nr="125" mi="4" ci="0" mb="0" cb="0"/><line nr="127" mi="0" ci="4" mb="0" cb="0"/><line nr="128" mi="0" ci="2" mb="1" cb="1"/><line nr="129" mi="0" ci="4" mb="0" cb="0"/><line nr="131" mi="0" ci="4" mb="0" cb="0"/><line nr="132" mi="0" ci="2" mb="1" cb="1"/><line nr="133" mi="0" ci="4" mb="0" cb="0"/><line nr="136" mi="0" ci="4" mb="0" cb="0"/><line nr="137" mi="0" ci="6" mb="0" cb="0"/><line nr="139" mi="0" ci="2" mb="0" cb="0"/><line nr="151" mi="0" ci="4" mb="0" cb="0"/><line nr="153" mi="0" ci="4" mb="0" cb="0"/><line nr="154" mi="0" ci="6" mb="0" cb="0"/><line nr="157" mi="0" ci="4" mb="0" cb="0"/><line nr="158" mi="0" ci="4" mb="0" cb="0"/><line nr="160" mi="0" ci="2" mb="0" cb="0"/><line nr="161" mi="0" ci="8" mb="0" cb="0"/><line nr="164" mi="0" ci="4" mb="0" cb="0"/><line nr="165" mi="0" ci="4" mb="0" cb="0"/><line nr="167" mi="0" ci="3" mb="0" cb="0"/><line nr="168" mi="0" ci="4" mb="0" cb="0"/><line nr="169" mi="0" ci="4" mb="0" cb="0"/><line nr="170" mi="0" ci="4" mb="0" cb="0"/><line nr="172" mi="0" ci="4" mb="0" cb="0"/><line nr="173" mi="0" ci="4" mb="0" cb="0"/><line nr="174" mi="0" ci="4" mb="0" cb="0"/><line nr="176" mi="0" ci="4" mb="0" cb="0"/><line nr="177" mi="0" ci="4" mb="0" cb="0"/><line nr="178" mi="0" ci="4" mb="0" cb="0"/><line nr="180" mi="0" ci="4" mb="0" cb="0"/><line nr="182" mi="0" ci="17" mb="0" cb="2"/><line nr="183" mi="0" ci="4" mb="0" cb="0"/><line nr="184" mi="0" ci="3" mb="0" cb="0"/><line nr="185" mi="0" ci="4" mb="0" cb="0"/><line nr="187" mi="0" ci="4" mb="0" cb="0"/><line nr="190" mi="0" ci="3" mb="1" cb="1"/><line nr="191" mi="4" ci="0" mb="0" cb="0"/><line nr="192" mi="4" ci="0" mb="0" cb="0"/><line nr="195" mi="17" ci="0" mb="2" cb="0"/><line nr="196" mi="4" ci="0" mb="0" cb="0"/><line nr="197" mi="4" ci="0" mb="0" cb="0"/><line nr="199" mi="4" ci="0" mb="0" cb="0"/><line nr="200" mi="4" ci="0" mb="0" cb="0"/><line nr="201" mi="4" ci="0" mb="0" cb="0"/><line nr="203" mi="4" ci="0" mb="0" cb="0"/><line nr="204" mi="4" ci="0" mb="0" cb="0"/><line nr="205" mi="4" ci="0" mb="0" cb="0"/><line nr="207" mi="4" ci="0" mb="0" cb="0"/><line nr="208" mi="4" ci="0" mb="0" cb="0"/><line nr="209" mi="4" ci="0" mb="0" cb="0"/><line nr="212" mi="0" ci="2" mb="0" cb="0"/><line nr="226" mi="0" ci="4" mb="0" cb="0"/><line nr="227" mi="0" ci="4" mb="0" cb="0"/><line nr="228" mi="0" ci="4" mb="0" cb="0"/><line nr="230" mi="0" ci="4" mb="0" cb="0"/><line nr="231" mi="0" ci="4" mb="0" cb="0"/><line nr="232" mi="0" ci="4" mb="0" cb="0"/><line nr="234" mi="0" ci="4" mb="0" cb="0"/><line nr="235" mi="0" ci="4" mb="0" cb="0"/><line nr="236" mi="0" ci="4" mb="0" cb="0"/><line nr="238" mi="0" ci="4" mb="0" cb="0"/><line nr="239" mi="0" ci="4" mb="0" cb="0"/><line nr="240" mi="0" ci="4" mb="0" cb="0"/><line nr="241" mi="0" ci="1" mb="0" cb="0"/><line nr="254" mi="0" ci="4" mb="0" cb="0"/><line nr="255" mi="0" ci="4" mb="0" cb="0"/><line nr="256" mi="0" ci="4" mb="0" cb="0"/><line nr="258" mi="0" ci="7" mb="0" cb="0"/><line nr="259" mi="0" ci="1" mb="0" cb="0"/><line nr="260" mi="0" ci="6" mb="0" cb="0"/><line nr="261" mi="0" ci="1" mb="0" cb="0"/><line nr="262" mi="0" ci="2" mb="0" cb="0"/><line nr="276" mi="0" ci="4" mb="0" cb="0"/><line nr="277" mi="0" ci="6" mb="0" cb="0"/><line nr="279" mi="0" ci="4" mb="0" cb="0"/><line nr="280" mi="0" ci="3" mb="1" cb="1"/><line nr="281" mi="0" ci="4" mb="0" cb="0"/><line nr="282" mi="0" ci="4" mb="0" cb="0"/><line nr="285" mi="0" ci="4" mb="0" cb="0"/><line nr="286" mi="0" ci="5" mb="0" cb="0"/><line nr="287" mi="0" ci="4" mb="0" cb="0"/><line nr="288" mi="0" ci="2" mb="0" cb="0"/><line nr="304" mi="2" ci="0" mb="0" cb="0"/><line nr="305" mi="4" ci="0" mb="0" cb="0"/><line nr="306" mi="4" ci="0" mb="0" cb="0"/><line nr="308" mi="3" ci="0" mb="0" cb="0"/><line nr="309" mi="4" ci="0" mb="0" cb="0"/><line nr="310" mi="4" ci="0" mb="0" cb="0"/><line nr="313" mi="4" ci="0" mb="0" cb="0"/><line nr="314" mi="5" ci="0" mb="0" cb="0"/><line nr="315" mi="5" ci="0" mb="0" cb="0"/><line nr="316" mi="4" ci="0" mb="0" cb="0"/><line nr="317" mi="3" ci="0" mb="0" cb="0"/><line nr="327" mi="2" ci="0" mb="0" cb="0"/><line nr="328" mi="4" ci="0" mb="0" cb="0"/><line nr="329" mi="2" ci="0" mb="2" cb="0"/><line nr="331" mi="8" ci="0" mb="2" cb="0"/><line nr="332" mi="4" ci="0" mb="0" cb="0"/><line nr="333" mi="3" ci="0" mb="2" cb="0"/><line nr="334" mi="8" ci="0" mb="3" cb="0"/><line nr="336" mi="2" ci="0" mb="0" cb="0"/><line nr="337" mi="1" ci="0" mb="0" cb="0"/><line nr="339" mi="7" ci="0" mb="0" cb="0"/><line nr="340" mi="1" ci="0" mb="0" cb="0"/><line nr="342" mi="4" ci="0" mb="0" cb="0"/><line nr="343" mi="6" ci="0" mb="0" cb="0"/><line nr="349" mi="4" ci="0" mb="0" cb="0"/><line nr="351" mi="3" ci="0" mb="0" cb="0"/><line nr="352" mi="10" ci="0" mb="2" cb="0"/><line nr="353" mi="8" ci="0" mb="0" cb="0"/><line nr="354" mi="1" ci="0" mb="0" cb="0"/><line nr="356" mi="3" ci="0" mb="0" cb="0"/><line nr="358" mi="2" ci="0" mb="2" cb="0"/><line nr="359" mi="7" ci="0" mb="0" cb="0"/><line nr="360" mi="13" ci="0" mb="0" cb="0"/><line nr="361" mi="4" ci="0" mb="0" cb="0"/><line nr="363" mi="3" ci="0" mb="0" cb="0"/><line nr="365" mi="1" ci="0" mb="0" cb="0"/><line nr="366" mi="4" ci="0" mb="0" cb="0"/><line nr="367" mi="4" ci="0" mb="0" cb="0"/><line nr="368" mi="1" ci="0" mb="0" cb="0"/><line nr="369" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="236" covered="304"/><counter type="BRANCH" missed="20" covered="7"/><counter type="LINE" missed="55" covered="77"/><counter type="COMPLEXITY" missed="15" covered="8"/><counter type="METHOD" missed="2" covered="7"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><counter type="INSTRUCTION" missed="428" covered="626"/><counter type="BRANCH" missed="63" covered="46"/><counter type="LINE" missed="96" covered="135"/><counter type="COMPLEXITY" missed="51" covered="35"/><counter type="METHOD" missed="10" covered="21"/><counter type="CLASS" missed="1" covered="5"/></package><package name="waffle/windows/auth"><class name="waffle/windows/auth/IWindowsAccount" sourcefilename="IWindowsAccount.java"/><class name="waffle/windows/auth/IWindowsAuthProvider" sourcefilename="IWindowsAuthProvider.java"/><class name="waffle/windows/auth/IWindowsComputer" sourcefilename="IWindowsComputer.java"/><class name="waffle/windows/auth/IWindowsIdentity" sourcefilename="IWindowsIdentity.java"/><class name="waffle/windows/auth/WindowsAccount" sourcefilename="WindowsAccount.java"><method name="&lt;init&gt;" desc="(Lwaffle/windows/auth/IWindowsAccount;)V" line="54"><counter type="INSTRUCTION" missed="19" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSidString" desc="()Ljava/lang/String;" line="67"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getFqn" desc="()Ljava/lang/String;" line="76"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getName" desc="()Ljava/lang/String;" line="85"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getDomain" desc="()Ljava/lang/String;" line="94"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="100"><counter type="INSTRUCTION" missed="17" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="113"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="52" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="16" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="waffle/windows/auth/IWindowsImpersonationContext" sourcefilename="IWindowsImpersonationContext.java"/><class name="waffle/windows/auth/IWindowsCredentialsHandle" sourcefilename="IWindowsCredentialsHandle.java"/><class name="waffle/windows/auth/PrincipalFormat" sourcefilename="PrincipalFormat.java"><method name="&lt;clinit&gt;" desc="()V" line="29"><counter type="INSTRUCTION" missed="0" covered="27"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="27"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/windows/auth/IWindowsSecurityContext" sourcefilename="IWindowsSecurityContext.java"/><class name="waffle/windows/auth/IWindowsDomain" sourcefilename="IWindowsDomain.java"/><sourcefile name="IWindowsAuthProvider.java"/><sourcefile name="WindowsAccount.java"><line nr="54" mi="2" ci="0" mb="0" cb="0"/><line nr="55" mi="4" ci="0" mb="0" cb="0"/><line nr="56" mi="4" ci="0" mb="0" cb="0"/><line nr="57" mi="4" ci="0" mb="0" cb="0"/><line nr="58" mi="4" ci="0" mb="0" cb="0"/><line nr="59" mi="1" ci="0" mb="0" cb="0"/><line nr="67" mi="3" ci="0" mb="0" cb="0"/><line nr="76" mi="3" ci="0" mb="0" cb="0"/><line nr="85" mi="3" ci="0" mb="0" cb="0"/><line nr="94" mi="3" ci="0" mb="0" cb="0"/><line nr="100" mi="3" ci="0" mb="2" cb="0"/><line nr="101" mi="2" ci="0" mb="0" cb="0"/><line nr="104" mi="3" ci="0" mb="2" cb="0"/><line nr="105" mi="2" ci="0" mb="0" cb="0"/><line nr="108" mi="7" ci="0" mb="0" cb="0"/><line nr="113" mi="4" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="52" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="16" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="IWindowsDomain.java"/><sourcefile name="IWindowsImpersonationContext.java"/><sourcefile name="IWindowsSecurityContext.java"/><sourcefile name="IWindowsComputer.java"/><sourcefile name="IWindowsCredentialsHandle.java"/><sourcefile name="IWindowsIdentity.java"/><sourcefile name="PrincipalFormat.java"><line nr="29" mi="0" ci="3" mb="0" cb="0"/><line nr="32" mi="0" ci="6" mb="0" cb="0"/><line nr="35" mi="0" ci="6" mb="0" cb="0"/><line nr="38" mi="0" ci="6" mb="0" cb="0"/><line nr="41" mi="0" ci="6" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="27"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="IWindowsAccount.java"/><counter type="INSTRUCTION" missed="52" covered="27"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="16" covered="5"/><counter type="COMPLEXITY" missed="9" covered="1"/><counter type="METHOD" missed="7" covered="1"/><counter type="CLASS" missed="1" covered="1"/></package><package name="waffle/windows/auth/impl"><class name="waffle/windows/auth/impl/WindowsComputerImpl" sourcefilename="WindowsComputerImpl.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="52"><counter type="INSTRUCTION" missed="0" covered="10"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getComputerName" desc="()Ljava/lang/String;" line="59"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getGroups" desc="()[Ljava/lang/String;" line="64"><counter type="INSTRUCTION" missed="0" covered="35"/><counter type="BRANCH" missed="0" covered="2"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="2"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getJoinStatus" desc="()Ljava/lang/String;" line="74"><counter type="INSTRUCTION" missed="12" covered="8"/><counter type="BRANCH" missed="4" covered="1"/><counter type="LINE" missed="4" covered="3"/><counter type="COMPLEXITY" missed="4" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getMemberOf" desc="()Ljava/lang/String;" line="91"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="12" covered="59"/><counter type="BRANCH" missed="4" covered="3"/><counter type="LINE" missed="4" covered="14"/><counter type="COMPLEXITY" missed="4" covered="6"/><counter type="METHOD" missed="0" covered="5"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/windows/auth/impl/WindowsCredentialsHandleImpl" sourcefilename="WindowsCredentialsHandleImpl.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;ILjava/lang/String;)V" line="64"><counter type="INSTRUCTION" missed="0" covered="12"/><counter type="LINE" missed="0" covered="5"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getCurrent" desc="(Ljava/lang/String;)Lwaffle/windows/auth/IWindowsCredentialsHandle;" line="79"><counter type="INSTRUCTION" missed="0" covered="11"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="initialize" desc="()V" line="90"><counter type="INSTRUCTION" missed="5" covered="29"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="1" covered="5"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="dispose" desc="()V" line="104"><counter type="INSTRUCTION" missed="5" covered="16"/><counter type="BRANCH" missed="3" covered="3"/><counter type="LINE" missed="1" covered="4"/><counter type="COMPLEXITY" missed="3" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getHandle" desc="()Lcom/sun/jna/platform/win32/Sspi$CredHandle;" line="119"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="10" covered="71"/><counter type="BRANCH" missed="4" covered="4"/><counter type="LINE" missed="2" covered="18"/><counter type="COMPLEXITY" missed="4" covered="5"/><counter type="METHOD" missed="0" covered="5"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/windows/auth/impl/WindowsDomainImpl$TrustDirection" sourcefilename="WindowsDomainImpl.java"><method name="&lt;clinit&gt;" desc="()V" line="38"><counter type="INSTRUCTION" missed="21" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="21" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="waffle/windows/auth/impl/WindowsIdentityImpl" sourcefilename="WindowsIdentityImpl.java"><method name="&lt;init&gt;" desc="(Lcom/sun/jna/platform/win32/WinNT$HANDLE;)V" line="59"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getWindowsAccount" desc="()Lcom/sun/jna/platform/win32/Advapi32Util$Account;" line="69"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUserGroups" desc="()[Lcom/sun/jna/platform/win32/Advapi32Util$Account;" line="81"><counter type="INSTRUCTION" missed="13" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getFqn" desc="()Ljava/lang/String;" line="89"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getGroups" desc="()[Lwaffle/windows/auth/IWindowsAccount;" line="95"><counter type="INSTRUCTION" missed="40" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSid" desc="()[B" line="108"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSidString" desc="()Ljava/lang/String;" line="113"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="dispose" desc="()V" line="118"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="impersonate" desc="()Lwaffle/windows/auth/IWindowsImpersonationContext;" line="125"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isGuest" desc="()Z" line="130"><counter type="INSTRUCTION" missed="43" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="140" covered="0"/><counter type="BRANCH" missed="16" covered="0"/><counter type="LINE" missed="30" covered="0"/><counter type="COMPLEXITY" missed="18" covered="0"/><counter type="METHOD" missed="10" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="waffle/windows/auth/impl/WindowsAuthProviderImpl$ContinueContext" sourcefilename="WindowsAuthProviderImpl.java"><method name="&lt;init&gt;" desc="(Lcom/sun/jna/platform/win32/Sspi$CtxtHandle;Lwaffle/windows/auth/IWindowsCredentialsHandle;)V" line="80"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="waffle/windows/auth/impl/WindowsAccountImpl" sourcefilename="WindowsAccountImpl.java"><method name="&lt;init&gt;" desc="(Lcom/sun/jna/platform/win32/Advapi32Util$Account;)V" line="47"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="58"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;)V" line="70"><counter type="INSTRUCTION" missed="0" covered="6"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getCurrentUsername" desc="()Ljava/lang/String;" line="79"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getDomain" desc="()Ljava/lang/String;" line="89"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getFqn" desc="()Ljava/lang/String;" line="94"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getName" desc="()Ljava/lang/String;" line="104"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getSidString" desc="()Ljava/lang/String;" line="109"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><counter type="INSTRUCTION" missed="0" covered="36"/><counter type="LINE" missed="0" covered="12"/><counter type="COMPLEXITY" missed="0" covered="8"/><counter type="METHOD" missed="0" covered="8"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/windows/auth/impl/WindowsSecurityContextImpl" sourcefilename="WindowsSecurityContextImpl.java"><method name="&lt;init&gt;" desc="()V" line="44"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="impersonate" desc="()Lwaffle/windows/auth/IWindowsImpersonationContext;" line="66"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getIdentity" desc="()Lwaffle/windows/auth/IWindowsIdentity;" line="71"><counter type="INSTRUCTION" missed="24" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSecurityPackage" desc="()Ljava/lang/String;" line="81"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getToken" desc="()[B" line="86"><counter type="INSTRUCTION" missed="2" covered="17"/><counter type="BRANCH" missed="2" covered="2"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="2" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getCurrent" desc="(Ljava/lang/String;Ljava/lang/String;)Lwaffle/windows/auth/IWindowsSecurityContext;" line="101"><counter type="INSTRUCTION" missed="2" covered="31"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="1" covered="10"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="initialize" desc="(Lcom/sun/jna/platform/win32/Sspi$CtxtHandle;Lcom/sun/jna/platform/win32/Sspi$SecBufferDesc;Ljava/lang/String;)V" line="124"><counter type="INSTRUCTION" missed="14" covered="50"/><counter type="BRANCH" missed="5" covered="3"/><counter type="LINE" missed="5" covered="10"/><counter type="COMPLEXITY" missed="5" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="dispose" desc="()V" line="152"><counter type="INSTRUCTION" missed="0" covered="11"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="0" covered="4"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="dispose" desc="(Lcom/sun/jna/platform/win32/Sspi$CtxtHandle;)Z" line="168"><counter type="INSTRUCTION" missed="7" covered="14"/><counter type="BRANCH" missed="3" covered="3"/><counter type="LINE" missed="2" covered="4"/><counter type="COMPLEXITY" missed="3" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getPrincipalName" desc="()Ljava/lang/String;" line="180"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setPrincipalName" desc="(Ljava/lang/String;)V" line="190"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getHandle" desc="()Lcom/sun/jna/platform/win32/Sspi$CtxtHandle;" line="195"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setCredentialsHandle" desc="(Lwaffle/windows/auth/IWindowsCredentialsHandle;)V" line="205"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="setToken" desc="([B)V" line="215"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setSecurityPackage" desc="(Ljava/lang/String;)V" line="225"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="setSecurityContext" desc="(Lcom/sun/jna/platform/win32/Sspi$CtxtHandle;)V" line="235"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isContinue" desc="()Z" line="240"><counter type="INSTRUCTION" missed="0" covered="3"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="setContinue" desc="(Z)V" line="250"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="77" covered="144"/><counter type="BRANCH" missed="14" covered="10"/><counter type="LINE" missed="22" covered="39"/><counter type="COMPLEXITY" missed="20" covered="11"/><counter type="METHOD" missed="7" covered="11"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/windows/auth/impl/WindowsAuthProviderImpl" sourcefilename="WindowsAuthProviderImpl.java"><method name="&lt;init&gt;" desc="()V" line="93"><counter type="INSTRUCTION" missed="0" covered="4"/><counter type="LINE" missed="0" covered="2"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="&lt;init&gt;" desc="(I)V" line="102"><counter type="INSTRUCTION" missed="0" covered="7"/><counter type="LINE" missed="0" covered="3"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="acceptSecurityToken" desc="(Ljava/lang/String;[BLjava/lang/String;)Lwaffle/windows/auth/IWindowsSecurityContext;" line="110"><counter type="INSTRUCTION" missed="183" covered="0"/><counter type="BRANCH" missed="22" covered="0"/><counter type="LINE" missed="44" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCurrentComputer" desc="()Lwaffle/windows/auth/IWindowsComputer;" line="185"><counter type="INSTRUCTION" missed="6" covered="6"/><counter type="LINE" missed="2" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="getDomains" desc="()[Lwaffle/windows/auth/IWindowsDomain;" line="193"><counter type="INSTRUCTION" missed="35" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="logonDomainUser" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lwaffle/windows/auth/IWindowsIdentity;" line="203"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="logonDomainUserEx" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;II)Lwaffle/windows/auth/IWindowsIdentity;" line="210"><counter type="INSTRUCTION" missed="6" covered="19"/><counter type="BRANCH" missed="1" covered="1"/><counter type="LINE" missed="1" covered="3"/><counter type="COMPLEXITY" missed="1" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="logonUser" desc="(Ljava/lang/String;Ljava/lang/String;)Lwaffle/windows/auth/IWindowsIdentity;" line="221"><counter type="INSTRUCTION" missed="25" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lookupAccount" desc="(Ljava/lang/String;)Lwaffle/windows/auth/IWindowsAccount;" line="230"><counter type="INSTRUCTION" missed="0" covered="5"/><counter type="LINE" missed="0" covered="1"/><counter type="COMPLEXITY" missed="0" covered="1"/><counter type="METHOD" missed="0" covered="1"/></method><method name="resetSecurityToken" desc="(Ljava/lang/String;)V" line="235"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getContinueContextsSize" desc="()I" line="244"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="272" covered="41"/><counter type="BRANCH" missed="27" covered="1"/><counter type="LINE" missed="60" covered="10"/><counter type="COMPLEXITY" missed="21" covered="5"/><counter type="METHOD" missed="6" covered="5"/><counter type="CLASS" missed="0" covered="1"/></class><class name="waffle/windows/auth/impl/WindowsDomainImpl$TrustType" sourcefilename="WindowsDomainImpl.java"><method name="&lt;clinit&gt;" desc="()V" line="51"><counter type="INSTRUCTION" missed="45" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="45" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl" sourcefilename="WindowsIdentityImpersonationContextImpl.java"><method name="&lt;init&gt;" desc="(Lcom/sun/jna/platform/win32/WinNT$HANDLE;)V" line="44"><counter type="INSTRUCTION" missed="13" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="revertToSelf" desc="()V" line="52"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="17" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="waffle/windows/auth/impl/WindowsDomainImpl" sourcefilename="WindowsDomainImpl.java"><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="73"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lcom/sun/jna/platform/win32/Netapi32Util$DomainTrust;)V" line="73"><counter type="INSTRUCTION" missed="60" covered="0"/><counter type="BRANCH" missed="16" covered="0"/><counter type="LINE" missed="17" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getFqn" desc="()Ljava/lang/String;" line="118"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTrustDirectionString" desc="()Ljava/lang/String;" line="123"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTrustTypeString" desc="()Ljava/lang/String;" line="128"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="83" covered="0"/><counter type="BRANCH" missed="16" covered="0"/><counter type="LINE" missed="23" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl" sourcefilename="WindowsSecurityContextImpersonationContextImpl.java"><method name="&lt;init&gt;" desc="(Lcom/sun/jna/platform/win32/Sspi$CtxtHandle;)V" line="47"><counter type="INSTRUCTION" missed="17" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="revertToSelf" desc="()V" line="58"><counter type="INSTRUCTION" missed="13" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="30" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="WindowsIdentityImpersonationContextImpl.java"><line nr="44" mi="2" ci="0" mb="0" cb="0"/><line nr="45" mi="4" ci="0" mb="2" cb="0"/><line nr="46" mi="6" ci="0" mb="0" cb="0"/><line nr="48" mi="1" ci="0" mb="0" cb="0"/><line nr="52" mi="3" ci="0" mb="0" cb="0"/><line nr="53" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="17" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="WindowsDomainImpl.java"><line nr="38" mi="3" ci="0" mb="0" cb="0"/><line nr="41" mi="6" ci="0" mb="0" cb="0"/><line nr="43" mi="6" ci="0" mb="0" cb="0"/><line nr="45" mi="6" ci="0" mb="0" cb="0"/><line nr="51" mi="3" ci="0" mb="0" cb="0"/><line nr="54" mi="6" ci="0" mb="0" cb="0"/><line nr="56" mi="6" ci="0" mb="0" cb="0"/><line nr="58" mi="6" ci="0" mb="0" cb="0"/><line nr="60" mi="6" ci="0" mb="0" cb="0"/><line nr="62" mi="6" ci="0" mb="0" cb="0"/><line nr="64" mi="6" ci="0" mb="0" cb="0"/><line nr="66" mi="6" ci="0" mb="0" cb="0"/><line nr="73" mi="6" ci="0" mb="0" cb="0"/><line nr="76" mi="6" ci="0" mb="0" cb="0"/><line nr="84" mi="2" ci="0" mb="0" cb="0"/><line nr="85" mi="3" ci="0" mb="0" cb="0"/><line nr="86" mi="1" ci="0" mb="0" cb="0"/><line nr="94" mi="2" ci="0" mb="0" cb="0"/><line nr="96" mi="4" ci="0" mb="0" cb="0"/><line nr="97" mi="7" ci="0" mb="4" cb="0"/><line nr="98" mi="4" ci="0" mb="0" cb="0"/><line nr="101" mi="6" ci="0" mb="4" cb="0"/><line nr="102" mi="4" ci="0" mb="0" cb="0"/><line nr="103" mi="3" ci="0" mb="2" cb="0"/><line nr="104" mi="4" ci="0" mb="0" cb="0"/><line nr="105" mi="3" ci="0" mb="2" cb="0"/><line nr="106" mi="3" ci="0" mb="0" cb="0"/><line nr="109" mi="3" ci="0" mb="2" cb="0"/><line nr="110" mi="4" ci="0" mb="0" cb="0"/><line nr="111" mi="3" ci="0" mb="2" cb="0"/><line nr="112" mi="3" ci="0" mb="0" cb="0"/><line nr="114" mi="1" ci="0" mb="0" cb="0"/><line nr="118" mi="3" ci="0" mb="0" cb="0"/><line nr="123" mi="4" ci="0" mb="0" cb="0"/><line nr="128" mi="4" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="149" covered="0"/><counter type="BRANCH" missed="16" covered="0"/><counter type="LINE" missed="35" covered="0"/><counter type="COMPLEXITY" missed="15" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><sourcefile name="WindowsSecurityContextImpersonationContextImpl.java"><line nr="47" mi="2" ci="0" mb="0" cb="0"/><line nr="48" mi="4" ci="0" mb="0" cb="0"/><line nr="49" mi="2" ci="0" mb="2" cb="0"/><line nr="50" mi="5" ci="0" mb="0" cb="0"/><line nr="53" mi="3" ci="0" mb="0" cb="0"/><line nr="54" mi="1" ci="0" mb="0" cb="0"/><line nr="58" mi="5" ci="0" mb="0" cb="0"/><line nr="59" mi="2" ci="0" mb="2" cb="0"/><line nr="60" mi="5" ci="0" mb="0" cb="0"/><line nr="62" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="30" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="WindowsCredentialsHandleImpl.java"><line nr="64" mi="0" ci="2" mb="0" cb="0"/><line nr="65" mi="0" ci="3" mb="0" cb="0"/><line nr="66" mi="0" ci="3" mb="0" cb="0"/><line nr="67" mi="0" ci="3" mb="0" cb="0"/><line nr="68" mi="0" ci="1" mb="0" cb="0"/><line nr="79" mi="0" ci="7" mb="0" cb="0"/><line nr="81" mi="0" ci="2" mb="0" cb="0"/><line nr="82" mi="0" ci="2" mb="0" cb="0"/><line nr="90" mi="0" ci="5" mb="0" cb="0"/><line nr="91" mi="0" ci="4" mb="0" cb="0"/><line nr="92" mi="0" ci="16" mb="0" cb="0"/><line nr="94" mi="0" ci="3" mb="1" cb="1"/><line nr="95" mi="5" ci="0" mb="0" cb="0"/><line nr="97" mi="0" ci="1" mb="0" cb="0"/><line nr="104" mi="0" ci="7" mb="2" cb="2"/><line nr="105" mi="0" ci="5" mb="0" cb="0"/><line nr="106" mi="0" ci="3" mb="1" cb="1"/><line nr="107" mi="5" ci="0" mb="0" cb="0"/><line nr="110" mi="0" ci="1" mb="0" cb="0"/><line nr="119" mi="0" ci="3" mb="0" cb="0"/><counter type="INSTRUCTION" missed="10" covered="71"/><counter type="BRANCH" missed="4" covered="4"/><counter type="LINE" missed="2" covered="18"/><counter type="COMPLEXITY" missed="4" covered="5"/><counter type="METHOD" missed="0" covered="5"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="WindowsAuthProviderImpl.java"><line nr="80" mi="2" ci="0" mb="0" cb="0"/><line nr="81" mi="3" ci="0" mb="0" cb="0"/><line nr="82" mi="3" ci="0" mb="0" cb="0"/><line nr="83" mi="1" ci="0" mb="0" cb="0"/><line nr="93" mi="0" ci="3" mb="0" cb="0"/><line nr="94" mi="0" ci="1" mb="0" cb="0"/><line nr="102" mi="0" ci="2" mb="0" cb="0"/><line nr="103" mi="0" ci="4" mb="0" cb="0"/><line nr="104" mi="0" ci="1" mb="0" cb="0"/><line nr="110" mi="5" ci="0" mb="4" cb="0"/><line nr="111" mi="3" ci="0" mb="0" cb="0"/><line nr="112" mi="5" ci="0" mb="0" cb="0"/><line nr="115" mi="2" ci="0" mb="0" cb="0"/><line nr="117" mi="6" ci="0" mb="0" cb="0"/><line nr="118" mi="2" ci="0" mb="2" cb="0"/><line nr="119" mi="3" ci="0" mb="0" cb="0"/><line nr="120" mi="4" ci="0" mb="0" cb="0"/><line nr="122" mi="7" ci="0" mb="0" cb="0"/><line nr="123" mi="2" ci="0" mb="0" cb="0"/><line nr="129" mi="2" ci="0" mb="0" cb="0"/><line nr="132" mi="6" ci="0" mb="0" cb="0"/><line nr="133" mi="6" ci="0" mb="0" cb="0"/><line nr="134" mi="4" ci="0" mb="0" cb="0"/><line nr="136" mi="4" ci="0" mb="0" cb="0"/><line nr="137" mi="13" ci="0" mb="0" cb="0"/><line nr="141" mi="4" ci="0" mb="0" cb="0"/><line nr="142" mi="3" ci="0" mb="0" cb="0"/><line nr="143" mi="3" ci="0" mb="0" cb="0"/><line nr="144" mi="3" ci="0" mb="0" cb="0"/><line nr="146" mi="2" ci="0" mb="4" cb="0"/><line nr="148" mi="4" ci="0" mb="0" cb="0"/><line nr="149" mi="2" ci="0" mb="0" cb="0"/><line nr="150" mi="3" ci="0" mb="0" cb="0"/><line nr="151" mi="1" ci="0" mb="0" cb="0"/><line nr="154" mi="3" ci="0" mb="0" cb="0"/><line nr="156" mi="9" ci="0" mb="4" cb="0"/><line nr="157" mi="3" ci="0" mb="2" cb="0"/><line nr="158" mi="10" ci="0" mb="2" cb="0"/><line nr="159" mi="6" ci="0" mb="0" cb="0"/><line nr="161" mi="3" ci="0" mb="0" cb="0"/><line nr="162" mi="1" ci="0" mb="0" cb="0"/><line nr="165" mi="6" ci="0" mb="0" cb="0"/><line nr="166" mi="5" ci="0" mb="0" cb="0"/><line nr="167" mi="10" ci="0" mb="2" cb="0"/><line nr="168" mi="6" ci="0" mb="0" cb="0"/><line nr="169" mi="3" ci="0" mb="0" cb="0"/><line nr="170" mi="1" ci="0" mb="0" cb="0"/><line nr="172" mi="2" ci="0" mb="0" cb="0"/><line nr="173" mi="3" ci="0" mb="0" cb="0"/><line nr="174" mi="3" ci="0" mb="0" cb="0"/><line nr="175" mi="5" ci="0" mb="0" cb="0"/><line nr="177" mi="3" ci="0" mb="2" cb="0"/><line nr="179" mi="2" ci="0" mb="0" cb="0"/><line nr="185" mi="0" ci="6" mb="0" cb="0"/><line nr="186" mi="1" ci="0" mb="0" cb="0"/><line nr="187" mi="5" ci="0" mb="0" cb="0"/><line nr="193" mi="4" ci="0" mb="0" cb="0"/><line nr="194" mi="2" ci="0" mb="0" cb="0"/><line nr="195" mi="16" ci="0" mb="2" cb="0"/><line nr="196" mi="7" ci="0" mb="0" cb="0"/><line nr="198" mi="6" ci="0" mb="0" cb="0"/><line nr="203" mi="8" ci="0" mb="0" cb="0"/><line nr="210" mi="0" ci="4" mb="0" cb="0"/><line nr="211" mi="0" ci="9" mb="1" cb="1"/><line nr="212" mi="0" ci="6" mb="0" cb="0"/><line nr="214" mi="6" ci="0" mb="0" cb="0"/><line nr="221" mi="5" ci="0" mb="0" cb="0"/><line nr="222" mi="4" ci="0" mb="2" cb="0"/><line nr="223" mi="10" ci="0" mb="0" cb="0"/><line nr="225" mi="6" ci="0" mb="0" cb="0"/><line nr="230" mi="0" ci="5" mb="0" cb="0"/><line nr="235" mi="4" ci="0" mb="0" cb="0"/><line nr="236" mi="1" ci="0" mb="0" cb="0"/><line nr="244" mi="4" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="281" covered="41"/><counter type="BRANCH" missed="27" covered="1"/><counter type="LINE" missed="64" covered="10"/><counter type="COMPLEXITY" missed="22" covered="5"/><counter type="METHOD" missed="7" covered="5"/><counter type="CLASS" missed="1" covered="1"/></sourcefile><sourcefile name="WindowsSecurityContextImpl.java"><line nr="44" mi="0" ci="3" mb="0" cb="0"/><line nr="66" mi="6" ci="0" mb="0" cb="0"/><line nr="71" mi="4" ci="0" mb="0" cb="0"/><line nr="72" mi="6" ci="0" mb="0" cb="0"/><line nr="73" mi="3" ci="0" mb="2" cb="0"/><line nr="74" mi="5" ci="0" mb="0" cb="0"/><line nr="76" mi="6" ci="0" mb="0" cb="0"/><line nr="81" mi="0" ci="3" mb="0" cb="0"/><line nr="86" mi="2" ci="10" mb="2" cb="2"/><line nr="87" mi="0" ci="7" mb="0" cb="0"/><line nr="101" mi="0" ci="3" mb="0" cb="0"/><line nr="102" mi="0" ci="2" mb="0" cb="0"/><line nr="104" mi="0" ci="4" mb="0" cb="0"/><line nr="105" mi="0" ci="3" mb="0" cb="0"/><line nr="106" mi="0" ci="3" mb="0" cb="0"/><line nr="107" mi="0" ci="3" mb="0" cb="0"/><line nr="108" mi="0" ci="5" mb="0" cb="0"/><line nr="112" mi="0" ci="2" mb="0" cb="0"/><line nr="114" mi="0" ci="4" mb="0" cb="0"/><line nr="116" mi="0" ci="2" mb="1" cb="1"/><line nr="117" mi="2" ci="0" mb="0" cb="0"/><line nr="124" mi="0" ci="4" mb="0" cb="0"/><line nr="125" mi="0" ci="5" mb="0" cb="0"/><line nr="126" mi="0" ci="2" mb="0" cb="0"/><line nr="129" mi="0" ci="7" mb="0" cb="0"/><line nr="130" mi="0" ci="19" mb="0" cb="0"/><line nr="133" mi="0" ci="2" mb="3" cb="1"/><line nr="136" mi="4" ci="0" mb="0" cb="0"/><line nr="137" mi="1" ci="0" mb="0" cb="0"/><line nr="139" mi="0" ci="3" mb="0" cb="0"/><line nr="140" mi="0" ci="1" mb="0" cb="0"/><line nr="142" mi="3" ci="0" mb="0" cb="0"/><line nr="143" mi="1" ci="0" mb="0" cb="0"/><line nr="145" mi="5" ci="0" mb="0" cb="0"/><line nr="147" mi="0" ci="6" mb="2" cb="2"/><line nr="148" mi="0" ci="1" mb="0" cb="0"/><line nr="152" mi="0" ci="4" mb="0" cb="0"/><line nr="154" mi="0" ci="3" mb="1" cb="1"/><line nr="155" mi="0" ci="3" mb="0" cb="0"/><line nr="157" mi="0" ci="1" mb="0" cb="0"/><line nr="168" mi="0" ci="5" mb="2" cb="2"/><line nr="169" mi="0" ci="4" mb="0" cb="0"/><line nr="170" mi="0" ci="3" mb="1" cb="1"/><line nr="171" mi="5" ci="0" mb="0" cb="0"/><line nr="173" mi="0" ci="2" mb="0" cb="0"/><line nr="175" mi="2" ci="0" mb="0" cb="0"/><line nr="180" mi="3" ci="0" mb="0" cb="0"/><line nr="190" mi="0" ci="3" mb="0" cb="0"/><line nr="191" mi="0" ci="1" mb="0" cb="0"/><line nr="195" mi="3" ci="0" mb="0" cb="0"/><line nr="205" mi="0" ci="3" mb="0" cb="0"/><line nr="206" mi="0" ci="1" mb="0" cb="0"/><line nr="215" mi="7" ci="0" mb="0" cb="0"/><line nr="216" mi="1" ci="0" mb="0" cb="0"/><line nr="225" mi="0" ci="3" mb="0" cb="0"/><line nr="226" mi="0" ci="1" mb="0" cb="0"/><line nr="235" mi="3" ci="0" mb="0" cb="0"/><line nr="236" mi="1" ci="0" mb="0" cb="0"/><line nr="240" mi="0" ci="3" mb="0" cb="0"/><line nr="250" mi="3" ci="0" mb="0" cb="0"/><line nr="251" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="77" covered="144"/><counter type="BRANCH" missed="14" covered="10"/><counter type="LINE" missed="22" covered="39"/><counter type="COMPLEXITY" missed="20" covered="11"/><counter type="METHOD" missed="7" covered="11"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="WindowsIdentityImpl.java"><line nr="59" mi="2" ci="0" mb="0" cb="0"/><line nr="60" mi="3" ci="0" mb="0" cb="0"/><line nr="61" mi="1" ci="0" mb="0" cb="0"/><line nr="69" mi="3" ci="0" mb="2" cb="0"/><line nr="70" mi="5" ci="0" mb="0" cb="0"/><line nr="72" mi="3" ci="0" mb="0" cb="0"/><line nr="81" mi="3" ci="0" mb="2" cb="0"/><line nr="82" mi="5" ci="0" mb="0" cb="0"/><line nr="84" mi="5" ci="0" mb="0" cb="0"/><line nr="89" mi="4" ci="0" mb="0" cb="0"/><line nr="95" mi="3" ci="0" mb="0" cb="0"/><line nr="97" mi="6" ci="0" mb="0" cb="0"/><line nr="98" mi="16" ci="0" mb="2" cb="0"/><line nr="99" mi="5" ci="0" mb="0" cb="0"/><line nr="100" mi="4" ci="0" mb="0" cb="0"/><line nr="103" mi="6" ci="0" mb="0" cb="0"/><line nr="108" mi="4" ci="0" mb="0" cb="0"/><line nr="113" mi="4" ci="0" mb="0" cb="0"/><line nr="118" mi="3" ci="0" mb="2" cb="0"/><line nr="119" mi="5" ci="0" mb="0" cb="0"/><line nr="121" mi="1" ci="0" mb="0" cb="0"/><line nr="125" mi="6" ci="0" mb="0" cb="0"/><line nr="130" mi="17" ci="0" mb="2" cb="0"/><line nr="131" mi="5" ci="0" mb="2" cb="0"/><line nr="132" mi="2" ci="0" mb="0" cb="0"/><line nr="134" mi="5" ci="0" mb="2" cb="0"/><line nr="135" mi="2" ci="0" mb="0" cb="0"/><line nr="137" mi="5" ci="0" mb="2" cb="0"/><line nr="138" mi="2" ci="0" mb="0" cb="0"/><line nr="141" mi="5" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="140" covered="0"/><counter type="BRANCH" missed="16" covered="0"/><counter type="LINE" missed="30" covered="0"/><counter type="COMPLEXITY" missed="18" covered="0"/><counter type="METHOD" missed="10" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="WindowsAccountImpl.java"><line nr="47" mi="0" ci="2" mb="0" cb="0"/><line nr="48" mi="0" ci="3" mb="0" cb="0"/><line nr="49" mi="0" ci="1" mb="0" cb="0"/><line nr="58" mi="0" ci="4" mb="0" cb="0"/><line nr="59" mi="0" ci="1" mb="0" cb="0"/><line nr="70" mi="0" ci="5" mb="0" cb="0"/><line nr="71" mi="0" ci="1" mb="0" cb="0"/><line nr="79" mi="0" ci="3" mb="0" cb="0"/><line nr="89" mi="0" ci="4" mb="0" cb="0"/><line nr="94" mi="0" ci="4" mb="0" cb="0"/><line nr="104" mi="0" ci="4" mb="0" cb="0"/><line nr="109" mi="0" ci="4" mb="0" cb="0"/><counter type="INSTRUCTION" missed="0" covered="36"/><counter type="LINE" missed="0" covered="12"/><counter type="COMPLEXITY" missed="0" covered="8"/><counter type="METHOD" missed="0" covered="8"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><sourcefile name="WindowsComputerImpl.java"><line nr="52" mi="0" ci="2" mb="0" cb="0"/><line nr="53" mi="0" ci="3" mb="0" cb="0"/><line nr="54" mi="0" ci="4" mb="0" cb="0"/><line nr="55" mi="0" ci="1" mb="0" cb="0"/><line nr="59" mi="0" ci="3" mb="0" cb="0"/><line nr="64" mi="0" ci="4" mb="0" cb="0"/><line nr="65" mi="0" ci="4" mb="0" cb="0"/><line nr="66" mi="0" ci="16" mb="0" cb="2"/><line nr="67" mi="0" ci="5" mb="0" cb="0"/><line nr="69" mi="0" ci="6" mb="0" cb="0"/><line nr="74" mi="0" ci="4" mb="0" cb="0"/><line nr="75" mi="0" ci="2" mb="4" cb="1"/><line nr="77" mi="2" ci="0" mb="0" cb="0"/><line nr="79" mi="2" ci="0" mb="0" cb="0"/><line nr="81" mi="0" ci="2" mb="0" cb="0"/><line nr="83" mi="2" ci="0" mb="0" cb="0"/><line nr="85" mi="6" ci="0" mb="0" cb="0"/><line nr="91" mi="0" ci="3" mb="0" cb="0"/><counter type="INSTRUCTION" missed="12" covered="59"/><counter type="BRANCH" missed="4" covered="3"/><counter type="LINE" missed="4" covered="14"/><counter type="COMPLEXITY" missed="4" covered="6"/><counter type="METHOD" missed="0" covered="5"/><counter type="CLASS" missed="0" covered="1"/></sourcefile><counter type="INSTRUCTION" missed="716" covered="351"/><counter type="BRANCH" missed="87" covered="18"/><counter type="LINE" missed="173" covered="93"/><counter type="COMPLEXITY" missed="90" covered="35"/><counter type="METHOD" missed="35" covered="34"/><counter type="CLASS" missed="7" covered="5"/></package><counter type="INSTRUCTION" missed="2873" covered="1992"/><counter type="BRANCH" missed="318" covered="144"/><counter type="LINE" missed="711" covered="489"/><counter type="COMPLEXITY" missed="310" covered="162"/><counter type="METHOD" missed="113" covered="115"/><counter type="CLASS" missed="12" covered="24"/></report>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.jaas/GroupPrincipal.html b/waffle-jna-jakarta/jacoco/waffle.jaas/GroupPrincipal.html
      new file mode 100644
      index 0000000000..5ee19a97db
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.jaas/GroupPrincipal.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>GroupPrincipal</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.jaas</a> &gt; <span class="el_class">GroupPrincipal</span></div><h1>GroupPrincipal</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">94 of 124</td><td class="ctr2">24%</td><td class="bar">13 of 14</td><td class="ctr2">7%</td><td class="ctr1">11</td><td class="ctr2">14</td><td class="ctr1">22</td><td class="ctr2">31</td><td class="ctr1">4</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a6"><a href="GroupPrincipal.java.html#L134" class="el_method">toString()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="41" alt="41"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">8</td><td class="ctr2" id="i1">8</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="GroupPrincipal.java.html#L94" class="el_method">isMember(Principal)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="108" height="10" title="37" alt="37"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f0">5</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">11</td><td class="ctr2" id="i0">11</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a5"><a href="GroupPrincipal.java.html#L128" class="el_method">removeMember(Principal)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="11" alt="11"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="GroupPrincipal.java.html#L116" class="el_method">members()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="5" alt="5"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="GroupPrincipal.java.html#L78" class="el_method">addMember(Principal)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="43" height="10" title="15" alt="15"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="15" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="GroupPrincipal.java.html#L58" class="el_method">GroupPrincipal(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/greenbar.gif" width="35" height="10" title="12" alt="12"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a1"><a href="GroupPrincipal.java.html#L66" class="el_method">getName()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/greenbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.jaas/GroupPrincipal.java.html b/waffle-jna-jakarta/jacoco/waffle.jaas/GroupPrincipal.java.html
      new file mode 100644
      index 0000000000..de62d79803
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.jaas/GroupPrincipal.java.html
      @@ -0,0 +1,145 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>GroupPrincipal.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.jaas</a> &gt; <span class="el_source">GroupPrincipal.java</span></div><h1>GroupPrincipal.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.jaas;
      +
      +import java.security.Principal;
      +import java.util.Collection;
      +import java.util.Collections;
      +import java.util.Enumeration;
      +import java.util.HashMap;
      +import java.util.Map;
      +
      +/**
      + * Group principal.
      + *
      + * @deprecated This class is deprecated as hiding a principal inside another principal is not JAAS compliant. Use the
      + *             Principals in the Subject to directly enroll groups or roles by name.
      + */
      +@Deprecated
      +public class GroupPrincipal extends UserPrincipal {
      +
      +    /** The Constant serialVersionUID. */
      +    private static final long serialVersionUID = 1L;
      +
      +    /** The fqn. */
      +    private final String fqn;
      +
      +    /** A list of fqn members for this group. */
      +    private final Map&lt;Principal, Principal&gt; members;
      +
      +    /**
      +     * Instantiates a new group principal.
      +     *
      +     * @param fqn
      +     *            the fqn
      +     */
      +    public GroupPrincipal(final String fqn) {
      +<span class="fc" id="L58">        super(fqn);</span>
      +
      +<span class="fc" id="L60">        this.fqn = fqn;</span>
      +<span class="fc" id="L61">        this.members = new HashMap&lt;&gt;();</span>
      +<span class="fc" id="L62">    }</span>
      +
      +    @Override
      +    public String getName() {
      +<span class="fc" id="L66">        return this.fqn;</span>
      +    }
      +
      +    /**
      +     * Add user principal to member.
      +     *
      +     * @param user
      +     *            principal
      +     *
      +     * @return True if user principal is a member
      +     */
      +    public boolean addMember(final Principal user) {
      +<span class="fc" id="L78">        final boolean isMember = this.members.containsKey(user);</span>
      +<span class="pc bpc" id="L79" title="1 of 2 branches missed.">        if (!isMember) {</span>
      +<span class="fc" id="L80">            this.members.put(user, user);</span>
      +        }
      +<span class="fc" id="L82">        return isMember;</span>
      +    }
      +
      +    /**
      +     * Is user principal a member of the group.
      +     *
      +     * @param user
      +     *            principal
      +     *
      +     * @return True if user principal is a member
      +     */
      +    public boolean isMember(final Principal user) {
      +<span class="nc" id="L94">        boolean isMember = this.members.containsKey(user);</span>
      +<span class="nc bnc" id="L95" title="All 2 branches missed.">        if (!isMember) {</span>
      +<span class="nc" id="L96">            final Collection&lt;Principal&gt; values = this.members.values();</span>
      +<span class="nc bnc" id="L97" title="All 2 branches missed.">            for (final Principal principal : values) {</span>
      +<span class="nc bnc" id="L98" title="All 2 branches missed.">                if (principal instanceof GroupPrincipal) {</span>
      +<span class="nc" id="L99">                    final GroupPrincipal group = (GroupPrincipal) principal;</span>
      +<span class="nc" id="L100">                    isMember = group.isMember(user);</span>
      +<span class="nc bnc" id="L101" title="All 2 branches missed.">                    if (isMember) {</span>
      +<span class="nc" id="L102">                        break;</span>
      +                    }
      +                }
      +<span class="nc" id="L105">            }</span>
      +        }
      +<span class="nc" id="L107">        return isMember;</span>
      +    }
      +
      +    /**
      +     * Member enumeration.
      +     *
      +     * @return enumerated members
      +     */
      +    public Enumeration&lt;Principal&gt; members() {
      +<span class="nc" id="L116">        return Collections.enumeration(this.members.values());</span>
      +    }
      +
      +    /**
      +     * Remove user from member.
      +     *
      +     * @param user
      +     *            principal
      +     *
      +     * @return True if user principal is removed
      +     */
      +    public boolean removeMember(final Principal user) {
      +<span class="nc" id="L128">        final Object prev = this.members.remove(user);</span>
      +<span class="nc bnc" id="L129" title="All 2 branches missed.">        return prev != null;</span>
      +    }
      +
      +    @Override
      +    public String toString() {
      +<span class="nc" id="L134">        final StringBuilder tmp = new StringBuilder(this.getName());</span>
      +<span class="nc" id="L135">        tmp.append(&quot;(members:&quot;);</span>
      +<span class="nc bnc" id="L136" title="All 2 branches missed.">        for (final Principal principal : this.members.keySet()) {</span>
      +<span class="nc" id="L137">            tmp.append(principal);</span>
      +<span class="nc" id="L138">            tmp.append(',');</span>
      +<span class="nc" id="L139">        }</span>
      +<span class="nc" id="L140">        tmp.setCharAt(tmp.length() - 1, ')');</span>
      +<span class="nc" id="L141">        return tmp.toString();</span>
      +    }
      +
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.jaas/RolePrincipal.html b/waffle-jna-jakarta/jacoco/waffle.jaas/RolePrincipal.html
      new file mode 100644
      index 0000000000..324e2cc974
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.jaas/RolePrincipal.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RolePrincipal</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.jaas</a> &gt; <span class="el_class">RolePrincipal</span></div><h1>RolePrincipal</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 30</td><td class="ctr2">100%</td><td class="bar">0 of 4</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">6</td><td class="ctr1">0</td><td class="ctr2">10</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="RolePrincipal.java.html#L71" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="17" alt="17"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="RolePrincipal.java.html#L46" class="el_method">RolePrincipal(String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="42" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="RolePrincipal.java.html#L89" class="el_method">hashCode()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="28" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="RolePrincipal.java.html#L57" class="el_method">getName()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="21" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.jaas/RolePrincipal.java.html b/waffle-jna-jakarta/jacoco/waffle.jaas/RolePrincipal.java.html
      new file mode 100644
      index 0000000000..b73d865b28
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.jaas/RolePrincipal.java.html
      @@ -0,0 +1,93 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RolePrincipal.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.jaas</a> &gt; <span class="el_source">RolePrincipal.java</span></div><h1>RolePrincipal.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.jaas;
      +
      +import java.io.Serializable;
      +import java.security.Principal;
      +
      +/**
      + * Role principal.
      + */
      +public class RolePrincipal implements Principal, Serializable {
      +
      +    /** The Constant serialVersionUID. */
      +    private static final long serialVersionUID = 1L;
      +
      +    /** The fqn. */
      +    private final String fqn;
      +
      +    /**
      +     * A windows principal.
      +     *
      +     * @param newFqn
      +     *            Fully qualified name.
      +     */
      +<span class="fc" id="L46">    public RolePrincipal(final String newFqn) {</span>
      +<span class="fc" id="L47">        this.fqn = newFqn;</span>
      +<span class="fc" id="L48">    }</span>
      +
      +    /**
      +     * Role name (Windows Group).
      +     *
      +     * @return the name
      +     */
      +    @Override
      +    public String getName() {
      +<span class="fc" id="L57">        return this.fqn;</span>
      +    }
      +
      +    /**
      +     * Role Principal Equals for FQN.
      +     *
      +     * @param o
      +     *            Object used for Equality Check.
      +     *
      +     * @return true, if successful
      +     */
      +    @Override
      +    public boolean equals(final Object o) {
      +
      +<span class="fc bfc" id="L71" title="All 2 branches covered.">        if (this == o) {</span>
      +<span class="fc" id="L72">            return true;</span>
      +        }
      +
      +<span class="fc bfc" id="L75" title="All 2 branches covered.">        if (o instanceof RolePrincipal) {</span>
      +<span class="fc" id="L76">            return this.getName().equals(((RolePrincipal) o).getName());</span>
      +        }
      +
      +<span class="fc" id="L79">        return false;</span>
      +    }
      +
      +    /**
      +     * Role Principal HashCode for FQN.
      +     *
      +     * @return the int
      +     */
      +    @Override
      +    public int hashCode() {
      +<span class="fc" id="L89">        return this.getName().hashCode();</span>
      +    }
      +
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.jaas/UserPrincipal.html b/waffle-jna-jakarta/jacoco/waffle.jaas/UserPrincipal.html
      new file mode 100644
      index 0000000000..87ee5ba995
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.jaas/UserPrincipal.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>UserPrincipal</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.jaas</a> &gt; <span class="el_class">UserPrincipal</span></div><h1>UserPrincipal</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 30</td><td class="ctr2">100%</td><td class="bar">0 of 4</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">6</td><td class="ctr1">0</td><td class="ctr2">10</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="UserPrincipal.java.html#L63" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="17" alt="17"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="UserPrincipal.java.html#L46" class="el_method">UserPrincipal(String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="42" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="UserPrincipal.java.html#L76" class="el_method">hashCode()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="28" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="UserPrincipal.java.html#L57" class="el_method">getName()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="21" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.jaas/UserPrincipal.java.html b/waffle-jna-jakarta/jacoco/waffle.jaas/UserPrincipal.java.html
      new file mode 100644
      index 0000000000..1a082e8031
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.jaas/UserPrincipal.java.html
      @@ -0,0 +1,79 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>UserPrincipal.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.jaas</a> &gt; <span class="el_source">UserPrincipal.java</span></div><h1>UserPrincipal.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.jaas;
      +
      +import java.io.Serializable;
      +import java.security.Principal;
      +
      +/**
      + * User Principal.
      + */
      +public class UserPrincipal implements Principal, Serializable {
      +
      +    /** The Constant serialVersionUID. */
      +    private static final long serialVersionUID = 1L;
      +
      +    /** The fqn. */
      +    private final String fqn;
      +
      +    /**
      +     * A user principal.
      +     *
      +     * @param newFqn
      +     *            Fully qualified username.
      +     */
      +<span class="fc" id="L46">    public UserPrincipal(final String newFqn) {</span>
      +<span class="fc" id="L47">        this.fqn = newFqn;</span>
      +<span class="fc" id="L48">    }</span>
      +
      +    /**
      +     * Fully qualified username.
      +     *
      +     * @return the name
      +     */
      +    @Override
      +    public String getName() {
      +<span class="fc" id="L57">        return this.fqn;</span>
      +    }
      +
      +    @Override
      +    public boolean equals(final Object o) {
      +
      +<span class="fc bfc" id="L63" title="All 2 branches covered.">        if (this == o) {</span>
      +<span class="fc" id="L64">            return true;</span>
      +        }
      +
      +<span class="fc bfc" id="L67" title="All 2 branches covered.">        if (o instanceof UserPrincipal) {</span>
      +<span class="fc" id="L68">            return this.getName().equals(((UserPrincipal) o).getName());</span>
      +        }
      +
      +<span class="fc" id="L71">        return false;</span>
      +    }
      +
      +    @Override
      +    public int hashCode() {
      +<span class="fc" id="L76">        return this.getName().hashCode();</span>
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.jaas/WindowsLoginModule.html b/waffle-jna-jakarta/jacoco/waffle.jaas/WindowsLoginModule.html
      new file mode 100644
      index 0000000000..f9754be5a9
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.jaas/WindowsLoginModule.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsLoginModule</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.jaas</a> &gt; <span class="el_class">WindowsLoginModule</span></div><h1>WindowsLoginModule</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">210 of 476</td><td class="ctr2">55%</td><td class="bar">19 of 43</td><td class="ctr2">55%</td><td class="ctr1">14</td><td class="ctr2">38</td><td class="ctr1">42</td><td class="ctr2">109</td><td class="ctr1">2</td><td class="ctr2">14</td></tr></tfoot><tbody><tr><td id="a8"><a href="WindowsLoginModule.java.html#L119" class="el_method">login()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="117" alt="117"/><img src="../jacoco-resources/greenbar.gif" width="51" height="10" title="89" alt="89"/></td><td class="ctr2" id="c11">43%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="85" height="10" title="10" alt="10"/><img src="../jacoco-resources/greenbar.gif" width="34" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">28%</td><td class="ctr1" id="f0">5</td><td class="ctr2" id="g0">8</td><td class="ctr1" id="h0">21</td><td class="ctr2" id="i0">43</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="WindowsLoginModule.java.html#L330" class="el_method">getRolePrincipals(IWindowsAccount, PrincipalFormat)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="47" alt="47"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="42" height="10" title="5" alt="5"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h1">11</td><td class="ctr2" id="i3">11</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="WindowsLoginModule.java.html#L298" class="el_method">getUserPrincipals(IWindowsIdentity, PrincipalFormat)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="46" alt="46"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="4" alt="4"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g4">4</td><td class="ctr1" id="h2">10</td><td class="ctr2" id="i4">10</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="WindowsLoginModule.java.html#L94" class="el_method">initialize(Subject, CallbackHandler, Map, Map)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="35" height="10" title="61" alt="61"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d3"><img src="../jacoco-resources/greenbar.gif" width="68" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g2">5</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i2">12</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="WindowsLoginModule.java.html#L212" class="el_method">commit()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="52" alt="52"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d4"><img src="../jacoco-resources/greenbar.gif" width="68" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g3">5</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i1">13</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a9"><a href="WindowsLoginModule.java.html#L244" class="el_method">logout()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/greenbar.gif" width="13" height="10" title="23" alt="23"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d5"><img src="../jacoco-resources/greenbar.gif" width="34" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">3</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">6</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a13"><a href="WindowsLoginModule.java.html#L58" class="el_method">WindowsLoginModule()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/greenbar.gif" width="9" height="10" title="17" alt="17"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">5</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a11"><a href="WindowsLoginModule.java.html#L282" class="el_method">setAuth(IWindowsAuthProvider)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/greenbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a10"><a href="WindowsLoginModule.java.html#L367" class="el_method">setAllowGuestLogin(boolean)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/greenbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i8">2</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a12"><a href="WindowsLoginModule.java.html#L61" class="el_method">static {...}</a></td><td class="bar" id="b9"><img src="../jacoco-resources/greenbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a0"><a href="WindowsLoginModule.java.html#L199" class="el_method">abort()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/greenbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a7"><a href="WindowsLoginModule.java.html#L263" class="el_method">isDebug()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/greenbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">100%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a2"><a href="WindowsLoginModule.java.html#L272" class="el_method">getAuth()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/greenbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">100%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a6"><a href="WindowsLoginModule.java.html#L356" class="el_method">isAllowGuestLogin()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/greenbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">100%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.jaas/WindowsLoginModule.java.html b/waffle-jna-jakarta/jacoco/waffle.jaas/WindowsLoginModule.java.html
      new file mode 100644
      index 0000000000..215372088a
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.jaas/WindowsLoginModule.java.html
      @@ -0,0 +1,370 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsLoginModule.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.jaas</a> &gt; <span class="el_source">WindowsLoginModule.java</span></div><h1>WindowsLoginModule.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.jaas;
      +
      +import java.io.IOException;
      +import java.security.Principal;
      +import java.util.ArrayList;
      +import java.util.LinkedHashSet;
      +import java.util.List;
      +import java.util.Locale;
      +import java.util.Map;
      +import java.util.Set;
      +
      +import javax.security.auth.Subject;
      +import javax.security.auth.callback.Callback;
      +import javax.security.auth.callback.CallbackHandler;
      +import javax.security.auth.callback.NameCallback;
      +import javax.security.auth.callback.PasswordCallback;
      +import javax.security.auth.callback.UnsupportedCallbackException;
      +import javax.security.auth.login.LoginException;
      +import javax.security.auth.spi.LoginModule;
      +
      +import org.slf4j.Logger;
      +import org.slf4j.LoggerFactory;
      +
      +import waffle.windows.auth.IWindowsAccount;
      +import waffle.windows.auth.IWindowsAuthProvider;
      +import waffle.windows.auth.IWindowsIdentity;
      +import waffle.windows.auth.PrincipalFormat;
      +import waffle.windows.auth.impl.WindowsAuthProviderImpl;
      +
      +/**
      + * A Java Security login module for Windows authentication.
      + *
      + * @see javax.security.auth.spi.LoginModule
      + */
      +<span class="fc" id="L58">public class WindowsLoginModule implements LoginModule {</span>
      +
      +    /** The Constant LOGGER. */
      +<span class="fc" id="L61">    private static final Logger LOGGER = LoggerFactory.getLogger(WindowsLoginModule.class);</span>
      +
      +    /** The username. */
      +    private String username;
      +
      +    /** The debug. */
      +    private boolean debug;
      +
      +    /** The subject. */
      +    private Subject subject;
      +
      +    /** The callback handler. */
      +    private CallbackHandler callbackHandler;
      +
      +    /** The auth. */
      +<span class="fc" id="L76">    private IWindowsAuthProvider auth = new WindowsAuthProviderImpl();</span>
      +
      +    /** The principals. */
      +    private Set&lt;Principal&gt; principals;
      +
      +    /** The principal format. */
      +<span class="fc" id="L82">    private PrincipalFormat principalFormat = PrincipalFormat.FQN;</span>
      +
      +    /** The role format. */
      +<span class="fc" id="L85">    private PrincipalFormat roleFormat = PrincipalFormat.FQN;</span>
      +
      +    /** The allow guest login. */
      +<span class="fc" id="L88">    private boolean allowGuestLogin = true;</span>
      +
      +    @Override
      +    public void initialize(final Subject initSubject, final CallbackHandler initCallbackHandler,
      +            final Map&lt;String, ?&gt; initSharedState, final Map&lt;String, ?&gt; initOptions) {
      +
      +<span class="fc" id="L94">        this.subject = initSubject;</span>
      +<span class="fc" id="L95">        this.callbackHandler = initCallbackHandler;</span>
      +
      +<span class="fc bfc" id="L97" title="All 2 branches covered.">        for (final Map.Entry&lt;String, ?&gt; option : initOptions.entrySet()) {</span>
      +<span class="fc bfc" id="L98" title="All 2 branches covered.">            if (&quot;debug&quot;.equalsIgnoreCase(option.getKey())) {</span>
      +<span class="fc" id="L99">                this.debug = Boolean.parseBoolean((String) option.getValue());</span>
      +<span class="fc bfc" id="L100" title="All 2 branches covered.">            } else if (&quot;principalFormat&quot;.equalsIgnoreCase(option.getKey())) {</span>
      +<span class="fc" id="L101">                this.principalFormat = PrincipalFormat</span>
      +<span class="fc" id="L102">                        .valueOf(((String) option.getValue()).toUpperCase(Locale.ENGLISH));</span>
      +<span class="fc bfc" id="L103" title="All 2 branches covered.">            } else if (&quot;roleFormat&quot;.equalsIgnoreCase(option.getKey())) {</span>
      +<span class="fc" id="L104">                this.roleFormat = PrincipalFormat.valueOf(((String) option.getValue()).toUpperCase(Locale.ENGLISH));</span>
      +            }
      +<span class="fc" id="L106">        }</span>
      +<span class="fc" id="L107">    }</span>
      +
      +    /**
      +     * Use Windows SSPI to authenticate a username with a password.
      +     *
      +     * @return true, if successful
      +     *
      +     * @throws LoginException
      +     *             the login exception
      +     */
      +    @Override
      +    public boolean login() throws LoginException {
      +<span class="fc bfc" id="L119" title="All 2 branches covered.">        if (this.callbackHandler == null) {</span>
      +<span class="fc" id="L120">            throw new LoginException(&quot;Missing callback to gather information from the user.&quot;);</span>
      +        }
      +
      +<span class="fc" id="L123">        final NameCallback usernameCallback = new NameCallback(&quot;user name: &quot;);</span>
      +<span class="fc" id="L124">        final PasswordCallback passwordCallback = new PasswordCallback(&quot;password: &quot;, false);</span>
      +
      +<span class="fc" id="L126">        final Callback[] callbacks = new Callback[2];</span>
      +<span class="fc" id="L127">        callbacks[0] = usernameCallback;</span>
      +<span class="fc" id="L128">        callbacks[1] = passwordCallback;</span>
      +
      +        final String userName;
      +        final String password;
      +
      +        try {
      +<span class="fc" id="L134">            this.callbackHandler.handle(callbacks);</span>
      +<span class="fc" id="L135">            userName = usernameCallback.getName();</span>
      +<span class="fc bfc" id="L136" title="All 2 branches covered.">            password = passwordCallback.getPassword() == null ? &quot;&quot; : new String(passwordCallback.getPassword());</span>
      +<span class="fc" id="L137">            passwordCallback.clearPassword();</span>
      +<span class="fc" id="L138">        } catch (final IOException e) {</span>
      +<span class="fc" id="L139">            WindowsLoginModule.LOGGER.trace(&quot;&quot;, e);</span>
      +<span class="fc" id="L140">            throw new LoginException(e.toString());</span>
      +<span class="fc" id="L141">        } catch (final UnsupportedCallbackException e) {</span>
      +<span class="fc" id="L142">            WindowsLoginModule.LOGGER.trace(&quot;&quot;, e);</span>
      +<span class="fc" id="L143">            throw new LoginException(&quot;Callback {} not available to gather authentication information from the user.&quot;</span>
      +<span class="fc" id="L144">                    .replace(&quot;{}&quot;, e.getCallback().getClass().getName()));</span>
      +<span class="fc" id="L145">        }</span>
      +
      +        IWindowsIdentity windowsIdentity;
      +        try {
      +<span class="nc" id="L149">            windowsIdentity = this.auth.logonUser(userName, password);</span>
      +<span class="fc" id="L150">        } catch (final Exception e) {</span>
      +<span class="fc" id="L151">            WindowsLoginModule.LOGGER.trace(&quot;&quot;, e);</span>
      +<span class="fc" id="L152">            throw new LoginException(e.getMessage());</span>
      +<span class="nc" id="L153">        }</span>
      +
      +        try {
      +            // disable guest login
      +<span class="nc bnc" id="L157" title="All 4 branches missed.">            if (!this.allowGuestLogin &amp;&amp; windowsIdentity.isGuest()) {</span>
      +<span class="nc" id="L158">                WindowsLoginModule.LOGGER.debug(&quot;guest login disabled: {}&quot;, windowsIdentity.getFqn());</span>
      +<span class="nc" id="L159">                throw new LoginException(&quot;Guest login disabled&quot;);</span>
      +            }
      +
      +<span class="nc" id="L162">            this.principals = new LinkedHashSet&lt;&gt;();</span>
      +            // add the main user principal to the subject principals
      +<span class="nc" id="L164">            this.principals.addAll(WindowsLoginModule.getUserPrincipals(windowsIdentity, this.principalFormat));</span>
      +<span class="nc bnc" id="L165" title="All 2 branches missed.">            if (this.roleFormat != PrincipalFormat.NONE) {</span>
      +                // create the group principal and add roles as members of the group
      +<span class="nc" id="L167">                final GroupPrincipal groupList = new GroupPrincipal(&quot;Roles&quot;);</span>
      +<span class="nc bnc" id="L168" title="All 2 branches missed.">                for (final IWindowsAccount group : windowsIdentity.getGroups()) {</span>
      +<span class="nc" id="L169">                    this.principals.addAll(WindowsLoginModule.getRolePrincipals(group, this.roleFormat));</span>
      +<span class="nc bnc" id="L170" title="All 2 branches missed.">                    for (final Principal role : WindowsLoginModule.getRolePrincipals(group, this.roleFormat)) {</span>
      +<span class="nc" id="L171">                        WindowsLoginModule.LOGGER.debug(&quot; group: {}&quot;, role.getName());</span>
      +<span class="nc" id="L172">                        groupList.addMember(new RolePrincipal(role.getName()));</span>
      +<span class="nc" id="L173">                    }</span>
      +                }
      +                // add the group and roles to the subject principals
      +<span class="nc" id="L176">                this.principals.add(groupList);</span>
      +            }
      +
      +<span class="nc" id="L179">            this.username = windowsIdentity.getFqn();</span>
      +<span class="nc" id="L180">            WindowsLoginModule.LOGGER.debug(&quot;successfully logged in {} ({})&quot;, this.username,</span>
      +<span class="nc" id="L181">                    windowsIdentity.getSidString());</span>
      +        } finally {
      +<span class="nc" id="L183">            windowsIdentity.dispose();</span>
      +        }
      +
      +<span class="nc" id="L186">        return true;</span>
      +    }
      +
      +    /**
      +     * Abort a login process.
      +     *
      +     * @return true, if successful
      +     *
      +     * @throws LoginException
      +     *             the login exception
      +     */
      +    @Override
      +    public boolean abort() throws LoginException {
      +<span class="fc" id="L199">        return this.logout();</span>
      +    }
      +
      +    /**
      +     * Commit principals to the subject.
      +     *
      +     * @return true, if successful
      +     *
      +     * @throws LoginException
      +     *             the login exception
      +     */
      +    @Override
      +    public boolean commit() throws LoginException {
      +<span class="fc bfc" id="L212" title="All 2 branches covered.">        if (this.principals == null) {</span>
      +<span class="fc" id="L213">            return false;</span>
      +        }
      +
      +<span class="fc bfc" id="L216" title="All 2 branches covered.">        if (this.subject.isReadOnly()) {</span>
      +<span class="fc" id="L217">            throw new LoginException(&quot;Subject cannot be read-only.&quot;);</span>
      +        }
      +
      +<span class="fc" id="L220">        final Set&lt;Principal&gt; principalsSet = this.subject.getPrincipals();</span>
      +<span class="fc" id="L221">        principalsSet.addAll(this.principals);</span>
      +
      +<span class="fc" id="L223">        WindowsLoginModule.LOGGER.debug(&quot;committing {} principals&quot;,</span>
      +<span class="fc" id="L224">                Integer.valueOf(this.subject.getPrincipals().size()));</span>
      +<span class="fc bfc" id="L225" title="All 2 branches covered.">        if (this.debug) {</span>
      +<span class="fc bfc" id="L226" title="All 2 branches covered.">            for (final Principal principal : principalsSet) {</span>
      +<span class="fc" id="L227">                WindowsLoginModule.LOGGER.debug(&quot; principal: {}&quot;, principal.getName());</span>
      +<span class="fc" id="L228">            }</span>
      +        }
      +
      +<span class="fc" id="L231">        return true;</span>
      +    }
      +
      +    /**
      +     * Logout a user.
      +     *
      +     * @return true, if successful
      +     *
      +     * @throws LoginException
      +     *             the login exception
      +     */
      +    @Override
      +    public boolean logout() throws LoginException {
      +<span class="fc bfc" id="L244" title="All 2 branches covered.">        if (this.subject.isReadOnly()) {</span>
      +<span class="fc" id="L245">            throw new LoginException(&quot;Subject cannot be read-only.&quot;);</span>
      +        }
      +
      +<span class="fc" id="L248">        this.subject.getPrincipals().clear();</span>
      +
      +<span class="fc bfc" id="L250" title="All 2 branches covered.">        if (this.username != null) {</span>
      +<span class="fc" id="L251">            WindowsLoginModule.LOGGER.debug(&quot;logging out {}&quot;, this.username);</span>
      +        }
      +
      +<span class="fc" id="L254">        return true;</span>
      +    }
      +
      +    /**
      +     * True if Debug is enabled.
      +     *
      +     * @return True or false.
      +     */
      +    public boolean isDebug() {
      +<span class="fc" id="L263">        return this.debug;</span>
      +    }
      +
      +    /**
      +     * Windows auth provider.
      +     *
      +     * @return IWindowsAuthProvider.
      +     */
      +    public IWindowsAuthProvider getAuth() {
      +<span class="fc" id="L272">        return this.auth;</span>
      +    }
      +
      +    /**
      +     * Set Windows auth provider.
      +     *
      +     * @param provider
      +     *            Class implements IWindowsAuthProvider.
      +     */
      +    public void setAuth(final IWindowsAuthProvider provider) {
      +<span class="fc" id="L282">        this.auth = provider;</span>
      +<span class="fc" id="L283">    }</span>
      +
      +    /**
      +     * Returns a list of user principal objects.
      +     *
      +     * @param windowsIdentity
      +     *            Windows identity.
      +     * @param principalFormat
      +     *            Principal format.
      +     *
      +     * @return A list of user principal objects.
      +     */
      +    private static List&lt;Principal&gt; getUserPrincipals(final IWindowsIdentity windowsIdentity,
      +            final PrincipalFormat principalFormat) {
      +
      +<span class="nc" id="L298">        final List&lt;Principal&gt; principalsList = new ArrayList&lt;&gt;();</span>
      +<span class="nc bnc" id="L299" title="All 4 branches missed.">        switch (principalFormat) {</span>
      +            case FQN:
      +<span class="nc" id="L301">                principalsList.add(new UserPrincipal(windowsIdentity.getFqn()));</span>
      +<span class="nc" id="L302">                break;</span>
      +            case SID:
      +<span class="nc" id="L304">                principalsList.add(new UserPrincipal(windowsIdentity.getSidString()));</span>
      +<span class="nc" id="L305">                break;</span>
      +            case BOTH:
      +<span class="nc" id="L307">                principalsList.add(new UserPrincipal(windowsIdentity.getFqn()));</span>
      +<span class="nc" id="L308">                principalsList.add(new UserPrincipal(windowsIdentity.getSidString()));</span>
      +<span class="nc" id="L309">                break;</span>
      +            case NONE:
      +            default:
      +                break;
      +        }
      +<span class="nc" id="L314">        return principalsList;</span>
      +    }
      +
      +    /**
      +     * Returns a list of role principal objects.
      +     *
      +     * @param group
      +     *            Windows group.
      +     * @param principalFormat
      +     *            Principal format.
      +     *
      +     * @return List of role principal objects.
      +     */
      +    private static List&lt;Principal&gt; getRolePrincipals(final IWindowsAccount group,
      +            final PrincipalFormat principalFormat) {
      +
      +<span class="nc" id="L330">        final List&lt;Principal&gt; principalsList = new ArrayList&lt;&gt;();</span>
      +<span class="nc bnc" id="L331" title="All 5 branches missed.">        switch (principalFormat) {</span>
      +            case FQN:
      +<span class="nc" id="L333">                principalsList.add(new RolePrincipal(group.getFqn()));</span>
      +<span class="nc" id="L334">                break;</span>
      +            case SID:
      +<span class="nc" id="L336">                principalsList.add(new RolePrincipal(group.getSidString()));</span>
      +<span class="nc" id="L337">                break;</span>
      +            case BOTH:
      +<span class="nc" id="L339">                principalsList.add(new RolePrincipal(group.getFqn()));</span>
      +<span class="nc" id="L340">                principalsList.add(new RolePrincipal(group.getSidString()));</span>
      +<span class="nc" id="L341">                break;</span>
      +            case NONE:
      +<span class="nc" id="L343">                break;</span>
      +            default:
      +                break;
      +        }
      +<span class="nc" id="L347">        return principalsList;</span>
      +    }
      +
      +    /**
      +     * True if Guest login permitted.
      +     *
      +     * @return True if Guest login permitted, false otherwise.
      +     */
      +    public boolean isAllowGuestLogin() {
      +<span class="fc" id="L356">        return this.allowGuestLogin;</span>
      +    }
      +
      +    /**
      +     * Set whether Guest login is permitted. Default is true, if the Guest account is enabled, an invalid
      +     * username/password results in a Guest login.
      +     *
      +     * @param value
      +     *            True or false.
      +     */
      +    public void setAllowGuestLogin(final boolean value) {
      +<span class="fc" id="L367">        this.allowGuestLogin = value;</span>
      +<span class="fc" id="L368">    }</span>
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.jaas/index.html b/waffle-jna-jakarta/jacoco/waffle.jaas/index.html
      new file mode 100644
      index 0000000000..db04f6f4b8
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.jaas/index.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.jaas</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.jaas</span></div><h1>waffle.jaas</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">304 of 660</td><td class="ctr2">53%</td><td class="bar">32 of 65</td><td class="ctr2">50%</td><td class="ctr1">25</td><td class="ctr2">64</td><td class="ctr1">64</td><td class="ctr2">160</td><td class="ctr1">6</td><td class="ctr2">29</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a3"><a href="WindowsLoginModule.html" class="el_class">WindowsLoginModule</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="52" height="10" title="210" alt="210"/><img src="../jacoco-resources/greenbar.gif" width="67" height="10" title="266" alt="266"/></td><td class="ctr2" id="c2">55%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="53" height="10" title="19" alt="19"/><img src="../jacoco-resources/greenbar.gif" width="66" height="10" title="24" alt="24"/></td><td class="ctr2" id="e2">55%</td><td class="ctr1" id="f0">14</td><td class="ctr2" id="g0">38</td><td class="ctr1" id="h0">42</td><td class="ctr2" id="i0">109</td><td class="ctr1" id="j1">2</td><td class="ctr2" id="k0">14</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="GroupPrincipal.html" class="el_class">GroupPrincipal</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="23" height="10" title="94" alt="94"/><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="30" alt="30"/></td><td class="ctr2" id="c3">24%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="13" alt="13"/><img src="../jacoco-resources/greenbar.gif" width="2" height="10" title="1" alt="1"/></td><td class="ctr2" id="e3">7%</td><td class="ctr1" id="f1">11</td><td class="ctr2" id="g1">14</td><td class="ctr1" id="h1">22</td><td class="ctr2" id="i1">31</td><td class="ctr1" id="j0">4</td><td class="ctr2" id="k1">7</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="UserPrincipal.html" class="el_class">UserPrincipal</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="30" alt="30"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"><img src="../jacoco-resources/greenbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">6</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">10</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">4</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a1"><a href="RolePrincipal.html" class="el_class">RolePrincipal</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="30" alt="30"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d3"><img src="../jacoco-resources/greenbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">6</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">10</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">4</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.jaas/index.source.html b/waffle-jna-jakarta/jacoco/waffle.jaas/index.source.html
      new file mode 100644
      index 0000000000..d710cb9b6d
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.jaas/index.source.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.jaas</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.jaas</span></div><h1>waffle.jaas</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">304 of 660</td><td class="ctr2">53%</td><td class="bar">32 of 65</td><td class="ctr2">50%</td><td class="ctr1">25</td><td class="ctr2">64</td><td class="ctr1">64</td><td class="ctr2">160</td><td class="ctr1">6</td><td class="ctr2">29</td><td class="ctr1">0</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a3"><a href="WindowsLoginModule.java.html" class="el_source">WindowsLoginModule.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="52" height="10" title="210" alt="210"/><img src="../jacoco-resources/greenbar.gif" width="67" height="10" title="266" alt="266"/></td><td class="ctr2" id="c2">55%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="53" height="10" title="19" alt="19"/><img src="../jacoco-resources/greenbar.gif" width="66" height="10" title="24" alt="24"/></td><td class="ctr2" id="e2">55%</td><td class="ctr1" id="f0">14</td><td class="ctr2" id="g0">38</td><td class="ctr1" id="h0">42</td><td class="ctr2" id="i0">109</td><td class="ctr1" id="j1">2</td><td class="ctr2" id="k0">14</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="GroupPrincipal.java.html" class="el_source">GroupPrincipal.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="23" height="10" title="94" alt="94"/><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="30" alt="30"/></td><td class="ctr2" id="c3">24%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="13" alt="13"/><img src="../jacoco-resources/greenbar.gif" width="2" height="10" title="1" alt="1"/></td><td class="ctr2" id="e3">7%</td><td class="ctr1" id="f1">11</td><td class="ctr2" id="g1">14</td><td class="ctr1" id="h1">22</td><td class="ctr2" id="i1">31</td><td class="ctr1" id="j0">4</td><td class="ctr2" id="k1">7</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="UserPrincipal.java.html" class="el_source">UserPrincipal.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="30" alt="30"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"><img src="../jacoco-resources/greenbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">6</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">10</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">4</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a1"><a href="RolePrincipal.java.html" class="el_source">RolePrincipal.java</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="30" alt="30"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d3"><img src="../jacoco-resources/greenbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">6</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">10</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">4</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet.spi/BasicSecurityFilterProvider.html b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/BasicSecurityFilterProvider.html
      new file mode 100644
      index 0000000000..62d047acc9
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/BasicSecurityFilterProvider.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>BasicSecurityFilterProvider</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.servlet.spi</a> &gt; <span class="el_class">BasicSecurityFilterProvider</span></div><h1>BasicSecurityFilterProvider</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">72 of 89</td><td class="ctr2">19%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">8</td><td class="ctr2">11</td><td class="ctr1">17</td><td class="ctr2">23</td><td class="ctr1">6</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a1"><a href="BasicSecurityFilterProvider.java.html#L68" class="el_method">doFilter(HttpServletRequest, HttpServletResponse)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="42" alt="42"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">7</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="BasicSecurityFilterProvider.java.html#L122" class="el_method">initParameter(String, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="40" height="10" title="14" alt="14"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">4</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a6"><a href="BasicSecurityFilterProvider.java.html#L90" class="el_method">sendUnauthorized(HttpServletResponse)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="7" alt="7"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a7"><a href="BasicSecurityFilterProvider.java.html#L109" class="el_method">setRealm(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="BasicSecurityFilterProvider.java.html#L99" class="el_method">getRealm()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a4"><a href="BasicSecurityFilterProvider.java.html#L80" class="el_method">isPrincipalException(HttpServletRequest)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="2" alt="2"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="BasicSecurityFilterProvider.java.html#L49" class="el_method">BasicSecurityFilterProvider(IWindowsAuthProvider)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/greenbar.gif" width="25" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a5"><a href="BasicSecurityFilterProvider.java.html#L85" class="el_method">isSecurityPackageSupported(String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/greenbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a8"><a href="BasicSecurityFilterProvider.java.html#L46" class="el_method">static {...}</a></td><td class="bar" id="b8"><img src="../jacoco-resources/greenbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet.spi/BasicSecurityFilterProvider.java.html b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/BasicSecurityFilterProvider.java.html
      new file mode 100644
      index 0000000000..0977039fbe
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/BasicSecurityFilterProvider.java.html
      @@ -0,0 +1,129 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>BasicSecurityFilterProvider.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.servlet.spi</a> &gt; <span class="el_source">BasicSecurityFilterProvider.java</span></div><h1>BasicSecurityFilterProvider.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.servlet.spi;
      +
      +import jakarta.servlet.http.HttpServletRequest;
      +import jakarta.servlet.http.HttpServletResponse;
      +
      +import java.io.IOException;
      +import java.nio.charset.StandardCharsets;
      +import java.security.InvalidParameterException;
      +
      +import org.slf4j.Logger;
      +import org.slf4j.LoggerFactory;
      +
      +import waffle.util.AuthorizationHeader;
      +import waffle.windows.auth.IWindowsAuthProvider;
      +import waffle.windows.auth.IWindowsIdentity;
      +
      +/**
      + * A Basic authentication security filter provider. https://tools.ietf.org/html/rfc2617
      + */
      +public class BasicSecurityFilterProvider implements SecurityFilterProvider {
      +
      +    /** The Constant LOGGER. */
      +<span class="fc" id="L46">    private static final Logger LOGGER = LoggerFactory.getLogger(BasicSecurityFilterProvider.class);</span>
      +
      +    /** The realm. */
      +<span class="fc" id="L49">    private String realm = &quot;BasicSecurityFilterProvider&quot;;</span>
      +
      +    /** The auth. */
      +    private final IWindowsAuthProvider auth;
      +
      +    /**
      +     * Instantiates a new basic security filter provider.
      +     *
      +     * @param newAuthProvider
      +     *            the new auth provider
      +     */
      +<span class="fc" id="L60">    public BasicSecurityFilterProvider(final IWindowsAuthProvider newAuthProvider) {</span>
      +<span class="fc" id="L61">        this.auth = newAuthProvider;</span>
      +<span class="fc" id="L62">    }</span>
      +
      +    @Override
      +    public IWindowsIdentity doFilter(final HttpServletRequest request, final HttpServletResponse response)
      +            throws IOException {
      +
      +<span class="nc" id="L68">        final AuthorizationHeader authorizationHeader = new AuthorizationHeader(request);</span>
      +<span class="nc" id="L69">        final String usernamePassword = new String(authorizationHeader.getTokenBytes(), StandardCharsets.UTF_8);</span>
      +<span class="nc" id="L70">        final String[] usernamePasswordArray = usernamePassword.split(&quot;:&quot;, 2);</span>
      +<span class="nc bnc" id="L71" title="All 2 branches missed.">        if (usernamePasswordArray.length != 2) {</span>
      +<span class="nc" id="L72">            throw new RuntimeException(&quot;Invalid username:password in Authorization header.&quot;);</span>
      +        }
      +<span class="nc" id="L74">        BasicSecurityFilterProvider.LOGGER.debug(&quot;logging in user: {}&quot;, usernamePasswordArray[0]);</span>
      +<span class="nc" id="L75">        return this.auth.logonUser(usernamePasswordArray[0], usernamePasswordArray[1]);</span>
      +    }
      +
      +    @Override
      +    public boolean isPrincipalException(final HttpServletRequest request) {
      +<span class="nc" id="L80">        return false;</span>
      +    }
      +
      +    @Override
      +    public boolean isSecurityPackageSupported(final String securityPackage) {
      +<span class="fc" id="L85">        return &quot;Basic&quot;.equalsIgnoreCase(securityPackage);</span>
      +    }
      +
      +    @Override
      +    public void sendUnauthorized(final HttpServletResponse response) {
      +<span class="nc" id="L90">        response.addHeader(&quot;WWW-Authenticate&quot;, &quot;Basic realm=\&quot;&quot; + this.realm + &quot;\&quot;&quot;);</span>
      +<span class="nc" id="L91">    }</span>
      +
      +    /**
      +     * Protection space.
      +     *
      +     * @return Name of the protection space.
      +     */
      +    public String getRealm() {
      +<span class="nc" id="L99">        return this.realm;</span>
      +    }
      +
      +    /**
      +     * Set the protection space.
      +     *
      +     * @param value
      +     *            Protection space name.
      +     */
      +    public void setRealm(final String value) {
      +<span class="nc" id="L109">        this.realm = value;</span>
      +<span class="nc" id="L110">    }</span>
      +
      +    /**
      +     * Init configuration parameters.
      +     *
      +     * @param parameterName
      +     *            the parameter name
      +     * @param parameterValue
      +     *            the parameter value
      +     */
      +    @Override
      +    public void initParameter(final String parameterName, final String parameterValue) {
      +<span class="nc bnc" id="L122" title="All 2 branches missed.">        if (&quot;realm&quot;.equals(parameterName)) {</span>
      +<span class="nc" id="L123">            this.setRealm(parameterValue);</span>
      +        } else {
      +<span class="nc" id="L125">            throw new InvalidParameterException(parameterName);</span>
      +        }
      +<span class="nc" id="L127">    }</span>
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet.spi/NegotiateSecurityFilterProvider.html b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/NegotiateSecurityFilterProvider.html
      new file mode 100644
      index 0000000000..7c55fe29d7
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/NegotiateSecurityFilterProvider.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NegotiateSecurityFilterProvider</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.servlet.spi</a> &gt; <span class="el_class">NegotiateSecurityFilterProvider</span></div><h1>NegotiateSecurityFilterProvider</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">201 of 246</td><td class="ctr2">18%</td><td class="bar">20 of 24</td><td class="ctr2">16%</td><td class="ctr1">16</td><td class="ctr2">21</td><td class="ctr1">52</td><td class="ctr2">64</td><td class="ctr1">6</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a0"><a href="NegotiateSecurityFilterProvider.java.html#L121" class="el_method">doFilter(HttpServletRequest, HttpServletResponse)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="90" alt="90"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="96" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h0">25</td><td class="ctr2" id="i0">25</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="NegotiateSecurityFilterProvider.java.html#L173" class="el_method">initParameter(String, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="94" height="10" title="71" alt="71"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h1">15</td><td class="ctr2" id="i1">15</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a6"><a href="NegotiateSecurityFilterProvider.java.html#L103" class="el_method">sendUnauthorized(HttpServletResponse)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="17" alt="17"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i5">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="NegotiateSecurityFilterProvider.java.html#L110" class="el_method">isPrincipalException(HttpServletRequest)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="21" height="10" title="16" alt="16"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h2">5</td><td class="ctr2" id="i3">5</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a7"><a href="NegotiateSecurityFilterProvider.java.html#L98" class="el_method">setProtocols(List)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="NegotiateSecurityFilterProvider.java.html#L88" class="el_method">getProtocols()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a5"><a href="NegotiateSecurityFilterProvider.java.html#L65" class="el_method">NegotiateSecurityFilterProvider(IWindowsAuthProvider)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/greenbar.gif" width="28" height="10" title="21" alt="21"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i2">6</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a4"><a href="NegotiateSecurityFilterProvider.java.html#L163" class="el_method">isSecurityPackageSupported(String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/greenbar.gif" width="26" height="10" title="20" alt="20"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d3"><img src="../jacoco-resources/greenbar.gif" width="48" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i4">5</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a8"><a href="NegotiateSecurityFilterProvider.java.html#L50" class="el_method">static {...}</a></td><td class="bar" id="b8"><img src="../jacoco-resources/greenbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet.spi/NegotiateSecurityFilterProvider.java.html b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/NegotiateSecurityFilterProvider.java.html
      new file mode 100644
      index 0000000000..1a4ac81586
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/NegotiateSecurityFilterProvider.java.html
      @@ -0,0 +1,194 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NegotiateSecurityFilterProvider.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.servlet.spi</a> &gt; <span class="el_source">NegotiateSecurityFilterProvider.java</span></div><h1>NegotiateSecurityFilterProvider.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.servlet.spi;
      +
      +import jakarta.servlet.http.HttpServletRequest;
      +import jakarta.servlet.http.HttpServletResponse;
      +
      +import java.io.IOException;
      +import java.security.InvalidParameterException;
      +import java.util.ArrayList;
      +import java.util.Base64;
      +import java.util.List;
      +
      +import org.slf4j.Logger;
      +import org.slf4j.LoggerFactory;
      +
      +import waffle.util.AuthorizationHeader;
      +import waffle.util.NtlmServletRequest;
      +import waffle.windows.auth.IWindowsAuthProvider;
      +import waffle.windows.auth.IWindowsIdentity;
      +import waffle.windows.auth.IWindowsSecurityContext;
      +
      +/**
      + * A negotiate security filter provider.
      + */
      +public class NegotiateSecurityFilterProvider implements SecurityFilterProvider {
      +
      +    /** The Constant LOGGER. */
      +<span class="fc" id="L50">    private static final Logger LOGGER = LoggerFactory.getLogger(NegotiateSecurityFilterProvider.class);</span>
      +
      +    /** The Constant WWW_AUTHENTICATE. */
      +    private static final String WWW_AUTHENTICATE = &quot;WWW-Authenticate&quot;;
      +
      +    /** The Constant PROTOCOLS. */
      +    private static final String PROTOCOLS = &quot;protocols&quot;;
      +
      +    /** The Constant NEGOTIATE. */
      +    private static final String NEGOTIATE = &quot;Negotiate&quot;;
      +
      +    /** The Constant NTLM. */
      +    private static final String NTLM = &quot;NTLM&quot;;
      +
      +    /** The protocols. */
      +<span class="fc" id="L65">    private List&lt;String&gt; protocolsList = new ArrayList&lt;&gt;();</span>
      +
      +    /** The auth. */
      +    private final IWindowsAuthProvider auth;
      +
      +    /**
      +     * Instantiates a new negotiate security filter provider.
      +     *
      +     * @param newAuthProvider
      +     *            the new auth provider
      +     */
      +<span class="fc" id="L76">    public NegotiateSecurityFilterProvider(final IWindowsAuthProvider newAuthProvider) {</span>
      +<span class="fc" id="L77">        this.auth = newAuthProvider;</span>
      +<span class="fc" id="L78">        this.protocolsList.add(NegotiateSecurityFilterProvider.NEGOTIATE);</span>
      +<span class="fc" id="L79">        this.protocolsList.add(NegotiateSecurityFilterProvider.NTLM);</span>
      +<span class="fc" id="L80">    }</span>
      +
      +    /**
      +     * Gets the protocols.
      +     *
      +     * @return the protocols
      +     */
      +    public List&lt;String&gt; getProtocols() {
      +<span class="nc" id="L88">        return this.protocolsList;</span>
      +    }
      +
      +    /**
      +     * Sets the protocols.
      +     *
      +     * @param values
      +     *            the new protocols
      +     */
      +    public void setProtocols(final List&lt;String&gt; values) {
      +<span class="nc" id="L98">        this.protocolsList = values;</span>
      +<span class="nc" id="L99">    }</span>
      +
      +    @Override
      +    public void sendUnauthorized(final HttpServletResponse response) {
      +<span class="nc bnc" id="L103" title="All 2 branches missed.">        for (final String protocol : this.protocolsList) {</span>
      +<span class="nc" id="L104">            response.addHeader(NegotiateSecurityFilterProvider.WWW_AUTHENTICATE, protocol);</span>
      +<span class="nc" id="L105">        }</span>
      +<span class="nc" id="L106">    }</span>
      +
      +    @Override
      +    public boolean isPrincipalException(final HttpServletRequest request) {
      +<span class="nc" id="L110">        final AuthorizationHeader authorizationHeader = new AuthorizationHeader(request);</span>
      +<span class="nc" id="L111">        final boolean ntlmPost = authorizationHeader.isNtlmType1PostAuthorizationHeader();</span>
      +<span class="nc" id="L112">        NegotiateSecurityFilterProvider.LOGGER.debug(&quot;authorization: {}, ntlm post: {}&quot;, authorizationHeader,</span>
      +<span class="nc" id="L113">                Boolean.valueOf(ntlmPost));</span>
      +<span class="nc" id="L114">        return ntlmPost;</span>
      +    }
      +
      +    @Override
      +    public IWindowsIdentity doFilter(final HttpServletRequest request, final HttpServletResponse response)
      +            throws IOException {
      +
      +<span class="nc" id="L121">        final AuthorizationHeader authorizationHeader = new AuthorizationHeader(request);</span>
      +<span class="nc" id="L122">        final boolean ntlmPost = authorizationHeader.isNtlmType1PostAuthorizationHeader();</span>
      +
      +        // maintain a connection-based session for NTLM tokens
      +<span class="nc" id="L125">        final String connectionId = NtlmServletRequest.getConnectionId(request);</span>
      +<span class="nc" id="L126">        final String securityPackage = authorizationHeader.getSecurityPackage();</span>
      +<span class="nc" id="L127">        NegotiateSecurityFilterProvider.LOGGER.debug(&quot;security package: {}, connection id: {}&quot;, securityPackage,</span>
      +                connectionId);
      +
      +<span class="nc bnc" id="L130" title="All 2 branches missed.">        if (ntlmPost) {</span>
      +            // type 2 NTLM authentication message received
      +<span class="nc" id="L132">            this.auth.resetSecurityToken(connectionId);</span>
      +        }
      +
      +<span class="nc" id="L135">        final byte[] tokenBuffer = authorizationHeader.getTokenBytes();</span>
      +<span class="nc" id="L136">        NegotiateSecurityFilterProvider.LOGGER.debug(&quot;token buffer: {} byte(s)&quot;, Integer.valueOf(tokenBuffer.length));</span>
      +<span class="nc" id="L137">        final IWindowsSecurityContext securityContext = this.auth.acceptSecurityToken(connectionId, tokenBuffer,</span>
      +                securityPackage);
      +
      +<span class="nc" id="L140">        final byte[] continueTokenBytes = securityContext.getToken();</span>
      +<span class="nc bnc" id="L141" title="All 4 branches missed.">        if (continueTokenBytes != null &amp;&amp; continueTokenBytes.length &gt; 0) {</span>
      +<span class="nc" id="L142">            final String continueToken = Base64.getEncoder().encodeToString(continueTokenBytes);</span>
      +<span class="nc" id="L143">            NegotiateSecurityFilterProvider.LOGGER.debug(&quot;continue token: {}&quot;, continueToken);</span>
      +<span class="nc" id="L144">            response.addHeader(NegotiateSecurityFilterProvider.WWW_AUTHENTICATE, securityPackage + &quot; &quot; + continueToken);</span>
      +        }
      +
      +<span class="nc" id="L147">        NegotiateSecurityFilterProvider.LOGGER.debug(&quot;continue required: {}&quot;,</span>
      +<span class="nc" id="L148">                Boolean.valueOf(securityContext.isContinue()));</span>
      +<span class="nc bnc" id="L149" title="All 2 branches missed.">        if (securityContext.isContinue()) {</span>
      +<span class="nc" id="L150">            response.setHeader(&quot;Connection&quot;, &quot;keep-alive&quot;);</span>
      +<span class="nc" id="L151">            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);</span>
      +<span class="nc" id="L152">            response.flushBuffer();</span>
      +<span class="nc" id="L153">            return null;</span>
      +        }
      +
      +<span class="nc" id="L156">        final IWindowsIdentity identity = securityContext.getIdentity();</span>
      +<span class="nc" id="L157">        securityContext.dispose();</span>
      +<span class="nc" id="L158">        return identity;</span>
      +    }
      +
      +    @Override
      +    public boolean isSecurityPackageSupported(final String securityPackage) {
      +<span class="fc bfc" id="L163" title="All 2 branches covered.">        for (final String protocol : this.protocolsList) {</span>
      +<span class="fc bfc" id="L164" title="All 2 branches covered.">            if (protocol.equalsIgnoreCase(securityPackage)) {</span>
      +<span class="fc" id="L165">                return true;</span>
      +            }
      +<span class="fc" id="L167">        }</span>
      +<span class="fc" id="L168">        return false;</span>
      +    }
      +
      +    @Override
      +    public void initParameter(final String parameterName, final String parameterValue) {
      +<span class="nc bnc" id="L173" title="All 2 branches missed.">        if (NegotiateSecurityFilterProvider.PROTOCOLS.equals(parameterName)) {</span>
      +<span class="nc" id="L174">            this.protocolsList = new ArrayList&lt;&gt;();</span>
      +<span class="nc" id="L175">            final String[] protocolNames = parameterValue.split(&quot;\\s+&quot;, -1);</span>
      +<span class="nc bnc" id="L176" title="All 2 branches missed.">            for (String protocolName : protocolNames) {</span>
      +<span class="nc" id="L177">                protocolName = protocolName.trim();</span>
      +<span class="nc bnc" id="L178" title="All 2 branches missed.">                if (protocolName.length() &gt; 0) {</span>
      +<span class="nc" id="L179">                    NegotiateSecurityFilterProvider.LOGGER.debug(&quot;init protocol: {}&quot;, protocolName);</span>
      +<span class="nc bnc" id="L180" title="All 2 branches missed.">                    if (NegotiateSecurityFilterProvider.NEGOTIATE.equals(protocolName)</span>
      +<span class="nc bnc" id="L181" title="All 2 branches missed.">                            || NegotiateSecurityFilterProvider.NTLM.equals(protocolName)) {</span>
      +<span class="nc" id="L182">                        this.protocolsList.add(protocolName);</span>
      +                    } else {
      +<span class="nc" id="L184">                        NegotiateSecurityFilterProvider.LOGGER.error(&quot;unsupported protocol: {}&quot;, protocolName);</span>
      +<span class="nc" id="L185">                        throw new RuntimeException(&quot;Unsupported protocol: &quot; + protocolName);</span>
      +                    }
      +                }
      +            }
      +<span class="nc" id="L189">        } else {</span>
      +<span class="nc" id="L190">            throw new InvalidParameterException(parameterName);</span>
      +        }
      +<span class="nc" id="L192">    }</span>
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet.spi/SecurityFilterProviderCollection.html b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/SecurityFilterProviderCollection.html
      new file mode 100644
      index 0000000000..148268a9b6
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/SecurityFilterProviderCollection.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SecurityFilterProviderCollection</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.servlet.spi</a> &gt; <span class="el_class">SecurityFilterProviderCollection</span></div><h1>SecurityFilterProviderCollection</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">118 of 262</td><td class="ctr2">54%</td><td class="bar">10 of 22</td><td class="ctr2">54%</td><td class="ctr1">9</td><td class="ctr2">22</td><td class="ctr1">26</td><td class="ctr2">54</td><td class="ctr1">4</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a6"><a href="SecurityFilterProviderCollection.java.html#L53" class="el_method">SecurityFilterProviderCollection(SecurityFilterProvider[])</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="55" height="10" title="35" alt="35"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h1">6</td><td class="ctr2" id="i2">6</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="SecurityFilterProviderCollection.java.html#L153" class="el_method">doFilter(HttpServletRequest, HttpServletResponse)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="30" alt="30"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h0">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="SecurityFilterProviderCollection.java.html#L174" class="el_method">isPrincipalException(HttpServletRequest)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="20" alt="20"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h2">5</td><td class="ctr2" id="i3">5</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a7"><a href="SecurityFilterProviderCollection.java.html#L53" class="el_method">SecurityFilterProviderCollection(String[], IWindowsAuthProvider)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="17" alt="17"/><img src="../jacoco-resources/greenbar.gif" width="93" height="10" title="59" alt="59"/></td><td class="ctr2" id="c6">77%</td><td class="bar" id="d6"><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h3">5</td><td class="ctr2" id="i0">16</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a8"><a href="SecurityFilterProviderCollection.java.html#L189" class="el_method">sendUnauthorized(HttpServletResponse)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="25" height="10" title="16" alt="16"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h4">4</td><td class="ctr2" id="i7">4</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="SecurityFilterProviderCollection.java.html#L215" class="el_method">getByClassName(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/greenbar.gif" width="39" height="10" title="25" alt="25"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d4"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">100%</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i4">5</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a5"><a href="SecurityFilterProviderCollection.java.html#L53" class="el_method">SecurityFilterProviderCollection(IWindowsAuthProvider)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/greenbar.gif" width="37" height="10" title="24" alt="24"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i5">5</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="SecurityFilterProviderCollection.java.html#L130" class="el_method">get(String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/greenbar.gif" width="31" height="10" title="20" alt="20"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d5"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">100%</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i6">5</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a4"><a href="SecurityFilterProviderCollection.java.html#L118" class="el_method">isSecurityPackageSupported(String)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/greenbar.gif" width="12" height="10" title="8" alt="8"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d7"><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">100%</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a9"><a href="SecurityFilterProviderCollection.java.html#L200" class="el_method">size()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/greenbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a10"><a href="SecurityFilterProviderCollection.java.html#L50" class="el_method">static {...}</a></td><td class="bar" id="b10"><img src="../jacoco-resources/greenbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet.spi/SecurityFilterProviderCollection.java.html b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/SecurityFilterProviderCollection.java.html
      new file mode 100644
      index 0000000000..b69f1fe013
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/SecurityFilterProviderCollection.java.html
      @@ -0,0 +1,223 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SecurityFilterProviderCollection.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.servlet.spi</a> &gt; <span class="el_source">SecurityFilterProviderCollection.java</span></div><h1>SecurityFilterProviderCollection.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.servlet.spi;
      +
      +import com.sun.jna.platform.win32.Win32Exception;
      +
      +import jakarta.servlet.http.HttpServletRequest;
      +import jakarta.servlet.http.HttpServletResponse;
      +
      +import java.io.IOException;
      +import java.lang.reflect.Constructor;
      +import java.lang.reflect.InvocationTargetException;
      +import java.util.ArrayList;
      +import java.util.List;
      +
      +import org.slf4j.Logger;
      +import org.slf4j.LoggerFactory;
      +
      +import waffle.util.AuthorizationHeader;
      +import waffle.windows.auth.IWindowsAuthProvider;
      +import waffle.windows.auth.IWindowsIdentity;
      +
      +/**
      + * A collection of security filter providers.
      + */
      +public class SecurityFilterProviderCollection {
      +
      +    /** The Constant LOGGER. */
      +<span class="fc" id="L50">    private static final Logger LOGGER = LoggerFactory.getLogger(SecurityFilterProviderCollection.class);</span>
      +
      +    /** The providers. */
      +<span class="pc" id="L53">    private final List&lt;SecurityFilterProvider&gt; providers = new ArrayList&lt;&gt;();</span>
      +
      +    /**
      +     * Instantiates a new security filter provider collection.
      +     *
      +     * @param providerArray
      +     *            the provider array
      +     */
      +<span class="nc" id="L61">    public SecurityFilterProviderCollection(final SecurityFilterProvider[] providerArray) {</span>
      +<span class="nc bnc" id="L62" title="All 2 branches missed.">        for (final SecurityFilterProvider provider : providerArray) {</span>
      +<span class="nc" id="L63">            SecurityFilterProviderCollection.LOGGER.info(&quot;using '{}'&quot;, provider.getClass().getName());</span>
      +<span class="nc" id="L64">            this.providers.add(provider);</span>
      +        }
      +<span class="nc" id="L66">    }</span>
      +
      +    /**
      +     * Instantiates a new security filter provider collection.
      +     *
      +     * @param providerNames
      +     *            the provider names
      +     * @param auth
      +     *            the auth
      +     */
      +    @SuppressWarnings(&quot;unchecked&quot;)
      +<span class="fc" id="L77">    public SecurityFilterProviderCollection(final String[] providerNames, final IWindowsAuthProvider auth) {</span>
      +        Class&lt;SecurityFilterProvider&gt; providerClass;
      +        Constructor&lt;SecurityFilterProvider&gt; providerConstructor;
      +<span class="fc bfc" id="L80" title="All 2 branches covered.">        for (String providerName : providerNames) {</span>
      +<span class="fc" id="L81">            providerName = providerName.trim();</span>
      +<span class="fc" id="L82">            SecurityFilterProviderCollection.LOGGER.info(&quot;loading '{}'&quot;, providerName);</span>
      +            try {
      +<span class="fc" id="L84">                providerClass = (Class&lt;SecurityFilterProvider&gt;) Class.forName(providerName);</span>
      +<span class="fc" id="L85">                providerConstructor = providerClass.getConstructor(IWindowsAuthProvider.class);</span>
      +<span class="fc" id="L86">                final SecurityFilterProvider provider = providerConstructor.newInstance(auth);</span>
      +<span class="fc" id="L87">                this.providers.add(provider);</span>
      +<span class="nc" id="L88">            } catch (final ClassNotFoundException e) {</span>
      +<span class="nc" id="L89">                throw new RuntimeException(e);</span>
      +<span class="nc" id="L90">            } catch (final SecurityException | NoSuchMethodException | IllegalArgumentException | InstantiationException</span>
      +                    | IllegalAccessException | InvocationTargetException e) {
      +<span class="nc" id="L92">                SecurityFilterProviderCollection.LOGGER.error(&quot;error loading '{}': {}&quot;, providerName, e.getMessage());</span>
      +<span class="nc" id="L93">                SecurityFilterProviderCollection.LOGGER.trace(&quot;&quot;, e);</span>
      +<span class="fc" id="L94">            }</span>
      +        }
      +<span class="fc" id="L96">    }</span>
      +
      +    /**
      +     * Instantiates a new security filter provider collection.
      +     *
      +     * @param auth
      +     *            the auth
      +     */
      +<span class="fc" id="L104">    public SecurityFilterProviderCollection(final IWindowsAuthProvider auth) {</span>
      +<span class="fc" id="L105">        this.providers.add(new NegotiateSecurityFilterProvider(auth));</span>
      +<span class="fc" id="L106">        this.providers.add(new BasicSecurityFilterProvider(auth));</span>
      +<span class="fc" id="L107">    }</span>
      +
      +    /**
      +     * Tests whether a specific security package is supported by any of the underlying providers.
      +     *
      +     * @param securityPackage
      +     *            Security package.
      +     *
      +     * @return True if the security package is supported, false otherwise.
      +     */
      +    public boolean isSecurityPackageSupported(final String securityPackage) {
      +<span class="fc bfc" id="L118" title="All 2 branches covered.">        return this.get(securityPackage) != null;</span>
      +    }
      +
      +    /**
      +     * Gets the.
      +     *
      +     * @param securityPackage
      +     *            the security package
      +     *
      +     * @return the security filter provider
      +     */
      +    private SecurityFilterProvider get(final String securityPackage) {
      +<span class="fc bfc" id="L130" title="All 2 branches covered.">        for (final SecurityFilterProvider provider : this.providers) {</span>
      +<span class="fc bfc" id="L131" title="All 2 branches covered.">            if (provider.isSecurityPackageSupported(securityPackage)) {</span>
      +<span class="fc" id="L132">                return provider;</span>
      +            }
      +<span class="fc" id="L134">        }</span>
      +<span class="fc" id="L135">        return null;</span>
      +    }
      +
      +    /**
      +     * Filter.
      +     *
      +     * @param request
      +     *            Http Request
      +     * @param response
      +     *            Http Response
      +     *
      +     * @return Windows Identity or NULL.
      +     *
      +     * @throws IOException
      +     *             on doFilter.
      +     */
      +    public IWindowsIdentity doFilter(final HttpServletRequest request, final HttpServletResponse response)
      +            throws IOException {
      +<span class="nc" id="L153">        final AuthorizationHeader authorizationHeader = new AuthorizationHeader(request);</span>
      +<span class="nc" id="L154">        final SecurityFilterProvider provider = this.get(authorizationHeader.getSecurityPackage());</span>
      +<span class="nc bnc" id="L155" title="All 2 branches missed.">        if (provider == null) {</span>
      +<span class="nc" id="L156">            throw new RuntimeException(&quot;Unsupported security package: &quot; + authorizationHeader.getSecurityPackage());</span>
      +        }
      +        try {
      +<span class="nc" id="L159">            return provider.doFilter(request, response);</span>
      +<span class="nc" id="L160">        } catch (final Win32Exception e) {</span>
      +<span class="nc" id="L161">            throw new IOException(e);</span>
      +        }
      +    }
      +
      +    /**
      +     * Returns true if authentication still needs to happen despite an existing principal.
      +     *
      +     * @param request
      +     *            Http Request
      +     *
      +     * @return True if authentication is required.
      +     */
      +    public boolean isPrincipalException(final HttpServletRequest request) {
      +<span class="nc bnc" id="L174" title="All 2 branches missed.">        for (final SecurityFilterProvider provider : this.providers) {</span>
      +<span class="nc bnc" id="L175" title="All 2 branches missed.">            if (provider.isPrincipalException(request)) {</span>
      +<span class="nc" id="L176">                return true;</span>
      +            }
      +<span class="nc" id="L178">        }</span>
      +<span class="nc" id="L179">        return false;</span>
      +    }
      +
      +    /**
      +     * Send authorization headers.
      +     *
      +     * @param response
      +     *            Http Response
      +     */
      +    public void sendUnauthorized(final HttpServletResponse response) {
      +<span class="nc bnc" id="L189" title="All 2 branches missed.">        for (final SecurityFilterProvider provider : this.providers) {</span>
      +<span class="nc" id="L190">            provider.sendUnauthorized(response);</span>
      +<span class="nc" id="L191">        }</span>
      +<span class="nc" id="L192">    }</span>
      +
      +    /**
      +     * Number of providers.
      +     *
      +     * @return Number of providers.
      +     */
      +    public int size() {
      +<span class="fc" id="L200">        return this.providers.size();</span>
      +    }
      +
      +    /**
      +     * Get a security provider by class name.
      +     *
      +     * @param name
      +     *            Class name.
      +     *
      +     * @return A security provider instance.
      +     *
      +     * @throws ClassNotFoundException
      +     *             when class not found.
      +     */
      +    public SecurityFilterProvider getByClassName(final String name) throws ClassNotFoundException {
      +<span class="fc bfc" id="L215" title="All 2 branches covered.">        for (final SecurityFilterProvider provider : this.providers) {</span>
      +<span class="fc bfc" id="L216" title="All 2 branches covered.">            if (provider.getClass().getName().equals(name)) {</span>
      +<span class="fc" id="L217">                return provider;</span>
      +            }
      +<span class="fc" id="L219">        }</span>
      +<span class="fc" id="L220">        throw new ClassNotFoundException(name);</span>
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet.spi/index.html b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/index.html
      new file mode 100644
      index 0000000000..106a596b70
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/index.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.servlet.spi</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.servlet.spi</span></div><h1>waffle.servlet.spi</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">391 of 597</td><td class="ctr2">34%</td><td class="bar">34 of 50</td><td class="ctr2">32%</td><td class="ctr1">33</td><td class="ctr2">54</td><td class="ctr1">95</td><td class="ctr2">141</td><td class="ctr1">16</td><td class="ctr2">29</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="NegotiateSecurityFilterProvider.html" class="el_class">NegotiateSecurityFilterProvider</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="92" height="10" title="201" alt="201"/><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="45" alt="45"/></td><td class="ctr2" id="c2">18%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="100" height="10" title="20" alt="20"/><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">16%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g1">21</td><td class="ctr1" id="h0">52</td><td class="ctr2" id="i0">64</td><td class="ctr1" id="j0">6</td><td class="ctr2" id="k1">9</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a2"><a href="SecurityFilterProviderCollection.html" class="el_class">SecurityFilterProviderCollection</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="54" height="10" title="118" alt="118"/><img src="../jacoco-resources/greenbar.gif" width="65" height="10" title="144" alt="144"/></td><td class="ctr2" id="c0">54%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="50" height="10" title="10" alt="10"/><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">54%</td><td class="ctr1" id="f1">9</td><td class="ctr2" id="g0">22</td><td class="ctr1" id="h1">26</td><td class="ctr2" id="i1">54</td><td class="ctr1" id="j2">4</td><td class="ctr2" id="k0">11</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="BasicSecurityFilterProvider.html" class="el_class">BasicSecurityFilterProvider</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="72" alt="72"/><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="17" alt="17"/></td><td class="ctr2" id="c1">19%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">8</td><td class="ctr2" id="g2">11</td><td class="ctr1" id="h2">17</td><td class="ctr2" id="i2">23</td><td class="ctr1" id="j1">6</td><td class="ctr2" id="k2">9</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet.spi/index.source.html b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/index.source.html
      new file mode 100644
      index 0000000000..f709c78659
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet.spi/index.source.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.servlet.spi</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.servlet.spi</span></div><h1>waffle.servlet.spi</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">391 of 597</td><td class="ctr2">34%</td><td class="bar">34 of 50</td><td class="ctr2">32%</td><td class="ctr1">33</td><td class="ctr2">54</td><td class="ctr1">95</td><td class="ctr2">141</td><td class="ctr1">16</td><td class="ctr2">29</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="NegotiateSecurityFilterProvider.java.html" class="el_source">NegotiateSecurityFilterProvider.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="92" height="10" title="201" alt="201"/><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="45" alt="45"/></td><td class="ctr2" id="c2">18%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="100" height="10" title="20" alt="20"/><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">16%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g1">21</td><td class="ctr1" id="h0">52</td><td class="ctr2" id="i0">64</td><td class="ctr1" id="j0">6</td><td class="ctr2" id="k1">9</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a2"><a href="SecurityFilterProviderCollection.java.html" class="el_source">SecurityFilterProviderCollection.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="54" height="10" title="118" alt="118"/><img src="../jacoco-resources/greenbar.gif" width="65" height="10" title="144" alt="144"/></td><td class="ctr2" id="c0">54%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="50" height="10" title="10" alt="10"/><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">54%</td><td class="ctr1" id="f1">9</td><td class="ctr2" id="g0">22</td><td class="ctr1" id="h1">26</td><td class="ctr2" id="i1">54</td><td class="ctr1" id="j2">4</td><td class="ctr2" id="k0">11</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="BasicSecurityFilterProvider.java.html" class="el_source">BasicSecurityFilterProvider.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="72" alt="72"/><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="17" alt="17"/></td><td class="ctr2" id="c1">19%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">8</td><td class="ctr2" id="g2">11</td><td class="ctr1" id="h2">17</td><td class="ctr2" id="i2">23</td><td class="ctr1" id="j1">6</td><td class="ctr2" id="k2">9</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/AutoDisposableWindowsPrincipal.html b/waffle-jna-jakarta/jacoco/waffle.servlet/AutoDisposableWindowsPrincipal.html
      new file mode 100644
      index 0000000000..b4bca2c903
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/AutoDisposableWindowsPrincipal.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AutoDisposableWindowsPrincipal</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.servlet</a> &gt; <span class="el_class">AutoDisposableWindowsPrincipal</span></div><h1>AutoDisposableWindowsPrincipal</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">18 of 18</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a3"><a href="AutoDisposableWindowsPrincipal.java.html#L72" class="el_method">valueUnbound(HttpSessionBindingEvent)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="7" alt="7"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="AutoDisposableWindowsPrincipal.java.html#L62" class="el_method">AutoDisposableWindowsPrincipal(IWindowsIdentity, PrincipalFormat, PrincipalFormat)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="102" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="AutoDisposableWindowsPrincipal.java.html#L47" class="el_method">AutoDisposableWindowsPrincipal(IWindowsIdentity)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="AutoDisposableWindowsPrincipal.java.html#L68" class="el_method">valueBound(HttpSessionBindingEvent)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="1" alt="1"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/AutoDisposableWindowsPrincipal.java.html b/waffle-jna-jakarta/jacoco/waffle.servlet/AutoDisposableWindowsPrincipal.java.html
      new file mode 100644
      index 0000000000..43572a13d5
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/AutoDisposableWindowsPrincipal.java.html
      @@ -0,0 +1,78 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AutoDisposableWindowsPrincipal.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.servlet</a> &gt; <span class="el_source">AutoDisposableWindowsPrincipal.java</span></div><h1>AutoDisposableWindowsPrincipal.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2020 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.servlet;
      +
      +import jakarta.servlet.http.HttpSessionBindingEvent;
      +import jakarta.servlet.http.HttpSessionBindingListener;
      +
      +import waffle.windows.auth.IWindowsIdentity;
      +import waffle.windows.auth.PrincipalFormat;
      +
      +/**
      + * The Class AutoDisposableWindowsPrincipal.
      + */
      +public class AutoDisposableWindowsPrincipal extends WindowsPrincipal implements HttpSessionBindingListener {
      +
      +    /** The Constant serialVersionUID. */
      +    private static final long serialVersionUID = 1L;
      +
      +    /**
      +     * Instantiates a new auto disposable windows principal.
      +     *
      +     * @param windowsIdentity
      +     *            the windows identity
      +     */
      +    public AutoDisposableWindowsPrincipal(final IWindowsIdentity windowsIdentity) {
      +<span class="nc" id="L47">        super(windowsIdentity);</span>
      +<span class="nc" id="L48">    }</span>
      +
      +    /**
      +     * Instantiates a new auto disposable windows principal.
      +     *
      +     * @param windowsIdentity
      +     *            the windows identity
      +     * @param principalFormat
      +     *            the principal format
      +     * @param roleFormat
      +     *            the role format
      +     */
      +    public AutoDisposableWindowsPrincipal(final IWindowsIdentity windowsIdentity, final PrincipalFormat principalFormat,
      +            final PrincipalFormat roleFormat) {
      +<span class="nc" id="L62">        super(windowsIdentity, principalFormat, roleFormat);</span>
      +<span class="nc" id="L63">    }</span>
      +
      +    @Override
      +    public void valueBound(final HttpSessionBindingEvent evt) {
      +        // Do nothing
      +<span class="nc" id="L68">    }</span>
      +
      +    @Override
      +    public void valueUnbound(final HttpSessionBindingEvent evt) {
      +<span class="nc bnc" id="L72" title="All 2 branches missed.">        if (this.getIdentity() != null) {</span>
      +<span class="nc" id="L73">            this.getIdentity().dispose();</span>
      +        }
      +<span class="nc" id="L75">    }</span>
      +
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/CorsAwareNegotiateSecurityFilter.html b/waffle-jna-jakarta/jacoco/waffle.servlet/CorsAwareNegotiateSecurityFilter.html
      new file mode 100644
      index 0000000000..c4d295e934
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/CorsAwareNegotiateSecurityFilter.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CorsAwareNegotiateSecurityFilter</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.servlet</a> &gt; <span class="el_class">CorsAwareNegotiateSecurityFilter</span></div><h1>CorsAwareNegotiateSecurityFilter</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">38 of 71</td><td class="ctr2">46%</td><td class="bar">3 of 4</td><td class="ctr2">25%</td><td class="ctr1">4</td><td class="ctr2">7</td><td class="ctr1">16</td><td class="ctr2">27</td><td class="ctr1">2</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a2"><a href="CorsAwareNegotiateSecurityFilter.java.html#L68" class="el_method">doFilter(ServletRequest, ServletResponse, FilterChain)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="58" height="10" title="22" alt="22"/><img src="../jacoco-resources/greenbar.gif" width="61" height="10" title="23" alt="23"/></td><td class="ctr2" id="c2">51%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">25%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">9</td><td class="ctr2" id="i0">16</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="CorsAwareNegotiateSecurityFilter.java.html#L59" class="el_method">init(FilterConfig)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="10" alt="10"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">4</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="CorsAwareNegotiateSecurityFilter.java.html#L94" class="el_method">destroy()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="CorsAwareNegotiateSecurityFilter.java.html#L53" class="el_method">CorsAwareNegotiateSecurityFilter()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="16" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="CorsAwareNegotiateSecurityFilter.java.html#L48" class="el_method">static {...}</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/CorsAwareNegotiateSecurityFilter.java.html b/waffle-jna-jakarta/jacoco/waffle.servlet/CorsAwareNegotiateSecurityFilter.java.html
      new file mode 100644
      index 0000000000..5c20bcfdde
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/CorsAwareNegotiateSecurityFilter.java.html
      @@ -0,0 +1,99 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CorsAwareNegotiateSecurityFilter.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.servlet</a> &gt; <span class="el_source">CorsAwareNegotiateSecurityFilter.java</span></div><h1>CorsAwareNegotiateSecurityFilter.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2020 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.servlet;
      +
      +import jakarta.servlet.Filter;
      +import jakarta.servlet.FilterChain;
      +import jakarta.servlet.FilterConfig;
      +import jakarta.servlet.ServletException;
      +import jakarta.servlet.ServletRequest;
      +import jakarta.servlet.ServletResponse;
      +import jakarta.servlet.http.HttpServletRequest;
      +
      +import java.io.IOException;
      +
      +import org.slf4j.Logger;
      +import org.slf4j.LoggerFactory;
      +
      +import waffle.util.AuthorizationHeader;
      +import waffle.util.CorsPreFlightCheck;
      +
      +/**
      + * The Class CorsAwareNegotiateSecurityFilter.
      + */
      +public class CorsAwareNegotiateSecurityFilter extends NegotiateSecurityFilter implements Filter {
      +
      +    /** The Constant LOGGER. */
      +<span class="fc" id="L48">    private static final Logger LOGGER = LoggerFactory.getLogger(CorsAwareNegotiateSecurityFilter.class);</span>
      +
      +    /**
      +     * Instantiates a new negotiate security filter.
      +     */
      +<span class="fc" id="L53">    public CorsAwareNegotiateSecurityFilter() {</span>
      +<span class="fc" id="L54">        CorsAwareNegotiateSecurityFilter.LOGGER.info(&quot;[waffle.servlet.CorsAwareNegotiateSecurityFilter] loaded&quot;);</span>
      +<span class="fc" id="L55">    }</span>
      +
      +    @Override
      +    public void init(final FilterConfig filterConfig) throws ServletException {
      +<span class="nc" id="L59">        CorsAwareNegotiateSecurityFilter.LOGGER.info(&quot;[waffle.servlet.CorsAwareNegotiateSecurityFilter] Starting&quot;);</span>
      +<span class="nc" id="L60">        super.init(filterConfig);</span>
      +<span class="nc" id="L61">        CorsAwareNegotiateSecurityFilter.LOGGER.info(&quot;[waffle.servlet.CorsAwareNegotiateSecurityFilter] Started&quot;);</span>
      +<span class="nc" id="L62">    }</span>
      +
      +    @Override
      +    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
      +            throws IOException, ServletException {
      +
      +<span class="fc" id="L68">        CorsAwareNegotiateSecurityFilter.LOGGER.info(&quot;[waffle.servlet.CorsAwareNegotiateSecurityFilter] Filtering&quot;);</span>
      +
      +<span class="fc" id="L70">        final HttpServletRequest httpServletRequest = (HttpServletRequest) request;</span>
      +<span class="fc" id="L71">        final AuthorizationHeader authorizationHeader = new AuthorizationHeader(httpServletRequest);</span>
      +
      +<span class="pc bpc" id="L73" title="1 of 2 branches missed.">        if (CorsPreFlightCheck.isPreflight(httpServletRequest)) {</span>
      +<span class="fc" id="L74">            CorsAwareNegotiateSecurityFilter.LOGGER.info(</span>
      +                    &quot;[waffle.servlet.CorsAwareNegotiateSecurityFilter] Request is CORS preflight; continue filter chain&quot;);
      +<span class="fc" id="L76">            chain.doFilter(request, response);</span>
      +<span class="nc bnc" id="L77" title="All 2 branches missed.">        } else if (authorizationHeader.isBearerAuthorizationHeader()) {</span>
      +<span class="nc" id="L78">            CorsAwareNegotiateSecurityFilter.LOGGER</span>
      +<span class="nc" id="L79">                    .info(&quot;[waffle.servlet.CorsAwareNegotiateSecurityFilter] Request is Bearer, continue filter chain&quot;);</span>
      +<span class="nc" id="L80">            chain.doFilter(request, response);</span>
      +        } else {
      +<span class="nc" id="L82">            CorsAwareNegotiateSecurityFilter.LOGGER</span>
      +<span class="nc" id="L83">                    .info(&quot;[waffle.servlet.CorsAwareNegotiateSecurityFilter] Request is Not CORS preflight&quot;);</span>
      +
      +<span class="nc" id="L85">            super.doFilter(request, response, chain);</span>
      +
      +<span class="nc" id="L87">            CorsAwareNegotiateSecurityFilter.LOGGER</span>
      +<span class="nc" id="L88">                    .info(&quot;[waffle.servlet.CorsAwareNegotiateSecurityFilter] Authentication Completed&quot;);</span>
      +        }
      +<span class="fc" id="L90">    }</span>
      +
      +    @Override
      +    public void destroy() {
      +<span class="nc" id="L94">        super.destroy();</span>
      +<span class="nc" id="L95">        CorsAwareNegotiateSecurityFilter.LOGGER.info(&quot;[waffle.servlet.CorsAwareNegotiateSecurityFilter] unloaded&quot;);</span>
      +<span class="nc" id="L96">    }</span>
      +
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/NegotiateRequestWrapper.html b/waffle-jna-jakarta/jacoco/waffle.servlet/NegotiateRequestWrapper.html
      new file mode 100644
      index 0000000000..6208fa82dc
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/NegotiateRequestWrapper.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NegotiateRequestWrapper</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.servlet</a> &gt; <span class="el_class">NegotiateRequestWrapper</span></div><h1>NegotiateRequestWrapper</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">21 of 21</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a4"><a href="NegotiateRequestWrapper.java.html#L48" class="el_method">NegotiateRequestWrapper(HttpServletRequest, WindowsPrincipal)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="7" alt="7"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">3</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="NegotiateRequestWrapper.java.html#L92" class="el_method">isUserInRole(String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="85" height="10" title="5" alt="5"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="NegotiateRequestWrapper.java.html#L79" class="el_method">getRemoteUser()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="NegotiateRequestWrapper.java.html#L59" class="el_method">getUserPrincipal()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="NegotiateRequestWrapper.java.html#L69" class="el_method">getAuthType()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="2" alt="2"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/NegotiateRequestWrapper.java.html b/waffle-jna-jakarta/jacoco/waffle.servlet/NegotiateRequestWrapper.java.html
      new file mode 100644
      index 0000000000..53b51efe2d
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/NegotiateRequestWrapper.java.html
      @@ -0,0 +1,95 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NegotiateRequestWrapper.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.servlet</a> &gt; <span class="el_source">NegotiateRequestWrapper.java</span></div><h1>NegotiateRequestWrapper.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.servlet;
      +
      +import jakarta.servlet.http.HttpServletRequest;
      +import jakarta.servlet.http.HttpServletRequestWrapper;
      +
      +import java.security.Principal;
      +
      +/**
      + * Negotiate Request wrapper.
      + */
      +public class NegotiateRequestWrapper extends HttpServletRequestWrapper {
      +
      +    /** The principal. */
      +    private final WindowsPrincipal principal;
      +
      +    /**
      +     * Instantiates a new negotiate request wrapper.
      +     *
      +     * @param newRequest
      +     *            the new request
      +     * @param newPrincipal
      +     *            the new principal
      +     */
      +    public NegotiateRequestWrapper(final HttpServletRequest newRequest, final WindowsPrincipal newPrincipal) {
      +<span class="nc" id="L48">        super(newRequest);</span>
      +<span class="nc" id="L49">        this.principal = newPrincipal;</span>
      +<span class="nc" id="L50">    }</span>
      +
      +    /**
      +     * User principal.
      +     *
      +     * @return the user principal
      +     */
      +    @Override
      +    public Principal getUserPrincipal() {
      +<span class="nc" id="L59">        return this.principal;</span>
      +    }
      +
      +    /**
      +     * Authentication type.
      +     *
      +     * @return the auth type
      +     */
      +    @Override
      +    public String getAuthType() {
      +<span class="nc" id="L69">        return &quot;NEGOTIATE&quot;;</span>
      +    }
      +
      +    /**
      +     * Remote username.
      +     *
      +     * @return the remote user
      +     */
      +    @Override
      +    public String getRemoteUser() {
      +<span class="nc" id="L79">        return this.principal.getName();</span>
      +    }
      +
      +    /**
      +     * Returns true if the user is in a given role.
      +     *
      +     * @param role
      +     *            the role
      +     *
      +     * @return true, if is user in role
      +     */
      +    @Override
      +    public boolean isUserInRole(final String role) {
      +<span class="nc" id="L92">        return this.principal.hasRole(role);</span>
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/NegotiateSecurityFilter.html b/waffle-jna-jakarta/jacoco/waffle.servlet/NegotiateSecurityFilter.html
      new file mode 100644
      index 0000000000..c7d1fb365e
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/NegotiateSecurityFilter.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NegotiateSecurityFilter</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.servlet</a> &gt; <span class="el_class">NegotiateSecurityFilter</span></div><h1>NegotiateSecurityFilter</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">539 of 776</td><td class="ctr2">30%</td><td class="bar">69 of 93</td><td class="ctr2">25%</td><td class="ctr1">54</td><td class="ctr2">69</td><td class="ctr1">143</td><td class="ctr2">208</td><td class="ctr1">11</td><td class="ctr2">18</td></tr></tfoot><tbody><tr><td id="a1"><a href="NegotiateSecurityFilter.java.html#L120" class="el_method">doFilter(ServletRequest, ServletResponse, FilterChain)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="95" height="10" title="234" alt="234"/><img src="../jacoco-resources/greenbar.gif" width="24" height="10" title="60" alt="60"/></td><td class="ctr2" id="c6">20%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="100" height="10" title="35" alt="35"/><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="7" alt="7"/></td><td class="ctr2" id="e2">16%</td><td class="ctr1" id="f0">21</td><td class="ctr2" id="g0">22</td><td class="ctr1" id="h0">61</td><td class="ctr2" id="i0">74</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="NegotiateSecurityFilter.java.html#L324" class="el_method">init(FilterConfig)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="56" height="10" title="139" alt="139"/><img src="../jacoco-resources/greenbar.gif" width="55" height="10" title="135" alt="135"/></td><td class="ctr2" id="c5">49%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="11" alt="11"/><img src="../jacoco-resources/greenbar.gif" width="45" height="10" title="16" alt="16"/></td><td class="ctr2" id="e0">59%</td><td class="ctr1" id="f2">10</td><td class="ctr2" id="g1">19</td><td class="ctr1" id="h1">29</td><td class="ctr2" id="i1">68</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="NegotiateSecurityFilter.java.html#L270" class="el_method">doFilterPrincipal(HttpServletRequest, HttpServletResponse, FilterChain)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="90" alt="90"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="57" height="10" title="20" alt="20"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f1">11</td><td class="ctr2" id="g2">11</td><td class="ctr1" id="h2">27</td><td class="ctr2" id="i2">27</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a12"><a href="NegotiateSecurityFilter.java.html#L481" class="el_method">sendUnauthorized(HttpServletResponse, boolean)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="28" alt="28"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h3">10</td><td class="ctr2" id="i3">10</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a15"><a href="NegotiateSecurityFilter.java.html#L438" class="el_method">setPrincipalFormat(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="12" alt="12"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h4">3</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a16"><a href="NegotiateSecurityFilter.java.html#L458" class="el_method">setRoleFormat(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="12" alt="12"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h5">3</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="NegotiateSecurityFilter.java.html#L113" class="el_method">destroy()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="4" alt="4"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h6">2</td><td class="ctr2" id="i8">2</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a13"><a href="NegotiateSecurityFilter.java.html#L510" class="el_method">setAuth(IWindowsAuthProvider)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="4" alt="4"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h7">2</td><td class="ctr2" id="i9">2</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a14"><a href="NegotiateSecurityFilter.java.html#L529" class="el_method">setImpersonate(boolean)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="4" alt="4"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h8">2</td><td class="ctr2" id="i10">2</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a4"><a href="NegotiateSecurityFilter.java.html#L448" class="el_method">getPrincipalFormat()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a6"><a href="NegotiateSecurityFilter.java.html#L468" class="el_method">getRoleFormat()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a3"><a href="NegotiateSecurityFilter.java.html#L500" class="el_method">getAuth()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a5"><a href="NegotiateSecurityFilter.java.html#L547" class="el_method">getProviders()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a11"><a href="NegotiateSecurityFilter.java.html#L75" class="el_method">NegotiateSecurityFilter()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/greenbar.gif" width="6" height="10" title="15" alt="15"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i4">6</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a10"><a href="NegotiateSecurityFilter.java.html#L551" class="el_method">isWindows()</a></td><td class="bar" id="b14"><img src="../jacoco-resources/greenbar.gif" width="5" height="10" title="13" alt="13"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="2" height="10" title="1" alt="1"/></td><td class="ctr2" id="e1">50%</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h14">0</td><td class="ctr2" id="i7">3</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a17"><a href="NegotiateSecurityFilter.java.html#L66" class="el_method">static {...}</a></td><td class="bar" id="b15"><img src="../jacoco-resources/greenbar.gif" width="3" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i11">2</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a8"><a href="NegotiateSecurityFilter.java.html#L519" class="el_method">isAllowGuestLogin()</a></td><td class="bar" id="b16"><img src="../jacoco-resources/greenbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">0</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">0</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">0</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a9"><a href="NegotiateSecurityFilter.java.html#L538" class="el_method">isImpersonate()</a></td><td class="bar" id="b17"><img src="../jacoco-resources/greenbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">0</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">0</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j17">0</td><td class="ctr2" id="k17">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/NegotiateSecurityFilter.java.html b/waffle-jna-jakarta/jacoco/waffle.servlet/NegotiateSecurityFilter.java.html
      new file mode 100644
      index 0000000000..bf163f475d
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/NegotiateSecurityFilter.java.html
      @@ -0,0 +1,558 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NegotiateSecurityFilter.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.servlet</a> &gt; <span class="el_source">NegotiateSecurityFilter.java</span></div><h1>NegotiateSecurityFilter.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.servlet;
      +
      +import jakarta.servlet.Filter;
      +import jakarta.servlet.FilterChain;
      +import jakarta.servlet.FilterConfig;
      +import jakarta.servlet.ServletException;
      +import jakarta.servlet.ServletRequest;
      +import jakarta.servlet.ServletResponse;
      +import jakarta.servlet.http.HttpServletRequest;
      +import jakarta.servlet.http.HttpServletResponse;
      +import jakarta.servlet.http.HttpSession;
      +
      +import java.io.IOException;
      +import java.lang.reflect.InvocationTargetException;
      +import java.security.Principal;
      +import java.util.Collections;
      +import java.util.HashMap;
      +import java.util.List;
      +import java.util.Locale;
      +import java.util.Map;
      +
      +import javax.security.auth.Subject;
      +
      +import org.slf4j.Logger;
      +import org.slf4j.LoggerFactory;
      +
      +import waffle.servlet.spi.SecurityFilterProvider;
      +import waffle.servlet.spi.SecurityFilterProviderCollection;
      +import waffle.util.AuthorizationHeader;
      +import waffle.util.CorsPreFlightCheck;
      +import waffle.windows.auth.IWindowsAuthProvider;
      +import waffle.windows.auth.IWindowsIdentity;
      +import waffle.windows.auth.IWindowsImpersonationContext;
      +import waffle.windows.auth.PrincipalFormat;
      +import waffle.windows.auth.impl.WindowsAuthProviderImpl;
      +
      +/**
      + * A Negotiate (NTLM/Kerberos) Security Filter.
      + */
      +public class NegotiateSecurityFilter implements Filter {
      +
      +    /** The Constant LOGGER. */
      +<span class="fc" id="L66">    private static final Logger LOGGER = LoggerFactory.getLogger(NegotiateSecurityFilter.class);</span>
      +
      +    /** The Constant PRINCIPALSESSIONKEY. */
      +<span class="fc" id="L69">    private static final String PRINCIPALSESSIONKEY = NegotiateSecurityFilter.class.getName() + &quot;.PRINCIPAL&quot;;</span>
      +
      +    /** The windows flag. */
      +    private static Boolean windows;
      +
      +    /** The principal format. */
      +<span class="fc" id="L75">    private PrincipalFormat principalFormat = PrincipalFormat.FQN;</span>
      +
      +    /** The role format. */
      +<span class="fc" id="L78">    private PrincipalFormat roleFormat = PrincipalFormat.FQN;</span>
      +
      +    /** The providers. */
      +    private SecurityFilterProviderCollection providers;
      +
      +    /** The auth. */
      +    private IWindowsAuthProvider auth;
      +
      +    /** The exclusion filter. */
      +    private String[] excludePatterns;
      +
      +    /** The allow guest login. */
      +<span class="fc" id="L90">    private boolean allowGuestLogin = true;</span>
      +
      +    /** The impersonate. */
      +    private boolean impersonate;
      +
      +    /** The exclusion bearer authorization. */
      +    private boolean excludeBearerAuthorization;
      +
      +    /** The exclusions cors pre flight. */
      +    private boolean excludeCorsPreflight;
      +
      +    /** The disable SSO. */
      +    private boolean disableSSO;
      +
      +    /**
      +     * Instantiates a new negotiate security filter.
      +     */
      +<span class="fc" id="L107">    public NegotiateSecurityFilter() {</span>
      +<span class="fc" id="L108">        NegotiateSecurityFilter.LOGGER.debug(&quot;[waffle.servlet.NegotiateSecurityFilter] loaded&quot;);</span>
      +<span class="fc" id="L109">    }</span>
      +
      +    @Override
      +    public void destroy() {
      +<span class="nc" id="L113">        NegotiateSecurityFilter.LOGGER.info(&quot;[waffle.servlet.NegotiateSecurityFilter] stopped&quot;);</span>
      +<span class="nc" id="L114">    }</span>
      +
      +    @Override
      +    public void doFilter(final ServletRequest sreq, final ServletResponse sres, final FilterChain chain)
      +            throws IOException, ServletException {
      +
      +<span class="fc" id="L120">        final HttpServletRequest request = (HttpServletRequest) sreq;</span>
      +<span class="fc" id="L121">        final HttpServletResponse response = (HttpServletResponse) sres;</span>
      +
      +<span class="fc" id="L123">        NegotiateSecurityFilter.LOGGER.debug(&quot;{} {}, contentlength: {}&quot;, request.getMethod(), request.getRequestURI(),</span>
      +<span class="fc" id="L124">                Integer.valueOf(request.getContentLength()));</span>
      +
      +        // If we are not in a windows environment, resume filter chain
      +<span class="pc bpc" id="L127" title="1 of 2 branches missed.">        if (!NegotiateSecurityFilter.isWindows()) {</span>
      +<span class="nc" id="L128">            NegotiateSecurityFilter.LOGGER.debug(&quot;Running in a non windows environment, SSO skipped&quot;);</span>
      +<span class="nc" id="L129">            chain.doFilter(request, response);</span>
      +<span class="nc" id="L130">            return;</span>
      +        }
      +
      +        // If sso is disabled, resume filter chain
      +<span class="pc bpc" id="L134" title="1 of 2 branches missed.">        if (this.disableSSO) {</span>
      +<span class="nc" id="L135">            NegotiateSecurityFilter.LOGGER.debug(&quot;SSO is disabled, resuming filter chain&quot;);</span>
      +<span class="nc" id="L136">            chain.doFilter(request, response);</span>
      +<span class="nc" id="L137">            return;</span>
      +        }
      +
      +        // If excluded URL, resume the filter chain
      +<span class="pc bpc" id="L141" title="3 of 4 branches missed.">        if (request.getRequestURL() != null &amp;&amp; this.excludePatterns != null) {</span>
      +<span class="nc" id="L142">            final String url = request.getRequestURL().toString();</span>
      +<span class="nc bnc" id="L143" title="All 2 branches missed.">            for (final String pattern : this.excludePatterns) {</span>
      +<span class="nc bnc" id="L144" title="All 2 branches missed.">                if (url.matches(pattern)) {</span>
      +<span class="nc" id="L145">                    NegotiateSecurityFilter.LOGGER.info(&quot;Pattern :{} excluded URL:{}&quot;, url, pattern);</span>
      +<span class="nc" id="L146">                    chain.doFilter(sreq, sres);</span>
      +<span class="nc" id="L147">                    return;</span>
      +                }
      +            }
      +        }
      +
      +        // If exclude cores pre-flight and is pre flight, resume the filter chain
      +<span class="pc bpc" id="L153" title="2 of 4 branches missed.">        if (this.excludeCorsPreflight &amp;&amp; CorsPreFlightCheck.isPreflight(request)) {</span>
      +<span class="nc" id="L154">            NegotiateSecurityFilter.LOGGER.debug(&quot;[waffle.servlet.NegotiateSecurityFilter] CORS preflight&quot;);</span>
      +<span class="nc" id="L155">            chain.doFilter(sreq, sres);</span>
      +<span class="nc" id="L156">            return;</span>
      +        }
      +
      +<span class="fc" id="L159">        final AuthorizationHeader authorizationHeader = new AuthorizationHeader(request);</span>
      +
      +        // If exclude bearer authorization and is bearer authorization, result the filter chain
      +<span class="pc bpc" id="L162" title="2 of 4 branches missed.">        if (this.excludeBearerAuthorization &amp;&amp; authorizationHeader.isBearerAuthorizationHeader()) {</span>
      +<span class="fc" id="L163">            NegotiateSecurityFilter.LOGGER.debug(&quot;[waffle.servlet.NegotiateSecurityFilter] Authorization: Bearer&quot;);</span>
      +<span class="fc" id="L164">            chain.doFilter(sreq, sres);</span>
      +<span class="fc" id="L165">            return;</span>
      +        }
      +
      +<span class="nc bnc" id="L168" title="All 2 branches missed.">        if (this.doFilterPrincipal(request, response, chain)) {</span>
      +            // previously authenticated user
      +<span class="nc" id="L170">            return;</span>
      +        }
      +
      +        // authenticate user
      +<span class="nc bnc" id="L174" title="All 2 branches missed.">        if (!authorizationHeader.isNull()) {</span>
      +
      +            // log the user in using the token
      +            IWindowsIdentity windowsIdentity;
      +            try {
      +<span class="nc" id="L179">                windowsIdentity = this.providers.doFilter(request, response);</span>
      +<span class="nc bnc" id="L180" title="All 2 branches missed.">                if (windowsIdentity == null) {</span>
      +<span class="nc" id="L181">                    return;</span>
      +                }
      +<span class="nc" id="L183">            } catch (final IOException e) {</span>
      +<span class="nc" id="L184">                NegotiateSecurityFilter.LOGGER.warn(&quot;error logging in user: {}&quot;, e.getMessage());</span>
      +<span class="nc" id="L185">                NegotiateSecurityFilter.LOGGER.trace(&quot;&quot;, e);</span>
      +<span class="nc" id="L186">                this.sendUnauthorized(response, true);</span>
      +<span class="nc" id="L187">                return;</span>
      +<span class="nc" id="L188">            }</span>
      +
      +<span class="nc" id="L190">            IWindowsImpersonationContext ctx = null;</span>
      +            try {
      +<span class="nc bnc" id="L192" title="All 4 branches missed.">                if (!this.allowGuestLogin &amp;&amp; windowsIdentity.isGuest()) {</span>
      +<span class="nc" id="L193">                    NegotiateSecurityFilter.LOGGER.warn(&quot;guest login disabled: {}&quot;, windowsIdentity.getFqn());</span>
      +<span class="nc" id="L194">                    this.sendUnauthorized(response, true);</span>
      +<span class="nc" id="L195">                    return;</span>
      +                }
      +
      +<span class="nc" id="L198">                NegotiateSecurityFilter.LOGGER.debug(&quot;logged in user: {} ({})&quot;, windowsIdentity.getFqn(),</span>
      +<span class="nc" id="L199">                        windowsIdentity.getSidString());</span>
      +
      +<span class="nc" id="L201">                final HttpSession session = request.getSession(true);</span>
      +<span class="nc bnc" id="L202" title="All 2 branches missed.">                if (session == null) {</span>
      +<span class="nc" id="L203">                    throw new ServletException(&quot;Expected HttpSession&quot;);</span>
      +                }
      +
      +<span class="nc" id="L206">                Subject subject = (Subject) session.getAttribute(&quot;javax.security.auth.subject&quot;);</span>
      +<span class="nc bnc" id="L207" title="All 2 branches missed.">                if (subject == null) {</span>
      +<span class="nc" id="L208">                    subject = new Subject();</span>
      +                }
      +
      +                WindowsPrincipal windowsPrincipal;
      +<span class="nc bnc" id="L212" title="All 2 branches missed.">                if (this.impersonate) {</span>
      +<span class="nc" id="L213">                    windowsPrincipal = new AutoDisposableWindowsPrincipal(windowsIdentity, this.principalFormat,</span>
      +                            this.roleFormat);
      +                } else {
      +<span class="nc" id="L216">                    windowsPrincipal = new WindowsPrincipal(windowsIdentity, this.principalFormat, this.roleFormat);</span>
      +                }
      +
      +<span class="nc" id="L219">                NegotiateSecurityFilter.LOGGER.debug(&quot;roles: {}&quot;, windowsPrincipal.getRolesString());</span>
      +<span class="nc" id="L220">                subject.getPrincipals().add(windowsPrincipal);</span>
      +<span class="nc" id="L221">                request.getSession(false).setAttribute(&quot;javax.security.auth.subject&quot;, subject);</span>
      +
      +<span class="nc" id="L223">                NegotiateSecurityFilter.LOGGER.info(&quot;successfully logged in user: {}&quot;, windowsIdentity.getFqn());</span>
      +
      +<span class="nc" id="L225">                request.getSession(false).setAttribute(NegotiateSecurityFilter.PRINCIPALSESSIONKEY, windowsPrincipal);</span>
      +
      +<span class="nc" id="L227">                final NegotiateRequestWrapper requestWrapper = new NegotiateRequestWrapper(request, windowsPrincipal);</span>
      +
      +<span class="nc bnc" id="L229" title="All 2 branches missed.">                if (this.impersonate) {</span>
      +<span class="nc" id="L230">                    NegotiateSecurityFilter.LOGGER.debug(&quot;impersonating user&quot;);</span>
      +<span class="nc" id="L231">                    ctx = windowsIdentity.impersonate();</span>
      +                }
      +
      +<span class="nc" id="L234">                chain.doFilter(requestWrapper, response);</span>
      +            } finally {
      +<span class="nc bnc" id="L236" title="All 4 branches missed.">                if (this.impersonate &amp;&amp; ctx != null) {</span>
      +<span class="nc" id="L237">                    NegotiateSecurityFilter.LOGGER.debug(&quot;terminating impersonation&quot;);</span>
      +<span class="nc" id="L238">                    ctx.revertToSelf();</span>
      +                } else {
      +<span class="nc" id="L240">                    windowsIdentity.dispose();</span>
      +                }
      +            }
      +
      +<span class="nc" id="L244">            return;</span>
      +        }
      +
      +<span class="nc" id="L247">        NegotiateSecurityFilter.LOGGER.debug(&quot;authorization required&quot;);</span>
      +<span class="nc" id="L248">        this.sendUnauthorized(response, false);</span>
      +<span class="nc" id="L249">    }</span>
      +
      +    /**
      +     * Filter for a previously logged on user.
      +     *
      +     * @param request
      +     *            HTTP request.
      +     * @param response
      +     *            HTTP response.
      +     * @param chain
      +     *            Filter chain.
      +     *
      +     * @return True if a user already authenticated.
      +     *
      +     * @throws IOException
      +     *             Signals that an I/O exception has occurred.
      +     * @throws ServletException
      +     *             the servlet exception
      +     */
      +    private boolean doFilterPrincipal(final HttpServletRequest request, final HttpServletResponse response,
      +            final FilterChain chain) throws IOException, ServletException {
      +<span class="nc" id="L270">        Principal principal = request.getUserPrincipal();</span>
      +<span class="nc bnc" id="L271" title="All 2 branches missed.">        if (principal == null) {</span>
      +<span class="nc" id="L272">            final HttpSession session = request.getSession(false);</span>
      +<span class="nc bnc" id="L273" title="All 2 branches missed.">            if (session != null) {</span>
      +<span class="nc" id="L274">                principal = (Principal) session.getAttribute(NegotiateSecurityFilter.PRINCIPALSESSIONKEY);</span>
      +            }
      +        }
      +
      +<span class="nc bnc" id="L278" title="All 2 branches missed.">        if (principal == null) {</span>
      +            // no principal in this request
      +<span class="nc" id="L280">            return false;</span>
      +        }
      +
      +<span class="nc bnc" id="L283" title="All 2 branches missed.">        if (this.providers.isPrincipalException(request)) {</span>
      +            // the providers signal to authenticate despite an existing principal, eg. NTLM post
      +<span class="nc" id="L285">            return false;</span>
      +        }
      +
      +        // user already authenticated
      +<span class="nc bnc" id="L289" title="All 2 branches missed.">        if (principal instanceof WindowsPrincipal) {</span>
      +<span class="nc" id="L290">            NegotiateSecurityFilter.LOGGER.debug(&quot;previously authenticated Windows user: {}&quot;, principal.getName());</span>
      +<span class="nc" id="L291">            final WindowsPrincipal windowsPrincipal = (WindowsPrincipal) principal;</span>
      +
      +<span class="nc bnc" id="L293" title="All 4 branches missed.">            if (this.impersonate &amp;&amp; windowsPrincipal.getIdentity() == null) {</span>
      +                // This can happen when the session has been serialized then de-serialized
      +                // and because the IWindowsIdentity field is transient. In this case re-ask an
      +                // authentication to get a new identity.
      +<span class="nc" id="L297">                return false;</span>
      +            }
      +
      +<span class="nc" id="L300">            final NegotiateRequestWrapper requestWrapper = new NegotiateRequestWrapper(request, windowsPrincipal);</span>
      +
      +<span class="nc" id="L302">            IWindowsImpersonationContext ctx = null;</span>
      +<span class="nc bnc" id="L303" title="All 2 branches missed.">            if (this.impersonate) {</span>
      +<span class="nc" id="L304">                NegotiateSecurityFilter.LOGGER.debug(&quot;re-impersonating user&quot;);</span>
      +<span class="nc" id="L305">                ctx = windowsPrincipal.getIdentity().impersonate();</span>
      +            }
      +            try {
      +<span class="nc" id="L308">                chain.doFilter(requestWrapper, response);</span>
      +            } finally {
      +<span class="nc bnc" id="L310" title="All 4 branches missed.">                if (this.impersonate &amp;&amp; ctx != null) {</span>
      +<span class="nc" id="L311">                    NegotiateSecurityFilter.LOGGER.debug(&quot;terminating impersonation&quot;);</span>
      +<span class="nc" id="L312">                    ctx.revertToSelf();</span>
      +                }
      +            }
      +<span class="nc" id="L315">        } else {</span>
      +<span class="nc" id="L316">            NegotiateSecurityFilter.LOGGER.debug(&quot;previously authenticated user: {}&quot;, principal.getName());</span>
      +<span class="nc" id="L317">            chain.doFilter(request, response);</span>
      +        }
      +<span class="nc" id="L319">        return true;</span>
      +    }
      +
      +    @Override
      +    public void init(final FilterConfig filterConfig) throws ServletException {
      +<span class="fc" id="L324">        final Map&lt;String, String&gt; implParameters = new HashMap&lt;&gt;();</span>
      +
      +<span class="fc" id="L326">        NegotiateSecurityFilter.LOGGER.debug(&quot;[waffle.servlet.NegotiateSecurityFilter] starting&quot;);</span>
      +
      +<span class="fc" id="L328">        String authProvider = null;</span>
      +<span class="fc" id="L329">        String[] providerNames = null;</span>
      +<span class="pc bpc" id="L330" title="1 of 2 branches missed.">        if (filterConfig != null) {</span>
      +<span class="fc" id="L331">            final List&lt;String&gt; parameterNames = Collections.list(filterConfig.getInitParameterNames());</span>
      +<span class="fc" id="L332">            NegotiateSecurityFilter.LOGGER.debug(&quot;[waffle.servlet.NegotiateSecurityFilter] processing filterConfig&quot;);</span>
      +<span class="fc bfc" id="L333" title="All 2 branches covered.">            for (String parameterName : parameterNames) {</span>
      +<span class="fc" id="L334">                final String parameterValue = filterConfig.getInitParameter(parameterName);</span>
      +<span class="fc" id="L335">                NegotiateSecurityFilter.LOGGER.debug(&quot;Init Param: '{}={}'&quot;, parameterName, parameterValue);</span>
      +<span class="pc bpc" id="L336" title="3 of 11 branches missed.">                switch (parameterName) {</span>
      +                    case &quot;principalFormat&quot;:
      +<span class="fc" id="L338">                        this.principalFormat = PrincipalFormat.valueOf(parameterValue.toUpperCase(Locale.ENGLISH));</span>
      +<span class="fc" id="L339">                        break;</span>
      +                    case &quot;roleFormat&quot;:
      +<span class="fc" id="L341">                        this.roleFormat = PrincipalFormat.valueOf(parameterValue.toUpperCase(Locale.ENGLISH));</span>
      +<span class="fc" id="L342">                        break;</span>
      +                    case &quot;allowGuestLogin&quot;:
      +<span class="fc" id="L344">                        this.allowGuestLogin = Boolean.parseBoolean(parameterValue);</span>
      +<span class="fc" id="L345">                        break;</span>
      +                    case &quot;impersonate&quot;:
      +<span class="fc" id="L347">                        this.impersonate = Boolean.parseBoolean(parameterValue);</span>
      +<span class="fc" id="L348">                        break;</span>
      +                    case &quot;securityFilterProviders&quot;:
      +<span class="fc" id="L350">                        providerNames = parameterValue.split(&quot;\\s+&quot;, -1);</span>
      +<span class="fc" id="L351">                        break;</span>
      +                    case &quot;authProvider&quot;:
      +<span class="nc" id="L353">                        authProvider = parameterValue;</span>
      +<span class="nc" id="L354">                        break;</span>
      +                    case &quot;excludePatterns&quot;:
      +<span class="fc" id="L356">                        this.excludePatterns = parameterValue.split(&quot;\\s+&quot;, -1);</span>
      +<span class="fc" id="L357">                        break;</span>
      +                    case &quot;excludeCorsPreflight&quot;:
      +<span class="fc" id="L359">                        this.excludeCorsPreflight = Boolean.parseBoolean(parameterValue);</span>
      +<span class="fc" id="L360">                        break;</span>
      +                    case &quot;excludeBearerAuthorization&quot;:
      +<span class="fc" id="L362">                        this.excludeBearerAuthorization = Boolean.parseBoolean(parameterValue);</span>
      +<span class="fc" id="L363">                        break;</span>
      +                    case &quot;disableSSO&quot;:
      +<span class="nc" id="L365">                        this.disableSSO = Boolean.parseBoolean(parameterValue);</span>
      +<span class="nc" id="L366">                        break;</span>
      +                    default:
      +<span class="nc" id="L368">                        implParameters.put(parameterName, parameterValue);</span>
      +                        break;
      +                }
      +<span class="fc" id="L371">            }</span>
      +        }
      +
      +<span class="fc" id="L374">        NegotiateSecurityFilter.LOGGER.debug(&quot;[waffle.servlet.NegotiateSecurityFilter] authProvider&quot;);</span>
      +<span class="pc bpc" id="L375" title="1 of 2 branches missed.">        if (authProvider != null) {</span>
      +            try {
      +<span class="nc" id="L377">                this.auth = Class.forName(authProvider).asSubclass(IWindowsAuthProvider.class).getConstructor()</span>
      +<span class="nc" id="L378">                        .newInstance();</span>
      +<span class="nc" id="L379">            } catch (final ClassNotFoundException | IllegalArgumentException | SecurityException</span>
      +                    | InstantiationException | IllegalAccessException | InvocationTargetException
      +                    | NoSuchMethodException e) {
      +<span class="nc" id="L382">                throw new ServletException(e);</span>
      +<span class="nc" id="L383">            }</span>
      +        }
      +
      +<span class="pc bpc" id="L386" title="1 of 2 branches missed.">        if (this.auth == null) {</span>
      +<span class="fc" id="L387">            this.auth = new WindowsAuthProviderImpl();</span>
      +        }
      +
      +<span class="pc bpc" id="L390" title="1 of 2 branches missed.">        if (providerNames != null) {</span>
      +<span class="fc" id="L391">            this.providers = new SecurityFilterProviderCollection(providerNames, this.auth);</span>
      +        }
      +
      +        // create default providers if none specified
      +<span class="pc bpc" id="L395" title="1 of 2 branches missed.">        if (this.providers == null) {</span>
      +<span class="nc" id="L396">            NegotiateSecurityFilter.LOGGER.debug(&quot;initializing default security filter providers&quot;);</span>
      +<span class="nc" id="L397">            this.providers = new SecurityFilterProviderCollection(this.auth);</span>
      +        }
      +
      +        // apply provider implementation parameters
      +<span class="fc" id="L401">        NegotiateSecurityFilter.LOGGER.debug(&quot;[waffle.servlet.NegotiateSecurityFilter] load provider parameters&quot;);</span>
      +<span class="pc bpc" id="L402" title="1 of 2 branches missed.">        for (final Map.Entry&lt;String, String&gt; implParameter : implParameters.entrySet()) {</span>
      +<span class="nc" id="L403">            final String[] classAndParameter = implParameter.getKey().split(&quot;/&quot;, 2);</span>
      +<span class="nc bnc" id="L404" title="All 2 branches missed.">            if (classAndParameter.length == 2) {</span>
      +                try {
      +
      +<span class="nc" id="L407">                    NegotiateSecurityFilter.LOGGER.debug(&quot;setting {}, {}={}&quot;, classAndParameter[0],</span>
      +<span class="nc" id="L408">                            classAndParameter[1], implParameter.getValue());</span>
      +
      +<span class="nc" id="L410">                    final SecurityFilterProvider provider = this.providers.getByClassName(classAndParameter[0]);</span>
      +<span class="nc" id="L411">                    provider.initParameter(classAndParameter[1], implParameter.getValue());</span>
      +
      +<span class="nc" id="L413">                } catch (final ClassNotFoundException e) {</span>
      +<span class="nc" id="L414">                    NegotiateSecurityFilter.LOGGER.error(&quot;invalid class: {} in {}&quot;, classAndParameter[0],</span>
      +<span class="nc" id="L415">                            implParameter.getKey());</span>
      +<span class="nc" id="L416">                    throw new ServletException(e);</span>
      +<span class="nc" id="L417">                } catch (final Exception e) {</span>
      +<span class="nc" id="L418">                    NegotiateSecurityFilter.LOGGER.error(&quot;Error setting {} in {}&quot;, classAndParameter[0],</span>
      +                            classAndParameter[1]);
      +<span class="nc" id="L420">                    throw new ServletException(e);</span>
      +<span class="nc" id="L421">                }</span>
      +            } else {
      +<span class="nc" id="L423">                NegotiateSecurityFilter.LOGGER.error(&quot;Invalid parameter: {}&quot;, implParameter.getKey());</span>
      +<span class="nc" id="L424">                throw new ServletException(&quot;Invalid parameter: &quot; + implParameter.getKey());</span>
      +            }
      +<span class="nc" id="L426">        }</span>
      +
      +<span class="fc" id="L428">        NegotiateSecurityFilter.LOGGER.info(&quot;[waffle.servlet.NegotiateSecurityFilter] started&quot;);</span>
      +<span class="fc" id="L429">    }</span>
      +
      +    /**
      +     * Set the principal format.
      +     *
      +     * @param format
      +     *            Principal format.
      +     */
      +    public void setPrincipalFormat(final String format) {
      +<span class="nc" id="L438">        this.principalFormat = PrincipalFormat.valueOf(format.toUpperCase(Locale.ENGLISH));</span>
      +<span class="nc" id="L439">        NegotiateSecurityFilter.LOGGER.info(&quot;principal format: {}&quot;, this.principalFormat);</span>
      +<span class="nc" id="L440">    }</span>
      +
      +    /**
      +     * Principal format.
      +     *
      +     * @return Principal format.
      +     */
      +    public PrincipalFormat getPrincipalFormat() {
      +<span class="nc" id="L448">        return this.principalFormat;</span>
      +    }
      +
      +    /**
      +     * Set the principal format.
      +     *
      +     * @param format
      +     *            Role format.
      +     */
      +    public void setRoleFormat(final String format) {
      +<span class="nc" id="L458">        this.roleFormat = PrincipalFormat.valueOf(format.toUpperCase(Locale.ENGLISH));</span>
      +<span class="nc" id="L459">        NegotiateSecurityFilter.LOGGER.info(&quot;role format: {}&quot;, this.roleFormat);</span>
      +<span class="nc" id="L460">    }</span>
      +
      +    /**
      +     * Principal format.
      +     *
      +     * @return Role format.
      +     */
      +    public PrincipalFormat getRoleFormat() {
      +<span class="nc" id="L468">        return this.roleFormat;</span>
      +    }
      +
      +    /**
      +     * Send a 401 Unauthorized along with protocol authentication headers.
      +     *
      +     * @param response
      +     *            HTTP Response
      +     * @param close
      +     *            Close connection.
      +     */
      +    private void sendUnauthorized(final HttpServletResponse response, final boolean close) {
      +        try {
      +<span class="nc" id="L481">            this.providers.sendUnauthorized(response);</span>
      +<span class="nc bnc" id="L482" title="All 2 branches missed.">            if (close) {</span>
      +<span class="nc" id="L483">                response.setHeader(&quot;Connection&quot;, &quot;close&quot;);</span>
      +            } else {
      +<span class="nc" id="L485">                response.setHeader(&quot;Connection&quot;, &quot;keep-alive&quot;);</span>
      +            }
      +<span class="nc" id="L487">            response.sendError(HttpServletResponse.SC_UNAUTHORIZED);</span>
      +<span class="nc" id="L488">            response.flushBuffer();</span>
      +<span class="nc" id="L489">        } catch (final IOException e) {</span>
      +<span class="nc" id="L490">            throw new RuntimeException(e);</span>
      +<span class="nc" id="L491">        }</span>
      +<span class="nc" id="L492">    }</span>
      +
      +    /**
      +     * Windows auth provider.
      +     *
      +     * @return IWindowsAuthProvider.
      +     */
      +    public IWindowsAuthProvider getAuth() {
      +<span class="nc" id="L500">        return this.auth;</span>
      +    }
      +
      +    /**
      +     * Set Windows auth provider.
      +     *
      +     * @param provider
      +     *            Class implements IWindowsAuthProvider.
      +     */
      +    public void setAuth(final IWindowsAuthProvider provider) {
      +<span class="nc" id="L510">        this.auth = provider;</span>
      +<span class="nc" id="L511">    }</span>
      +
      +    /**
      +     * True if guest login is allowed.
      +     *
      +     * @return True if guest login is allowed, false otherwise.
      +     */
      +    public boolean isAllowGuestLogin() {
      +<span class="fc" id="L519">        return this.allowGuestLogin;</span>
      +    }
      +
      +    /**
      +     * Enable/Disable impersonation.
      +     *
      +     * @param value
      +     *            true to enable impersonation, false otherwise
      +     */
      +    public void setImpersonate(final boolean value) {
      +<span class="nc" id="L529">        this.impersonate = value;</span>
      +<span class="nc" id="L530">    }</span>
      +
      +    /**
      +     * Checks if is impersonate.
      +     *
      +     * @return true if impersonation is enabled, false otherwise
      +     */
      +    public boolean isImpersonate() {
      +<span class="fc" id="L538">        return this.impersonate;</span>
      +    }
      +
      +    /**
      +     * Security filter providers.
      +     *
      +     * @return A collection of security filter providers.
      +     */
      +    public SecurityFilterProviderCollection getProviders() {
      +<span class="nc" id="L547">        return this.providers;</span>
      +    }
      +
      +    private static boolean isWindows() {
      +<span class="pc bpc" id="L551" title="1 of 2 branches missed.">        if (NegotiateSecurityFilter.windows == null) {</span>
      +<span class="fc" id="L552">            NegotiateSecurityFilter.windows = System.getProperty(&quot;os.name&quot;).toLowerCase(Locale.ENGLISH).contains(&quot;win&quot;);</span>
      +        }
      +<span class="fc" id="L554">        return NegotiateSecurityFilter.windows.booleanValue();</span>
      +    }
      +
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/WaffleInfoServlet.html b/waffle-jna-jakarta/jacoco/waffle.servlet/WaffleInfoServlet.html
      new file mode 100644
      index 0000000000..7ab978ef1b
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/WaffleInfoServlet.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WaffleInfoServlet</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.servlet</a> &gt; <span class="el_class">WaffleInfoServlet</span></div><h1>WaffleInfoServlet</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">214 of 214</td><td class="ctr2">0%</td><td class="bar">10 of 10</td><td class="ctr2">0%</td><td class="ctr1">11</td><td class="ctr2">11</td><td class="ctr1">54</td><td class="ctr2">54</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a2"><a href="WaffleInfoServlet.java.html#L127" class="el_method">getRequestInfo(Document, HttpServletRequest)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="100" alt="100"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">25</td><td class="ctr2" id="i0">25</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="WaffleInfoServlet.java.html#L81" class="el_method">getWaffleInfoResponse(HttpServletRequest, HttpServletResponse)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="116" height="10" title="97" alt="97"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="80" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h1">23</td><td class="ctr2" id="i1">23</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="WaffleInfoServlet.java.html#L64" class="el_method">doGet(HttpServletRequest, HttpServletResponse)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="WaffleInfoServlet.java.html#L69" class="el_method">doPost(HttpServletRequest, HttpServletResponse)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="WaffleInfoServlet.java.html#L60" class="el_method">static {...}</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="WaffleInfoServlet.java.html#L54" class="el_method">WaffleInfoServlet()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/WaffleInfoServlet.java.html b/waffle-jna-jakarta/jacoco/waffle.servlet/WaffleInfoServlet.java.html
      new file mode 100644
      index 0000000000..e6a9e01bd4
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/WaffleInfoServlet.java.html
      @@ -0,0 +1,163 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WaffleInfoServlet.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.servlet</a> &gt; <span class="el_source">WaffleInfoServlet.java</span></div><h1>WaffleInfoServlet.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2022 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.servlet;
      +
      +import jakarta.servlet.http.HttpServlet;
      +import jakarta.servlet.http.HttpServletRequest;
      +import jakarta.servlet.http.HttpServletResponse;
      +
      +import java.io.IOException;
      +import java.security.Principal;
      +import java.util.Collections;
      +import java.util.List;
      +
      +import javax.xml.XMLConstants;
      +import javax.xml.parsers.ParserConfigurationException;
      +import javax.xml.transform.OutputKeys;
      +import javax.xml.transform.Transformer;
      +import javax.xml.transform.TransformerException;
      +import javax.xml.transform.TransformerFactory;
      +import javax.xml.transform.dom.DOMSource;
      +import javax.xml.transform.stream.StreamResult;
      +
      +import org.slf4j.Logger;
      +import org.slf4j.LoggerFactory;
      +import org.w3c.dom.Document;
      +import org.w3c.dom.Element;
      +
      +import waffle.util.WaffleInfo;
      +
      +/**
      + * A servlet that returns WaffleInfo as XML.
      + */
      +<span class="nc" id="L54">public class WaffleInfoServlet extends HttpServlet {</span>
      +
      +    /** The Constant serialVersionUID. */
      +    private static final long serialVersionUID = 1L;
      +
      +    /** The Constant Logger. */
      +<span class="nc" id="L60">    private static final Logger logger = LoggerFactory.getLogger(WaffleInfoServlet.class);</span>
      +
      +    @Override
      +    public void doGet(final HttpServletRequest request, final HttpServletResponse response) {
      +<span class="nc" id="L64">        this.getWaffleInfoResponse(request, response);</span>
      +<span class="nc" id="L65">    }</span>
      +
      +    @Override
      +    public void doPost(final HttpServletRequest request, final HttpServletResponse response) {
      +<span class="nc" id="L69">        this.getWaffleInfoResponse(request, response);</span>
      +<span class="nc" id="L70">    }</span>
      +
      +    /**
      +     * Gets the waffle info response.
      +     *
      +     * @param request
      +     *            the request
      +     * @param response
      +     *            the response
      +     */
      +    public void getWaffleInfoResponse(final HttpServletRequest request, final HttpServletResponse response) {
      +<span class="nc" id="L81">        final WaffleInfo info = new WaffleInfo();</span>
      +        try {
      +<span class="nc" id="L83">            final Document doc = info.getWaffleInfo();</span>
      +<span class="nc" id="L84">            final Element root = doc.getDocumentElement();</span>
      +
      +            // Add the Request Information Here
      +<span class="nc" id="L87">            final Element http = this.getRequestInfo(doc, request);</span>
      +<span class="nc" id="L88">            root.insertBefore(http, root.getFirstChild());</span>
      +
      +            // Lookup Accounts By Name
      +<span class="nc" id="L91">            final String[] lookup = request.getParameterValues(&quot;lookup&quot;);</span>
      +<span class="nc bnc" id="L92" title="All 2 branches missed.">            if (lookup != null) {</span>
      +<span class="nc bnc" id="L93" title="All 2 branches missed.">                for (final String name : lookup) {</span>
      +<span class="nc" id="L94">                    root.appendChild(info.getLookupInfo(doc, name));</span>
      +                }
      +            }
      +
      +            // Write the XML Response
      +<span class="nc" id="L99">            final TransformerFactory transfac = TransformerFactory.newInstance();</span>
      +<span class="nc" id="L100">            transfac.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, &quot;&quot;);</span>
      +<span class="nc" id="L101">            transfac.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, &quot;&quot;);</span>
      +
      +<span class="nc" id="L103">            final Transformer trans = transfac.newTransformer();</span>
      +<span class="nc" id="L104">            trans.setOutputProperty(OutputKeys.INDENT, &quot;yes&quot;);</span>
      +
      +<span class="nc" id="L106">            final StreamResult result = new StreamResult(response.getWriter());</span>
      +<span class="nc" id="L107">            final DOMSource source = new DOMSource(doc);</span>
      +<span class="nc" id="L108">            trans.transform(source, result);</span>
      +<span class="nc" id="L109">            response.setContentType(&quot;application/xml&quot;);</span>
      +<span class="nc" id="L110">        } catch (final ParserConfigurationException | TransformerException | IOException e) {</span>
      +<span class="nc" id="L111">            WaffleInfoServlet.logger.error(&quot;&quot;, e);</span>
      +<span class="nc" id="L112">            throw new RuntimeException(&quot;See logs for underlying error condition&quot;);</span>
      +<span class="nc" id="L113">        }</span>
      +<span class="nc" id="L114">    }</span>
      +
      +    /**
      +     * Gets the request info.
      +     *
      +     * @param doc
      +     *            the doc
      +     * @param request
      +     *            the request
      +     *
      +     * @return the request info
      +     */
      +    private Element getRequestInfo(final Document doc, final HttpServletRequest request) {
      +<span class="nc" id="L127">        final Element node = doc.createElement(&quot;request&quot;);</span>
      +
      +<span class="nc" id="L129">        Element value = doc.createElement(&quot;AuthType&quot;);</span>
      +<span class="nc" id="L130">        value.setTextContent(request.getAuthType());</span>
      +<span class="nc" id="L131">        node.appendChild(value);</span>
      +
      +<span class="nc" id="L133">        final Principal p = request.getUserPrincipal();</span>
      +<span class="nc bnc" id="L134" title="All 2 branches missed.">        if (p != null) {</span>
      +<span class="nc" id="L135">            final Element child = doc.createElement(&quot;principal&quot;);</span>
      +<span class="nc" id="L136">            child.setAttribute(&quot;class&quot;, p.getClass().getName());</span>
      +
      +<span class="nc" id="L138">            value = doc.createElement(&quot;name&quot;);</span>
      +<span class="nc" id="L139">            value.setTextContent(p.getName());</span>
      +<span class="nc" id="L140">            child.appendChild(value);</span>
      +
      +<span class="nc" id="L142">            value = doc.createElement(&quot;string&quot;);</span>
      +<span class="nc" id="L143">            value.setTextContent(p.toString());</span>
      +<span class="nc" id="L144">            child.appendChild(value);</span>
      +
      +<span class="nc" id="L146">            node.appendChild(child);</span>
      +        }
      +
      +<span class="nc" id="L149">        final List&lt;String&gt; headers = Collections.list(request.getHeaderNames());</span>
      +<span class="nc bnc" id="L150" title="All 2 branches missed.">        if (!headers.isEmpty()) {</span>
      +<span class="nc" id="L151">            final Element child = doc.createElement(&quot;headers&quot;);</span>
      +<span class="nc bnc" id="L152" title="All 2 branches missed.">            for (String header : headers) {</span>
      +<span class="nc" id="L153">                value = doc.createElement(header);</span>
      +<span class="nc" id="L154">                value.setTextContent(request.getHeader(header));</span>
      +<span class="nc" id="L155">                child.appendChild(value);</span>
      +<span class="nc" id="L156">            }</span>
      +<span class="nc" id="L157">            node.appendChild(child);</span>
      +        }
      +<span class="nc" id="L159">        return node;</span>
      +    }
      +
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/WindowsPrincipal.html b/waffle-jna-jakarta/jacoco/waffle.servlet/WindowsPrincipal.html
      new file mode 100644
      index 0000000000..7cbfc528b5
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/WindowsPrincipal.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsPrincipal</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.servlet</a> &gt; <span class="el_class">WindowsPrincipal</span></div><h1>WindowsPrincipal</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">106 of 220</td><td class="ctr2">51%</td><td class="bar">11 of 16</td><td class="ctr2">31%</td><td class="ctr1">17</td><td class="ctr2">26</td><td class="ctr1">25</td><td class="ctr2">53</td><td class="ctr1">7</td><td class="ctr2">16</td></tr></tfoot><tbody><tr><td id="a6"><a href="WindowsPrincipal.java.html#L170" class="el_method">getRoleNames(IWindowsAccount, PrincipalFormat)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="116" height="10" title="34" alt="34"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">10</td><td class="ctr2" id="i0">10</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="WindowsPrincipal.java.html#L201" class="el_method">getPrincipalNames(IWindowsIdentity, PrincipalFormat)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="58" height="10" title="17" alt="17"/><img src="../jacoco-resources/greenbar.gif" width="58" height="10" title="17" alt="17"/></td><td class="ctr2" id="c8">50%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="1" alt="1"/></td><td class="ctr2" id="e3">25%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">5</td><td class="ctr2" id="i1">10</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="WindowsPrincipal.java.html#L125" class="el_method">getGroups(IWindowsAccount[])</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="15" alt="15"/><img src="../jacoco-resources/greenbar.gif" width="54" height="10" title="16" alt="16"/></td><td class="ctr2" id="c7">51%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i5">4</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a7"><a href="WindowsPrincipal.java.html#L108" class="el_method">getRoles(IWindowsIdentity, PrincipalFormat, PrincipalFormat)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="41" height="10" title="12" alt="12"/><img src="../jacoco-resources/greenbar.gif" width="78" height="10" title="23" alt="23"/></td><td class="ctr2" id="c6">65%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="1" alt="1"/></td><td class="ctr2" id="e1">50%</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i3">5</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a9"><a href="WindowsPrincipal.java.html#L138" class="el_method">getSid()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="WindowsPrincipal.java.html#L226" class="el_method">getRolesString()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a12"><a href="WindowsPrincipal.java.html#L238" class="el_method">hasRole(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="5" alt="5"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a0"><a href="WindowsPrincipal.java.html#L267" class="el_method">equals(Object)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="44" height="10" title="13" alt="13"/></td><td class="ctr2" id="c5">76%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="2" alt="2"/><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">50%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i4">5</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a10"><a href="WindowsPrincipal.java.html#L147" class="el_method">getSidString()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a1"><a href="WindowsPrincipal.java.html#L156" class="el_method">getGroups()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a3"><a href="WindowsPrincipal.java.html#L257" class="el_method">getIdentity()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a15"><a href="WindowsPrincipal.java.html#L85" class="el_method">WindowsPrincipal(IWindowsIdentity, PrincipalFormat, PrincipalFormat)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/greenbar.gif" width="99" height="10" title="29" alt="29"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i2">8</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a14"><a href="WindowsPrincipal.java.html#L71" class="el_method">WindowsPrincipal(IWindowsIdentity)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a11"><a href="WindowsPrincipal.java.html#L280" class="el_method">hashCode()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/greenbar.gif" width="13" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a4"><a href="WindowsPrincipal.java.html#L248" class="el_method">getName()</a></td><td class="bar" id="b14"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">0</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a13"><a href="WindowsPrincipal.java.html#L262" class="el_method">toString()</a></td><td class="bar" id="b15"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k15">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/WindowsPrincipal.java.html b/waffle-jna-jakarta/jacoco/waffle.servlet/WindowsPrincipal.java.html
      new file mode 100644
      index 0000000000..70df48a5c6
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/WindowsPrincipal.java.html
      @@ -0,0 +1,284 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsPrincipal.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.servlet</a> &gt; <span class="el_source">WindowsPrincipal.java</span></div><h1>WindowsPrincipal.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.servlet;
      +
      +import java.io.Serializable;
      +import java.security.Principal;
      +import java.util.ArrayList;
      +import java.util.HashMap;
      +import java.util.List;
      +import java.util.Map;
      +
      +import waffle.windows.auth.IWindowsAccount;
      +import waffle.windows.auth.IWindowsIdentity;
      +import waffle.windows.auth.PrincipalFormat;
      +import waffle.windows.auth.WindowsAccount;
      +
      +/**
      + * A Windows Principal.
      + */
      +public class WindowsPrincipal implements Principal, Serializable {
      +
      +    /** The Constant serialVersionUID. */
      +    private static final long serialVersionUID = 1L;
      +
      +    /** The fqn. */
      +    private final String fqn;
      +
      +    /** The sid. */
      +    private final byte[] sid;
      +
      +    /** The sid string. */
      +    private final String sidString;
      +
      +    /** The roles. */
      +    private final List&lt;String&gt; roles;
      +
      +    /** The identity. */
      +    private transient IWindowsIdentity identity;
      +
      +    /** The groups. */
      +    private final Map&lt;String, WindowsAccount&gt; groups;
      +
      +    /**
      +     * A windows principal.
      +     *
      +     * @param windowsIdentity
      +     *            Windows identity.
      +     */
      +    public WindowsPrincipal(final IWindowsIdentity windowsIdentity) {
      +<span class="fc" id="L71">        this(windowsIdentity, PrincipalFormat.FQN, PrincipalFormat.FQN);</span>
      +<span class="fc" id="L72">    }</span>
      +
      +    /**
      +     * A windows principal.
      +     *
      +     * @param windowsIdentity
      +     *            Windows identity.
      +     * @param principalFormat
      +     *            Principal format.
      +     * @param roleFormat
      +     *            Role format.
      +     */
      +    public WindowsPrincipal(final IWindowsIdentity windowsIdentity, final PrincipalFormat principalFormat,
      +<span class="fc" id="L85">            final PrincipalFormat roleFormat) {</span>
      +<span class="fc" id="L86">        this.identity = windowsIdentity;</span>
      +<span class="fc" id="L87">        this.fqn = windowsIdentity.getFqn();</span>
      +<span class="fc" id="L88">        this.sid = windowsIdentity.getSid();</span>
      +<span class="fc" id="L89">        this.sidString = windowsIdentity.getSidString();</span>
      +<span class="fc" id="L90">        this.groups = WindowsPrincipal.getGroups(windowsIdentity.getGroups());</span>
      +<span class="fc" id="L91">        this.roles = WindowsPrincipal.getRoles(windowsIdentity, principalFormat, roleFormat);</span>
      +<span class="fc" id="L92">    }</span>
      +
      +    /**
      +     * Gets the roles.
      +     *
      +     * @param windowsIdentity
      +     *            the windows identity
      +     * @param principalFormat
      +     *            the principal format
      +     * @param roleFormat
      +     *            the role format
      +     *
      +     * @return the roles
      +     */
      +    private static List&lt;String&gt; getRoles(final IWindowsIdentity windowsIdentity, final PrincipalFormat principalFormat,
      +            final PrincipalFormat roleFormat) {
      +<span class="fc" id="L108">        final List&lt;String&gt; roles = new ArrayList&lt;&gt;();</span>
      +<span class="fc" id="L109">        roles.addAll(WindowsPrincipal.getPrincipalNames(windowsIdentity, principalFormat));</span>
      +<span class="pc bpc" id="L110" title="1 of 2 branches missed.">        for (final IWindowsAccount group : windowsIdentity.getGroups()) {</span>
      +<span class="nc" id="L111">            roles.addAll(WindowsPrincipal.getRoleNames(group, roleFormat));</span>
      +        }
      +<span class="fc" id="L113">        return roles;</span>
      +    }
      +
      +    /**
      +     * Gets the groups.
      +     *
      +     * @param groups
      +     *            the groups
      +     *
      +     * @return the groups
      +     */
      +    private static Map&lt;String, WindowsAccount&gt; getGroups(final IWindowsAccount[] groups) {
      +<span class="fc" id="L125">        final Map&lt;String, WindowsAccount&gt; groupMap = new HashMap&lt;&gt;();</span>
      +<span class="pc bpc" id="L126" title="1 of 2 branches missed.">        for (final IWindowsAccount group : groups) {</span>
      +<span class="nc" id="L127">            groupMap.put(group.getFqn(), new WindowsAccount(group));</span>
      +        }
      +<span class="fc" id="L129">        return groupMap;</span>
      +    }
      +
      +    /**
      +     * Byte representation of the SID.
      +     *
      +     * @return Array of bytes.
      +     */
      +    public byte[] getSid() {
      +<span class="nc" id="L138">        return this.sid.clone();</span>
      +    }
      +
      +    /**
      +     * String representation of the SID.
      +     *
      +     * @return String.
      +     */
      +    public String getSidString() {
      +<span class="nc" id="L147">        return this.sidString;</span>
      +    }
      +
      +    /**
      +     * Windows groups that the user is a member of.
      +     *
      +     * @return A map of group names to groups.
      +     */
      +    public Map&lt;String, WindowsAccount&gt; getGroups() {
      +<span class="nc" id="L156">        return this.groups;</span>
      +    }
      +
      +    /**
      +     * Returns a list of role principal objects.
      +     *
      +     * @param group
      +     *            Windows group.
      +     * @param principalFormat
      +     *            Principal format.
      +     *
      +     * @return List of role principal objects.
      +     */
      +    private static List&lt;String&gt; getRoleNames(final IWindowsAccount group, final PrincipalFormat principalFormat) {
      +<span class="nc" id="L170">        final List&lt;String&gt; principals = new ArrayList&lt;&gt;();</span>
      +<span class="nc bnc" id="L171" title="All 4 branches missed.">        switch (principalFormat) {</span>
      +            case FQN:
      +<span class="nc" id="L173">                principals.add(group.getFqn());</span>
      +<span class="nc" id="L174">                break;</span>
      +            case SID:
      +<span class="nc" id="L176">                principals.add(group.getSidString());</span>
      +<span class="nc" id="L177">                break;</span>
      +            case BOTH:
      +<span class="nc" id="L179">                principals.add(group.getFqn());</span>
      +<span class="nc" id="L180">                principals.add(group.getSidString());</span>
      +<span class="nc" id="L181">                break;</span>
      +            case NONE:
      +            default:
      +                break;
      +        }
      +<span class="nc" id="L186">        return principals;</span>
      +    }
      +
      +    /**
      +     * Returns a list of user principal objects.
      +     *
      +     * @param windowsIdentity
      +     *            Windows identity.
      +     * @param principalFormat
      +     *            Principal format.
      +     *
      +     * @return A list of user principal objects.
      +     */
      +    private static List&lt;String&gt; getPrincipalNames(final IWindowsIdentity windowsIdentity,
      +            final PrincipalFormat principalFormat) {
      +<span class="fc" id="L201">        final List&lt;String&gt; principals = new ArrayList&lt;&gt;();</span>
      +<span class="pc bpc" id="L202" title="3 of 4 branches missed.">        switch (principalFormat) {</span>
      +            case FQN:
      +<span class="fc" id="L204">                principals.add(windowsIdentity.getFqn());</span>
      +<span class="fc" id="L205">                break;</span>
      +            case SID:
      +<span class="nc" id="L207">                principals.add(windowsIdentity.getSidString());</span>
      +<span class="nc" id="L208">                break;</span>
      +            case BOTH:
      +<span class="nc" id="L210">                principals.add(windowsIdentity.getFqn());</span>
      +<span class="nc" id="L211">                principals.add(windowsIdentity.getSidString());</span>
      +<span class="nc" id="L212">                break;</span>
      +            case NONE:
      +            default:
      +                break;
      +        }
      +<span class="fc" id="L217">        return principals;</span>
      +    }
      +
      +    /**
      +     * Get an array of roles as a string.
      +     *
      +     * @return Role1, Role2, ...
      +     */
      +    public String getRolesString() {
      +<span class="nc" id="L226">        return String.join(&quot;, &quot;, this.roles);</span>
      +    }
      +
      +    /**
      +     * Checks whether the principal has a given role.
      +     *
      +     * @param role
      +     *            Role name.
      +     *
      +     * @return True if the principal has a role, false otherwise.
      +     */
      +    public boolean hasRole(final String role) {
      +<span class="nc" id="L238">        return this.roles.contains(role);</span>
      +    }
      +
      +    /**
      +     * Fully qualified name.
      +     *
      +     * @return String.
      +     */
      +    @Override
      +    public String getName() {
      +<span class="fc" id="L248">        return this.fqn;</span>
      +    }
      +
      +    /**
      +     * Underlying identity.
      +     *
      +     * @return String.
      +     */
      +    public IWindowsIdentity getIdentity() {
      +<span class="nc" id="L257">        return this.identity;</span>
      +    }
      +
      +    @Override
      +    public String toString() {
      +<span class="fc" id="L262">        return this.getName();</span>
      +    }
      +
      +    @Override
      +    public boolean equals(final Object o) {
      +<span class="pc bpc" id="L267" title="1 of 2 branches missed.">        if (this == o) {</span>
      +<span class="nc" id="L268">            return true;</span>
      +        }
      +
      +<span class="pc bpc" id="L271" title="1 of 2 branches missed.">        if (o instanceof WindowsPrincipal) {</span>
      +<span class="fc" id="L272">            return this.getName().equals(((WindowsPrincipal) o).getName());</span>
      +        }
      +
      +<span class="nc" id="L275">        return false;</span>
      +    }
      +
      +    @Override
      +    public int hashCode() {
      +<span class="fc" id="L280">        return this.getName().hashCode();</span>
      +    }
      +
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/index.html b/waffle-jna-jakarta/jacoco/waffle.servlet/index.html
      new file mode 100644
      index 0000000000..c15479a500
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/index.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.servlet</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.servlet</span></div><h1>waffle.servlet</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">936 of 1,320</td><td class="ctr2">29%</td><td class="bar">95 of 125</td><td class="ctr2">24%</td><td class="ctr1">96</td><td class="ctr2">123</td><td class="ctr1">253</td><td class="ctr2">357</td><td class="ctr1">35</td><td class="ctr2">54</td><td class="ctr1">3</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a3"><a href="NegotiateSecurityFilter.html" class="el_class">NegotiateSecurityFilter</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="83" height="10" title="539" alt="539"/><img src="../jacoco-resources/greenbar.gif" width="36" height="10" title="237" alt="237"/></td><td class="ctr2" id="c2">30%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="89" height="10" title="69" alt="69"/><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="24" alt="24"/></td><td class="ctr2" id="e1">25%</td><td class="ctr1" id="f0">54</td><td class="ctr2" id="g0">69</td><td class="ctr1" id="h0">143</td><td class="ctr2" id="i0">208</td><td class="ctr1" id="j0">11</td><td class="ctr2" id="k0">18</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a4"><a href="WaffleInfoServlet.html" class="el_class">WaffleInfoServlet</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="33" height="10" title="214" alt="214"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="10" alt="10"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">11</td><td class="ctr2" id="g2">11</td><td class="ctr1" id="h1">54</td><td class="ctr2" id="i1">54</td><td class="ctr1" id="j2">6</td><td class="ctr2" id="k2">6</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a5"><a href="WindowsPrincipal.html" class="el_class">WindowsPrincipal</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="106" alt="106"/><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="114" alt="114"/></td><td class="ctr2" id="c0">51%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="11" alt="11"/><img src="../jacoco-resources/greenbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="e0">31%</td><td class="ctr1" id="f1">17</td><td class="ctr2" id="g1">26</td><td class="ctr1" id="h2">25</td><td class="ctr2" id="i2">53</td><td class="ctr1" id="j1">7</td><td class="ctr2" id="k1">16</td><td class="ctr1" id="l4">0</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a1"><a href="CorsAwareNegotiateSecurityFilter.html" class="el_class">CorsAwareNegotiateSecurityFilter</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="38" alt="38"/><img src="../jacoco-resources/greenbar.gif" width="5" height="10" title="33" alt="33"/></td><td class="ctr2" id="c1">46%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="1" height="10" title="1" alt="1"/></td><td class="ctr2" id="e2">25%</td><td class="ctr1" id="f5">4</td><td class="ctr2" id="g3">7</td><td class="ctr1" id="h3">16</td><td class="ctr2" id="i3">27</td><td class="ctr1" id="j5">2</td><td class="ctr2" id="k3">5</td><td class="ctr1" id="l5">0</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a2"><a href="NegotiateRequestWrapper.html" class="el_class">NegotiateRequestWrapper</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="21" alt="21"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f3">5</td><td class="ctr2" id="g4">5</td><td class="ctr1" id="h5">7</td><td class="ctr2" id="i5">7</td><td class="ctr1" id="j3">5</td><td class="ctr2" id="k4">5</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a0"><a href="AutoDisposableWindowsPrincipal.html" class="el_class">AutoDisposableWindowsPrincipal</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="18" alt="18"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">5</td><td class="ctr2" id="g5">5</td><td class="ctr1" id="h4">8</td><td class="ctr2" id="i4">8</td><td class="ctr1" id="j4">4</td><td class="ctr2" id="k5">4</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.servlet/index.source.html b/waffle-jna-jakarta/jacoco/waffle.servlet/index.source.html
      new file mode 100644
      index 0000000000..45762ec147
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.servlet/index.source.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.servlet</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.servlet</span></div><h1>waffle.servlet</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">936 of 1,320</td><td class="ctr2">29%</td><td class="bar">95 of 125</td><td class="ctr2">24%</td><td class="ctr1">96</td><td class="ctr2">123</td><td class="ctr1">253</td><td class="ctr2">357</td><td class="ctr1">35</td><td class="ctr2">54</td><td class="ctr1">3</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a3"><a href="NegotiateSecurityFilter.java.html" class="el_source">NegotiateSecurityFilter.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="83" height="10" title="539" alt="539"/><img src="../jacoco-resources/greenbar.gif" width="36" height="10" title="237" alt="237"/></td><td class="ctr2" id="c2">30%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="89" height="10" title="69" alt="69"/><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="24" alt="24"/></td><td class="ctr2" id="e1">25%</td><td class="ctr1" id="f0">54</td><td class="ctr2" id="g0">69</td><td class="ctr1" id="h0">143</td><td class="ctr2" id="i0">208</td><td class="ctr1" id="j0">11</td><td class="ctr2" id="k0">18</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a4"><a href="WaffleInfoServlet.java.html" class="el_source">WaffleInfoServlet.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="33" height="10" title="214" alt="214"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="10" alt="10"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">11</td><td class="ctr2" id="g2">11</td><td class="ctr1" id="h1">54</td><td class="ctr2" id="i1">54</td><td class="ctr1" id="j2">6</td><td class="ctr2" id="k2">6</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a5"><a href="WindowsPrincipal.java.html" class="el_source">WindowsPrincipal.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="106" alt="106"/><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="114" alt="114"/></td><td class="ctr2" id="c0">51%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="11" alt="11"/><img src="../jacoco-resources/greenbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="e0">31%</td><td class="ctr1" id="f1">17</td><td class="ctr2" id="g1">26</td><td class="ctr1" id="h2">25</td><td class="ctr2" id="i2">53</td><td class="ctr1" id="j1">7</td><td class="ctr2" id="k1">16</td><td class="ctr1" id="l4">0</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a1"><a href="CorsAwareNegotiateSecurityFilter.java.html" class="el_source">CorsAwareNegotiateSecurityFilter.java</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="38" alt="38"/><img src="../jacoco-resources/greenbar.gif" width="5" height="10" title="33" alt="33"/></td><td class="ctr2" id="c1">46%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="1" height="10" title="1" alt="1"/></td><td class="ctr2" id="e2">25%</td><td class="ctr1" id="f5">4</td><td class="ctr2" id="g3">7</td><td class="ctr1" id="h3">16</td><td class="ctr2" id="i3">27</td><td class="ctr1" id="j5">2</td><td class="ctr2" id="k3">5</td><td class="ctr1" id="l5">0</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a2"><a href="NegotiateRequestWrapper.java.html" class="el_source">NegotiateRequestWrapper.java</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="21" alt="21"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f3">5</td><td class="ctr2" id="g4">5</td><td class="ctr1" id="h5">7</td><td class="ctr2" id="i5">7</td><td class="ctr1" id="j3">5</td><td class="ctr2" id="k4">5</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a0"><a href="AutoDisposableWindowsPrincipal.java.html" class="el_source">AutoDisposableWindowsPrincipal.java</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="18" alt="18"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">5</td><td class="ctr2" id="g5">5</td><td class="ctr1" id="h4">8</td><td class="ctr2" id="i4">8</td><td class="ctr1" id="j4">4</td><td class="ctr2" id="k5">4</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util.cache/Cache.html b/waffle-jna-jakarta/jacoco/waffle.util.cache/Cache.html
      new file mode 100644
      index 0000000000..1d51990c0d
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util.cache/Cache.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Cache</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.util.cache</a> &gt; <span class="el_class">Cache</span></div><h1>Cache</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">22 of 46</td><td class="ctr2">52%</td><td class="bar">3 of 4</td><td class="ctr2">25%</td><td class="ctr1">2</td><td class="ctr2">3</td><td class="ctr1">8</td><td class="ctr2">13</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="Cache.java.html#L65" class="el_method">newCache(int)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="57" height="10" title="22" alt="22"/><img src="../jacoco-resources/greenbar.gif" width="62" height="10" title="24" alt="24"/></td><td class="ctr2" id="c0">52%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">25%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">8</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util.cache/Cache.java.html b/waffle-jna-jakarta/jacoco/waffle.util.cache/Cache.java.html
      new file mode 100644
      index 0000000000..68a93b9045
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util.cache/Cache.java.html
      @@ -0,0 +1,130 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Cache.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.util.cache</a> &gt; <span class="el_source">Cache.java</span></div><h1>Cache.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.util.cache;
      +
      +import java.util.NoSuchElementException;
      +import java.util.ServiceLoader;
      +
      +import org.slf4j.Logger;
      +import org.slf4j.LoggerFactory;
      +
      +/**
      + * A semi-persistent mapping from keys to values.
      + *
      + * @param &lt;K&gt;
      + *            the type of keys maintained by this cache
      + * @param &lt;V&gt;
      + *            the type of mapped values
      + *
      + * @see &lt;a href=&quot;https://github.com/Waffle/waffle/blob/master/Docs/CustomCache.md&quot;&gt;Can I provide a custom cache
      + *      implementation?&lt;/a&gt;
      + */
      +public interface Cache&lt;K, V&gt; {
      +
      +    /**
      +     * Creates a new cache with the specified timeout.
      +     * &lt;p&gt;
      +     * The cache implementation is obtained using {@link ServiceLoader}. To create your own implementation, implement
      +     * {@link CacheSupplier} and register it using the {@code /META-INF/services/waffle.util.cache.CacheSupplier} file
      +     * on your classpath.
      +     *
      +     * @param timeout
      +     *            timeout in seconds
      +     * @param &lt;K&gt;
      +     *            the type of keys maintained by this cache
      +     * @param &lt;V&gt;
      +     *            the type of mapped values
      +     *
      +     * @return a new cache
      +     *
      +     * @throws NoSuchElementException
      +     *             if no cache can be instantiated, use {@link Exception#getSuppressed()} to obtain details.
      +     */
      +    static &lt;K, V&gt; Cache&lt;K, V&gt; newCache(int timeout) throws NoSuchElementException {
      +<span class="fc" id="L65">        final NoSuchElementException exception = new NoSuchElementException();</span>
      +<span class="fc" id="L66">        boolean cacheSupplierFound = false;</span>
      +<span class="pc bpc" id="L67" title="1 of 2 branches missed.">        for (CacheSupplier cacheSupplier : ServiceLoader.load(CacheSupplier.class)) {</span>
      +<span class="fc" id="L68">            cacheSupplierFound = true;</span>
      +            try {
      +<span class="fc" id="L70">                return cacheSupplier.newCache(timeout);</span>
      +<span class="nc" id="L71">            } catch (Exception e) {</span>
      +<span class="nc" id="L72">                exception.addSuppressed(e);</span>
      +            }
      +<span class="nc" id="L74">        }</span>
      +
      +<span class="nc bnc" id="L76" title="All 2 branches missed.">        if (!cacheSupplierFound) {</span>
      +<span class="nc" id="L77">            Logger logger = LoggerFactory.getLogger(Cache.class);</span>
      +<span class="nc" id="L78">            logger.error(</span>
      +                    &quot;No CacheSupplier implementation found by ServiceLoader. Please see https://github.com/Waffle/waffle/blob/master/Docs/faq/CustomCache.md for possible solutions. Falling back to default CaffeineCache implementation.&quot;,
      +                    exception);
      +<span class="nc" id="L81">            return new CaffeineCache&lt;&gt;(timeout);</span>
      +        }
      +
      +<span class="nc" id="L84">        throw exception;</span>
      +    }
      +
      +    /**
      +     * Fetches the key from the cache
      +     *
      +     * @param key
      +     *            the key
      +     *
      +     * @return the corresponding value
      +     *
      +     * @see java.util.Map#get
      +     */
      +    V get(K key);
      +
      +    /**
      +     * Stores a binding for the key and the value in the cache
      +     *
      +     * @param key
      +     *            the key
      +     * @param value
      +     *            the value
      +     *
      +     * @see java.util.Map#put
      +     */
      +    void put(K key, V value);
      +
      +    /**
      +     * Removes the binding for the key from the cache
      +     *
      +     * @param key
      +     *            the key
      +     *
      +     * @see java.util.Map#remove(Object)
      +     */
      +    void remove(K key);
      +
      +    /**
      +     * Returns the number of bindings in this cache
      +     *
      +     * @return the size
      +     *
      +     * @see java.util.Map#size
      +     */
      +    int size();
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util.cache/CaffeineCache.html b/waffle-jna-jakarta/jacoco/waffle.util.cache/CaffeineCache.html
      new file mode 100644
      index 0000000000..7e2ddbc081
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util.cache/CaffeineCache.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CaffeineCache</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.util.cache</a> &gt; <span class="el_class">CaffeineCache</span></div><h1>CaffeineCache</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">24 of 34</td><td class="ctr2">29%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">5</td><td class="ctr1">6</td><td class="ctr2">9</td><td class="ctr1">4</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a3"><a href="CaffeineCache.java.html#L67" class="el_method">remove(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="84" height="10" title="7" alt="7"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="CaffeineCache.java.html#L57" class="el_method">get(Object)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="72" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="CaffeineCache.java.html#L62" class="el_method">put(Object, Object)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="72" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="CaffeineCache.java.html#L72" class="el_method">size()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="CaffeineCache.java.html#L51" class="el_method">CaffeineCache(long)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util.cache/CaffeineCache.java.html b/waffle-jna-jakarta/jacoco/waffle.util.cache/CaffeineCache.java.html
      new file mode 100644
      index 0000000000..56f017e23f
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util.cache/CaffeineCache.java.html
      @@ -0,0 +1,75 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CaffeineCache.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.util.cache</a> &gt; <span class="el_source">CaffeineCache.java</span></div><h1>CaffeineCache.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.util.cache;
      +
      +import com.github.benmanes.caffeine.cache.Caffeine;
      +
      +import java.time.Duration;
      +
      +import org.checkerframework.checker.index.qual.NonNegative;
      +
      +/**
      + * A {@link Cache} based on {@link com.github.benmanes.caffeine.cache.Cache}.
      + *
      + * @param &lt;K&gt;
      + *            the type of keys maintained by this cache
      + * @param &lt;V&gt;
      + *            the type of mapped values
      + */
      +public class CaffeineCache&lt;K, V&gt; implements Cache&lt;K, V&gt; {
      +
      +    /** The cache store. */
      +    private final com.github.benmanes.caffeine.cache.Cache&lt;K, V&gt; cache;
      +
      +    /**
      +     * Instantiate new caffeine cache with timeout.
      +     *
      +     * @param timeout
      +     *            Specified timeout in seconds for cache.
      +     */
      +<span class="fc" id="L51">    public CaffeineCache(@NonNegative final long timeout) {</span>
      +<span class="fc" id="L52">        cache = Caffeine.newBuilder().expireAfterWrite(Duration.ofSeconds(timeout)).build();</span>
      +<span class="fc" id="L53">    }</span>
      +
      +    @Override
      +    public V get(final K key) {
      +<span class="nc" id="L57">        return cache.asMap().get(key);</span>
      +    }
      +
      +    @Override
      +    public void put(final K key, final V value) {
      +<span class="nc" id="L62">        cache.put(key, value);</span>
      +<span class="nc" id="L63">    }</span>
      +
      +    @Override
      +    public void remove(final K key) {
      +<span class="nc" id="L67">        cache.asMap().remove(key);</span>
      +<span class="nc" id="L68">    }</span>
      +
      +    @Override
      +    public int size() {
      +<span class="nc" id="L72">        return cache.asMap().size();</span>
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util.cache/CaffeineCacheSupplier.html b/waffle-jna-jakarta/jacoco/waffle.util.cache/CaffeineCacheSupplier.html
      new file mode 100644
      index 0000000000..f82b39b6de
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util.cache/CaffeineCacheSupplier.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CaffeineCacheSupplier</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.util.cache</a> &gt; <span class="el_class">CaffeineCacheSupplier</span></div><h1>CaffeineCacheSupplier</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 8</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">2</td><td class="ctr1">0</td><td class="ctr2">2</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="CaffeineCacheSupplier.java.html#L33" class="el_method">newCache(long)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="CaffeineCacheSupplier.java.html#L29" class="el_method">CaffeineCacheSupplier()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="72" height="10" title="3" alt="3"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util.cache/CaffeineCacheSupplier.java.html b/waffle-jna-jakarta/jacoco/waffle.util.cache/CaffeineCacheSupplier.java.html
      new file mode 100644
      index 0000000000..304ba82d0d
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util.cache/CaffeineCacheSupplier.java.html
      @@ -0,0 +1,36 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CaffeineCacheSupplier.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.util.cache</a> &gt; <span class="el_source">CaffeineCacheSupplier.java</span></div><h1>CaffeineCacheSupplier.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.util.cache;
      +
      +/**
      + * A {@link CacheSupplier} supplying {@link CaffeineCache}.
      + */
      +<span class="fc" id="L29">public class CaffeineCacheSupplier implements CacheSupplier {</span>
      +
      +    @Override
      +    public &lt;K, V&gt; Cache&lt;K, V&gt; newCache(final long timeout) {
      +<span class="fc" id="L33">        return new CaffeineCache&lt;&gt;(timeout);</span>
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util.cache/index.html b/waffle-jna-jakarta/jacoco/waffle.util.cache/index.html
      new file mode 100644
      index 0000000000..dc1ac2d4c7
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util.cache/index.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.util.cache</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.util.cache</span></div><h1>waffle.util.cache</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">46 of 88</td><td class="ctr2">47%</td><td class="bar">3 of 4</td><td class="ctr2">25%</td><td class="ctr1">6</td><td class="ctr2">10</td><td class="ctr1">14</td><td class="ctr2">24</td><td class="ctr1">4</td><td class="ctr2">8</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="CaffeineCache.html" class="el_class">CaffeineCache</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="62" height="10" title="24" alt="24"/><img src="../jacoco-resources/greenbar.gif" width="26" height="10" title="10" alt="10"/></td><td class="ctr2" id="c2">29%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h1">6</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j0">4</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="Cache.html" class="el_class">Cache</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="57" height="10" title="22" alt="22"/><img src="../jacoco-resources/greenbar.gif" width="62" height="10" title="24" alt="24"/></td><td class="ctr2" id="c1">52%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">25%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h0">8</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k2">1</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="CaffeineCacheSupplier.html" class="el_class">CaffeineCacheSupplier</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="8" alt="8"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k1">2</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util.cache/index.source.html b/waffle-jna-jakarta/jacoco/waffle.util.cache/index.source.html
      new file mode 100644
      index 0000000000..c1a8e006b6
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util.cache/index.source.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.util.cache</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.util.cache</span></div><h1>waffle.util.cache</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">46 of 88</td><td class="ctr2">47%</td><td class="bar">3 of 4</td><td class="ctr2">25%</td><td class="ctr1">6</td><td class="ctr2">10</td><td class="ctr1">14</td><td class="ctr2">24</td><td class="ctr1">4</td><td class="ctr2">8</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="CaffeineCache.java.html" class="el_source">CaffeineCache.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="62" height="10" title="24" alt="24"/><img src="../jacoco-resources/greenbar.gif" width="26" height="10" title="10" alt="10"/></td><td class="ctr2" id="c2">29%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h1">6</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j0">4</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="Cache.java.html" class="el_source">Cache.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="57" height="10" title="22" alt="22"/><img src="../jacoco-resources/greenbar.gif" width="62" height="10" title="24" alt="24"/></td><td class="ctr2" id="c1">52%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">25%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h0">8</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k2">1</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="CaffeineCacheSupplier.java.html" class="el_source">CaffeineCacheSupplier.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="8" alt="8"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k1">2</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/AuthorizationHeader.html b/waffle-jna-jakarta/jacoco/waffle.util/AuthorizationHeader.html
      new file mode 100644
      index 0000000000..3394a27eec
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/AuthorizationHeader.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthorizationHeader</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.util</a> &gt; <span class="el_class">AuthorizationHeader</span></div><h1>AuthorizationHeader</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">115 of 165</td><td class="ctr2">30%</td><td class="bar">27 of 32</td><td class="ctr2">15%</td><td class="ctr1">22</td><td class="ctr2">28</td><td class="ctr1">25</td><td class="ctr2">38</td><td class="ctr1">6</td><td class="ctr2">12</td></tr></tfoot><tbody><tr><td id="a7"><a href="AuthorizationHeader.java.html#L169" class="el_method">isNtlmType1PostAuthorizationHeader()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="36" alt="36"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i1">6</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="AuthorizationHeader.java.html#L133" class="el_method">isNtlmType1Message()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="70" height="10" title="21" alt="21"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">6</td><td class="ctr2" id="i2">6</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="AuthorizationHeader.java.html#L120" class="el_method">getTokenBytes()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="50" height="10" title="15" alt="15"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h2">4</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="AuthorizationHeader.java.html#L85" class="el_method">getSecurityPackage()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="11" alt="11"/><img src="../jacoco-resources/greenbar.gif" width="53" height="10" title="16" alt="16"/></td><td class="ctr2" id="c5">59%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a9"><a href="AuthorizationHeader.java.html#L152" class="el_method">isSPNegTokenInitMessage()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="11" alt="11"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i4">4</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a3"><a href="AuthorizationHeader.java.html#L110" class="el_method">getToken()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="9" alt="9"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a11"><a href="AuthorizationHeader.java.html#L101" class="el_method">toString()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="8" alt="8"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a5"><a href="AuthorizationHeader.java.html#L187" class="el_method">isBearerAuthorizationHeader()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="2" alt="2"/><img src="../jacoco-resources/greenbar.gif" width="33" height="10" title="10" alt="10"/></td><td class="ctr2" id="c3">83%</td><td class="bar" id="d6"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="1" alt="1"/></td><td class="ctr2" id="e1">50%</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a8"><a href="AuthorizationHeader.java.html#L70" class="el_method">isNull()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="2" alt="2"/><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="9" alt="9"/></td><td class="ctr2" id="c4">81%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">50%</td><td class="ctr1" id="f5">2</td><td class="ctr2" id="g3">3</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a0"><a href="AuthorizationHeader.java.html#L51" class="el_method">AuthorizationHeader(HttpServletRequest)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i6">3</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a1"><a href="AuthorizationHeader.java.html#L61" class="el_method">getHeader()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/greenbar.gif" width="16" height="10" title="5" alt="5"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a10"><a href="AuthorizationHeader.java.html#L40" class="el_method">static {...}</a></td><td class="bar" id="b11"><img src="../jacoco-resources/greenbar.gif" width="13" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k11">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/AuthorizationHeader.java.html b/waffle-jna-jakarta/jacoco/waffle.util/AuthorizationHeader.java.html
      new file mode 100644
      index 0000000000..017089f51f
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/AuthorizationHeader.java.html
      @@ -0,0 +1,194 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AuthorizationHeader.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.util</a> &gt; <span class="el_source">AuthorizationHeader.java</span></div><h1>AuthorizationHeader.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.util;
      +
      +import jakarta.servlet.http.HttpServletRequest;
      +
      +import java.util.Base64;
      +import java.util.Locale;
      +
      +import org.slf4j.Logger;
      +import org.slf4j.LoggerFactory;
      +
      +/**
      + * Authorization header.
      + */
      +public class AuthorizationHeader {
      +
      +    /** The logger. */
      +<span class="fc" id="L40">    private static final Logger LOGGER = LoggerFactory.getLogger(AuthorizationHeader.class);</span>
      +
      +    /** The request. */
      +    private final HttpServletRequest request;
      +
      +    /**
      +     * Instantiates a new authorization header.
      +     *
      +     * @param httpServletRequest
      +     *            the http servlet request
      +     */
      +<span class="fc" id="L51">    public AuthorizationHeader(final HttpServletRequest httpServletRequest) {</span>
      +<span class="fc" id="L52">        this.request = httpServletRequest;</span>
      +<span class="fc" id="L53">    }</span>
      +
      +    /**
      +     * Gets the header.
      +     *
      +     * @return the header
      +     */
      +    public String getHeader() {
      +<span class="fc" id="L61">        return this.request.getHeader(&quot;Authorization&quot;);</span>
      +    }
      +
      +    /**
      +     * Checks if is null.
      +     *
      +     * @return true, if is null
      +     */
      +    public boolean isNull() {
      +<span class="pc bpc" id="L70" title="2 of 4 branches missed.">        return this.getHeader() == null || this.getHeader().length() == 0;</span>
      +    }
      +
      +    /**
      +     * Returns a supported security package string.
      +     *
      +     * &lt;pre&gt;
      +     * Authorization: NTLM the_token
      +     * Authorization: Negotiate the_token
      +     * Authorization: Bearer the_token
      +     * &lt;/pre&gt;
      +     *
      +     * @return AuthenticationScheme as SecurityPackage e.g. Negotiate, NTLM, Bearer.
      +     */
      +    public String getSecurityPackage() {
      +<span class="fc" id="L85">        final String header = this.getHeader();</span>
      +
      +<span class="pc bpc" id="L87" title="1 of 2 branches missed.">        if (header == null) {</span>
      +<span class="nc" id="L88">            throw new RuntimeException(&quot;Missing Authorization: header&quot;);</span>
      +        }
      +
      +<span class="fc" id="L91">        final int space = header.indexOf(' ');</span>
      +<span class="pc bpc" id="L92" title="1 of 2 branches missed.">        if (space &gt; 0) {</span>
      +<span class="fc" id="L93">            return header.substring(0, space);</span>
      +        }
      +
      +<span class="nc" id="L96">        throw new RuntimeException(&quot;Invalid Authorization header: &quot; + header);</span>
      +    }
      +
      +    @Override
      +    public String toString() {
      +<span class="nc bnc" id="L101" title="All 2 branches missed.">        return this.isNull() ? &quot;&lt;none&gt;&quot; : this.getHeader();</span>
      +    }
      +
      +    /**
      +     * Gets the token.
      +     *
      +     * @return the token
      +     */
      +    public String getToken() {
      +<span class="nc" id="L110">        return this.getHeader().substring(this.getSecurityPackage().length() + 1);</span>
      +    }
      +
      +    /**
      +     * Gets the token bytes.
      +     *
      +     * @return the token bytes
      +     */
      +    public byte[] getTokenBytes() {
      +        try {
      +<span class="nc" id="L120">            return Base64.getDecoder().decode(this.getToken());</span>
      +<span class="nc" id="L121">        } catch (final IllegalArgumentException e) {</span>
      +<span class="nc" id="L122">            AuthorizationHeader.LOGGER.debug(&quot;&quot;, e);</span>
      +<span class="nc" id="L123">            throw new RuntimeException(&quot;Invalid authorization header.&quot;);</span>
      +        }
      +    }
      +
      +    /**
      +     * Checks if is ntlm type1 message.
      +     *
      +     * @return true, if is ntlm type1 message
      +     */
      +    public boolean isNtlmType1Message() {
      +<span class="nc bnc" id="L133" title="All 2 branches missed.">        if (this.isNull()) {</span>
      +<span class="nc" id="L134">            return false;</span>
      +        }
      +
      +<span class="nc" id="L137">        final byte[] tokenBytes = this.getTokenBytes();</span>
      +<span class="nc bnc" id="L138" title="All 2 branches missed.">        if (!NtlmMessage.isNtlmMessage(tokenBytes)) {</span>
      +<span class="nc" id="L139">            return false;</span>
      +        }
      +
      +<span class="nc bnc" id="L142" title="All 2 branches missed.">        return 1 == NtlmMessage.getMessageType(tokenBytes);</span>
      +    }
      +
      +    /**
      +     * Checks if is SP nego message.
      +     *
      +     * @return true, if is SP nego message that contains NegTokenInit
      +     */
      +    public boolean isSPNegTokenInitMessage() {
      +
      +<span class="nc bnc" id="L152" title="All 2 branches missed.">        if (this.isNull()) {</span>
      +<span class="nc" id="L153">            return false;</span>
      +        }
      +
      +<span class="nc" id="L156">        final byte[] tokenBytes = this.getTokenBytes();</span>
      +<span class="nc" id="L157">        return SPNegoMessage.isNegTokenInit(tokenBytes);</span>
      +    }
      +
      +    /**
      +     * When using NTLM authentication and the browser is making a POST request, it preemptively sends a Type 2
      +     * authentication message (without the POSTed data). The server responds with a 401, and the browser sends a Type 3
      +     * request with the POSTed data. This is to avoid the situation where user's credentials might be potentially
      +     * invalid, and all this data is being POSTed across the wire.
      +     *
      +     * @return True if request is an NTLM POST, PUT, or DELETE with an Authorization header and no data.
      +     */
      +    public boolean isNtlmType1PostAuthorizationHeader() {
      +<span class="nc bnc" id="L169" title="All 4 branches missed.">        if (!&quot;POST&quot;.equals(this.request.getMethod()) &amp;&amp; !&quot;PUT&quot;.equals(this.request.getMethod())</span>
      +<span class="nc bnc" id="L170" title="All 2 branches missed.">                &amp;&amp; !&quot;DELETE&quot;.equals(this.request.getMethod())) {</span>
      +<span class="nc" id="L171">            return false;</span>
      +        }
      +
      +<span class="nc bnc" id="L174" title="All 2 branches missed.">        if (this.request.getContentLength() != 0) {</span>
      +<span class="nc" id="L175">            return false;</span>
      +        }
      +
      +<span class="nc bnc" id="L178" title="All 4 branches missed.">        return this.isNtlmType1Message() || this.isSPNegTokenInitMessage();</span>
      +    }
      +
      +    /**
      +     * Is Bearer Authorization Header will return true if 'BEARER' exists.
      +     *
      +     * @return True if header contains 'BEARER' header.
      +     */
      +    public boolean isBearerAuthorizationHeader() {
      +<span class="pc bpc" id="L187" title="1 of 2 branches missed.">        if (this.isNull()) {</span>
      +<span class="nc" id="L188">            return false;</span>
      +        }
      +
      +<span class="fc" id="L191">        return this.getSecurityPackage().toUpperCase(Locale.ENGLISH).equalsIgnoreCase(&quot;BEARER&quot;);</span>
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/CorsPreFlightCheck.html b/waffle-jna-jakarta/jacoco/waffle.util/CorsPreFlightCheck.html
      new file mode 100644
      index 0000000000..e937c5007c
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/CorsPreFlightCheck.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CorsPreFlightCheck</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.util</a> &gt; <span class="el_class">CorsPreFlightCheck</span></div><h1>CorsPreFlightCheck</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">6 of 84</td><td class="ctr2">92%</td><td class="bar">3 of 12</td><td class="ctr2">75%</td><td class="ctr1">2</td><td class="ctr2">8</td><td class="ctr1">2</td><td class="ctr2">22</td><td class="ctr1">0</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="CorsPreFlightCheck.java.html#L67" class="el_method">isPreflight(HttpServletRequest)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="6" alt="6"/><img src="../jacoco-resources/greenbar.gif" width="108" height="10" title="55" alt="55"/></td><td class="ctr2" id="c1">90%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="e0">75%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">19</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="CorsPreFlightCheck.java.html#L41" class="el_method">static {...}</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="45" height="10" title="23" alt="23"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/CorsPreFlightCheck.java.html b/waffle-jna-jakarta/jacoco/waffle.util/CorsPreFlightCheck.java.html
      new file mode 100644
      index 0000000000..4e9b7f2676
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/CorsPreFlightCheck.java.html
      @@ -0,0 +1,108 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CorsPreFlightCheck.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.util</a> &gt; <span class="el_source">CorsPreFlightCheck.java</span></div><h1>CorsPreFlightCheck.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.util;
      +
      +import jakarta.servlet.http.HttpServletRequest;
      +
      +import java.util.ArrayList;
      +import java.util.Arrays;
      +import java.util.List;
      +
      +import org.slf4j.Logger;
      +import org.slf4j.LoggerFactory;
      +
      +/**
      + * The Class CorsPrefFlightCheck.
      + */
      +public final class CorsPreFlightCheck {
      +
      +    /** The logger. */
      +<span class="fc" id="L41">    private static final Logger LOGGER = LoggerFactory.getLogger(CorsPreFlightCheck.class);</span>
      +
      +    /** The Constant preflightAttributeValue. */
      +    private static final String PRE_FLIGHT_ATTRIBUTE_VALUE = &quot;PRE_FLIGHT&quot;;
      +
      +    /** The Constant CORS_PRE_FLIGHT_HEADERS. */
      +<span class="fc" id="L47">    private static final List&lt;String&gt; CORS_PRE_FLIGHT_HEADERS = new ArrayList&lt;&gt;(</span>
      +<span class="fc" id="L48">            Arrays.asList(&quot;Access-Control-Request-Method&quot;, &quot;Access-Control-Request-Headers&quot;, &quot;Origin&quot;));</span>
      +
      +    /**
      +     * Prevent Instantiation.
      +     */
      +    private CorsPreFlightCheck() {
      +        // Do Nothing
      +    }
      +
      +    /**
      +     * Checks if is preflight.
      +     *
      +     * @param request
      +     *            the request
      +     *
      +     * @return true, if is preflight
      +     */
      +    public static boolean isPreflight(final HttpServletRequest request) {
      +
      +<span class="fc" id="L67">        final String corsRequestType = (String) request.getAttribute(&quot;cors.request.type&quot;);</span>
      +
      +<span class="fc" id="L69">        CorsPreFlightCheck.LOGGER</span>
      +<span class="fc" id="L70">                .debug(&quot;[waffle.util.CorsPreflightCheck] Request is CORS preflight; continue filter chain&quot;);</span>
      +
      +        // Method MUST be an OPTIONS Method to be a preflight Request
      +<span class="fc" id="L73">        final String method = request.getMethod();</span>
      +<span class="fc bfc" id="L74" title="All 4 branches covered.">        if (method == null || !method.equalsIgnoreCase(&quot;OPTIONS&quot;)) {</span>
      +<span class="fc" id="L75">            return false;</span>
      +        }
      +
      +<span class="fc" id="L78">        CorsPreFlightCheck.LOGGER.debug(&quot;[waffle.util.CorsPreflightCheck] check for PRE_FLIGHT Attribute&quot;);</span>
      +
      +        /*
      +         * Support Apache CorsFilter which would already add the Attribute cors.request.type with a value &quot;PRE_FLIGHT&quot;
      +         */
      +<span class="pc bpc" id="L83" title="1 of 2 branches missed.">        if (corsRequestType != null</span>
      +<span class="nc bnc" id="L84" title="All 2 branches missed.">                &amp;&amp; corsRequestType.equalsIgnoreCase(CorsPreFlightCheck.PRE_FLIGHT_ATTRIBUTE_VALUE)) {</span>
      +<span class="nc" id="L85">            return true;</span>
      +        } else {
      +            /*
      +             * it is OPTIONS and it is not an CorsFilter PRE_FLIGHT request make sure that the request contains all of
      +             * the CORS preflight Headers
      +             */
      +<span class="fc" id="L91">            CorsPreFlightCheck.LOGGER.debug(&quot;[waffle.util.CorsPreflightCheck] check headers&quot;);</span>
      +
      +<span class="fc bfc" id="L93" title="All 2 branches covered.">            for (final String header : CorsPreFlightCheck.CORS_PRE_FLIGHT_HEADERS) {</span>
      +<span class="fc" id="L94">                final String headerValue = request.getHeader(header);</span>
      +<span class="fc" id="L95">                CorsPreFlightCheck.LOGGER.debug(&quot;[waffle.util.CorsPreflightCheck] {}&quot;, header);</span>
      +
      +<span class="fc bfc" id="L97" title="All 2 branches covered.">                if (headerValue == null) {</span>
      +                    /* one of the CORS pre-flight headers is missing */
      +<span class="fc" id="L99">                    return false;</span>
      +                }
      +<span class="fc" id="L101">            }</span>
      +<span class="fc" id="L102">            CorsPreFlightCheck.LOGGER.debug(&quot;[waffle.util.CorsPreflightCheck] is preflight&quot;);</span>
      +
      +<span class="fc" id="L104">            return true;</span>
      +        }
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/NtlmMessage.html b/waffle-jna-jakarta/jacoco/waffle.util/NtlmMessage.html
      new file mode 100644
      index 0000000000..4e8478a8f3
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/NtlmMessage.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NtlmMessage</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.util</a> &gt; <span class="el_class">NtlmMessage</span></div><h1>NtlmMessage</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 69</td><td class="ctr2">100%</td><td class="bar">0 of 8</td><td class="ctr2">100%</td><td class="ctr1">0</td><td class="ctr2">7</td><td class="ctr1">0</td><td class="ctr2">8</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a2"><a href="NtlmMessage.java.html#L33" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="36" alt="36"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="NtlmMessage.java.html#L44" class="el_method">isNtlmMessage(byte[])</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="93" height="10" title="28" alt="28"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="NtlmMessage.java.html#L66" class="el_method">getMessageType(byte[])</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="16" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/NtlmMessage.java.html b/waffle-jna-jakarta/jacoco/waffle.util/NtlmMessage.java.html
      new file mode 100644
      index 0000000000..1eef7e49be
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/NtlmMessage.java.html
      @@ -0,0 +1,76 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NtlmMessage.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.util</a> &gt; <span class="el_source">NtlmMessage.java</span></div><h1>NtlmMessage.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.util;
      +
      +/**
      + * Rudimentary NTLM message utility.
      + */
      +public final class NtlmMessage {
      +
      +    // NTLM messages start with 0x4e544c4d53535000, NTLMSSP signature
      +    /** The Constant NTLM_SSP_SIGNATURE. */
      +<span class="fc" id="L33">    private static final byte[] NTLM_SSP_SIGNATURE = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00 };</span>
      +
      +    /**
      +     * Checks if is ntlm message.
      +     *
      +     * @param message
      +     *            the message
      +     *
      +     * @return true, if is ntlm message
      +     */
      +    public static boolean isNtlmMessage(final byte[] message) {
      +<span class="fc bfc" id="L44" title="All 4 branches covered.">        if (message == null || message.length &lt; NtlmMessage.NTLM_SSP_SIGNATURE.length) {</span>
      +<span class="fc" id="L45">            return false;</span>
      +        }
      +
      +<span class="fc bfc" id="L48" title="All 2 branches covered.">        for (int i = 0; i &lt; NtlmMessage.NTLM_SSP_SIGNATURE.length; i++) {</span>
      +<span class="fc bfc" id="L49" title="All 2 branches covered.">            if (NtlmMessage.NTLM_SSP_SIGNATURE[i] != message[i]) {</span>
      +<span class="fc" id="L50">                return false;</span>
      +            }
      +        }
      +
      +<span class="fc" id="L54">        return true;</span>
      +    }
      +
      +    /**
      +     * Get NTLM message type.
      +     *
      +     * @param message
      +     *            Assuming a valid NTLM message.
      +     *
      +     * @return Message type.
      +     */
      +    public static int getMessageType(final byte[] message) {
      +<span class="fc" id="L66">        return message[NtlmMessage.NTLM_SSP_SIGNATURE.length];</span>
      +    }
      +
      +    /**
      +     * Instantiates a new ntlm message.
      +     */
      +    private NtlmMessage() {
      +        // Prevent Instantiation of object
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/NtlmServletRequest.html b/waffle-jna-jakarta/jacoco/waffle.util/NtlmServletRequest.html
      new file mode 100644
      index 0000000000..0d7ed1852f
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/NtlmServletRequest.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NtlmServletRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.util</a> &gt; <span class="el_class">NtlmServletRequest</span></div><h1>NtlmServletRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">31 of 31</td><td class="ctr2">0%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="NtlmServletRequest.java.html#L49" class="el_method">getConnectionId(HttpServletRequest)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="22" alt="22"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="NtlmServletRequest.java.html#L62" class="el_method">getRemoteHost(HttpServletRequest)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="49" height="10" title="9" alt="9"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/NtlmServletRequest.java.html b/waffle-jna-jakarta/jacoco/waffle.util/NtlmServletRequest.java.html
      new file mode 100644
      index 0000000000..7e41834409
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/NtlmServletRequest.java.html
      @@ -0,0 +1,66 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>NtlmServletRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.util</a> &gt; <span class="el_source">NtlmServletRequest.java</span></div><h1>NtlmServletRequest.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.util;
      +
      +import jakarta.servlet.http.HttpServletRequest;
      +
      +/**
      + * The Class NtlmServletRequest.
      + */
      +public final class NtlmServletRequest {
      +
      +    /**
      +     * Instantiates a new ntlm servlet request.
      +     */
      +    private NtlmServletRequest() {
      +        // Prevent Instantiation of object
      +    }
      +
      +    /**
      +     * Returns a unique connection id for a given servlet request.
      +     *
      +     * @param request
      +     *            Servlet request.
      +     *
      +     * @return String.
      +     */
      +    public static String getConnectionId(final HttpServletRequest request) {
      +<span class="nc" id="L49">        final String remoteHost = NtlmServletRequest.getRemoteHost(request);</span>
      +<span class="nc bnc" id="L50" title="All 2 branches missed.">        return String.join(&quot;:&quot;, remoteHost == null ? &quot;&quot; : remoteHost, String.valueOf(request.getRemotePort()));</span>
      +    }
      +
      +    /**
      +     * Gets the remote host.
      +     *
      +     * @param request
      +     *            the request
      +     *
      +     * @return the remote host
      +     */
      +    private static String getRemoteHost(final HttpServletRequest request) {
      +<span class="nc bnc" id="L62" title="All 2 branches missed.">        return request.getRemoteHost() == null ? request.getRemoteAddr() : request.getRemoteHost();</span>
      +    }
      +
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/SPNegoMessage.html b/waffle-jna-jakarta/jacoco/waffle.util/SPNegoMessage.html
      new file mode 100644
      index 0000000000..69845d15b6
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/SPNegoMessage.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SPNegoMessage</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.util</a> &gt; <span class="el_class">SPNegoMessage</span></div><h1>SPNegoMessage</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">40 of 165</td><td class="ctr2">75%</td><td class="bar">9 of 26</td><td class="ctr2">65%</td><td class="ctr1">8</td><td class="ctr2">16</td><td class="ctr1">11</td><td class="ctr2">28</td><td class="ctr1">0</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a0"><a href="SPNegoMessage.java.html#L101" class="el_method">isNegTokenArg(byte[])</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="28" alt="28"/><img src="../jacoco-resources/greenbar.gif" width="66" height="10" title="36" alt="36"/></td><td class="ctr2" id="c2">56%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="42" height="10" title="5" alt="5"/><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="7" alt="7"/></td><td class="ctr2" id="e1">58%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g1">7</td><td class="ctr1" id="h0">8</td><td class="ctr2" id="i0">14</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="SPNegoMessage.java.html#L54" class="el_method">isNegTokenInit(byte[])</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="12" alt="12"/><img src="../jacoco-resources/greenbar.gif" width="97" height="10" title="53" alt="53"/></td><td class="ctr2" id="c1">81%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="85" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">71%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g0">8</td><td class="ctr1" id="h1">3</td><td class="ctr2" id="i1">13</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="SPNegoMessage.java.html#L34" class="el_method">static {...}</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="66" height="10" title="36" alt="36"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/SPNegoMessage.java.html b/waffle-jna-jakarta/jacoco/waffle.util/SPNegoMessage.java.html
      new file mode 100644
      index 0000000000..28bf1c1093
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/SPNegoMessage.java.html
      @@ -0,0 +1,137 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>SPNegoMessage.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.util</a> &gt; <span class="el_source">SPNegoMessage.java</span></div><h1>SPNegoMessage.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.util;
      +
      +/**
      + * Rudimentary NTLM message utility.
      + */
      +public final class SPNegoMessage {
      +
      +    // Check for NegTokenInit. It has always a special oid (&quot;spnegoOid&quot;),
      +    // which makes it rather easy to detect.
      +    /** The Constant SPENGO_OID. */
      +<span class="fc" id="L34">    private static final byte[] SPENGO_OID = { 0x06, 0x06, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x02 };</span>
      +
      +    // Check if this message is SPNEGO authentication token. There
      +    // are two token types, NegTokenInit and NegTokenArg.
      +    // For details and specification, see
      +    // https://msdn.microsoft.com/en-us/library/ms995330.aspx
      +
      +    /**
      +     * Checks if is neg token init.
      +     *
      +     * @param message
      +     *            the message
      +     *
      +     * @return true, if is neg token init
      +     */
      +    public static boolean isNegTokenInit(final byte[] message) {
      +
      +        // Message should always contains at least some kind of
      +        // id byte and length. If it is too short, it
      +        // cannot be a SPNEGO message.
      +<span class="pc bpc" id="L54" title="2 of 4 branches missed.">        if (message == null || message.length &lt; 2) {</span>
      +<span class="nc" id="L55">            return false;</span>
      +        }
      +
      +        // First byte should always be 0x60 (Application Constructed Object)
      +<span class="fc bfc" id="L59" title="All 2 branches covered.">        if (message[0] != 0x60) {</span>
      +<span class="fc" id="L60">            return false;</span>
      +        }
      +
      +        // Next byte(s) contain token length, figure out
      +        // how many bytes are used for length data
      +<span class="fc" id="L65">        int lenBytes = 1;</span>
      +<span class="pc bpc" id="L66" title="1 of 2 branches missed.">        if ((message[1] &amp; 0x80) != 0) {</span>
      +<span class="nc" id="L67">            lenBytes = 1 + (message[1] &amp; 0x7f);</span>
      +        }
      +
      +<span class="fc bfc" id="L70" title="All 2 branches covered.">        if (message.length &lt; SPNegoMessage.SPENGO_OID.length + 1 + lenBytes) {</span>
      +<span class="fc" id="L71">            return false;</span>
      +        }
      +
      +        // Now check for SPNEGO OID, which should start just after length data.
      +<span class="fc bfc" id="L75" title="All 2 branches covered.">        for (int i = 0; i &lt; SPNegoMessage.SPENGO_OID.length; i++) {</span>
      +<span class="pc bpc" id="L76" title="1 of 2 branches missed.">            if (SPNegoMessage.SPENGO_OID[i] != message[i + 1 + lenBytes]) {</span>
      +<span class="nc" id="L77">                return false;</span>
      +            }
      +        }
      +
      +<span class="fc" id="L81">        return true;</span>
      +    }
      +
      +    // Check for NegTokenArg. It doesn't have oid similar to NegTokenInit.
      +    // Instead id has one-byte id (0xa1). Obviously this is not
      +    // a great way to detect the message, so we check encoded
      +    // message length against number of received message bytes.
      +    /**
      +     * Checks if is neg token arg.
      +     *
      +     * @param message
      +     *            the message
      +     *
      +     * @return true, if is neg token arg
      +     */
      +    public static boolean isNegTokenArg(final byte[] message) {
      +
      +        // Message should always contains at least some kind of
      +        // id byte and length. If it is too short, it
      +        // cannot be a SPNEGO message.
      +<span class="pc bpc" id="L101" title="2 of 4 branches missed.">        if (message == null || message.length &lt; 2) {</span>
      +<span class="nc" id="L102">            return false;</span>
      +        }
      +
      +        // Check if this is NegTokenArg packet, it's id is 0xa1
      +<span class="fc bfc" id="L106" title="All 2 branches covered.">        if ((message[0] &amp; 0xff) != 0xa1) {</span>
      +<span class="fc" id="L107">            return false;</span>
      +        }
      +
      +        int lenBytes;
      +        int len;
      +
      +        // Get length of message for additional check.
      +<span class="pc bpc" id="L114" title="1 of 2 branches missed.">        if ((message[1] &amp; 0x80) == 0) {</span>
      +<span class="fc" id="L115">            len = message[1];</span>
      +        } else {
      +<span class="nc" id="L117">            lenBytes = message[1] &amp; 0x7f;</span>
      +<span class="nc" id="L118">            len = 0;</span>
      +<span class="nc" id="L119">            final int i = 2;</span>
      +<span class="nc bnc" id="L120" title="All 2 branches missed.">            while (lenBytes &gt; 0) {</span>
      +<span class="nc" id="L121">                len = len &lt;&lt; 8;</span>
      +<span class="nc" id="L122">                len |= message[i] &amp; 0xff;</span>
      +<span class="nc" id="L123">                --lenBytes;</span>
      +            }
      +        }
      +
      +<span class="fc bfc" id="L127" title="All 2 branches covered.">        return len + 2 == message.length;</span>
      +    }
      +
      +    /**
      +     * Instantiates a new SP nego message.
      +     */
      +    private SPNegoMessage() {
      +        // Prevent Instantiation of object
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/WaffleInfo.html b/waffle-jna-jakarta/jacoco/waffle.util/WaffleInfo.html
      new file mode 100644
      index 0000000000..bdcd209e81
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/WaffleInfo.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WaffleInfo</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.util</a> &gt; <span class="el_class">WaffleInfo</span></div><h1>WaffleInfo</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">236 of 540</td><td class="ctr2">56%</td><td class="bar">20 of 27</td><td class="ctr2">25%</td><td class="ctr1">15</td><td class="ctr2">23</td><td class="ctr1">55</td><td class="ctr2">132</td><td class="ctr1">2</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a5"><a href="WaffleInfo.java.html#L327" class="el_method">main(String[])</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="76" height="10" title="121" alt="121"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="13" alt="13"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f0">8</td><td class="ctr2" id="g0">8</td><td class="ctr1" id="h0">29</td><td class="ctr2" id="i1">29</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="WaffleInfo.java.html#L151" class="el_method">getAuthProviderInfo(Document)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="43" height="10" title="69" alt="69"/><img src="../jacoco-resources/greenbar.gif" width="76" height="10" title="120" alt="120"/></td><td class="ctr2" id="c6">63%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="27" height="10" title="3" alt="3"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">14</td><td class="ctr2" id="i0">41</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a7"><a href="WaffleInfo.java.html#L304" class="el_method">toPrettyXML(Document)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="42" alt="42"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h2">11</td><td class="ctr2" id="i4">11</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="WaffleInfo.java.html#L112" class="el_method">getWaffleInfo()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="37" height="10" title="59" alt="59"/></td><td class="ctr2" id="c5">93%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="27" height="10" title="3" alt="3"/></td><td class="ctr2" id="e1">50%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i2">18</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="WaffleInfo.java.html#L226" class="el_method">addAccountInfo(Document, Element, IWindowsAccount)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="31" height="10" title="49" alt="49"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i3">13</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="WaffleInfo.java.html#L276" class="el_method">getException(Document, Exception)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/greenbar.gif" width="25" height="10" title="40" alt="40"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="9" height="10" title="1" alt="1"/></td><td class="ctr2" id="e2">50%</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">10</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="WaffleInfo.java.html#L254" class="el_method">getLookupInfo(Document, String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/greenbar.gif" width="18" height="10" title="29" alt="29"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">8</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a6"><a href="WaffleInfo.java.html#L99" class="el_method">static {...}</a></td><td class="bar" id="b7"><img src="../jacoco-resources/greenbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a8"><a href="WaffleInfo.java.html#L96" class="el_method">WaffleInfo()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/greenbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/WaffleInfo.java.html b/waffle-jna-jakarta/jacoco/waffle.util/WaffleInfo.java.html
      new file mode 100644
      index 0000000000..16fdf96afc
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/WaffleInfo.java.html
      @@ -0,0 +1,371 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WaffleInfo.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.util</a> &gt; <span class="el_source">WaffleInfo.java</span></div><h1>WaffleInfo.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2022 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.util;
      +
      +import com.sun.jna.Platform;
      +import com.sun.jna.platform.WindowUtils;
      +import com.sun.jna.platform.win32.LMJoin;
      +import com.sun.jna.platform.win32.Netapi32Util;
      +import com.sun.jna.platform.win32.Win32Exception;
      +
      +import java.awt.Desktop;
      +import java.io.File;
      +import java.io.IOException;
      +import java.io.StringWriter;
      +import java.nio.charset.StandardCharsets;
      +import java.nio.file.Files;
      +import java.nio.file.StandardOpenOption;
      +import java.util.ArrayList;
      +import java.util.Arrays;
      +import java.util.List;
      +
      +import javax.xml.XMLConstants;
      +import javax.xml.parsers.DocumentBuilderFactory;
      +import javax.xml.parsers.ParserConfigurationException;
      +import javax.xml.transform.OutputKeys;
      +import javax.xml.transform.Transformer;
      +import javax.xml.transform.TransformerException;
      +import javax.xml.transform.TransformerFactory;
      +import javax.xml.transform.dom.DOMSource;
      +import javax.xml.transform.stream.StreamResult;
      +
      +import org.slf4j.Logger;
      +import org.slf4j.LoggerFactory;
      +import org.w3c.dom.Document;
      +import org.w3c.dom.Element;
      +
      +import waffle.windows.auth.IWindowsAccount;
      +import waffle.windows.auth.IWindowsAuthProvider;
      +import waffle.windows.auth.IWindowsComputer;
      +import waffle.windows.auth.IWindowsDomain;
      +import waffle.windows.auth.impl.WindowsAccountImpl;
      +import waffle.windows.auth.impl.WindowsAuthProviderImpl;
      +
      +/**
      + * A Utility class to read system info to help troubleshoot WAFFLE system configuration.
      + *
      + * &lt;pre&gt;
      + * This utility class collects system information and returns it as an XML document.
      + * &lt;/pre&gt;
      + *
      + * From the command line, you can write the info to stdout using:
      + *
      + * &lt;pre&gt;
      + * &lt;code&gt;
      + *   java -cp &quot;jna.jar;waffle-core.jar;waffle-api.jar;jna-platform.jar;guava-21.0.jar&quot; waffle.util.WaffleInfo
      + * &lt;/code&gt;
      + * &lt;/pre&gt;
      + *
      + * To show this information in a browser, run:
      + *
      + * &lt;pre&gt;
      + * &lt;code&gt;
      + *   java -cp &quot;...&quot; waffle.util.WaffleInfo -show
      + * &lt;/code&gt;
      + * &lt;/pre&gt;
      + *
      + * To lookup account names and return any listed info, run:
      + *
      + * &lt;pre&gt;
      + * &lt;code&gt;
      + *   java -cp &quot;...&quot; waffle.util.WaffleInfo -lookup AccountName
      + * &lt;/code&gt;
      + * &lt;/pre&gt;
      + */
      +<span class="fc" id="L96">public class WaffleInfo {</span>
      +
      +    /** The Constant LOGGER. */
      +<span class="fc" id="L99">    private static final Logger LOGGER = LoggerFactory.getLogger(WaffleInfo.class);</span>
      +
      +    /**
      +     * Get a Document with basic system information.
      +     * &lt;p&gt;
      +     * This uses the builtin jakarta.xml package even though the API is quite verbose
      +     *
      +     * @return Document with waffle info.
      +     *
      +     * @throws ParserConfigurationException
      +     *             when getting new document builder.
      +     */
      +    public Document getWaffleInfo() throws ParserConfigurationException {
      +<span class="fc" id="L112">        final DocumentBuilderFactory df = DocumentBuilderFactory.newInstance();</span>
      +<span class="fc" id="L113">        df.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, &quot;&quot;);</span>
      +<span class="fc" id="L114">        df.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, &quot;&quot;);</span>
      +<span class="fc" id="L115">        df.setExpandEntityReferences(false);</span>
      +
      +<span class="fc" id="L117">        final Document doc = df.newDocumentBuilder().newDocument();</span>
      +
      +        // create the root element and add it to the document
      +<span class="fc" id="L120">        final Element root = doc.createElement(&quot;waffle&quot;);</span>
      +
      +        // Add Version Information as attributes
      +<span class="fc" id="L123">        String version = WaffleInfo.class.getPackage().getImplementationVersion();</span>
      +<span class="pc bpc" id="L124" title="1 of 2 branches missed.">        if (version != null) {</span>
      +<span class="nc" id="L125">            root.setAttribute(&quot;version&quot;, version);</span>
      +        }
      +<span class="fc" id="L127">        version = Platform.class.getPackage().getImplementationVersion();</span>
      +<span class="pc bpc" id="L128" title="1 of 2 branches missed.">        if (version != null) {</span>
      +<span class="fc" id="L129">            root.setAttribute(&quot;jna&quot;, version);</span>
      +        }
      +<span class="fc" id="L131">        version = WindowUtils.class.getPackage().getImplementationVersion();</span>
      +<span class="pc bpc" id="L132" title="1 of 2 branches missed.">        if (version != null) {</span>
      +<span class="fc" id="L133">            root.setAttribute(&quot;jna-platform&quot;, version);</span>
      +        }
      +
      +<span class="fc" id="L136">        doc.appendChild(root);</span>
      +<span class="fc" id="L137">        root.appendChild(this.getAuthProviderInfo(doc));</span>
      +
      +<span class="fc" id="L139">        return doc;</span>
      +    }
      +
      +    /**
      +     * Gets the auth provider info.
      +     *
      +     * @param doc
      +     *            the doc
      +     *
      +     * @return the auth provider info
      +     */
      +    protected Element getAuthProviderInfo(final Document doc) {
      +<span class="fc" id="L151">        final IWindowsAuthProvider auth = new WindowsAuthProviderImpl();</span>
      +
      +<span class="fc" id="L153">        final Element node = doc.createElement(&quot;auth&quot;);</span>
      +<span class="fc" id="L154">        node.setAttribute(&quot;class&quot;, auth.getClass().getName());</span>
      +
      +        // Current User
      +<span class="fc" id="L157">        Element child = doc.createElement(&quot;currentUser&quot;);</span>
      +<span class="fc" id="L158">        node.appendChild(child);</span>
      +
      +<span class="fc" id="L160">        final String currentUsername = WindowsAccountImpl.getCurrentUsername();</span>
      +<span class="fc" id="L161">        this.addAccountInfo(doc, child, new WindowsAccountImpl(currentUsername));</span>
      +
      +        // Computer
      +<span class="fc" id="L164">        child = doc.createElement(&quot;computer&quot;);</span>
      +<span class="fc" id="L165">        node.appendChild(child);</span>
      +
      +<span class="fc" id="L167">        final IWindowsComputer c = auth.getCurrentComputer();</span>
      +<span class="fc" id="L168">        Element value = doc.createElement(&quot;computerName&quot;);</span>
      +<span class="fc" id="L169">        value.setTextContent(c.getComputerName());</span>
      +<span class="fc" id="L170">        child.appendChild(value);</span>
      +
      +<span class="fc" id="L172">        value = doc.createElement(&quot;memberOf&quot;);</span>
      +<span class="fc" id="L173">        value.setTextContent(c.getMemberOf());</span>
      +<span class="fc" id="L174">        child.appendChild(value);</span>
      +
      +<span class="fc" id="L176">        value = doc.createElement(&quot;joinStatus&quot;);</span>
      +<span class="fc" id="L177">        value.setTextContent(c.getJoinStatus());</span>
      +<span class="fc" id="L178">        child.appendChild(value);</span>
      +
      +<span class="fc" id="L180">        value = doc.createElement(&quot;groups&quot;);</span>
      +        Element g;
      +<span class="fc bfc" id="L182" title="All 2 branches covered.">        for (final String s : c.getGroups()) {</span>
      +<span class="fc" id="L183">            g = doc.createElement(&quot;group&quot;);</span>
      +<span class="fc" id="L184">            g.setTextContent(s);</span>
      +<span class="fc" id="L185">            value.appendChild(g);</span>
      +        }
      +<span class="fc" id="L187">        child.appendChild(value);</span>
      +
      +        // Only Show Domains if we are in a Domain
      +<span class="pc bpc" id="L190" title="1 of 2 branches missed.">        if (Netapi32Util.getJoinStatus() == LMJoin.NETSETUP_JOIN_STATUS.NetSetupDomainName) {</span>
      +<span class="nc" id="L191">            child = doc.createElement(&quot;domains&quot;);</span>
      +<span class="nc" id="L192">            node.appendChild(child);</span>
      +
      +            Element d;
      +<span class="nc bnc" id="L195" title="All 2 branches missed.">            for (final IWindowsDomain domain : auth.getDomains()) {</span>
      +<span class="nc" id="L196">                d = doc.createElement(&quot;domain&quot;);</span>
      +<span class="nc" id="L197">                node.appendChild(d);</span>
      +
      +<span class="nc" id="L199">                value = doc.createElement(&quot;FQN&quot;);</span>
      +<span class="nc" id="L200">                value.setTextContent(domain.getFqn());</span>
      +<span class="nc" id="L201">                child.appendChild(value);</span>
      +
      +<span class="nc" id="L203">                value = doc.createElement(&quot;TrustTypeString&quot;);</span>
      +<span class="nc" id="L204">                value.setTextContent(domain.getTrustTypeString());</span>
      +<span class="nc" id="L205">                child.appendChild(value);</span>
      +
      +<span class="nc" id="L207">                value = doc.createElement(&quot;TrustDirectionString&quot;);</span>
      +<span class="nc" id="L208">                value.setTextContent(domain.getTrustDirectionString());</span>
      +<span class="nc" id="L209">                child.appendChild(value);</span>
      +            }
      +        }
      +<span class="fc" id="L212">        return node;</span>
      +    }
      +
      +    /**
      +     * Adds the account info.
      +     *
      +     * @param doc
      +     *            the doc
      +     * @param node
      +     *            the node
      +     * @param account
      +     *            the account
      +     */
      +    protected void addAccountInfo(final Document doc, final Element node, final IWindowsAccount account) {
      +<span class="fc" id="L226">        Element value = doc.createElement(&quot;Name&quot;);</span>
      +<span class="fc" id="L227">        value.setTextContent(account.getName());</span>
      +<span class="fc" id="L228">        node.appendChild(value);</span>
      +
      +<span class="fc" id="L230">        value = doc.createElement(&quot;FQN&quot;);</span>
      +<span class="fc" id="L231">        value.setTextContent(account.getFqn());</span>
      +<span class="fc" id="L232">        node.appendChild(value);</span>
      +
      +<span class="fc" id="L234">        value = doc.createElement(&quot;Domain&quot;);</span>
      +<span class="fc" id="L235">        value.setTextContent(account.getDomain());</span>
      +<span class="fc" id="L236">        node.appendChild(value);</span>
      +
      +<span class="fc" id="L238">        value = doc.createElement(&quot;SID&quot;);</span>
      +<span class="fc" id="L239">        value.setTextContent(account.getSidString());</span>
      +<span class="fc" id="L240">        node.appendChild(value);</span>
      +<span class="fc" id="L241">    }</span>
      +
      +    /**
      +     * Gets the lookup info.
      +     *
      +     * @param doc
      +     *            the doc
      +     * @param lookup
      +     *            the lookup
      +     *
      +     * @return the lookup info
      +     */
      +    public Element getLookupInfo(final Document doc, final String lookup) {
      +<span class="fc" id="L254">        final IWindowsAuthProvider auth = new WindowsAuthProviderImpl();</span>
      +<span class="fc" id="L255">        final Element node = doc.createElement(&quot;lookup&quot;);</span>
      +<span class="fc" id="L256">        node.setAttribute(&quot;name&quot;, lookup);</span>
      +        try {
      +<span class="fc" id="L258">            this.addAccountInfo(doc, node, auth.lookupAccount(lookup));</span>
      +<span class="fc" id="L259">        } catch (final Win32Exception e) {</span>
      +<span class="fc" id="L260">            node.appendChild(WaffleInfo.getException(doc, e));</span>
      +<span class="fc" id="L261">        }</span>
      +<span class="fc" id="L262">        return node;</span>
      +    }
      +
      +    /**
      +     * Gets the exception.
      +     *
      +     * @param doc
      +     *            the doc
      +     * @param t
      +     *            the t
      +     *
      +     * @return the exception
      +     */
      +    public static Element getException(final Document doc, final Exception t) {
      +<span class="fc" id="L276">        final Element node = doc.createElement(&quot;exception&quot;);</span>
      +<span class="fc" id="L277">        node.setAttribute(&quot;class&quot;, t.getClass().getName());</span>
      +
      +<span class="fc" id="L279">        Element value = doc.createElement(&quot;message&quot;);</span>
      +<span class="pc bpc" id="L280" title="1 of 2 branches missed.">        if (t.getMessage() != null) {</span>
      +<span class="fc" id="L281">            value.setTextContent(t.getMessage());</span>
      +<span class="fc" id="L282">            node.appendChild(value);</span>
      +        }
      +
      +<span class="fc" id="L285">        value = doc.createElement(&quot;trace&quot;);</span>
      +<span class="fc" id="L286">        value.setTextContent(Arrays.toString(t.getStackTrace()));</span>
      +<span class="fc" id="L287">        node.appendChild(value);</span>
      +<span class="fc" id="L288">        return node;</span>
      +    }
      +
      +    /**
      +     * To pretty xml.
      +     *
      +     * @param doc
      +     *            the doc
      +     *
      +     * @return the string
      +     *
      +     * @throws TransformerException
      +     *             the transformer exception
      +     */
      +    public static String toPrettyXML(final Document doc) throws TransformerException {
      +        // set up a transformer
      +<span class="nc" id="L304">        final TransformerFactory transfac = TransformerFactory.newInstance();</span>
      +<span class="nc" id="L305">        transfac.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, &quot;&quot;);</span>
      +<span class="nc" id="L306">        transfac.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, &quot;&quot;);</span>
      +
      +<span class="nc" id="L308">        final Transformer trans = transfac.newTransformer();</span>
      +<span class="nc" id="L309">        trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, &quot;yes&quot;);</span>
      +<span class="nc" id="L310">        trans.setOutputProperty(OutputKeys.INDENT, &quot;yes&quot;);</span>
      +
      +        // create string from xml tree
      +<span class="nc" id="L313">        final StringWriter sw = new StringWriter();</span>
      +<span class="nc" id="L314">        final StreamResult result = new StreamResult(sw);</span>
      +<span class="nc" id="L315">        final DOMSource source = new DOMSource(doc);</span>
      +<span class="nc" id="L316">        trans.transform(source, result);</span>
      +<span class="nc" id="L317">        return sw.toString();</span>
      +    }
      +
      +    /**
      +     * Print system information.
      +     *
      +     * @param args
      +     *            variable arguments to pass to main. Valid values are &quot;-show&quot; and &quot;-lookup&quot;.
      +     */
      +    public static void main(final String[] args) {
      +<span class="nc" id="L327">        boolean show = false;</span>
      +<span class="nc" id="L328">        final List&lt;String&gt; lookup = new ArrayList&lt;&gt;();</span>
      +<span class="nc bnc" id="L329" title="All 2 branches missed.">        if (args != null) {</span>
      +            String arg;
      +<span class="nc bnc" id="L331" title="All 2 branches missed.">            for (int i = 0; i &lt; args.length; i++) {</span>
      +<span class="nc" id="L332">                arg = args[i];</span>
      +<span class="nc bnc" id="L333" title="All 2 branches missed.">                if (null != arg) {</span>
      +<span class="nc bnc" id="L334" title="All 3 branches missed.">                    switch (arg) {</span>
      +                        case &quot;-show&quot;:
      +<span class="nc" id="L336">                            show = true;</span>
      +<span class="nc" id="L337">                            break;</span>
      +                        case &quot;-lookup&quot;:
      +<span class="nc" id="L339">                            lookup.add(args[++i]);</span>
      +<span class="nc" id="L340">                            break;</span>
      +                        default:
      +<span class="nc" id="L342">                            WaffleInfo.LOGGER.error(&quot;Unknown Argument: {}&quot;, arg);</span>
      +<span class="nc" id="L343">                            throw new RuntimeException(&quot;Unknown Argument: &quot; + arg);</span>
      +                    }
      +                }
      +            }
      +        }
      +
      +<span class="nc" id="L349">        final WaffleInfo helper = new WaffleInfo();</span>
      +        try {
      +<span class="nc" id="L351">            final Document info = helper.getWaffleInfo();</span>
      +<span class="nc bnc" id="L352" title="All 2 branches missed.">            for (final String name : lookup) {</span>
      +<span class="nc" id="L353">                info.getDocumentElement().appendChild(helper.getLookupInfo(info, name));</span>
      +<span class="nc" id="L354">            }</span>
      +
      +<span class="nc" id="L356">            final String xml = WaffleInfo.toPrettyXML(info);</span>
      +            final File f;
      +<span class="nc bnc" id="L358" title="All 2 branches missed.">            if (show) {</span>
      +<span class="nc" id="L359">                f = Files.createTempFile(&quot;waffle-info-&quot;, &quot;.xml&quot;).toFile();</span>
      +<span class="nc" id="L360">                Files.write(f.toPath(), xml.getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND);</span>
      +<span class="nc" id="L361">                Desktop.getDesktop().open(f);</span>
      +            } else {
      +<span class="nc" id="L363">                WaffleInfo.LOGGER.info(xml);</span>
      +            }
      +<span class="nc" id="L365">        } catch (final IOException | TransformerException | ParserConfigurationException e) {</span>
      +<span class="nc" id="L366">            WaffleInfo.LOGGER.error(e.getMessage());</span>
      +<span class="nc" id="L367">            WaffleInfo.LOGGER.trace(&quot;&quot;, e);</span>
      +<span class="nc" id="L368">        }</span>
      +<span class="nc" id="L369">    }</span>
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/index.html b/waffle-jna-jakarta/jacoco/waffle.util/index.html
      new file mode 100644
      index 0000000000..c7efac9c8d
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/index.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.util</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.util</span></div><h1>waffle.util</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">428 of 1,054</td><td class="ctr2">59%</td><td class="bar">63 of 109</td><td class="ctr2">42%</td><td class="ctr1">51</td><td class="ctr2">86</td><td class="ctr1">96</td><td class="ctr2">231</td><td class="ctr1">10</td><td class="ctr2">31</td><td class="ctr1">1</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a5"><a href="WaffleInfo.html" class="el_class">WaffleInfo</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="52" height="10" title="236" alt="236"/><img src="../jacoco-resources/greenbar.gif" width="67" height="10" title="304" alt="304"/></td><td class="ctr2" id="c3">56%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="75" height="10" title="20" alt="20"/><img src="../jacoco-resources/greenbar.gif" width="26" height="10" title="7" alt="7"/></td><td class="ctr2" id="e3">25%</td><td class="ctr1" id="f1">15</td><td class="ctr2" id="g1">23</td><td class="ctr1" id="h0">55</td><td class="ctr2" id="i0">132</td><td class="ctr1" id="j1">2</td><td class="ctr2" id="k1">9</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="AuthorizationHeader.html" class="el_class">AuthorizationHeader</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="25" height="10" title="115" alt="115"/><img src="../jacoco-resources/greenbar.gif" width="11" height="10" title="50" alt="50"/></td><td class="ctr2" id="c4">30%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="101" height="10" title="27" alt="27"/><img src="../jacoco-resources/greenbar.gif" width="18" height="10" title="5" alt="5"/></td><td class="ctr2" id="e4">15%</td><td class="ctr1" id="f0">22</td><td class="ctr2" id="g0">28</td><td class="ctr1" id="h1">25</td><td class="ctr2" id="i1">38</td><td class="ctr1" id="j0">6</td><td class="ctr2" id="k0">12</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a4"><a href="SPNegoMessage.html" class="el_class">SPNegoMessage</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="40" alt="40"/><img src="../jacoco-resources/greenbar.gif" width="27" height="10" title="125" alt="125"/></td><td class="ctr2" id="c2">75%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="33" height="10" title="9" alt="9"/><img src="../jacoco-resources/greenbar.gif" width="63" height="10" title="17" alt="17"/></td><td class="ctr2" id="e2">65%</td><td class="ctr1" id="f2">8</td><td class="ctr2" id="g2">16</td><td class="ctr1" id="h2">11</td><td class="ctr2" id="i2">28</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k2">3</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a3"><a href="NtlmServletRequest.html" class="el_class">NtlmServletRequest</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="31" alt="31"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="4" alt="4"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g5">4</td><td class="ctr1" id="h3">3</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j2">2</td><td class="ctr2" id="k4">2</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a1"><a href="CorsPreFlightCheck.html" class="el_class">CorsPreFlightCheck</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="6" alt="6"/><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="78" alt="78"/></td><td class="ctr2" id="c1">92%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="33" height="10" title="9" alt="9"/></td><td class="ctr2" id="e1">75%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g3">8</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i3">22</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k5">2</td><td class="ctr1" id="l4">0</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a2"><a href="NtlmMessage.html" class="el_class">NtlmMessage</a></td><td class="bar" id="b5"><img src="../jacoco-resources/greenbar.gif" width="15" height="10" title="69" alt="69"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d5"><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g4">7</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i4">8</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k3">3</td><td class="ctr1" id="l5">0</td><td class="ctr2" id="m5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.util/index.source.html b/waffle-jna-jakarta/jacoco/waffle.util/index.source.html
      new file mode 100644
      index 0000000000..91703f263e
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.util/index.source.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.util</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.util</span></div><h1>waffle.util</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">428 of 1,054</td><td class="ctr2">59%</td><td class="bar">63 of 109</td><td class="ctr2">42%</td><td class="ctr1">51</td><td class="ctr2">86</td><td class="ctr1">96</td><td class="ctr2">231</td><td class="ctr1">10</td><td class="ctr2">31</td><td class="ctr1">1</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a5"><a href="WaffleInfo.java.html" class="el_source">WaffleInfo.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="52" height="10" title="236" alt="236"/><img src="../jacoco-resources/greenbar.gif" width="67" height="10" title="304" alt="304"/></td><td class="ctr2" id="c3">56%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="75" height="10" title="20" alt="20"/><img src="../jacoco-resources/greenbar.gif" width="26" height="10" title="7" alt="7"/></td><td class="ctr2" id="e3">25%</td><td class="ctr1" id="f1">15</td><td class="ctr2" id="g1">23</td><td class="ctr1" id="h0">55</td><td class="ctr2" id="i0">132</td><td class="ctr1" id="j1">2</td><td class="ctr2" id="k1">9</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="AuthorizationHeader.java.html" class="el_source">AuthorizationHeader.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="25" height="10" title="115" alt="115"/><img src="../jacoco-resources/greenbar.gif" width="11" height="10" title="50" alt="50"/></td><td class="ctr2" id="c4">30%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="101" height="10" title="27" alt="27"/><img src="../jacoco-resources/greenbar.gif" width="18" height="10" title="5" alt="5"/></td><td class="ctr2" id="e4">15%</td><td class="ctr1" id="f0">22</td><td class="ctr2" id="g0">28</td><td class="ctr1" id="h1">25</td><td class="ctr2" id="i1">38</td><td class="ctr1" id="j0">6</td><td class="ctr2" id="k0">12</td><td class="ctr1" id="l2">0</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a4"><a href="SPNegoMessage.java.html" class="el_source">SPNegoMessage.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="40" alt="40"/><img src="../jacoco-resources/greenbar.gif" width="27" height="10" title="125" alt="125"/></td><td class="ctr2" id="c2">75%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="33" height="10" title="9" alt="9"/><img src="../jacoco-resources/greenbar.gif" width="63" height="10" title="17" alt="17"/></td><td class="ctr2" id="e2">65%</td><td class="ctr1" id="f2">8</td><td class="ctr2" id="g2">16</td><td class="ctr1" id="h2">11</td><td class="ctr2" id="i2">28</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k2">3</td><td class="ctr1" id="l3">0</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a3"><a href="NtlmServletRequest.java.html" class="el_source">NtlmServletRequest.java</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="31" alt="31"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="4" alt="4"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g5">4</td><td class="ctr1" id="h3">3</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j2">2</td><td class="ctr2" id="k4">2</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a1"><a href="CorsPreFlightCheck.java.html" class="el_source">CorsPreFlightCheck.java</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="6" alt="6"/><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="78" alt="78"/></td><td class="ctr2" id="c1">92%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="33" height="10" title="9" alt="9"/></td><td class="ctr2" id="e1">75%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g3">8</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i3">22</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k5">2</td><td class="ctr1" id="l4">0</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a2"><a href="NtlmMessage.java.html" class="el_source">NtlmMessage.java</a></td><td class="bar" id="b5"><img src="../jacoco-resources/greenbar.gif" width="15" height="10" title="69" alt="69"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d5"><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g4">7</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i4">8</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k3">3</td><td class="ctr1" id="l5">0</td><td class="ctr2" id="m5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAccountImpl.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAccountImpl.html
      new file mode 100644
      index 0000000000..025033e8c3
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAccountImpl.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsAccountImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_class">WindowsAccountImpl</span></div><h1>WindowsAccountImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 36</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">8</td><td class="ctr1">0</td><td class="ctr2">12</td><td class="ctr1">0</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a5"><a href="WindowsAccountImpl.java.html#L47" class="el_method">WindowsAccountImpl(Advapi32Util.Account)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">3</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="WindowsAccountImpl.java.html#L70" class="el_method">WindowsAccountImpl(String, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a6"><a href="WindowsAccountImpl.java.html#L58" class="el_method">WindowsAccountImpl(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="100" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="WindowsAccountImpl.java.html#L89" class="el_method">getDomain()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="80" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="WindowsAccountImpl.java.html#L94" class="el_method">getFqn()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="80" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a3"><a href="WindowsAccountImpl.java.html#L104" class="el_method">getName()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/greenbar.gif" width="80" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">0</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a4"><a href="WindowsAccountImpl.java.html#L109" class="el_method">getSidString()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/greenbar.gif" width="80" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">0</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">0</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a0"><a href="WindowsAccountImpl.java.html#L79" class="el_method">getCurrentUsername()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">100%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">0</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAccountImpl.java.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAccountImpl.java.html
      new file mode 100644
      index 0000000000..c58b1fb29b
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAccountImpl.java.html
      @@ -0,0 +1,113 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsAccountImpl.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_source">WindowsAccountImpl.java</span></div><h1>WindowsAccountImpl.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.windows.auth.impl;
      +
      +import com.sun.jna.platform.win32.Advapi32Util;
      +import com.sun.jna.platform.win32.Advapi32Util.Account;
      +import com.sun.jna.platform.win32.Secur32.EXTENDED_NAME_FORMAT;
      +import com.sun.jna.platform.win32.Secur32Util;
      +
      +import waffle.windows.auth.IWindowsAccount;
      +
      +/**
      + * Windows Account.
      + */
      +public class WindowsAccountImpl implements IWindowsAccount {
      +
      +    /** The account. */
      +    private final Account account;
      +
      +    /**
      +     * Windows Account.
      +     *
      +     * @param newAccount
      +     *            Account.
      +     */
      +<span class="fc" id="L47">    public WindowsAccountImpl(final Account newAccount) {</span>
      +<span class="fc" id="L48">        this.account = newAccount;</span>
      +<span class="fc" id="L49">    }</span>
      +
      +    /**
      +     * Windows Account.
      +     *
      +     * @param userName
      +     *            Fully qualified username.
      +     */
      +    public WindowsAccountImpl(final String userName) {
      +<span class="fc" id="L58">        this(userName, null);</span>
      +<span class="fc" id="L59">    }</span>
      +
      +    /**
      +     * Windows Account.
      +     *
      +     * @param accountName
      +     *            Username, without a domain or machine.
      +     * @param systemName
      +     *            Machine name.
      +     */
      +    public WindowsAccountImpl(final String accountName, final String systemName) {
      +<span class="fc" id="L70">        this(Advapi32Util.getAccountByName(systemName, accountName));</span>
      +<span class="fc" id="L71">    }</span>
      +
      +    /**
      +     * Get the SAM-compatible username of the currently logged-on user.
      +     *
      +     * @return String.
      +     */
      +    public static String getCurrentUsername() {
      +<span class="fc" id="L79">        return Secur32Util.getUserNameEx(EXTENDED_NAME_FORMAT.NameSamCompatible);</span>
      +    }
      +
      +    /**
      +     * Account domain.
      +     *
      +     * @return String.
      +     */
      +    @Override
      +    public String getDomain() {
      +<span class="fc" id="L89">        return this.account.domain;</span>
      +    }
      +
      +    @Override
      +    public String getFqn() {
      +<span class="fc" id="L94">        return this.account.fqn;</span>
      +    }
      +
      +    /**
      +     * Account name.
      +     *
      +     * @return String.
      +     */
      +    @Override
      +    public String getName() {
      +<span class="fc" id="L104">        return this.account.name;</span>
      +    }
      +
      +    @Override
      +    public String getSidString() {
      +<span class="fc" id="L109">        return this.account.sidString;</span>
      +    }
      +
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAuthProviderImpl$ContinueContext.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAuthProviderImpl$ContinueContext.html
      new file mode 100644
      index 0000000000..285a892c47
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAuthProviderImpl$ContinueContext.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsAuthProviderImpl.ContinueContext</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_class">WindowsAuthProviderImpl.ContinueContext</span></div><h1>WindowsAuthProviderImpl.ContinueContext</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">9 of 9</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="WindowsAuthProviderImpl.java.html#L80" class="el_method">WindowsAuthProviderImpl.ContinueContext(Sspi.CtxtHandle, IWindowsCredentialsHandle)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAuthProviderImpl.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAuthProviderImpl.html
      new file mode 100644
      index 0000000000..803039fe61
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAuthProviderImpl.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsAuthProviderImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_class">WindowsAuthProviderImpl</span></div><h1>WindowsAuthProviderImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">272 of 313</td><td class="ctr2">13%</td><td class="bar">27 of 28</td><td class="ctr2">3%</td><td class="ctr1">21</td><td class="ctr2">26</td><td class="ctr1">60</td><td class="ctr2">70</td><td class="ctr1">6</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a0"><a href="WindowsAuthProviderImpl.java.html#L110" class="el_method">acceptSecurityToken(String, byte[], String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="183" alt="183"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="22" alt="22"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h0">44</td><td class="ctr2" id="i0">44</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="WindowsAuthProviderImpl.java.html#L193" class="el_method">getDomains()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="35" alt="35"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">5</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a6"><a href="WindowsAuthProviderImpl.java.html#L221" class="el_method">logonUser(String, String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="25" alt="25"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">4</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="WindowsAuthProviderImpl.java.html#L203" class="el_method">logonDomainUser(String, String, String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="8" alt="8"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a5"><a href="WindowsAuthProviderImpl.java.html#L210" class="el_method">logonDomainUserEx(String, String, String, int, int)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="6" alt="6"/><img src="../jacoco-resources/greenbar.gif" width="12" height="10" title="19" alt="19"/></td><td class="ctr2" id="c3">76%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="5" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="WindowsAuthProviderImpl.java.html#L185" class="el_method">getCurrentComputer()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="6" alt="6"/><img src="../jacoco-resources/greenbar.gif" width="3" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">50%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f7">0</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i4">3</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a8"><a href="WindowsAuthProviderImpl.java.html#L235" class="el_method">resetSecurityToken(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="5" alt="5"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="WindowsAuthProviderImpl.java.html#L244" class="el_method">getContinueContextsSize()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a10"><a href="WindowsAuthProviderImpl.java.html#L102" class="el_method">WindowsAuthProviderImpl(int)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/greenbar.gif" width="4" height="10" title="7" alt="7"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a7"><a href="WindowsAuthProviderImpl.java.html#L230" class="el_method">lookupAccount(String)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/greenbar.gif" width="3" height="10" title="5" alt="5"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">0</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">0</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a9"><a href="WindowsAuthProviderImpl.java.html#L93" class="el_method">WindowsAuthProviderImpl()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/greenbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">0</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAuthProviderImpl.java.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAuthProviderImpl.java.html
      new file mode 100644
      index 0000000000..58d329b7bd
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsAuthProviderImpl.java.html
      @@ -0,0 +1,247 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsAuthProviderImpl.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_source">WindowsAuthProviderImpl.java</span></div><h1>WindowsAuthProviderImpl.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.windows.auth.impl;
      +
      +import com.sun.jna.platform.win32.Advapi32;
      +import com.sun.jna.platform.win32.Kernel32;
      +import com.sun.jna.platform.win32.Netapi32Util;
      +import com.sun.jna.platform.win32.Netapi32Util.DomainTrust;
      +import com.sun.jna.platform.win32.Secur32;
      +import com.sun.jna.platform.win32.Sspi;
      +import com.sun.jna.platform.win32.Sspi.CtxtHandle;
      +import com.sun.jna.platform.win32.SspiUtil.ManagedSecBufferDesc;
      +import com.sun.jna.platform.win32.Win32Exception;
      +import com.sun.jna.platform.win32.WinBase;
      +import com.sun.jna.platform.win32.WinError;
      +import com.sun.jna.platform.win32.WinNT.HANDLEByReference;
      +import com.sun.jna.ptr.IntByReference;
      +
      +import java.net.InetAddress;
      +import java.net.UnknownHostException;
      +import java.util.ArrayList;
      +import java.util.List;
      +
      +import waffle.util.cache.Cache;
      +import waffle.windows.auth.IWindowsAccount;
      +import waffle.windows.auth.IWindowsAuthProvider;
      +import waffle.windows.auth.IWindowsComputer;
      +import waffle.windows.auth.IWindowsCredentialsHandle;
      +import waffle.windows.auth.IWindowsDomain;
      +import waffle.windows.auth.IWindowsIdentity;
      +import waffle.windows.auth.IWindowsSecurityContext;
      +
      +/**
      + * Windows Auth Provider.
      + */
      +public class WindowsAuthProviderImpl implements IWindowsAuthProvider {
      +
      +    /** The Continue Context Timeout. */
      +    public static final int CONTINUE_CONTEXT_TIMEOUT = 30;
      +
      +    /**
      +     * The Class ContinueContext.
      +     */
      +    private static class ContinueContext {
      +        /** The continue handle. */
      +        private CtxtHandle continueHandle;
      +
      +        /** The server credential. */
      +        private IWindowsCredentialsHandle serverCredential;
      +
      +        /**
      +         * Instantiates a new continue context.
      +         *
      +         * @param handle
      +         *            the handle
      +         * @param windowsCredential
      +         *            the windows credential
      +         */
      +<span class="nc" id="L80">        ContinueContext(final CtxtHandle handle, final IWindowsCredentialsHandle windowsCredential) {</span>
      +<span class="nc" id="L81">            this.continueHandle = handle;</span>
      +<span class="nc" id="L82">            this.serverCredential = windowsCredential;</span>
      +<span class="nc" id="L83">        }</span>
      +    }
      +
      +    /** The continue contexts. */
      +    private final Cache&lt;String, ContinueContext&gt; continueContexts;
      +
      +    /**
      +     * Instantiates a new windows auth provider impl.
      +     */
      +    public WindowsAuthProviderImpl() {
      +<span class="fc" id="L93">        this(WindowsAuthProviderImpl.CONTINUE_CONTEXT_TIMEOUT);</span>
      +<span class="fc" id="L94">    }</span>
      +
      +    /**
      +     * A Windows authentication provider.
      +     *
      +     * @param continueContextsTimeout
      +     *            Timeout for security contexts in seconds.
      +     */
      +<span class="fc" id="L102">    public WindowsAuthProviderImpl(final int continueContextsTimeout) {</span>
      +<span class="fc" id="L103">        this.continueContexts = Cache.newCache(continueContextsTimeout);</span>
      +<span class="fc" id="L104">    }</span>
      +
      +    @Override
      +    public IWindowsSecurityContext acceptSecurityToken(final String connectionId, final byte[] token,
      +            final String securityPackage) {
      +
      +<span class="nc bnc" id="L110" title="All 4 branches missed.">        if (token == null || token.length == 0) {</span>
      +<span class="nc" id="L111">            this.resetSecurityToken(connectionId);</span>
      +<span class="nc" id="L112">            throw new Win32Exception(WinError.SEC_E_INVALID_TOKEN);</span>
      +        }
      +
      +<span class="nc" id="L115">        CtxtHandle continueHandle = null;</span>
      +        IWindowsCredentialsHandle serverCredential;
      +<span class="nc" id="L117">        ContinueContext continueContext = this.continueContexts.get(connectionId);</span>
      +<span class="nc bnc" id="L118" title="All 2 branches missed.">        if (continueContext != null) {</span>
      +<span class="nc" id="L119">            continueHandle = continueContext.continueHandle;</span>
      +<span class="nc" id="L120">            serverCredential = continueContext.serverCredential;</span>
      +        } else {
      +<span class="nc" id="L122">            serverCredential = new WindowsCredentialsHandleImpl(null, Sspi.SECPKG_CRED_INBOUND, securityPackage);</span>
      +<span class="nc" id="L123">            serverCredential.initialize();</span>
      +        }
      +
      +        WindowsSecurityContextImpl sc;
      +
      +        int rc;
      +<span class="nc" id="L129">        int tokenSize = Sspi.MAX_TOKEN_SIZE;</span>
      +
      +        do {
      +<span class="nc" id="L132">            final ManagedSecBufferDesc pbServerToken = new ManagedSecBufferDesc(Sspi.SECBUFFER_TOKEN, tokenSize);</span>
      +<span class="nc" id="L133">            final ManagedSecBufferDesc pbClientToken = new ManagedSecBufferDesc(Sspi.SECBUFFER_TOKEN, token);</span>
      +<span class="nc" id="L134">            final IntByReference pfClientContextAttr = new IntByReference();</span>
      +
      +<span class="nc" id="L136">            final CtxtHandle phNewServerContext = new CtxtHandle();</span>
      +<span class="nc" id="L137">            rc = Secur32.INSTANCE.AcceptSecurityContext(serverCredential.getHandle(), continueHandle, pbClientToken,</span>
      +                    Sspi.ISC_REQ_CONNECTION, Sspi.SECURITY_NATIVE_DREP, phNewServerContext, pbServerToken,
      +                    pfClientContextAttr, null);
      +
      +<span class="nc" id="L141">            sc = new WindowsSecurityContextImpl();</span>
      +<span class="nc" id="L142">            sc.setCredentialsHandle(serverCredential);</span>
      +<span class="nc" id="L143">            sc.setSecurityPackage(securityPackage);</span>
      +<span class="nc" id="L144">            sc.setSecurityContext(phNewServerContext);</span>
      +
      +<span class="nc bnc" id="L146" title="All 4 branches missed.">            switch (rc) {</span>
      +                case WinError.SEC_E_BUFFER_TOO_SMALL:
      +<span class="nc" id="L148">                    tokenSize += Sspi.MAX_TOKEN_SIZE;</span>
      +<span class="nc" id="L149">                    sc.dispose();</span>
      +<span class="nc" id="L150">                    WindowsSecurityContextImpl.dispose(continueHandle);</span>
      +<span class="nc" id="L151">                    break;</span>
      +                case WinError.SEC_E_OK:
      +                    // the security context received from the client was accepted
      +<span class="nc" id="L154">                    this.resetSecurityToken(connectionId);</span>
      +                    // if an output token was generated by the function, it must be sent to the client process
      +<span class="nc bnc" id="L156" title="All 4 branches missed.">                    if (pbServerToken.pBuffers != null &amp;&amp; pbServerToken.cBuffers == 1</span>
      +<span class="nc bnc" id="L157" title="All 2 branches missed.">                            &amp;&amp; pbServerToken.getBuffer(0).cbBuffer &gt; 0) {</span>
      +<span class="nc bnc" id="L158" title="All 2 branches missed.">                        sc.setToken(pbServerToken.getBuffer(0).getBytes() == null ? new byte[0]</span>
      +<span class="nc" id="L159">                                : pbServerToken.getBuffer(0).getBytes().clone());</span>
      +                    }
      +<span class="nc" id="L161">                    sc.setContinue(false);</span>
      +<span class="nc" id="L162">                    break;</span>
      +                case WinError.SEC_I_CONTINUE_NEEDED:
      +                    // the server must send the output token to the client and wait for a returned token
      +<span class="nc" id="L165">                    continueContext = new ContinueContext(phNewServerContext, serverCredential);</span>
      +<span class="nc" id="L166">                    this.continueContexts.put(connectionId, continueContext);</span>
      +<span class="nc bnc" id="L167" title="All 2 branches missed.">                    sc.setToken(pbServerToken.getBuffer(0).getBytes() == null ? new byte[0]</span>
      +<span class="nc" id="L168">                            : pbServerToken.getBuffer(0).getBytes().clone());</span>
      +<span class="nc" id="L169">                    sc.setContinue(true);</span>
      +<span class="nc" id="L170">                    break;</span>
      +                default:
      +<span class="nc" id="L172">                    sc.dispose();</span>
      +<span class="nc" id="L173">                    WindowsSecurityContextImpl.dispose(continueHandle);</span>
      +<span class="nc" id="L174">                    this.resetSecurityToken(connectionId);</span>
      +<span class="nc" id="L175">                    throw new Win32Exception(rc);</span>
      +            }
      +<span class="nc bnc" id="L177" title="All 2 branches missed.">        } while (rc == WinError.SEC_E_BUFFER_TOO_SMALL);</span>
      +
      +<span class="nc" id="L179">        return sc;</span>
      +    }
      +
      +    @Override
      +    public IWindowsComputer getCurrentComputer() {
      +        try {
      +<span class="fc" id="L185">            return new WindowsComputerImpl(InetAddress.getLocalHost().getHostName());</span>
      +<span class="nc" id="L186">        } catch (final UnknownHostException e) {</span>
      +<span class="nc" id="L187">            throw new RuntimeException(e);</span>
      +        }
      +    }
      +
      +    @Override
      +    public IWindowsDomain[] getDomains() {
      +<span class="nc" id="L193">        final List&lt;IWindowsDomain&gt; domains = new ArrayList&lt;&gt;();</span>
      +<span class="nc" id="L194">        final DomainTrust[] trusts = Netapi32Util.getDomainTrusts();</span>
      +<span class="nc bnc" id="L195" title="All 2 branches missed.">        for (final DomainTrust trust : trusts) {</span>
      +<span class="nc" id="L196">            domains.add(new WindowsDomainImpl(trust));</span>
      +        }
      +<span class="nc" id="L198">        return domains.toArray(new IWindowsDomain[0]);</span>
      +    }
      +
      +    @Override
      +    public IWindowsIdentity logonDomainUser(final String username, final String domain, final String password) {
      +<span class="nc" id="L203">        return this.logonDomainUserEx(username, domain, password, WinBase.LOGON32_LOGON_NETWORK,</span>
      +                WinBase.LOGON32_PROVIDER_DEFAULT);
      +    }
      +
      +    @Override
      +    public IWindowsIdentity logonDomainUserEx(final String username, final String domain, final String password,
      +            final int logonType, final int logonProvider) {
      +<span class="fc" id="L210">        final HANDLEByReference phUser = new HANDLEByReference();</span>
      +<span class="pc bpc" id="L211" title="1 of 2 branches missed.">        if (!Advapi32.INSTANCE.LogonUser(username, domain, password, logonType, logonProvider, phUser)) {</span>
      +<span class="fc" id="L212">            throw new Win32Exception(Kernel32.INSTANCE.GetLastError());</span>
      +        }
      +<span class="nc" id="L214">        return new WindowsIdentityImpl(phUser.getValue());</span>
      +    }
      +
      +    @Override
      +    public IWindowsIdentity logonUser(final String username, final String password) {
      +        // username@domain UPN format is natively supported by the
      +        // Windows LogonUser API process domain\\username format
      +<span class="nc" id="L221">        final String[] userNameDomain = username.split(&quot;\\\\&quot;, 2);</span>
      +<span class="nc bnc" id="L222" title="All 2 branches missed.">        if (userNameDomain.length == 2) {</span>
      +<span class="nc" id="L223">            return this.logonDomainUser(userNameDomain[1], userNameDomain[0], password);</span>
      +        }
      +<span class="nc" id="L225">        return this.logonDomainUser(username, null, password);</span>
      +    }
      +
      +    @Override
      +    public IWindowsAccount lookupAccount(final String username) {
      +<span class="fc" id="L230">        return new WindowsAccountImpl(username);</span>
      +    }
      +
      +    @Override
      +    public void resetSecurityToken(final String connectionId) {
      +<span class="nc" id="L235">        this.continueContexts.remove(connectionId);</span>
      +<span class="nc" id="L236">    }</span>
      +
      +    /**
      +     * Number of elements in the continue contexts map.
      +     *
      +     * @return Number of elements in the hash map.
      +     */
      +    public int getContinueContextsSize() {
      +<span class="nc" id="L244">        return this.continueContexts.size();</span>
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsComputerImpl.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsComputerImpl.html
      new file mode 100644
      index 0000000000..2d712993f0
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsComputerImpl.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsComputerImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_class">WindowsComputerImpl</span></div><h1>WindowsComputerImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">12 of 71</td><td class="ctr2">83%</td><td class="bar">4 of 7</td><td class="ctr2">42%</td><td class="ctr1">4</td><td class="ctr2">10</td><td class="ctr1">4</td><td class="ctr2">18</td><td class="ctr1">0</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a2"><a href="WindowsComputerImpl.java.html#L74" class="el_method">getJoinStatus()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="41" height="10" title="12" alt="12"/><img src="../jacoco-resources/greenbar.gif" width="27" height="10" title="8" alt="8"/></td><td class="ctr2" id="c4">40%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="96" height="10" title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="24" height="10" title="1" alt="1"/></td><td class="ctr2" id="e1">20%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">7</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="WindowsComputerImpl.java.html#L64" class="el_method">getGroups()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="35" alt="35"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"><img src="../jacoco-resources/greenbar.gif" width="48" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">100%</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="WindowsComputerImpl.java.html#L52" class="el_method">WindowsComputerImpl(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="34" height="10" title="10" alt="10"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="WindowsComputerImpl.java.html#L59" class="el_method">getComputerName()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="WindowsComputerImpl.java.html#L91" class="el_method">getMemberOf()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsComputerImpl.java.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsComputerImpl.java.html
      new file mode 100644
      index 0000000000..7c589d39ad
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsComputerImpl.java.html
      @@ -0,0 +1,95 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsComputerImpl.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_source">WindowsComputerImpl.java</span></div><h1>WindowsComputerImpl.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.windows.auth.impl;
      +
      +import com.sun.jna.platform.win32.LMJoin;
      +import com.sun.jna.platform.win32.Netapi32Util;
      +import com.sun.jna.platform.win32.Netapi32Util.LocalGroup;
      +
      +import java.util.ArrayList;
      +import java.util.List;
      +
      +import waffle.windows.auth.IWindowsComputer;
      +
      +/**
      + * Windows Computer.
      + */
      +public class WindowsComputerImpl implements IWindowsComputer {
      +
      +    /** The computer name. */
      +    private final String computerName;
      +
      +    /** The domain name. */
      +    private final String domainName;
      +
      +    /**
      +     * Instantiates a new windows computer impl.
      +     *
      +     * @param newComputerName
      +     *            the new computer name
      +     */
      +<span class="fc" id="L52">    public WindowsComputerImpl(final String newComputerName) {</span>
      +<span class="fc" id="L53">        this.computerName = newComputerName;</span>
      +<span class="fc" id="L54">        this.domainName = Netapi32Util.getDomainName(newComputerName);</span>
      +<span class="fc" id="L55">    }</span>
      +
      +    @Override
      +    public String getComputerName() {
      +<span class="fc" id="L59">        return this.computerName;</span>
      +    }
      +
      +    @Override
      +    public String[] getGroups() {
      +<span class="fc" id="L64">        final List&lt;String&gt; groupNames = new ArrayList&lt;&gt;();</span>
      +<span class="fc" id="L65">        final LocalGroup[] groups = Netapi32Util.getLocalGroups(this.computerName);</span>
      +<span class="fc bfc" id="L66" title="All 2 branches covered.">        for (final LocalGroup group : groups) {</span>
      +<span class="fc" id="L67">            groupNames.add(group.name);</span>
      +        }
      +<span class="fc" id="L69">        return groupNames.toArray(new String[0]);</span>
      +    }
      +
      +    @Override
      +    public String getJoinStatus() {
      +<span class="fc" id="L74">        final int joinStatus = Netapi32Util.getJoinStatus(this.computerName);</span>
      +<span class="pc bpc" id="L75" title="4 of 5 branches missed.">        switch (joinStatus) {</span>
      +            case LMJoin.NETSETUP_JOIN_STATUS.NetSetupDomainName:
      +<span class="nc" id="L77">                return &quot;NetSetupDomainName&quot;;</span>
      +            case LMJoin.NETSETUP_JOIN_STATUS.NetSetupUnjoined:
      +<span class="nc" id="L79">                return &quot;NetSetupUnjoined&quot;;</span>
      +            case LMJoin.NETSETUP_JOIN_STATUS.NetSetupWorkgroupName:
      +<span class="fc" id="L81">                return &quot;NetSetupWorkgroupName&quot;;</span>
      +            case LMJoin.NETSETUP_JOIN_STATUS.NetSetupUnknownStatus:
      +<span class="nc" id="L83">                return &quot;NetSetupUnknownStatus&quot;;</span>
      +            default:
      +<span class="nc" id="L85">                throw new RuntimeException(&quot;Unsupported join status: &quot; + joinStatus);</span>
      +        }
      +    }
      +
      +    @Override
      +    public String getMemberOf() {
      +<span class="fc" id="L91">        return this.domainName;</span>
      +    }
      +
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsCredentialsHandleImpl.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsCredentialsHandleImpl.html
      new file mode 100644
      index 0000000000..ca8e1bacd7
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsCredentialsHandleImpl.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsCredentialsHandleImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_class">WindowsCredentialsHandleImpl</span></div><h1>WindowsCredentialsHandleImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">10 of 81</td><td class="ctr2">87%</td><td class="bar">4 of 8</td><td class="ctr2">50%</td><td class="ctr1">4</td><td class="ctr2">9</td><td class="ctr1">2</td><td class="ctr2">20</td><td class="ctr1">0</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a3"><a href="WindowsCredentialsHandleImpl.java.html#L90" class="el_method">initialize()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="5" alt="5"/><img src="../jacoco-resources/greenbar.gif" width="102" height="10" title="29" alt="29"/></td><td class="ctr2" id="c3">85%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="1" alt="1"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="WindowsCredentialsHandleImpl.java.html#L104" class="el_method">dispose()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="5" alt="5"/><img src="../jacoco-resources/greenbar.gif" width="56" height="10" title="16" alt="16"/></td><td class="ctr2" id="c4">76%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="e1">50%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="WindowsCredentialsHandleImpl.java.html#L64" class="el_method">WindowsCredentialsHandleImpl(String, int, String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/greenbar.gif" width="42" height="10" title="12" alt="12"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">0</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">0</td><td class="ctr2" id="i2">5</td><td class="ctr1" id="j2">0</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="WindowsCredentialsHandleImpl.java.html#L79" class="el_method">getCurrent(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/greenbar.gif" width="38" height="10" title="11" alt="11"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">0</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">0</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j3">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="WindowsCredentialsHandleImpl.java.html#L119" class="el_method">getHandle()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/greenbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">0</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">0</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">0</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsCredentialsHandleImpl.java.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsCredentialsHandleImpl.java.html
      new file mode 100644
      index 0000000000..16ec70e76e
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsCredentialsHandleImpl.java.html
      @@ -0,0 +1,122 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsCredentialsHandleImpl.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_source">WindowsCredentialsHandleImpl.java</span></div><h1>WindowsCredentialsHandleImpl.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.windows.auth.impl;
      +
      +import com.sun.jna.platform.win32.Secur32;
      +import com.sun.jna.platform.win32.Sspi;
      +import com.sun.jna.platform.win32.Sspi.CredHandle;
      +import com.sun.jna.platform.win32.Sspi.TimeStamp;
      +import com.sun.jna.platform.win32.Win32Exception;
      +import com.sun.jna.platform.win32.WinError;
      +
      +import waffle.windows.auth.IWindowsCredentialsHandle;
      +
      +/**
      + * Pre-existing credentials of a security principal. This is a handle to a previously authenticated logon data used by a
      + * security principal to establish its own identity, such as a password, or a Kerberos protocol ticket.
      + */
      +public class WindowsCredentialsHandleImpl implements IWindowsCredentialsHandle {
      +
      +    /** The principal name. */
      +    private final String principalName;
      +
      +    /** The credentials type. */
      +    private final int credentialsType;
      +
      +    /** The security package. */
      +    private final String securityPackage;
      +
      +    /** The handle. */
      +    private CredHandle handle;
      +
      +    /**
      +     * A new Windows credentials handle.
      +     *
      +     * @param newPrincipalName
      +     *            Principal name.
      +     * @param newCredentialsType
      +     *            Credentials type.
      +     * @param newSecurityPackage
      +     *            Security package.
      +     */
      +    public WindowsCredentialsHandleImpl(final String newPrincipalName, final int newCredentialsType,
      +<span class="fc" id="L64">            final String newSecurityPackage) {</span>
      +<span class="fc" id="L65">        this.principalName = newPrincipalName;</span>
      +<span class="fc" id="L66">        this.credentialsType = newCredentialsType;</span>
      +<span class="fc" id="L67">        this.securityPackage = newSecurityPackage;</span>
      +<span class="fc" id="L68">    }</span>
      +
      +    /**
      +     * Returns the current credentials handle.
      +     *
      +     * @param securityPackage
      +     *            Security package, eg. &quot;Negotiate&quot;.
      +     *
      +     * @return A windows credentials handle
      +     */
      +    public static IWindowsCredentialsHandle getCurrent(final String securityPackage) {
      +<span class="fc" id="L79">        final IWindowsCredentialsHandle handle = new WindowsCredentialsHandleImpl(null, Sspi.SECPKG_CRED_OUTBOUND,</span>
      +                securityPackage);
      +<span class="fc" id="L81">        handle.initialize();</span>
      +<span class="fc" id="L82">        return handle;</span>
      +    }
      +
      +    /**
      +     * Initialize a new credentials handle.
      +     */
      +    @Override
      +    public void initialize() {
      +<span class="fc" id="L90">        this.handle = new CredHandle();</span>
      +<span class="fc" id="L91">        final TimeStamp clientLifetime = new TimeStamp();</span>
      +<span class="fc" id="L92">        final int rc = Secur32.INSTANCE.AcquireCredentialsHandle(this.principalName, this.securityPackage,</span>
      +                this.credentialsType, null, null, null, null, this.handle, clientLifetime);
      +<span class="pc bpc" id="L94" title="1 of 2 branches missed.">        if (WinError.SEC_E_OK != rc) {</span>
      +<span class="nc" id="L95">            throw new Win32Exception(rc);</span>
      +        }
      +<span class="fc" id="L97">    }</span>
      +
      +    /**
      +     * Dispose of the credentials handle.
      +     */
      +    @Override
      +    public void dispose() {
      +<span class="pc bpc" id="L104" title="2 of 4 branches missed.">        if (this.handle != null &amp;&amp; !this.handle.isNull()) {</span>
      +<span class="fc" id="L105">            final int rc = Secur32.INSTANCE.FreeCredentialsHandle(this.handle);</span>
      +<span class="pc bpc" id="L106" title="1 of 2 branches missed.">            if (WinError.SEC_E_OK != rc) {</span>
      +<span class="nc" id="L107">                throw new Win32Exception(rc);</span>
      +            }
      +        }
      +<span class="fc" id="L110">    }</span>
      +
      +    /**
      +     * Get CredHandle.
      +     *
      +     * @return the handle
      +     */
      +    @Override
      +    public CredHandle getHandle() {
      +<span class="fc" id="L119">        return this.handle;</span>
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsDomainImpl$TrustDirection.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsDomainImpl$TrustDirection.html
      new file mode 100644
      index 0000000000..4751e12b6e
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsDomainImpl$TrustDirection.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsDomainImpl.TrustDirection</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_class">WindowsDomainImpl.TrustDirection</span></div><h1>WindowsDomainImpl.TrustDirection</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">21 of 21</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="WindowsDomainImpl.java.html#L38" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="21" alt="21"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsDomainImpl$TrustType.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsDomainImpl$TrustType.html
      new file mode 100644
      index 0000000000..9c923e4366
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsDomainImpl$TrustType.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsDomainImpl.TrustType</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_class">WindowsDomainImpl.TrustType</span></div><h1>WindowsDomainImpl.TrustType</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">45 of 45</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="WindowsDomainImpl.java.html#L51" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="45" alt="45"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">8</td><td class="ctr2" id="i0">8</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsDomainImpl.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsDomainImpl.html
      new file mode 100644
      index 0000000000..73e285de15
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsDomainImpl.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsDomainImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_class">WindowsDomainImpl</span></div><h1>WindowsDomainImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">83 of 83</td><td class="ctr2">0%</td><td class="bar">16 of 16</td><td class="ctr2">0%</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">23</td><td class="ctr2">23</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a3"><a href="WindowsDomainImpl.java.html#L73" class="el_method">WindowsDomainImpl(Netapi32Util.DomainTrust)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="60" alt="60"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="16" alt="16"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">9</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">17</td><td class="ctr2" id="i0">17</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a4"><a href="WindowsDomainImpl.java.html#L73" class="el_method">WindowsDomainImpl(String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="24" height="10" title="12" alt="12"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">5</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="WindowsDomainImpl.java.html#L123" class="el_method">getTrustDirectionString()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="WindowsDomainImpl.java.html#L128" class="el_method">getTrustTypeString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="WindowsDomainImpl.java.html#L118" class="el_method">getFqn()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsDomainImpl.java.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsDomainImpl.java.html
      new file mode 100644
      index 0000000000..8ecfc5c38f
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsDomainImpl.java.html
      @@ -0,0 +1,132 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsDomainImpl.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_source">WindowsDomainImpl.java</span></div><h1>WindowsDomainImpl.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.windows.auth.impl;
      +
      +import com.sun.jna.platform.win32.Netapi32Util.DomainTrust;
      +
      +import waffle.windows.auth.IWindowsDomain;
      +
      +/**
      + * Windows Domain.
      + */
      +public class WindowsDomainImpl implements IWindowsDomain {
      +
      +    /**
      +     * The Enum TrustDirection.
      +     */
      +<span class="nc" id="L38">    private enum TrustDirection {</span>
      +
      +        /** The inbound. */
      +<span class="nc" id="L41">        INBOUND,</span>
      +        /** The outbound. */
      +<span class="nc" id="L43">        OUTBOUND,</span>
      +        /** The bidirectional. */
      +<span class="nc" id="L45">        BIDIRECTIONAL</span>
      +    }
      +
      +    /**
      +     * The Enum TrustType.
      +     */
      +<span class="nc" id="L51">    private enum TrustType {</span>
      +
      +        /** The tree root. */
      +<span class="nc" id="L54">        TREE_ROOT,</span>
      +        /** The parent child. */
      +<span class="nc" id="L56">        PARENT_CHILD,</span>
      +        /** The cross link. */
      +<span class="nc" id="L58">        CROSS_LINK,</span>
      +        /** The external. */
      +<span class="nc" id="L60">        EXTERNAL,</span>
      +        /** The forest. */
      +<span class="nc" id="L62">        FOREST,</span>
      +        /** The kerberos. */
      +<span class="nc" id="L64">        KERBEROS,</span>
      +        /** The unknown. */
      +<span class="nc" id="L66">        UNKNOWN</span>
      +    }
      +
      +    /** The fqn. */
      +    private String fqn;
      +
      +    /** The trust direction. */
      +<span class="nc" id="L73">    private TrustDirection trustDirection = TrustDirection.BIDIRECTIONAL;</span>
      +
      +    /** The trust type. */
      +<span class="nc" id="L76">    private TrustType trustType = TrustType.UNKNOWN;</span>
      +
      +    /**
      +     * Instantiates a new windows domain impl.
      +     *
      +     * @param newFqn
      +     *            the new fqn
      +     */
      +<span class="nc" id="L84">    public WindowsDomainImpl(final String newFqn) {</span>
      +<span class="nc" id="L85">        this.fqn = newFqn;</span>
      +<span class="nc" id="L86">    }</span>
      +
      +    /**
      +     * Instantiates a new windows domain impl.
      +     *
      +     * @param trust
      +     *            the trust
      +     */
      +<span class="nc" id="L94">    public WindowsDomainImpl(final DomainTrust trust) {</span>
      +        // fqn
      +<span class="nc" id="L96">        this.fqn = trust.DnsDomainName;</span>
      +<span class="nc bnc" id="L97" title="All 4 branches missed.">        if (this.fqn == null || this.fqn.length() == 0) {</span>
      +<span class="nc" id="L98">            this.fqn = trust.NetbiosDomainName;</span>
      +        }
      +        // trust direction
      +<span class="nc bnc" id="L101" title="All 4 branches missed.">        if (trust.isInbound() &amp;&amp; trust.isOutbound()) {</span>
      +<span class="nc" id="L102">            this.trustDirection = TrustDirection.BIDIRECTIONAL;</span>
      +<span class="nc bnc" id="L103" title="All 2 branches missed.">        } else if (trust.isOutbound()) {</span>
      +<span class="nc" id="L104">            this.trustDirection = TrustDirection.OUTBOUND;</span>
      +<span class="nc bnc" id="L105" title="All 2 branches missed.">        } else if (trust.isInbound()) {</span>
      +<span class="nc" id="L106">            this.trustDirection = TrustDirection.INBOUND;</span>
      +        }
      +        // trust type
      +<span class="nc bnc" id="L109" title="All 2 branches missed.">        if (trust.isInForest()) {</span>
      +<span class="nc" id="L110">            this.trustType = TrustType.FOREST;</span>
      +<span class="nc bnc" id="L111" title="All 2 branches missed.">        } else if (trust.isRoot()) {</span>
      +<span class="nc" id="L112">            this.trustType = TrustType.TREE_ROOT;</span>
      +        }
      +<span class="nc" id="L114">    }</span>
      +
      +    @Override
      +    public String getFqn() {
      +<span class="nc" id="L118">        return this.fqn;</span>
      +    }
      +
      +    @Override
      +    public String getTrustDirectionString() {
      +<span class="nc" id="L123">        return this.trustDirection.toString();</span>
      +    }
      +
      +    @Override
      +    public String getTrustTypeString() {
      +<span class="nc" id="L128">        return this.trustType.toString();</span>
      +    }
      +
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsIdentityImpersonationContextImpl.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsIdentityImpersonationContextImpl.html
      new file mode 100644
      index 0000000000..fad1e27849
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsIdentityImpersonationContextImpl.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsIdentityImpersonationContextImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_class">WindowsIdentityImpersonationContextImpl</span></div><h1>WindowsIdentityImpersonationContextImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">17 of 17</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="WindowsIdentityImpersonationContextImpl.java.html#L44" class="el_method">WindowsIdentityImpersonationContextImpl(WinNT.HANDLE)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="13" alt="13"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="WindowsIdentityImpersonationContextImpl.java.html#L52" class="el_method">revertToSelf()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsIdentityImpersonationContextImpl.java.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsIdentityImpersonationContextImpl.java.html
      new file mode 100644
      index 0000000000..5667da226b
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsIdentityImpersonationContextImpl.java.html
      @@ -0,0 +1,55 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsIdentityImpersonationContextImpl.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_source">WindowsIdentityImpersonationContextImpl.java</span></div><h1>WindowsIdentityImpersonationContextImpl.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.windows.auth.impl;
      +
      +import com.sun.jna.platform.win32.Advapi32;
      +import com.sun.jna.platform.win32.Kernel32;
      +import com.sun.jna.platform.win32.Win32Exception;
      +import com.sun.jna.platform.win32.WinNT.HANDLE;
      +
      +import waffle.windows.auth.IWindowsImpersonationContext;
      +
      +/**
      + * The Class WindowsIdentityImpersonationContextImpl.
      + */
      +public class WindowsIdentityImpersonationContextImpl implements IWindowsImpersonationContext {
      +
      +    /**
      +     * Impersonate a logged on user.
      +     *
      +     * @param windowsIdentity
      +     *            Windows identity obtained via LogonUser.
      +     */
      +<span class="nc" id="L44">    public WindowsIdentityImpersonationContextImpl(final HANDLE windowsIdentity) {</span>
      +<span class="nc bnc" id="L45" title="All 2 branches missed.">        if (!Advapi32.INSTANCE.ImpersonateLoggedOnUser(windowsIdentity)) {</span>
      +<span class="nc" id="L46">            throw new Win32Exception(Kernel32.INSTANCE.GetLastError());</span>
      +        }
      +<span class="nc" id="L48">    }</span>
      +
      +    @Override
      +    public void revertToSelf() {
      +<span class="nc" id="L52">        Advapi32.INSTANCE.RevertToSelf();</span>
      +<span class="nc" id="L53">    }</span>
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsIdentityImpl.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsIdentityImpl.html
      new file mode 100644
      index 0000000000..335de6ced9
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsIdentityImpl.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsIdentityImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_class">WindowsIdentityImpl</span></div><h1>WindowsIdentityImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">140 of 140</td><td class="ctr2">0%</td><td class="bar">16 of 16</td><td class="ctr2">0%</td><td class="ctr1">18</td><td class="ctr2">18</td><td class="ctr1">30</td><td class="ctr2">30</td><td class="ctr1">10</td><td class="ctr2">10</td></tr></tfoot><tbody><tr><td id="a8"><a href="WindowsIdentityImpl.java.html#L130" class="el_method">isGuest()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="43" alt="43"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">5</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">8</td><td class="ctr2" id="i0">8</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="WindowsIdentityImpl.java.html#L95" class="el_method">getGroups()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="111" height="10" title="40" alt="40"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">6</td><td class="ctr2" id="i1">6</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a5"><a href="WindowsIdentityImpl.java.html#L81" class="el_method">getUserGroups()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="13" alt="13"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a6"><a href="WindowsIdentityImpl.java.html#L69" class="el_method">getWindowsAccount()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="11" alt="11"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h3">3</td><td class="ctr2" id="i3">3</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="WindowsIdentityImpl.java.html#L118" class="el_method">dispose()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="25" height="10" title="9" alt="9"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">2</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h4">3</td><td class="ctr2" id="i4">3</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a9"><a href="WindowsIdentityImpl.java.html#L59" class="el_method">WindowsIdentityImpl(WinNT.HANDLE)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="6" alt="6"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">3</td><td class="ctr2" id="i5">3</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a7"><a href="WindowsIdentityImpl.java.html#L125" class="el_method">impersonate()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="6" alt="6"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="WindowsIdentityImpl.java.html#L89" class="el_method">getFqn()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a3"><a href="WindowsIdentityImpl.java.html#L108" class="el_method">getSid()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a4"><a href="WindowsIdentityImpl.java.html#L113" class="el_method">getSidString()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsIdentityImpl.java.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsIdentityImpl.java.html
      new file mode 100644
      index 0000000000..2ee5dca552
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsIdentityImpl.java.html
      @@ -0,0 +1,144 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsIdentityImpl.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_source">WindowsIdentityImpl.java</span></div><h1>WindowsIdentityImpl.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.windows.auth.impl;
      +
      +import com.sun.jna.platform.win32.Advapi32Util;
      +import com.sun.jna.platform.win32.Advapi32Util.Account;
      +import com.sun.jna.platform.win32.Kernel32;
      +import com.sun.jna.platform.win32.WinNT.HANDLE;
      +import com.sun.jna.platform.win32.WinNT.WELL_KNOWN_SID_TYPE;
      +
      +import java.util.ArrayList;
      +import java.util.List;
      +
      +import waffle.windows.auth.IWindowsAccount;
      +import waffle.windows.auth.IWindowsIdentity;
      +import waffle.windows.auth.IWindowsImpersonationContext;
      +
      +/**
      + * Windows Identity.
      + */
      +public class WindowsIdentityImpl implements IWindowsIdentity {
      +
      +    /** The windows identity. */
      +    private final HANDLE windowsIdentity;
      +
      +    /** The user groups. */
      +    private Account[] userGroups;
      +
      +    /** The windows account. */
      +    private Account windowsAccount;
      +
      +    /**
      +     * Instantiates a new windows identity impl.
      +     *
      +     * @param newWindowsIdentity
      +     *            the new windows identity
      +     */
      +<span class="nc" id="L59">    public WindowsIdentityImpl(final HANDLE newWindowsIdentity) {</span>
      +<span class="nc" id="L60">        this.windowsIdentity = newWindowsIdentity;</span>
      +<span class="nc" id="L61">    }</span>
      +
      +    /**
      +     * Gets the windows account.
      +     *
      +     * @return the windows account
      +     */
      +    private Account getWindowsAccount() {
      +<span class="nc bnc" id="L69" title="All 2 branches missed.">        if (this.windowsAccount == null) {</span>
      +<span class="nc" id="L70">            this.windowsAccount = Advapi32Util.getTokenAccount(this.windowsIdentity);</span>
      +        }
      +<span class="nc" id="L72">        return this.windowsAccount;</span>
      +    }
      +
      +    /**
      +     * Gets the user groups.
      +     *
      +     * @return the user groups
      +     */
      +    private Account[] getUserGroups() {
      +<span class="nc bnc" id="L81" title="All 2 branches missed.">        if (this.userGroups == null) {</span>
      +<span class="nc" id="L82">            this.userGroups = Advapi32Util.getTokenGroups(this.windowsIdentity);</span>
      +        }
      +<span class="nc" id="L84">        return this.userGroups.clone();</span>
      +    }
      +
      +    @Override
      +    public String getFqn() {
      +<span class="nc" id="L89">        return this.getWindowsAccount().fqn;</span>
      +    }
      +
      +    @Override
      +    public IWindowsAccount[] getGroups() {
      +
      +<span class="nc" id="L95">        final Account[] groups = this.getUserGroups();</span>
      +
      +<span class="nc" id="L97">        final List&lt;IWindowsAccount&gt; result = new ArrayList&lt;&gt;(groups.length);</span>
      +<span class="nc bnc" id="L98" title="All 2 branches missed.">        for (final Account userGroup : groups) {</span>
      +<span class="nc" id="L99">            final WindowsAccountImpl account = new WindowsAccountImpl(userGroup);</span>
      +<span class="nc" id="L100">            result.add(account);</span>
      +        }
      +
      +<span class="nc" id="L103">        return result.toArray(new IWindowsAccount[0]);</span>
      +    }
      +
      +    @Override
      +    public byte[] getSid() {
      +<span class="nc" id="L108">        return this.getWindowsAccount().sid;</span>
      +    }
      +
      +    @Override
      +    public String getSidString() {
      +<span class="nc" id="L113">        return this.getWindowsAccount().sidString;</span>
      +    }
      +
      +    @Override
      +    public void dispose() {
      +<span class="nc bnc" id="L118" title="All 2 branches missed.">        if (this.windowsIdentity != null) {</span>
      +<span class="nc" id="L119">            Kernel32.INSTANCE.CloseHandle(this.windowsIdentity);</span>
      +        }
      +<span class="nc" id="L121">    }</span>
      +
      +    @Override
      +    public IWindowsImpersonationContext impersonate() {
      +<span class="nc" id="L125">        return new WindowsIdentityImpersonationContextImpl(this.windowsIdentity);</span>
      +    }
      +
      +    @Override
      +    public boolean isGuest() {
      +<span class="nc bnc" id="L130" title="All 2 branches missed.">        for (final Account userGroup : this.getUserGroups()) {</span>
      +<span class="nc bnc" id="L131" title="All 2 branches missed.">            if (Advapi32Util.isWellKnownSid(userGroup.sid, WELL_KNOWN_SID_TYPE.WinBuiltinGuestsSid)) {</span>
      +<span class="nc" id="L132">                return true;</span>
      +            }
      +<span class="nc bnc" id="L134" title="All 2 branches missed.">            if (Advapi32Util.isWellKnownSid(userGroup.sid, WELL_KNOWN_SID_TYPE.WinAccountDomainGuestsSid)) {</span>
      +<span class="nc" id="L135">                return true;</span>
      +            }
      +<span class="nc bnc" id="L137" title="All 2 branches missed.">            if (Advapi32Util.isWellKnownSid(userGroup.sid, WELL_KNOWN_SID_TYPE.WinAccountGuestSid)) {</span>
      +<span class="nc" id="L138">                return true;</span>
      +            }
      +        }
      +<span class="nc" id="L141">        return Advapi32Util.isWellKnownSid(this.getSid(), WELL_KNOWN_SID_TYPE.WinAnonymousSid);</span>
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsSecurityContextImpersonationContextImpl.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsSecurityContextImpersonationContextImpl.html
      new file mode 100644
      index 0000000000..c69a6216e8
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsSecurityContextImpersonationContextImpl.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsSecurityContextImpersonationContextImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_class">WindowsSecurityContextImpersonationContextImpl</span></div><h1>WindowsSecurityContextImpersonationContextImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">30 of 30</td><td class="ctr2">0%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="WindowsSecurityContextImpersonationContextImpl.java.html#L47" class="el_method">WindowsSecurityContextImpersonationContextImpl(Sspi.CtxtHandle)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="17" alt="17"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="WindowsSecurityContextImpersonationContextImpl.java.html#L58" class="el_method">revertToSelf()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="91" height="10" title="13" alt="13"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">4</td><td class="ctr2" id="i1">4</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsSecurityContextImpersonationContextImpl.java.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsSecurityContextImpersonationContextImpl.java.html
      new file mode 100644
      index 0000000000..380ae0a059
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsSecurityContextImpersonationContextImpl.java.html
      @@ -0,0 +1,64 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsSecurityContextImpersonationContextImpl.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_source">WindowsSecurityContextImpersonationContextImpl.java</span></div><h1>WindowsSecurityContextImpersonationContextImpl.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.windows.auth.impl;
      +
      +import com.sun.jna.platform.win32.Secur32;
      +import com.sun.jna.platform.win32.Sspi.CtxtHandle;
      +import com.sun.jna.platform.win32.Win32Exception;
      +import com.sun.jna.platform.win32.WinError;
      +
      +import waffle.windows.auth.IWindowsImpersonationContext;
      +
      +/**
      + * The Class WindowsSecurityContextImpersonationContextImpl.
      + */
      +public class WindowsSecurityContextImpersonationContextImpl implements IWindowsImpersonationContext {
      +
      +    /** The ctx. */
      +    private final CtxtHandle ctx;
      +
      +    /**
      +     * Instantiates a new windows security context impersonation context impl.
      +     *
      +     * @param newCtx
      +     *            the new ctx
      +     */
      +<span class="nc" id="L47">    public WindowsSecurityContextImpersonationContextImpl(final CtxtHandle newCtx) {</span>
      +<span class="nc" id="L48">        final int rc = Secur32.INSTANCE.ImpersonateSecurityContext(newCtx);</span>
      +<span class="nc bnc" id="L49" title="All 2 branches missed.">        if (rc != WinError.SEC_E_OK) {</span>
      +<span class="nc" id="L50">            throw new Win32Exception(rc);</span>
      +        }
      +
      +<span class="nc" id="L53">        this.ctx = newCtx;</span>
      +<span class="nc" id="L54">    }</span>
      +
      +    @Override
      +    public void revertToSelf() {
      +<span class="nc" id="L58">        final int rc = Secur32.INSTANCE.RevertSecurityContext(this.ctx);</span>
      +<span class="nc bnc" id="L59" title="All 2 branches missed.">        if (rc != WinError.SEC_E_OK) {</span>
      +<span class="nc" id="L60">            throw new Win32Exception(rc);</span>
      +        }
      +<span class="nc" id="L62">    }</span>
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsSecurityContextImpl.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsSecurityContextImpl.html
      new file mode 100644
      index 0000000000..43c0c3b361
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsSecurityContextImpl.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsSecurityContextImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_class">WindowsSecurityContextImpl</span></div><h1>WindowsSecurityContextImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">77 of 221</td><td class="ctr2">65%</td><td class="bar">14 of 24</td><td class="ctr2">41%</td><td class="ctr1">20</td><td class="ctr2">31</td><td class="ctr1">22</td><td class="ctr2">61</td><td class="ctr1">7</td><td class="ctr2">18</td></tr></tfoot><tbody><tr><td id="a4"><a href="WindowsSecurityContextImpl.java.html#L71" class="el_method">getIdentity()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="45" height="10" title="24" alt="24"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h0">5</td><td class="ctr2" id="i3">5</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a9"><a href="WindowsSecurityContextImpl.java.html#L124" class="el_method">initialize(Sspi.CtxtHandle, Sspi.SecBufferDesc, String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="14" alt="14"/><img src="../jacoco-resources/greenbar.gif" width="93" height="10" title="50" alt="50"/></td><td class="ctr2" id="c9">78%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="75" height="10" title="5" alt="5"/><img src="../jacoco-resources/greenbar.gif" width="45" height="10" title="3" alt="3"/></td><td class="ctr2" id="e4">37%</td><td class="ctr1" id="f0">5</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h1">5</td><td class="ctr2" id="i0">15</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a16"><a href="WindowsSecurityContextImpl.java.html#L215" class="el_method">setToken(byte[])</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="8" alt="8"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i5">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="WindowsSecurityContextImpl.java.html#L168" class="el_method">dispose(Sspi.CtxtHandle)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="7" alt="7"/><img src="../jacoco-resources/greenbar.gif" width="26" height="10" title="14" alt="14"/></td><td class="ctr2" id="c10">66%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="45" height="10" title="3" alt="3"/><img src="../jacoco-resources/greenbar.gif" width="45" height="10" title="3" alt="3"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i2">6</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a8"><a href="WindowsSecurityContextImpl.java.html#L66" class="el_method">impersonate()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="6" alt="6"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a14"><a href="WindowsSecurityContextImpl.java.html#L235" class="el_method">setSecurityContext(Sspi.CtxtHandle)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="4" alt="4"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a11"><a href="WindowsSecurityContextImpl.java.html#L250" class="el_method">setContinue(boolean)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="4" alt="4"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h5">2</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a5"><a href="WindowsSecurityContextImpl.java.html#L180" class="el_method">getPrincipalName()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a3"><a href="WindowsSecurityContextImpl.java.html#L195" class="el_method">getHandle()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a2"><a href="WindowsSecurityContextImpl.java.html#L101" class="el_method">getCurrent(String, String)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="2" alt="2"/><img src="../jacoco-resources/greenbar.gif" width="58" height="10" title="31" alt="31"/></td><td class="ctr2" id="c7">93%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="15" height="10" title="1" alt="1"/></td><td class="ctr2" id="e1">50%</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g4">2</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i1">11</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a7"><a href="WindowsSecurityContextImpl.java.html#L86" class="el_method">getToken()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="2" alt="2"/><img src="../jacoco-resources/greenbar.gif" width="31" height="10" title="17" alt="17"/></td><td class="ctr2" id="c8">89%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="2" alt="2"/><img src="../jacoco-resources/greenbar.gif" width="30" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">50%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h10">0</td><td class="ctr2" id="i8">2</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a0"><a href="WindowsSecurityContextImpl.java.html#L152" class="el_method">dispose()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/greenbar.gif" width="20" height="10" title="11" alt="11"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="1" alt="1"/><img src="../jacoco-resources/greenbar.gif" width="15" height="10" title="1" alt="1"/></td><td class="ctr2" id="e3">50%</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g5">2</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i4">4</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a13"><a href="WindowsSecurityContextImpl.java.html#L190" class="el_method">setPrincipalName(String)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">100%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">0</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">0</td><td class="ctr2" id="i9">2</td><td class="ctr1" id="j12">0</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a12"><a href="WindowsSecurityContextImpl.java.html#L205" class="el_method">setCredentialsHandle(IWindowsCredentialsHandle)</a></td><td class="bar" id="b13"><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">100%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">0</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">0</td><td class="ctr2" id="i10">2</td><td class="ctr1" id="j13">0</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a15"><a href="WindowsSecurityContextImpl.java.html#L225" class="el_method">setSecurityPackage(String)</a></td><td class="bar" id="b14"><img src="../jacoco-resources/greenbar.gif" width="7" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">100%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">0</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">0</td><td class="ctr2" id="i11">2</td><td class="ctr1" id="j14">0</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a17"><a href="WindowsSecurityContextImpl.java.html#L44" class="el_method">WindowsSecurityContextImpl()</a></td><td class="bar" id="b15"><img src="../jacoco-resources/greenbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">100%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">0</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">0</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">0</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a6"><a href="WindowsSecurityContextImpl.java.html#L81" class="el_method">getSecurityPackage()</a></td><td class="bar" id="b16"><img src="../jacoco-resources/greenbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">100%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">0</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">0</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">0</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a10"><a href="WindowsSecurityContextImpl.java.html#L240" class="el_method">isContinue()</a></td><td class="bar" id="b17"><img src="../jacoco-resources/greenbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">100%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">0</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">0</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j17">0</td><td class="ctr2" id="k17">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsSecurityContextImpl.java.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsSecurityContextImpl.java.html
      new file mode 100644
      index 0000000000..6b34f1f0bd
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/WindowsSecurityContextImpl.java.html
      @@ -0,0 +1,254 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsSecurityContextImpl.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.windows.auth.impl</a> &gt; <span class="el_source">WindowsSecurityContextImpl.java</span></div><h1>WindowsSecurityContextImpl.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.windows.auth.impl;
      +
      +import com.sun.jna.platform.win32.Secur32;
      +import com.sun.jna.platform.win32.Sspi;
      +import com.sun.jna.platform.win32.Sspi.CtxtHandle;
      +import com.sun.jna.platform.win32.Sspi.SecBufferDesc;
      +import com.sun.jna.platform.win32.SspiUtil.ManagedSecBufferDesc;
      +import com.sun.jna.platform.win32.Win32Exception;
      +import com.sun.jna.platform.win32.WinError;
      +import com.sun.jna.platform.win32.WinNT.HANDLEByReference;
      +import com.sun.jna.ptr.IntByReference;
      +
      +import waffle.windows.auth.IWindowsCredentialsHandle;
      +import waffle.windows.auth.IWindowsIdentity;
      +import waffle.windows.auth.IWindowsImpersonationContext;
      +import waffle.windows.auth.IWindowsSecurityContext;
      +
      +/**
      + * Windows Security Context.
      + */
      +<span class="fc" id="L44">public class WindowsSecurityContextImpl implements IWindowsSecurityContext {</span>
      +
      +    /** The principal name. */
      +    private String principalName;
      +
      +    /** The security package. */
      +    private String securityPackage;
      +
      +    /** The token. */
      +    private ManagedSecBufferDesc token;
      +
      +    /** The ctx. */
      +    private CtxtHandle ctx;
      +
      +    /** The credentials. */
      +    private IWindowsCredentialsHandle credentials;
      +
      +    /** The continue flag. */
      +    private boolean continueFlag;
      +
      +    @Override
      +    public IWindowsImpersonationContext impersonate() {
      +<span class="nc" id="L66">        return new WindowsSecurityContextImpersonationContextImpl(this.ctx);</span>
      +    }
      +
      +    @Override
      +    public IWindowsIdentity getIdentity() {
      +<span class="nc" id="L71">        final HANDLEByReference phContextToken = new HANDLEByReference();</span>
      +<span class="nc" id="L72">        final int rc = Secur32.INSTANCE.QuerySecurityContextToken(this.ctx, phContextToken);</span>
      +<span class="nc bnc" id="L73" title="All 2 branches missed.">        if (WinError.SEC_E_OK != rc) {</span>
      +<span class="nc" id="L74">            throw new Win32Exception(rc);</span>
      +        }
      +<span class="nc" id="L76">        return new WindowsIdentityImpl(phContextToken.getValue());</span>
      +    }
      +
      +    @Override
      +    public String getSecurityPackage() {
      +<span class="fc" id="L81">        return this.securityPackage;</span>
      +    }
      +
      +    @Override
      +    public byte[] getToken() {
      +<span class="pc bpc" id="L86" title="2 of 4 branches missed.">        return this.token == null || this.token.getBuffer(0).getBytes() == null ? null</span>
      +<span class="fc" id="L87">                : this.token.getBuffer(0).getBytes().clone();</span>
      +    }
      +
      +    /**
      +     * Get the current Windows security context for a given SSPI package.
      +     *
      +     * @param securityPackage
      +     *            SSPI package.
      +     * @param targetName
      +     *            The target of the context. The string contents are security-package specific.
      +     *
      +     * @return Windows security context.
      +     */
      +    public static IWindowsSecurityContext getCurrent(final String securityPackage, final String targetName) {
      +<span class="fc" id="L101">        IWindowsCredentialsHandle credentialsHandle = WindowsCredentialsHandleImpl.getCurrent(securityPackage);</span>
      +<span class="fc" id="L102">        credentialsHandle.initialize();</span>
      +        try {
      +<span class="fc" id="L104">            final WindowsSecurityContextImpl ctx = new WindowsSecurityContextImpl();</span>
      +<span class="fc" id="L105">            ctx.setPrincipalName(WindowsAccountImpl.getCurrentUsername());</span>
      +<span class="fc" id="L106">            ctx.setCredentialsHandle(credentialsHandle);</span>
      +<span class="fc" id="L107">            ctx.setSecurityPackage(securityPackage);</span>
      +<span class="fc" id="L108">            ctx.initialize(null, null, targetName);</span>
      +
      +            // Starting from here ctx 'owns' the credentials handle, so let's null out the
      +            // variable. This will prevent the finally block below from disposing it right away.
      +<span class="fc" id="L112">            credentialsHandle = null;</span>
      +
      +<span class="fc" id="L114">            return ctx;</span>
      +        } finally {
      +<span class="pc bpc" id="L116" title="1 of 2 branches missed.">            if (credentialsHandle != null) {</span>
      +<span class="nc" id="L117">                credentialsHandle.dispose();</span>
      +            }
      +        }
      +    }
      +
      +    @Override
      +    public void initialize(final CtxtHandle continueCtx, final SecBufferDesc continueToken, final String targetName) {
      +<span class="fc" id="L124">        final IntByReference attr = new IntByReference();</span>
      +<span class="fc" id="L125">        this.ctx = new CtxtHandle();</span>
      +<span class="fc" id="L126">        int tokenSize = Sspi.MAX_TOKEN_SIZE;</span>
      +        int rc;
      +        do {
      +<span class="fc" id="L129">            this.token = new ManagedSecBufferDesc(Sspi.SECBUFFER_TOKEN, tokenSize);</span>
      +<span class="fc" id="L130">            rc = Secur32.INSTANCE.InitializeSecurityContext(this.credentials.getHandle(), continueCtx, targetName,</span>
      +                    Sspi.ISC_REQ_CONNECTION, 0, Sspi.SECURITY_NATIVE_DREP, continueToken, 0, this.ctx, this.token, attr,
      +                    null);
      +<span class="pc bpc" id="L133" title="3 of 4 branches missed.">            switch (rc) {</span>
      +                case WinError.SEC_E_INSUFFICIENT_MEMORY:
      +                case WinError.SEC_E_BUFFER_TOO_SMALL:
      +<span class="nc" id="L136">                    tokenSize += Sspi.MAX_TOKEN_SIZE;</span>
      +<span class="nc" id="L137">                    break;</span>
      +                case WinError.SEC_I_CONTINUE_NEEDED:
      +<span class="fc" id="L139">                    this.continueFlag = true;</span>
      +<span class="fc" id="L140">                    break;</span>
      +                case WinError.SEC_E_OK:
      +<span class="nc" id="L142">                    this.continueFlag = false;</span>
      +<span class="nc" id="L143">                    break;</span>
      +                default:
      +<span class="nc" id="L145">                    throw new Win32Exception(rc);</span>
      +            }
      +<span class="pc bpc" id="L147" title="2 of 4 branches missed.">        } while (rc == WinError.SEC_E_INSUFFICIENT_MEMORY || rc == WinError.SEC_E_BUFFER_TOO_SMALL);</span>
      +<span class="fc" id="L148">    }</span>
      +
      +    @Override
      +    public void dispose() {
      +<span class="fc" id="L152">        WindowsSecurityContextImpl.dispose(this.ctx);</span>
      +
      +<span class="pc bpc" id="L154" title="1 of 2 branches missed.">        if (this.credentials != null) {</span>
      +<span class="fc" id="L155">            this.credentials.dispose();</span>
      +        }
      +<span class="fc" id="L157">    }</span>
      +
      +    /**
      +     * Dispose a security context.
      +     *
      +     * @param ctx
      +     *            Security context.
      +     *
      +     * @return True if a context was disposed.
      +     */
      +    public static boolean dispose(final CtxtHandle ctx) {
      +<span class="pc bpc" id="L168" title="2 of 4 branches missed.">        if (ctx != null &amp;&amp; !ctx.isNull()) {</span>
      +<span class="fc" id="L169">            final int rc = Secur32.INSTANCE.DeleteSecurityContext(ctx);</span>
      +<span class="pc bpc" id="L170" title="1 of 2 branches missed.">            if (WinError.SEC_E_OK != rc) {</span>
      +<span class="nc" id="L171">                throw new Win32Exception(rc);</span>
      +            }
      +<span class="fc" id="L173">            return true;</span>
      +        }
      +<span class="nc" id="L175">        return false;</span>
      +    }
      +
      +    @Override
      +    public String getPrincipalName() {
      +<span class="nc" id="L180">        return this.principalName;</span>
      +    }
      +
      +    /**
      +     * Sets the principal name.
      +     *
      +     * @param value
      +     *            the new principal name
      +     */
      +    public void setPrincipalName(final String value) {
      +<span class="fc" id="L190">        this.principalName = value;</span>
      +<span class="fc" id="L191">    }</span>
      +
      +    @Override
      +    public CtxtHandle getHandle() {
      +<span class="nc" id="L195">        return this.ctx;</span>
      +    }
      +
      +    /**
      +     * Sets the credentials handle.
      +     *
      +     * @param handle
      +     *            the new credentials handle
      +     */
      +    public void setCredentialsHandle(final IWindowsCredentialsHandle handle) {
      +<span class="fc" id="L205">        this.credentials = handle;</span>
      +<span class="fc" id="L206">    }</span>
      +
      +    /**
      +     * Sets the token.
      +     *
      +     * @param bytes
      +     *            the new token
      +     */
      +    public void setToken(final byte[] bytes) {
      +<span class="nc" id="L215">        this.token = new ManagedSecBufferDesc(Sspi.SECBUFFER_TOKEN, bytes);</span>
      +<span class="nc" id="L216">    }</span>
      +
      +    /**
      +     * Sets the security package.
      +     *
      +     * @param value
      +     *            the new security package
      +     */
      +    public void setSecurityPackage(final String value) {
      +<span class="fc" id="L225">        this.securityPackage = value;</span>
      +<span class="fc" id="L226">    }</span>
      +
      +    /**
      +     * Sets the security context.
      +     *
      +     * @param phNewServerContext
      +     *            the new security context
      +     */
      +    public void setSecurityContext(final CtxtHandle phNewServerContext) {
      +<span class="nc" id="L235">        this.ctx = phNewServerContext;</span>
      +<span class="nc" id="L236">    }</span>
      +
      +    @Override
      +    public boolean isContinue() {
      +<span class="fc" id="L240">        return this.continueFlag;</span>
      +    }
      +
      +    /**
      +     * Sets the continue.
      +     *
      +     * @param b
      +     *            the new continue
      +     */
      +    public void setContinue(final boolean b) {
      +<span class="nc" id="L250">        this.continueFlag = b;</span>
      +<span class="nc" id="L251">    }</span>
      +
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/index.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/index.html
      new file mode 100644
      index 0000000000..44bbe52fac
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/index.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.windows.auth.impl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.windows.auth.impl</span></div><h1>waffle.windows.auth.impl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">716 of 1,067</td><td class="ctr2">32%</td><td class="bar">87 of 105</td><td class="ctr2">17%</td><td class="ctr1">90</td><td class="ctr2">125</td><td class="ctr1">173</td><td class="ctr2">266</td><td class="ctr1">35</td><td class="ctr2">69</td><td class="ctr1">7</td><td class="ctr2">12</td></tr></tfoot><tbody><tr><td id="a1"><a href="WindowsAuthProviderImpl.html" class="el_class">WindowsAuthProviderImpl</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="104" height="10" title="272" alt="272"/><img src="../jacoco-resources/greenbar.gif" width="15" height="10" title="41" alt="41"/></td><td class="ctr2" id="c4">13%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="115" height="10" title="27" alt="27"/><img src="../jacoco-resources/greenbar.gif" width="4" height="10" title="1" alt="1"/></td><td class="ctr2" id="e3">3%</td><td class="ctr1" id="f0">21</td><td class="ctr2" id="g1">26</td><td class="ctr1" id="h0">60</td><td class="ctr2" id="i0">70</td><td class="ctr1" id="j2">6</td><td class="ctr2" id="k1">11</td><td class="ctr1" id="l7">0</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a9"><a href="WindowsIdentityImpl.html" class="el_class">WindowsIdentityImpl</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="53" height="10" title="140" alt="140"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="16" alt="16"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f2">18</td><td class="ctr2" id="g2">18</td><td class="ctr1" id="h1">30</td><td class="ctr2" id="i2">30</td><td class="ctr1" id="j0">10</td><td class="ctr2" id="k2">10</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a5"><a href="WindowsDomainImpl.html" class="el_class">WindowsDomainImpl</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="83" alt="83"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="16" alt="16"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f3">13</td><td class="ctr2" id="g3">13</td><td class="ctr1" id="h2">23</td><td class="ctr2" id="i3">23</td><td class="ctr1" id="j3">5</td><td class="ctr2" id="k4">5</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a11"><a href="WindowsSecurityContextImpl.html" class="el_class">WindowsSecurityContextImpl</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="29" height="10" title="77" alt="77"/><img src="../jacoco-resources/greenbar.gif" width="55" height="10" title="144" alt="144"/></td><td class="ctr2" id="c3">65%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="14" alt="14"/><img src="../jacoco-resources/greenbar.gif" width="42" height="10" title="10" alt="10"/></td><td class="ctr2" id="e2">41%</td><td class="ctr1" id="f1">20</td><td class="ctr2" id="g0">31</td><td class="ctr1" id="h3">22</td><td class="ctr2" id="i1">61</td><td class="ctr1" id="j1">7</td><td class="ctr2" id="k0">18</td><td class="ctr1" id="l8">0</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a7"><a href="WindowsDomainImpl$TrustType.html" class="el_class">WindowsDomainImpl.TrustType</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="45" alt="45"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h5">8</td><td class="ctr2" id="i8">8</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k9">1</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a10"><a href="WindowsSecurityContextImpersonationContextImpl.html" class="el_class">WindowsSecurityContextImpersonationContextImpl</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="30" alt="30"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d6"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="4" alt="4"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f4">4</td><td class="ctr2" id="g7">4</td><td class="ctr1" id="h4">10</td><td class="ctr2" id="i7">10</td><td class="ctr1" id="j4">2</td><td class="ctr2" id="k7">2</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a6"><a href="WindowsDomainImpl$TrustDirection.html" class="el_class">WindowsDomainImpl.TrustDirection</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="21" alt="21"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h7">4</td><td class="ctr2" id="i10">4</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k10">1</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a8"><a href="WindowsIdentityImpersonationContextImpl.html" class="el_class">WindowsIdentityImpersonationContextImpl</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="17" alt="17"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d7"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f7">3</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h6">6</td><td class="ctr2" id="i9">6</td><td class="ctr1" id="j5">2</td><td class="ctr2" id="k8">2</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a3"><a href="WindowsComputerImpl.html" class="el_class">WindowsComputerImpl</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="12" alt="12"/><img src="../jacoco-resources/greenbar.gif" width="22" height="10" title="59" alt="59"/></td><td class="ctr2" id="c2">83%</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="12" height="10" title="3" alt="3"/></td><td class="ctr2" id="e1">42%</td><td class="ctr1" id="f5">4</td><td class="ctr2" id="g4">10</td><td class="ctr1" id="h8">4</td><td class="ctr2" id="i5">18</td><td class="ctr1" id="j9">0</td><td class="ctr2" id="k5">5</td><td class="ctr1" id="l9">0</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a4"><a href="WindowsCredentialsHandleImpl.html" class="el_class">WindowsCredentialsHandleImpl</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="10" alt="10"/><img src="../jacoco-resources/greenbar.gif" width="27" height="10" title="71" alt="71"/></td><td class="ctr2" id="c1">87%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f6">4</td><td class="ctr2" id="g5">9</td><td class="ctr1" id="h10">2</td><td class="ctr2" id="i4">20</td><td class="ctr1" id="j10">0</td><td class="ctr2" id="k6">5</td><td class="ctr1" id="l10">0</td><td class="ctr2" id="m9">1</td></tr><tr><td id="a2"><a href="WindowsAuthProviderImpl$ContinueContext.html" class="el_class">WindowsAuthProviderImpl.ContinueContext</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="9" alt="9"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h9">4</td><td class="ctr2" id="i11">4</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k11">1</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m10">1</td></tr><tr><td id="a0"><a href="WindowsAccountImpl.html" class="el_class">WindowsAccountImpl</a></td><td class="bar" id="b11"><img src="../jacoco-resources/greenbar.gif" width="13" height="10" title="36" alt="36"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">0</td><td class="ctr2" id="g6">8</td><td class="ctr1" id="h11">0</td><td class="ctr2" id="i6">12</td><td class="ctr1" id="j11">0</td><td class="ctr2" id="k3">8</td><td class="ctr1" id="l11">0</td><td class="ctr2" id="m11">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/index.source.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/index.source.html
      new file mode 100644
      index 0000000000..5936c57527
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth.impl/index.source.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.windows.auth.impl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.windows.auth.impl</span></div><h1>waffle.windows.auth.impl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">716 of 1,067</td><td class="ctr2">32%</td><td class="bar">87 of 105</td><td class="ctr2">17%</td><td class="ctr1">90</td><td class="ctr2">125</td><td class="ctr1">173</td><td class="ctr2">266</td><td class="ctr1">35</td><td class="ctr2">69</td><td class="ctr1">7</td><td class="ctr2">12</td></tr></tfoot><tbody><tr><td id="a1"><a href="WindowsAuthProviderImpl.java.html" class="el_source">WindowsAuthProviderImpl.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="104" height="10" title="281" alt="281"/><img src="../jacoco-resources/greenbar.gif" width="15" height="10" title="41" alt="41"/></td><td class="ctr2" id="c4">12%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="115" height="10" title="27" alt="27"/><img src="../jacoco-resources/greenbar.gif" width="4" height="10" title="1" alt="1"/></td><td class="ctr2" id="e3">3%</td><td class="ctr1" id="f0">22</td><td class="ctr2" id="g1">27</td><td class="ctr1" id="h0">64</td><td class="ctr2" id="i0">74</td><td class="ctr1" id="j1">7</td><td class="ctr2" id="k1">12</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">2</td></tr><tr><td id="a4"><a href="WindowsDomainImpl.java.html" class="el_source">WindowsDomainImpl.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="55" height="10" title="149" alt="149"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="16" alt="16"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f3">15</td><td class="ctr2" id="g3">15</td><td class="ctr1" id="h1">35</td><td class="ctr2" id="i2">35</td><td class="ctr1" id="j2">7</td><td class="ctr2" id="k4">7</td><td class="ctr1" id="l0">3</td><td class="ctr2" id="m0">3</td></tr><tr><td id="a6"><a href="WindowsIdentityImpl.java.html" class="el_source">WindowsIdentityImpl.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="52" height="10" title="140" alt="140"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="16" alt="16"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f2">18</td><td class="ctr2" id="g2">18</td><td class="ctr1" id="h2">30</td><td class="ctr2" id="i3">30</td><td class="ctr1" id="j0">10</td><td class="ctr2" id="k2">10</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a8"><a href="WindowsSecurityContextImpl.java.html" class="el_source">WindowsSecurityContextImpl.java</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="28" height="10" title="77" alt="77"/><img src="../jacoco-resources/greenbar.gif" width="53" height="10" title="144" alt="144"/></td><td class="ctr2" id="c3">65%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="14" alt="14"/><img src="../jacoco-resources/greenbar.gif" width="42" height="10" title="10" alt="10"/></td><td class="ctr2" id="e2">41%</td><td class="ctr1" id="f1">20</td><td class="ctr2" id="g0">31</td><td class="ctr1" id="h3">22</td><td class="ctr2" id="i1">61</td><td class="ctr1" id="j3">7</td><td class="ctr2" id="k0">18</td><td class="ctr1" id="l5">0</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a7"><a href="WindowsSecurityContextImpersonationContextImpl.java.html" class="el_source">WindowsSecurityContextImpersonationContextImpl.java</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="30" alt="30"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d6"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="4" alt="4"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f4">4</td><td class="ctr2" id="g7">4</td><td class="ctr1" id="h4">10</td><td class="ctr2" id="i7">10</td><td class="ctr1" id="j4">2</td><td class="ctr2" id="k7">2</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a5"><a href="WindowsIdentityImpersonationContextImpl.java.html" class="el_source">WindowsIdentityImpersonationContextImpl.java</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="17" alt="17"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d7"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f7">3</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h5">6</td><td class="ctr2" id="i8">6</td><td class="ctr1" id="j5">2</td><td class="ctr2" id="k8">2</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a2"><a href="WindowsComputerImpl.java.html" class="el_source">WindowsComputerImpl.java</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="12" alt="12"/><img src="../jacoco-resources/greenbar.gif" width="21" height="10" title="59" alt="59"/></td><td class="ctr2" id="c2">83%</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="12" height="10" title="3" alt="3"/></td><td class="ctr2" id="e1">42%</td><td class="ctr1" id="f5">4</td><td class="ctr2" id="g4">10</td><td class="ctr1" id="h6">4</td><td class="ctr2" id="i5">18</td><td class="ctr1" id="j6">0</td><td class="ctr2" id="k5">5</td><td class="ctr1" id="l6">0</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a3"><a href="WindowsCredentialsHandleImpl.java.html" class="el_source">WindowsCredentialsHandleImpl.java</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="10" alt="10"/><img src="../jacoco-resources/greenbar.gif" width="26" height="10" title="71" alt="71"/></td><td class="ctr2" id="c1">87%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="4" alt="4"/><img src="../jacoco-resources/greenbar.gif" width="17" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">50%</td><td class="ctr1" id="f6">4</td><td class="ctr2" id="g5">9</td><td class="ctr1" id="h7">2</td><td class="ctr2" id="i4">20</td><td class="ctr1" id="j7">0</td><td class="ctr2" id="k6">5</td><td class="ctr1" id="l7">0</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a0"><a href="WindowsAccountImpl.java.html" class="el_source">WindowsAccountImpl.java</a></td><td class="bar" id="b8"><img src="../jacoco-resources/greenbar.gif" width="13" height="10" title="36" alt="36"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">0</td><td class="ctr2" id="g6">8</td><td class="ctr1" id="h8">0</td><td class="ctr2" id="i6">12</td><td class="ctr1" id="j8">0</td><td class="ctr2" id="k3">8</td><td class="ctr1" id="l8">0</td><td class="ctr2" id="m8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth/PrincipalFormat.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth/PrincipalFormat.html
      new file mode 100644
      index 0000000000..a37929c8e3
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth/PrincipalFormat.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>PrincipalFormat</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth</a> &gt; <span class="el_class">PrincipalFormat</span></div><h1>PrincipalFormat</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">0 of 27</td><td class="ctr2">100%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">0</td><td class="ctr2">1</td><td class="ctr1">0</td><td class="ctr2">5</td><td class="ctr1">0</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="PrincipalFormat.java.html#L29" class="el_method">static {...}</a></td><td class="bar" id="b0"><img src="../jacoco-resources/greenbar.gif" width="120" height="10" title="27" alt="27"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">0</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">0</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">0</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth/PrincipalFormat.java.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth/PrincipalFormat.java.html
      new file mode 100644
      index 0000000000..809b25da38
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth/PrincipalFormat.java.html
      @@ -0,0 +1,43 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>PrincipalFormat.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.windows.auth</a> &gt; <span class="el_source">PrincipalFormat.java</span></div><h1>PrincipalFormat.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.windows.auth;
      +
      +/**
      + * The Enum PrincipalFormat.
      + */
      +<span class="fc" id="L29">public enum PrincipalFormat {</span>
      +
      +    /** The fqn. */
      +<span class="fc" id="L32">    FQN,</span>
      +
      +    /** The sid. */
      +<span class="fc" id="L35">    SID,</span>
      +
      +    /** The both. */
      +<span class="fc" id="L38">    BOTH,</span>
      +
      +    /** The none. */
      +<span class="fc" id="L41">    NONE;</span>
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth/WindowsAccount.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth/WindowsAccount.html
      new file mode 100644
      index 0000000000..5ec25fe2a9
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth/WindowsAccount.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsAccount</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.html" class="el_package">waffle.windows.auth</a> &gt; <span class="el_class">WindowsAccount</span></div><h1>WindowsAccount</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">52 of 52</td><td class="ctr2">0%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">7</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a6"><a href="WindowsAccount.java.html#L54" class="el_method">WindowsAccount(IWindowsAccount)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="19" alt="19"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="WindowsAccount.java.html#L100" class="el_method">equals(Object)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="107" height="10" title="17" alt="17"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h1">5</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a5"><a href="WindowsAccount.java.html#L113" class="el_method">hashCode()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="25" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="WindowsAccount.java.html#L67" class="el_method">getSidString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="WindowsAccount.java.html#L76" class="el_method">getFqn()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a3"><a href="WindowsAccount.java.html#L85" class="el_method">getName()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a1"><a href="WindowsAccount.java.html#L94" class="el_method">getDomain()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth/WindowsAccount.java.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth/WindowsAccount.java.html
      new file mode 100644
      index 0000000000..99c8ca140a
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth/WindowsAccount.java.html
      @@ -0,0 +1,116 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>WindowsAccount.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <a href="index.source.html" class="el_package">waffle.windows.auth</a> &gt; <span class="el_source">WindowsAccount.java</span></div><h1>WindowsAccount.java</h1><pre class="source lang-java linenums">/*
      + * MIT License
      + *
      + * Copyright (c) 2010-2024 The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      + *
      + * Permission is hereby granted, free of charge, to any person obtaining a copy
      + * of this software and associated documentation files (the &quot;Software&quot;), to deal
      + * in the Software without restriction, including without limitation the rights
      + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      + * copies of the Software, and to permit persons to whom the Software is
      + * furnished to do so, subject to the following conditions:
      + *
      + * The above copyright notice and this permission notice shall be included in all
      + * copies or substantial portions of the Software.
      + *
      + * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      + * SOFTWARE.
      + */
      +package waffle.windows.auth;
      +
      +import java.io.Serializable;
      +
      +/**
      + * A flattened Windows Account used in a Windows principal.
      + */
      +public class WindowsAccount implements Serializable {
      +
      +    /** The Constant serialVersionUID. */
      +    private static final long serialVersionUID = 1L;
      +
      +    /** The sid string. */
      +    private final String sidString;
      +
      +    /** The fqn. */
      +    private final String fqn;
      +
      +    /** The name. */
      +    private final String name;
      +
      +    /** The domain. */
      +    private final String domain;
      +
      +    /**
      +     * Instantiates a new windows account.
      +     *
      +     * @param account
      +     *            the account
      +     */
      +<span class="nc" id="L54">    public WindowsAccount(final IWindowsAccount account) {</span>
      +<span class="nc" id="L55">        this.sidString = account.getSidString();</span>
      +<span class="nc" id="L56">        this.fqn = account.getFqn();</span>
      +<span class="nc" id="L57">        this.name = account.getName();</span>
      +<span class="nc" id="L58">        this.domain = account.getDomain();</span>
      +<span class="nc" id="L59">    }</span>
      +
      +    /**
      +     * Gets the sid string.
      +     *
      +     * @return the sid string
      +     */
      +    public String getSidString() {
      +<span class="nc" id="L67">        return this.sidString;</span>
      +    }
      +
      +    /**
      +     * Gets the fqn.
      +     *
      +     * @return the fqn
      +     */
      +    public String getFqn() {
      +<span class="nc" id="L76">        return this.fqn;</span>
      +    }
      +
      +    /**
      +     * Gets the name.
      +     *
      +     * @return the name
      +     */
      +    public String getName() {
      +<span class="nc" id="L85">        return this.name;</span>
      +    }
      +
      +    /**
      +     * Gets the domain.
      +     *
      +     * @return the domain
      +     */
      +    public String getDomain() {
      +<span class="nc" id="L94">        return this.domain;</span>
      +    }
      +
      +    @Override
      +    public boolean equals(final Object o) {
      +
      +<span class="nc bnc" id="L100" title="All 2 branches missed.">        if (this == o) {</span>
      +<span class="nc" id="L101">            return true;</span>
      +        }
      +
      +<span class="nc bnc" id="L104" title="All 2 branches missed.">        if (!(o instanceof WindowsAccount)) {</span>
      +<span class="nc" id="L105">            return false;</span>
      +        }
      +
      +<span class="nc" id="L108">        return ((WindowsAccount) o).getSidString().equals(this.getSidString());</span>
      +    }
      +
      +    @Override
      +    public int hashCode() {
      +<span class="nc" id="L113">        return this.getSidString().hashCode();</span>
      +    }
      +}
      +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth/index.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth/index.html
      new file mode 100644
      index 0000000000..0a81bf69f7
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth/index.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.windows.auth</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.windows.auth</span></div><h1>waffle.windows.auth</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">52 of 79</td><td class="ctr2">34%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">9</td><td class="ctr2">10</td><td class="ctr1">16</td><td class="ctr2">21</td><td class="ctr1">7</td><td class="ctr2">8</td><td class="ctr1">1</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="WindowsAccount.html" class="el_class">WindowsAccount</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="52" alt="52"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">9</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">16</td><td class="ctr2" id="i0">16</td><td class="ctr1" id="j0">7</td><td class="ctr2" id="k0">7</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="PrincipalFormat.html" class="el_class">PrincipalFormat</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="62" height="10" title="27" alt="27"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/jacoco/waffle.windows.auth/index.source.html b/waffle-jna-jakarta/jacoco/waffle.windows.auth/index.source.html
      new file mode 100644
      index 0000000000..883d0c28c2
      --- /dev/null
      +++ b/waffle-jna-jakarta/jacoco/waffle.windows.auth/index.source.html
      @@ -0,0 +1 @@
      +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang=""><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>waffle.windows.auth</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">waffle-jna-jakarta</a> &gt; <span class="el_package">waffle.windows.auth</span></div><h1>waffle.windows.auth</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">52 of 79</td><td class="ctr2">34%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">9</td><td class="ctr2">10</td><td class="ctr1">16</td><td class="ctr2">21</td><td class="ctr1">7</td><td class="ctr2">8</td><td class="ctr1">1</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="WindowsAccount.java.html" class="el_source">WindowsAccount.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="52" alt="52"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">9</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">16</td><td class="ctr2" id="i0">16</td><td class="ctr1" id="j0">7</td><td class="ctr2" id="k0">7</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="PrincipalFormat.java.html" class="el_source">PrincipalFormat.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/greenbar.gif" width="62" height="10" title="27" alt="27"/></td><td class="ctr2" id="c0">100%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">0</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">0</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j1">0</td><td class="ctr2" id="k1">1</td><td class="ctr1" id="l1">0</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/js/apache-maven-fluido-2.0.0-M10.min.js b/waffle-jna-jakarta/js/apache-maven-fluido-2.0.0-M10.min.js
      new file mode 100644
      index 0000000000..819716aba1
      --- /dev/null
      +++ b/waffle-jna-jakarta/js/apache-maven-fluido-2.0.0-M10.min.js
      @@ -0,0 +1,287 @@
      +(function(g,p){"object"===typeof module&&"object"===typeof module.exports?module.exports=g.document?p(g,!0):function(g){if(!g.document)throw Error("jQuery requires a window with a document");return p(g)}:p(g)})("undefined"!==typeof window?window:this,function(g,p){function x(a){var b=a.length,e=d.type(a);return"function"===e||d.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===e||0===b||"number"===typeof b&&0<b&&b-1 in a}function c(a,b,e){if(d.isFunction(b))return d.grep(a,function(a,d){return!!b.call(a,
      +d,a)!==e});if(b.nodeType)return d.grep(a,function(a){return a===b!==e});if("string"===typeof b){if(Gb.test(b))return d.filter(b,a,e);b=d.filter(b,a)}return d.grep(a,function(a){return 0<=d.inArray(a,b)!==e})}function f(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}function h(a){var b=fb[a]={};d.each(a.match(Y)||[],function(a,d){b[d]=!0});return b}function m(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",n,!1),g.removeEventListener("load",n,!1)):(z.detachEvent("onreadystatechange",
      +n),g.detachEvent("onload",n))}function n(){if(z.addEventListener||"load"===event.type||"complete"===z.readyState)m(),d.ready()}function W(a,b,e){if(void 0===e&&1===a.nodeType)if(e="data-"+b.replace(Hb,"-$1").toLowerCase(),e=a.getAttribute(e),"string"===typeof e){try{e="true"===e?!0:"false"===e?!1:"null"===e?null:+e+""===e?+e:Ib.test(e)?d.parseJSON(e):e}catch(k){}d.data(a,b,e)}else e=void 0;return e}function r(a){for(var b in a)if(("data"!==b||!d.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}
      +function E(a,b,e,k){if(d.acceptData(a)){var l=d.expando,u=a.nodeType,c=u?d.cache:a,f=u?a[l]:a[l]&&l;if(f&&c[f]&&(k||c[f].data)||void 0!==e||"string"!==typeof b){f||(f=u?a[l]=Z.pop()||d.guid++:l);c[f]||(c[f]=u?{}:{toJSON:d.noop});if("object"===typeof b||"function"===typeof b)k?c[f]=d.extend(c[f],b):c[f].data=d.extend(c[f].data,b);a=c[f];k||(a.data||(a.data={}),a=a.data);void 0!==e&&(a[d.camelCase(b)]=e);"string"===typeof b?(e=a[b],null==e&&(e=a[d.camelCase(b)])):e=a;return e}}}function fa(a,b,e){if(d.acceptData(a)){var k,
      +l,u=a.nodeType,c=u?d.cache:a,f=u?a[d.expando]:d.expando;if(c[f]){if(b&&(k=e?c[f]:c[f].data)){d.isArray(b)?b=b.concat(d.map(b,d.camelCase)):b in k?b=[b]:(b=d.camelCase(b),b=b in k?[b]:b.split(" "));for(l=b.length;l--;)delete k[b[l]];if(e?!r(k):!d.isEmptyObject(k))return}if(!e&&(delete c[f].data,!r(c[f])))return;u?d.cleanData([a],!0):w.deleteExpando||c!=c.window?delete c[f]:c[f]=null}}}function aa(){return!0}function V(){return!1}function ha(){try{return z.activeElement}catch(a){}}function Aa(a){var b=
      +gb.split("|");a=a.createDocumentFragment();if(a.createElement)for(;b.length;)a.createElement(b.pop());return a}function N(a,b){var e,k,l=0,u="undefined"!==typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!==typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!u)for(u=[],e=a.childNodes||a;null!=(k=e[l]);l++)!b||d.nodeName(k,b)?u.push(k):d.merge(u,N(k,b));return void 0===b||b&&d.nodeName(a,b)?d.merge([a],u):u}function Ta(a){Ua.test(a.type)&&(a.defaultChecked=a.checked)}
      +function Ia(a,b){return d.nodeName(a,"table")&&d.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ia(a){a.type=(null!==d.find.attr(a,"type"))+"/"+a.type;return a}function A(a){var b=Jb.exec(a.type);b?a.type=b[1]:a.removeAttribute("type");return a}function R(a,b){for(var e,k=0;null!=(e=a[k]);k++)d._data(e,"globalEval",!b||d._data(b[k],"globalEval"))}function P(a,b){if(1===b.nodeType&&d.hasData(a)){var e,
      +k,l;k=d._data(a);a=d._data(b,k);var u=k.events;if(u)for(e in delete a.handle,a.events={},u)for(k=0,l=u[e].length;k<l;k++)d.event.add(b,e,u[e][k]);a.data&&(a.data=d.extend({},a.data))}}function I(a,b){var e;a=d(b.createElement(a)).appendTo(b.body);b=g.getDefaultComputedStyle&&(e=g.getDefaultComputedStyle(a[0]))?e.display:d.css(a[0],"display");a.detach();return b}function Ea(a){var b=z,e=hb[a];e||(e=I(a,b),"none"!==e&&e||(na=(na||d("\x3ciframe frameborder\x3d'0' width\x3d'0' height\x3d'0'/\x3e")).appendTo(b.documentElement),
      +b=(na[0].contentWindow||na[0].contentDocument).document,b.write(),b.close(),e=I(a,b),na.detach()),hb[a]=e);return e}function Fa(a,b){return{get:function(){var e=a();if(null!=e)if(e)delete this.get;else return(this.get=b).apply(this,arguments)}}}function Ba(a,b){if(b in a)return b;for(var e=b.charAt(0).toUpperCase()+b.slice(1),d=b,l=ib.length;l--;)if(b=ib[l]+e,b in a)return b;return d}function O(a,b){for(var e,k,l,u=[],c=0,f=a.length;c<f;c++)k=a[c],k.style&&(u[c]=d._data(k,"olddisplay"),e=k.style.display,
      +b?(u[c]||"none"!==e||(k.style.display=""),""===k.style.display&&Ca(k)&&(u[c]=d._data(k,"olddisplay",Ea(k.nodeName)))):(l=Ca(k),(e&&"none"!==e||!l)&&d._data(k,"olddisplay",l?e:d.css(k,"display"))));for(c=0;c<f;c++)k=a[c],!k.style||b&&"none"!==k.style.display&&""!==k.style.display||(k.style.display=b?u[c]||"":"none");return a}function va(a,b,e){return(a=Kb.exec(b))?Math.max(0,a[1]-(e||0))+(a[2]||"px"):b}function S(a,b,e,k,l){b=e===(k?"border":"content")?4:"width"===b?1:0;for(var u=0;4>b;b+=2)"margin"===
      +e&&(u+=d.css(a,e+oa[b],!0,l)),k?("content"===e&&(u-=d.css(a,"padding"+oa[b],!0,l)),"margin"!==e&&(u-=d.css(a,"border"+oa[b]+"Width",!0,l))):(u+=d.css(a,"padding"+oa[b],!0,l),"padding"!==e&&(u+=d.css(a,"border"+oa[b]+"Width",!0,l)));return u}function U(a,b,e){var k=!0,l="width"===b?a.offsetWidth:a.offsetHeight,u=ga(a),c=w.boxSizing&&"border-box"===d.css(a,"boxSizing",!1,u);if(0>=l||null==l){l=pa(a,b,u);if(0>l||null==l)l=a.style[b];if(Ja.test(l))return l;k=c&&(w.boxSizingReliable()||l===a.style[b]);
      +l=parseFloat(l)||0}return l+S(a,b,e||(c?"border":"content"),k,u)+"px"}function H(a,b,e,d,l){return new H.prototype.init(a,b,e,d,l)}function J(){setTimeout(function(){wa=void 0});return wa=d.now()}function v(a,b){var e,d={height:a},l=0;for(b=b?1:0;4>l;l+=2-b)e=oa[l],d["margin"+e]=d["padding"+e]=a;b&&(d.opacity=d.width=a);return d}function da(a,b,e){for(var d,l=(xa[b]||[]).concat(xa["*"]),c=0,f=l.length;c<f;c++)if(d=l[c].call(e,b,a))return d}function y(a,b){var e,k,l,c,f;for(e in a)if(k=d.camelCase(e),
      +l=b[k],c=a[e],d.isArray(c)&&(l=c[1],c=a[e]=c[0]),e!==k&&(a[k]=c,delete a[e]),(f=d.cssHooks[k])&&"expand"in f)for(e in c=f.expand(c),delete a[k],c)e in a||(a[e]=c[e],b[e]=l);else b[k]=l}function G(a,b,e){var k,l=0,c=Ka.length,f=d.Deferred().always(function(){delete g.elem}),g=function(){if(k)return!1;for(var b=wa||J(),b=Math.max(0,h.startTime+h.duration-b),e=1-(b/h.duration||0),d=0,l=h.tweens.length;d<l;d++)h.tweens[d].run(e);f.notifyWith(a,[h,e,b]);if(1>e&&l)return b;f.resolveWith(a,[h]);return!1},
      +h=f.promise({elem:a,props:d.extend({},b),opts:d.extend(!0,{specialEasing:{}},e),originalProperties:b,originalOptions:e,startTime:wa||J(),duration:e.duration,tweens:[],createTween:function(b,e){b=d.Tween(a,h.opts,b,e,h.opts.specialEasing[b]||h.opts.easing);h.tweens.push(b);return b},stop:function(b){var e=0,d=b?h.tweens.length:0;if(k)return this;for(k=!0;e<d;e++)h.tweens[e].run(1);b?f.resolveWith(a,[h,b]):f.rejectWith(a,[h,b]);return this}});e=h.props;for(y(e,h.opts.specialEasing);l<c;l++)if(b=Ka[l].call(h,
      +a,e,h.opts))return b;d.map(e,da,h);d.isFunction(h.opts.start)&&h.opts.start.call(a,h);d.fx.timer(d.extend(g,{elem:a,anim:h,queue:h.opts.queue}));return h.progress(h.opts.progress).done(h.opts.done,h.opts.complete).fail(h.opts.fail).always(h.opts.always)}function C(a){return function(b,e){"string"!==typeof b&&(e=b,b="*");var k=0,l=b.toLowerCase().match(Y)||[];if(d.isFunction(e))for(;b=l[k++];)"+"===b.charAt(0)?(b=b.slice(1)||"*",(a[b]=a[b]||[]).unshift(e)):(a[b]=a[b]||[]).push(e)}}function D(a,b,e,
      +k){function l(u){var g;c[u]=!0;d.each(a[u]||[],function(a,d){a=d(b,e,k);if("string"===typeof a&&!f&&!c[a])return b.dataTypes.unshift(a),l(a),!1;if(f)return!(g=a)});return g}var c={},f=a===Va;return l(b.dataTypes[0])||!c["*"]&&l("*")}function L(a,b){var e,k,l=d.ajaxSettings.flatOptions||{};for(k in b)void 0!==b[k]&&((l[k]?a:e||(e={}))[k]=b[k]);e&&d.extend(!0,a,e);return a}function ea(a,b,e,k){var l;if(d.isArray(b))d.each(b,function(b,d){e||Nb.test(a)?k(a,d):ea(a+"["+("object"===typeof d?b:"")+"]",
      +d,e,k)});else if(e||"object"!==d.type(b))k(a,b);else for(l in b)ea(a+"["+l+"]",b[l],e,k)}function La(){try{return new g.XMLHttpRequest}catch(a){}}function Ga(a){return d.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}var Z=[],ba=Z.slice,jb=Z.concat,Wa=Z.push,kb=Z.indexOf,Ma={},Ob=Ma.toString,ja=Ma.hasOwnProperty,w={},d=function(a,b){return new d.fn.init(a,b)},Pb=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,Qb=/^-ms-/,Rb=/-([\da-z])/gi,Sb=function(a,b){return b.toUpperCase()};d.fn=d.prototype=
      +{jquery:"1.11.2",constructor:d,selector:"",length:0,toArray:function(){return ba.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:ba.call(this)},pushStack:function(a){a=d.merge(this.constructor(),a);a.prevObject=this;a.context=this.context;return a},each:function(a,b){return d.each(this,a,b)},map:function(a){return this.pushStack(d.map(this,function(b,e){return a.call(b,e,b)}))},slice:function(){return this.pushStack(ba.apply(this,arguments))},first:function(){return this.eq(0)},
      +last:function(){return this.eq(-1)},eq:function(a){var b=this.length;a=+a+(0>a?b:0);return this.pushStack(0<=a&&a<b?[this[a]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:Wa,sort:Z.sort,splice:Z.splice};d.extend=d.fn.extend=function(){var a,b,e,k,l,c=arguments[0]||{},f=1,g=arguments.length,h=!1;"boolean"===typeof c&&(h=c,c=arguments[f]||{},f++);"object"===typeof c||d.isFunction(c)||(c={});f===g&&(c=this,f--);for(;f<g;f++)if(null!=(l=arguments[f]))for(k in l)a=c[k],e=l[k],
      +c!==e&&(h&&e&&(d.isPlainObject(e)||(b=d.isArray(e)))?(b?(b=!1,a=a&&d.isArray(a)?a:[]):a=a&&d.isPlainObject(a)?a:{},c[k]=d.extend(h,a,e)):void 0!==e&&(c[k]=e));return c};d.extend({expando:"jQuery"+("1.11.2"+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw Error(a);},noop:function(){},isFunction:function(a){return"function"===d.type(a)},isArray:Array.isArray||function(a){return"array"===d.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!d.isArray(a)&&
      +0<=a-parseFloat(a)+1},isEmptyObject:function(a){for(var b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==d.type(a)||a.nodeType||d.isWindow(a))return!1;try{if(a.constructor&&!ja.call(a,"constructor")&&!ja.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(e){return!1}if(w.ownLast)for(b in a)return ja.call(a,b);for(b in a);return void 0===b||ja.call(a,b)},type:function(a){return null==a?a+"":"object"===typeof a||"function"===typeof a?Ma[Ob.call(a)]||"object":typeof a},
      +globalEval:function(a){a&&d.trim(a)&&(g.execScript||function(a){g.eval.call(g,a)})(a)},camelCase:function(a){return a.replace(Qb,"ms-").replace(Rb,Sb)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,e){var d,l=0,c=a.length;d=x(a);if(e)if(d)for(;l<c&&(d=b.apply(a[l],e),!1!==d);l++);else for(l in a){if(d=b.apply(a[l],e),!1===d)break}else if(d)for(;l<c&&(d=b.call(a[l],l,a[l]),!1!==d);l++);else for(l in a)if(d=b.call(a[l],l,a[l]),!1===d)break;return a},
      +trim:function(a){return null==a?"":(a+"").replace(Pb,"")},makeArray:function(a,b){b=b||[];null!=a&&(x(Object(a))?d.merge(b,"string"===typeof a?[a]:a):Wa.call(b,a));return b},inArray:function(a,b,e){var d;if(b){if(kb)return kb.call(b,a,e);d=b.length;for(e=e?0>e?Math.max(0,d+e):e:0;e<d;e++)if(e in b&&b[e]===a)return e}return-1},merge:function(a,b){for(var e=+b.length,d=0,l=a.length;d<e;)a[l++]=b[d++];if(e!==e)for(;void 0!==b[d];)a[l++]=b[d++];a.length=l;return a},grep:function(a,b,d){for(var e=[],l=
      +0,c=a.length,f=!d;l<c;l++)d=!b(a[l],l),d!==f&&e.push(a[l]);return e},map:function(a,b,d){var e,l=0,c=a.length,f=[];if(x(a))for(;l<c;l++)e=b(a[l],l,d),null!=e&&f.push(e);else for(l in a)e=b(a[l],l,d),null!=e&&f.push(e);return jb.apply([],f)},guid:1,proxy:function(a,b){var e,k;"string"===typeof b&&(k=a[b],b=a,a=k);if(d.isFunction(a))return e=ba.call(arguments,2),k=function(){return a.apply(b||this,e.concat(ba.call(arguments)))},k.guid=a.guid=a.guid||d.guid++,k},now:function(){return+new Date},support:w});
      +d.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){Ma["[object "+b+"]"]=b.toLowerCase()});var ya=function(a){function b(a,b,d,e){var k,l,c,u,f;(b?b.ownerDocument||b:E)!==I&&R(b);b=b||I;d=d||[];u=b.nodeType;if("string"!==typeof a||!a||1!==u&&9!==u&&11!==u)return d;if(!e&&H){if(11!==u&&(k=Aa.exec(a)))if(c=k[1])if(9===u)if((l=b.getElementById(c))&&l.parentNode){if(l.id===c)return d.push(l),d}else return d;else{if(b.ownerDocument&&(l=b.ownerDocument.getElementById(c))&&
      +va(b,l)&&l.id===c)return d.push(l),d}else{if(k[2])return Y.apply(d,b.getElementsByTagName(a)),d;if((c=k[3])&&B.getElementsByClassName)return Y.apply(d,b.getElementsByClassName(c)),d}if(B.qsa&&(!r||!r.test(a))){l=k=Q;c=b;f=1!==u&&a;if(1===u&&"object"!==b.nodeName.toLowerCase()){u=L(a);(k=b.getAttribute("id"))?l=k.replace(Ca,"\\$\x26"):b.setAttribute("id",l);l="[id\x3d'"+l+"'] ";for(c=u.length;c--;)u[c]=l+v(u[c]);c=na.test(a)&&t(b.parentNode)||b;f=u.join(",")}if(f)try{return Y.apply(d,c.querySelectorAll(f)),
      +d}catch(Bc){}finally{k||b.removeAttribute("id")}}}return S(a.replace(ga,"$1"),b,d,e)}function d(){function a(d,e){b.push(d+" ")>F.cacheLength&&delete a[b.shift()];return a[d+" "]=e}var b=[];return a}function k(a){a[Q]=!0;return a}function l(a){var b=I.createElement("div");try{return!!a(b)}catch(ma){return!1}finally{b.parentNode&&b.parentNode.removeChild(b)}}function c(a,b){var d=a.split("|");for(a=a.length;a--;)F.attrHandle[d[a]]=b}function f(a,b){var d=b&&a,e=d&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||
      +-2147483648)-(~a.sourceIndex||-2147483648);if(e)return e;if(d)for(;d=d.nextSibling;)if(d===b)return-1;return a?1:-1}function g(a){return function(b){return"input"===b.nodeName.toLowerCase()&&b.type===a}}function h(a){return function(b){var d=b.nodeName.toLowerCase();return("input"===d||"button"===d)&&b.type===a}}function m(a){return k(function(b){b=+b;return k(function(d,e){for(var k,l=a([],d.length,b),c=l.length;c--;)d[k=l[c]]&&(d[k]=!(e[k]=d[k]))})})}function t(a){return a&&"undefined"!==typeof a.getElementsByTagName&&
      +a}function n(){}function v(a){for(var b=0,d=a.length,e="";b<d;b++)e+=a[b].value;return e}function p(a,b,d){var e=b.dir,k=d&&"parentNode"===e,l=Ea++;return b.first?function(b,d,l){for(;b=b[e];)if(1===b.nodeType||k)return a(b,d,l)}:function(b,d,c){var u,f,g=[ea,l];if(c)for(;b=b[e];){if((1===b.nodeType||k)&&a(b,d,c))return!0}else for(;b=b[e];)if(1===b.nodeType||k){f=b[Q]||(b[Q]={});if((u=f[e])&&u[0]===ea&&u[1]===l)return g[2]=u[2];f[e]=g;if(g[2]=a(b,d,c))return!0}}}function w(a){return 1<a.length?function(b,
      +d,e){for(var k=a.length;k--;)if(!a[k](b,d,e))return!1;return!0}:a[0]}function y(a,b,d,e,k){for(var l,c=[],u=0,f=a.length,g=null!=b;u<f;u++)if(l=a[u])if(!d||d(l,e,k))c.push(l),g&&b.push(u);return c}function C(a,d,e,l,c,u){l&&!l[Q]&&(l=C(l));c&&!c[Q]&&(c=C(c,u));return k(function(k,u,f,g){var T,h,K=[],ma=[],m=u.length,X;if(!(X=k)){X=d||"*";for(var M=f.nodeType?[f]:f,t=[],Da=0,n=M.length;Da<n;Da++)b(X,M[Da],t);X=t}X=!a||!k&&d?X:y(X,K,a,f,g);M=e?c||(k?a:m||l)?[]:u:X;e&&e(X,M,f,g);if(l)for(T=y(M,ma),l(T,
      +[],f,g),f=T.length;f--;)if(h=T[f])M[ma[f]]=!(X[ma[f]]=h);if(k){if(c||a){if(c){T=[];for(f=M.length;f--;)(h=M[f])&&T.push(X[f]=h);c(null,M=[],T,g)}for(f=M.length;f--;)(h=M[f])&&-1<(T=c?ba(k,h):K[f])&&(k[T]=!(u[T]=h))}}else M=y(M===u?M.splice(m,M.length):M),c?c(null,u,M,g):Y.apply(u,M)})}function A(a){var b,d,e,k=a.length,l=F.relative[a[0].type];d=l||F.relative[" "];for(var c=l?1:0,u=p(function(a){return a===b},d,!0),f=p(function(a){return-1<ba(b,a)},d,!0),g=[function(a,d,e){a=!l&&(e||d!==U)||((b=d).nodeType?
      +u(a,d,e):f(a,d,e));b=null;return a}];c<k;c++)if(d=F.relative[a[c].type])g=[p(w(g),d)];else{d=F.filter[a[c].type].apply(null,a[c].matches);if(d[Q]){for(e=++c;e<k&&!F.relative[a[e].type];e++);return C(1<c&&w(g),1<c&&v(a.slice(0,c-1).concat({value:" "===a[c-2].type?"*":""})).replace(ga,"$1"),d,c<e&&A(a.slice(c,e)),e<k&&A(a=a.slice(e)),e<k&&v(a))}g.push(d)}return w(g)}function z(a,d){var e=0<d.length,l=0<a.length,c=function(k,c,u,f,g){var T,h,K,ma=0,m="0",M=k&&[],X=[],t=U,n=k||l&&F.find.TAG("*",g),Da=
      +ea+=null==t?1:Math.random()||.1,Lb=n.length;for(g&&(U=c!==I&&c);m!==Lb&&null!=(T=n[m]);m++){if(l&&T){for(h=0;K=a[h++];)if(K(T,c,u)){f.push(T);break}g&&(ea=Da)}e&&((T=!K&&T)&&ma--,k&&M.push(T))}ma+=m;if(e&&m!==ma){for(h=0;K=d[h++];)K(M,X,c,u);if(k){if(0<ma)for(;m--;)M[m]||X[m]||(X[m]=fa.call(f));X=y(X)}Y.apply(f,X);g&&!k&&0<X.length&&1<ma+d.length&&b.uniqueSort(f)}g&&(ea=Da,U=t);return M};return e?k(c):c}var da,B,F,D,G,L,W,S,U,P,x,R,I,O,H,r,J,Ba,va,Q="sizzle"+1*new Date,E=a.document,ea=0,Ea=0,Fa=d(),
      +N=d(),Z=d(),ca=function(a,b){a===b&&(x=!0);return 0},aa={}.hasOwnProperty,V=[],fa=V.pop,La=V.push,Y=V.push,Ga=V.slice,ba=function(a,b){for(var d=0,e=a.length;d<e;d++)if(a[d]===b)return d;return-1},ka="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+".replace("w","w#"),la="\\[[\\x20\\t\\r\\n\\f]*((?:\\\\.|[\\w-]|[^\\x00-\\xa0])+)(?:[\\x20\\t\\r\\n\\f]*([*^$|!~]?\x3d)[\\x20\\t\\r\\n\\f]*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ka+"))|)[\\x20\\t\\r\\n\\f]*\\]",ia=":((?:\\\\.|[\\w-]|[^\\x00-\\xa0])+)(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+
      +la+")*)|.*)\\)|)",oa=/[\x20\t\r\n\f]+/g,ga=/^[\x20\t\r\n\f]+|((?:^|[^\\])(?:\\.)*)[\x20\t\r\n\f]+$/g,pa=/^[\x20\t\r\n\f]*,[\x20\t\r\n\f]*/,sa=/^[\x20\t\r\n\f]*([>+~]|[\x20\t\r\n\f])[\x20\t\r\n\f]*/,ta=/=[\x20\t\r\n\f]*([^\]'"]*?)[\x20\t\r\n\f]*\]/g,ua=new RegExp(ia),wa=new RegExp("^"+ka+"$"),ja={ID:/^#((?:\\.|[\w-]|[^\x00-\xa0])+)/,CLASS:/^\.((?:\\.|[\w-]|[^\x00-\xa0])+)/,TAG:new RegExp("^("+"(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+".replace("w","w*")+")"),ATTR:new RegExp("^"+la),PSEUDO:new RegExp("^"+ia),
      +CHILD:/^:(only|first|last|nth|nth-last)-(child|of-type)(?:\([\x20\t\r\n\f]*(even|odd|(([+-]|)(\d*)n|)[\x20\t\r\n\f]*(?:([+-]|)[\x20\t\r\n\f]*(\d+)|))[\x20\t\r\n\f]*\)|)/i,bool:/^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$/i,needsContext:/^[\x20\t\r\n\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\([\x20\t\r\n\f]*((?:-\d)?\d*)[\x20\t\r\n\f]*\)|)(?=[^-]|$)/i},ya=/^(?:input|select|textarea|button)$/i,za=/^h\d$/i,ha=
      +/^[^{]+\{\s*\[native \w/,Aa=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,na=/[+~]/,Ca=/'|\\/g,qa=/\\([\da-f]{1,6}[\x20\t\r\n\f]?|([\x20\t\r\n\f])|.)/ig,ra=function(a,b,d){a="0x"+b-65536;return a!==a||d?b:0>a?String.fromCharCode(a+65536):String.fromCharCode(a>>10|55296,a&1023|56320)},xa=function(){R()};try{Y.apply(V=Ga.call(E.childNodes),E.childNodes),V[E.childNodes.length].nodeType}catch(T){Y={apply:V.length?function(a,b){La.apply(a,Ga.call(b))}:function(a,b){for(var d=a.length,e=0;a[d++]=b[e++];);a.length=
      +d-1}}}B=b.support={};G=b.isXML=function(a){return(a=a&&(a.ownerDocument||a).documentElement)?"HTML"!==a.nodeName:!1};R=b.setDocument=function(a){var b=a?a.ownerDocument||a:E;if(b===I||9!==b.nodeType||!b.documentElement)return I;I=b;O=b.documentElement;(a=b.defaultView)&&a!==a.top&&(a.addEventListener?a.addEventListener("unload",xa,!1):a.attachEvent&&a.attachEvent("onunload",xa));H=!G(b);B.attributes=l(function(a){a.className="i";return!a.getAttribute("className")});B.getElementsByTagName=l(function(a){a.appendChild(b.createComment(""));
      +return!a.getElementsByTagName("*").length});B.getElementsByClassName=ha.test(b.getElementsByClassName);B.getById=l(function(a){O.appendChild(a).id=Q;return!b.getElementsByName||!b.getElementsByName(Q).length});B.getById?(F.find.ID=function(a,b){if("undefined"!==typeof b.getElementById&&H)return(a=b.getElementById(a))&&a.parentNode?[a]:[]},F.filter.ID=function(a){var b=a.replace(qa,ra);return function(a){return a.getAttribute("id")===b}}):(delete F.find.ID,F.filter.ID=function(a){var b=a.replace(qa,
      +ra);return function(a){return(a="undefined"!==typeof a.getAttributeNode&&a.getAttributeNode("id"))&&a.value===b}});F.find.TAG=B.getElementsByTagName?function(a,b){if("undefined"!==typeof b.getElementsByTagName)return b.getElementsByTagName(a);if(B.qsa)return b.querySelectorAll(a)}:function(a,b){var d=[],e=0;b=b.getElementsByTagName(a);if("*"===a){for(;a=b[e++];)1===a.nodeType&&d.push(a);return d}return b};F.find.CLASS=B.getElementsByClassName&&function(a,b){if(H)return b.getElementsByClassName(a)};
      +J=[];r=[];if(B.qsa=ha.test(b.querySelectorAll))l(function(a){O.appendChild(a).innerHTML="\x3ca id\x3d'"+Q+"'\x3e\x3c/a\x3e\x3cselect id\x3d'"+Q+"-\f]' msallowcapture\x3d''\x3e\x3coption selected\x3d''\x3e\x3c/option\x3e\x3c/select\x3e";a.querySelectorAll("[msallowcapture^\x3d'']").length&&r.push("[*^$]\x3d[\\x20\\t\\r\\n\\f]*(?:''|\"\")");a.querySelectorAll("[selected]").length||r.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)");
      +a.querySelectorAll("[id~\x3d"+Q+"-]").length||r.push("~\x3d");a.querySelectorAll(":checked").length||r.push(":checked");a.querySelectorAll("a#"+Q+"+*").length||r.push(".#.+[+~]")}),l(function(a){var d=b.createElement("input");d.setAttribute("type","hidden");a.appendChild(d).setAttribute("name","D");a.querySelectorAll("[name\x3dd]").length&&r.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?\x3d");a.querySelectorAll(":enabled").length||r.push(":enabled",":disabled");a.querySelectorAll("*,:x");r.push(",.*:")});
      +(B.matchesSelector=ha.test(Ba=O.matches||O.webkitMatchesSelector||O.mozMatchesSelector||O.oMatchesSelector||O.msMatchesSelector))&&l(function(a){B.disconnectedMatch=Ba.call(a,"div");Ba.call(a,"[s!\x3d'']:x");J.push("!\x3d",ia)});r=r.length&&new RegExp(r.join("|"));J=J.length&&new RegExp(J.join("|"));va=(a=ha.test(O.compareDocumentPosition))||ha.test(O.contains)?function(a,b){var d=9===a.nodeType?a.documentElement:a;b=b&&b.parentNode;return a===b||!!(b&&1===b.nodeType&&(d.contains?d.contains(b):a.compareDocumentPosition&&
      +a.compareDocumentPosition(b)&16))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1};ca=a?function(a,d){if(a===d)return x=!0,0;var e=!a.compareDocumentPosition-!d.compareDocumentPosition;if(e)return e;e=(a.ownerDocument||a)===(d.ownerDocument||d)?a.compareDocumentPosition(d):1;return e&1||!B.sortDetached&&d.compareDocumentPosition(a)===e?a===b||a.ownerDocument===E&&va(E,a)?-1:d===b||d.ownerDocument===E&&va(E,d)?1:P?ba(P,a)-ba(P,d):0:e&4?-1:1}:function(a,d){if(a===d)return x=!0,0;
      +var e=0,k=a.parentNode,l=d.parentNode,c=[a],u=[d];if(!k||!l)return a===b?-1:d===b?1:k?-1:l?1:P?ba(P,a)-ba(P,d):0;if(k===l)return f(a,d);for(;a=a.parentNode;)c.unshift(a);for(a=d;a=a.parentNode;)u.unshift(a);for(;c[e]===u[e];)e++;return e?f(c[e],u[e]):c[e]===E?-1:u[e]===E?1:0};return b};b.matches=function(a,d){return b(a,null,null,d)};b.matchesSelector=function(a,d){(a.ownerDocument||a)!==I&&R(a);d=d.replace(ta,"\x3d'$1']");if(!(!B.matchesSelector||!H||J&&J.test(d)||r&&r.test(d)))try{var e=Ba.call(a,
      +d);if(e||B.disconnectedMatch||a.document&&11!==a.document.nodeType)return e}catch(Da){}return 0<b(d,I,null,[a]).length};b.contains=function(a,b){(a.ownerDocument||a)!==I&&R(a);return va(a,b)};b.attr=function(a,b){(a.ownerDocument||a)!==I&&R(a);var d=F.attrHandle[b.toLowerCase()],d=d&&aa.call(F.attrHandle,b.toLowerCase())?d(a,b,!H):void 0;return void 0!==d?d:B.attributes||!H?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null};b.error=function(a){throw Error("Syntax error, unrecognized expression: "+
      +a);};b.uniqueSort=function(a){var b,d=[],e=0,k=0;x=!B.detectDuplicates;P=!B.sortStable&&a.slice(0);a.sort(ca);if(x){for(;b=a[k++];)b===a[k]&&(e=d.push(k));for(;e--;)a.splice(d[e],1)}P=null;return a};D=b.getText=function(a){var b,d="",e=0;b=a.nodeType;if(!b)for(;b=a[e++];)d+=D(b);else if(1===b||9===b||11===b){if("string"===typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)d+=D(a)}else if(3===b||4===b)return a.nodeValue;return d};F=b.selectors={cacheLength:50,createPseudo:k,
      +match:ja,attrHandle:{},find:{},relative:{"\x3e":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){a[1]=a[1].replace(qa,ra);a[3]=(a[3]||a[4]||a[5]||"").replace(qa,ra);"~\x3d"===a[2]&&(a[3]=" "+a[3]+" ");return a.slice(0,4)},CHILD:function(a){a[1]=a[1].toLowerCase();"nth"===a[1].slice(0,3)?(a[3]||b.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&
      +b.error(a[0]);return a},PSEUDO:function(a){var b,d=!a[6]&&a[2];if(ja.CHILD.test(a[0]))return null;a[3]?a[2]=a[4]||a[5]||"":d&&ua.test(d)&&(b=L(d,!0))&&(b=d.indexOf(")",d.length-b)-d.length)&&(a[0]=a[0].slice(0,b),a[2]=d.slice(0,b));return a.slice(0,3)}},filter:{TAG:function(a){var b=a.replace(qa,ra).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=Fa[a+" "];return b||(b=new RegExp("(^|[\\x20\\t\\r\\n\\f])"+a+"([\\x20\\t\\r\\n\\f]|$)"),
      +Fa(a,function(a){return b.test("string"===typeof a.className&&a.className||"undefined"!==typeof a.getAttribute&&a.getAttribute("class")||"")}))},ATTR:function(a,d,e){return function(k){k=b.attr(k,a);if(null==k)return"!\x3d"===d;if(!d)return!0;k+="";return"\x3d"===d?k===e:"!\x3d"===d?k!==e:"^\x3d"===d?e&&0===k.indexOf(e):"*\x3d"===d?e&&-1<k.indexOf(e):"$\x3d"===d?e&&k.slice(-e.length)===e:"~\x3d"===d?-1<(" "+k.replace(oa," ")+" ").indexOf(e):"|\x3d"===d?k===e||k.slice(0,e.length+1)===e+"-":!1}},CHILD:function(a,
      +b,d,e,k){var l="nth"!==a.slice(0,3),c="last"!==a.slice(-4),u="of-type"===b;return 1===e&&0===k?function(a){return!!a.parentNode}:function(b,d,f){var g,h,K,m,M;d=l!==c?"nextSibling":"previousSibling";var t=b.parentNode,T=u&&b.nodeName.toLowerCase();f=!f&&!u;if(t){if(l){for(;d;){for(h=b;h=h[d];)if(u?h.nodeName.toLowerCase()===T:1===h.nodeType)return!1;M=d="only"===a&&!M&&"nextSibling"}return!0}M=[c?t.firstChild:t.lastChild];if(c&&f)for(f=t[Q]||(t[Q]={}),g=f[a]||[],m=g[0]===ea&&g[1],K=g[0]===ea&&g[2],
      +h=m&&t.childNodes[m];h=++m&&h&&h[d]||(K=m=0)||M.pop();){if(1===h.nodeType&&++K&&h===b){f[a]=[ea,m,K];break}}else if(f&&(g=(b[Q]||(b[Q]={}))[a])&&g[0]===ea)K=g[1];else for(;(h=++m&&h&&h[d]||(K=m=0)||M.pop())&&((u?h.nodeName.toLowerCase()!==T:1!==h.nodeType)||!++K||(f&&((h[Q]||(h[Q]={}))[a]=[ea,K]),h!==b)););K-=k;return K===e||0===K%e&&0<=K/e}}},PSEUDO:function(a,d){var e,l=F.pseudos[a]||F.setFilters[a.toLowerCase()]||b.error("unsupported pseudo: "+a);return l[Q]?l(d):1<l.length?(e=[a,a,"",d],F.setFilters.hasOwnProperty(a.toLowerCase())?
      +k(function(a,b){for(var e,k=l(a,d),c=k.length;c--;)e=ba(a,k[c]),a[e]=!(b[e]=k[c])}):function(a){return l(a,0,e)}):l}},pseudos:{not:k(function(a){var b=[],d=[],e=W(a.replace(ga,"$1"));return e[Q]?k(function(a,b,d,k){k=e(a,null,k,[]);for(var l=a.length;l--;)if(d=k[l])a[l]=!(b[l]=d)}):function(a,k,l){b[0]=a;e(b,null,l,d);b[0]=null;return!d.pop()}}),has:k(function(a){return function(d){return 0<b(a,d).length}}),contains:k(function(a){a=a.replace(qa,ra);return function(b){return-1<(b.textContent||b.innerText||
      +D(b)).indexOf(a)}}),lang:k(function(a){wa.test(a||"")||b.error("unsupported lang: "+a);a=a.replace(qa,ra).toLowerCase();return function(b){var d;do if(d=H?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return d=d.toLowerCase(),d===a||0===d.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var d=a.location&&a.location.hash;return d&&d.slice(1)===b.id},root:function(a){return a===O},focus:function(a){return a===I.activeElement&&(!I.hasFocus||I.hasFocus())&&
      +!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return!1===a.disabled},disabled:function(a){return!0===a.disabled},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return!0===a.selected},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(6>a.nodeType)return!1;return!0},parent:function(a){return!F.pseudos.empty(a)},header:function(a){return za.test(a.nodeName)},input:function(a){return ya.test(a.nodeName)},
      +button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:m(function(){return[0]}),last:m(function(a,b){return[b-1]}),eq:m(function(a,b,d){return[0>d?d+b:d]}),even:m(function(a,b){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:m(function(a,b){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:m(function(a,b,d){for(b=
      +0>d?d+b:d;0<=--b;)a.push(b);return a}),gt:m(function(a,b,d){for(d=0>d?d+b:d;++d<b;)a.push(d);return a})}};F.pseudos.nth=F.pseudos.eq;for(da in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})F.pseudos[da]=g(da);for(da in{submit:!0,reset:!0})F.pseudos[da]=h(da);n.prototype=F.filters=F.pseudos;F.setFilters=new n;L=b.tokenize=function(a,d){var e,k,l,c,u,f,g;if(u=N[a+" "])return d?0:u.slice(0);u=a;f=[];for(g=F.preFilter;u;){if(!e||(k=pa.exec(u)))k&&(u=u.slice(k[0].length)||u),f.push(l=[]);e=!1;if(k=
      +sa.exec(u))e=k.shift(),l.push({value:e,type:k[0].replace(ga," ")}),u=u.slice(e.length);for(c in F.filter)!(k=ja[c].exec(u))||g[c]&&!(k=g[c](k))||(e=k.shift(),l.push({value:e,type:c,matches:k}),u=u.slice(e.length));if(!e)break}return d?u.length:u?b.error(a):N(a,f).slice(0)};W=b.compile=function(a,b){var d,e=[],k=[],l=Z[a+" "];if(!l){b||(b=L(a));for(d=b.length;d--;)l=A(b[d]),l[Q]?e.push(l):k.push(l);l=Z(a,z(k,e));l.selector=a}return l};S=b.select=function(a,b,d,e){var k,l,c,u,f="function"===typeof a&&
      +a,g=!e&&L(a=f.selector||a);d=d||[];if(1===g.length){l=g[0]=g[0].slice(0);if(2<l.length&&"ID"===(c=l[0]).type&&B.getById&&9===b.nodeType&&H&&F.relative[l[1].type]){b=(F.find.ID(c.matches[0].replace(qa,ra),b)||[])[0];if(!b)return d;f&&(b=b.parentNode);a=a.slice(l.shift().value.length)}for(k=ja.needsContext.test(a)?0:l.length;k--;){c=l[k];if(F.relative[u=c.type])break;if(u=F.find[u])if(e=u(c.matches[0].replace(qa,ra),na.test(l[0].type)&&t(b.parentNode)||b)){l.splice(k,1);a=e.length&&v(l);if(!a)return Y.apply(d,
      +e),d;break}}}(f||W(a,g))(e,b,!H,d,na.test(a)&&t(b.parentNode)||b);return d};B.sortStable=Q.split("").sort(ca).join("")===Q;B.detectDuplicates=!!x;R();B.sortDetached=l(function(a){return a.compareDocumentPosition(I.createElement("div"))&1});l(function(a){a.innerHTML="\x3ca href\x3d'#'\x3e\x3c/a\x3e";return"#"===a.firstChild.getAttribute("href")})||c("type|href|height|width",function(a,b,d){if(!d)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)});B.attributes&&l(function(a){a.innerHTML="\x3cinput/\x3e";
      +a.firstChild.setAttribute("value","");return""===a.firstChild.getAttribute("value")})||c("value",function(a,b,d){if(!d&&"input"===a.nodeName.toLowerCase())return a.defaultValue});l(function(a){return null==a.getAttribute("disabled")})||c("checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",function(a,b,d){var e;if(!d)return!0===a[b]?b.toLowerCase():(e=a.getAttributeNode(b))&&e.specified?e.value:null});return b}(g);d.find=ya;d.expr=
      +ya.selectors;d.expr[":"]=d.expr.pseudos;d.unique=ya.uniqueSort;d.text=ya.getText;d.isXMLDoc=ya.isXML;d.contains=ya.contains;var lb=d.expr.match.needsContext,mb=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Gb=/^.[^:#\[\.,]*$/;d.filter=function(a,b,e){var k=b[0];e&&(a=":not("+a+")");return 1===b.length&&1===k.nodeType?d.find.matchesSelector(k,a)?[k]:[]:d.find.matches(a,d.grep(b,function(a){return 1===a.nodeType}))};d.fn.extend({find:function(a){var b,e=[],k=this,l=k.length;if("string"!==typeof a)return this.pushStack(d(a).filter(function(){for(b=
      +0;b<l;b++)if(d.contains(k[b],this))return!0}));for(b=0;b<l;b++)d.find(a,k[b],e);e=this.pushStack(1<l?d.unique(e):e);e.selector=this.selector?this.selector+" "+a:a;return e},filter:function(a){return this.pushStack(c(this,a||[],!1))},not:function(a){return this.pushStack(c(this,a||[],!0))},is:function(a){return!!c(this,"string"===typeof a&&lb.test(a)?d(a):a||[],!1).length}});var Ha,z=g.document,Vb=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;(d.fn.init=function(a,b){var e;if(!a)return this;if("string"===
      +typeof a){e="\x3c"===a.charAt(0)&&"\x3e"===a.charAt(a.length-1)&&3<=a.length?[null,a,null]:Vb.exec(a);if(!e||!e[1]&&b)return!b||b.jquery?(b||Ha).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof d?b[0]:b,d.merge(this,d.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),mb.test(e[1])&&d.isPlainObject(b))for(e in b)if(d.isFunction(this[e]))this[e](b[e]);else this.attr(e,b[e])}else{if((b=z.getElementById(e[2]))&&b.parentNode){if(b.id!==e[2])return Ha.find(a);this.length=1;this[0]=b}this.context=
      +z;this.selector=a}return this}if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(d.isFunction(a))return"undefined"!==typeof Ha.ready?Ha.ready(a):a(d);void 0!==a.selector&&(this.selector=a.selector,this.context=a.context);return d.makeArray(a,this)}).prototype=d.fn;Ha=d(z);var Wb=/^(?:parents|prev(?:Until|All))/,Xb={children:!0,contents:!0,next:!0,prev:!0};d.extend({dir:function(a,b,e){var k=[];for(a=a[b];a&&9!==a.nodeType&&(void 0===e||1!==a.nodeType||!d(a).is(e));)1===a.nodeType&&
      +k.push(a),a=a[b];return k},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&d.push(a);return d}});d.fn.extend({has:function(a){var b,e=d(a,this),k=e.length;return this.filter(function(){for(b=0;b<k;b++)if(d.contains(this,e[b]))return!0})},closest:function(a,b){for(var e,k=0,l=this.length,c=[],f=lb.test(a)||"string"!==typeof a?d(a,b||this.context):0;k<l;k++)for(e=this[k];e&&e!==b;e=e.parentNode)if(11>e.nodeType&&(f?-1<f.index(e):1===e.nodeType&&d.find.matchesSelector(e,a))){c.push(e);
      +break}return this.pushStack(1<c.length?d.unique(c):c)},index:function(a){return a?"string"===typeof a?d.inArray(this[0],d(a)):d.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(d.unique(d.merge(this.get(),d(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});d.each({parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},parents:function(a){return d.dir(a,"parentNode")},
      +parentsUntil:function(a,b,e){return d.dir(a,"parentNode",e)},next:function(a){return f(a,"nextSibling")},prev:function(a){return f(a,"previousSibling")},nextAll:function(a){return d.dir(a,"nextSibling")},prevAll:function(a){return d.dir(a,"previousSibling")},nextUntil:function(a,b,e){return d.dir(a,"nextSibling",e)},prevUntil:function(a,b,e){return d.dir(a,"previousSibling",e)},siblings:function(a){return d.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return d.sibling(a.firstChild)},
      +contents:function(a){return d.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:d.merge([],a.childNodes)}},function(a,b){d.fn[a]=function(e,k){var l=d.map(this,b,e);"Until"!==a.slice(-5)&&(k=e);k&&"string"===typeof k&&(l=d.filter(k,l));1<this.length&&(Xb[a]||(l=d.unique(l)),Wb.test(a)&&(l=l.reverse()));return this.pushStack(l)}});var Y=/\S+/g,fb={};d.Callbacks=function(a){a="string"===typeof a?fb[a]||h(a):d.extend({},a);var b,e,k,l,c,f,g=[],m=!a.once&&[],n=function(d){e=a.memory&&d;
      +k=!0;c=f||0;f=0;l=g.length;for(b=!0;g&&c<l;c++)if(!1===g[c].apply(d[0],d[1])&&a.stopOnFalse){e=!1;break}b=!1;g&&(m?m.length&&n(m.shift()):e?g=[]:t.disable())},t={add:function(){if(g){var k=g.length;(function Ub(b){d.each(b,function(b,e){b=d.type(e);"function"===b?a.unique&&t.has(e)||g.push(e):e&&e.length&&"string"!==b&&Ub(e)})})(arguments);b?l=g.length:e&&(f=k,n(e))}return this},remove:function(){g&&d.each(arguments,function(a,e){for(var k;-1<(k=d.inArray(e,g,k));)g.splice(k,1),b&&(k<=l&&l--,k<=c&&
      +c--)});return this},has:function(a){return a?-1<d.inArray(a,g):!(!g||!g.length)},empty:function(){g=[];l=0;return this},disable:function(){g=m=e=void 0;return this},disabled:function(){return!g},lock:function(){m=void 0;e||t.disable();return this},locked:function(){return!m},fireWith:function(a,d){!g||k&&!m||(d=d||[],d=[a,d.slice?d.slice():d],b?m.push(d):n(d));return this},fire:function(){t.fireWith(this,arguments);return this},fired:function(){return!!k}};return t};d.extend({Deferred:function(a){var b=
      +[["resolve","done",d.Callbacks("once memory"),"resolved"],["reject","fail",d.Callbacks("once memory"),"rejected"],["notify","progress",d.Callbacks("memory")]],e="pending",k={state:function(){return e},always:function(){l.done(arguments).fail(arguments);return this},then:function(){var a=arguments;return d.Deferred(function(e){d.each(b,function(b,c){var f=d.isFunction(a[b])&&a[b];l[c[1]](function(){var a=f&&f.apply(this,arguments);if(a&&d.isFunction(a.promise))a.promise().done(e.resolve).fail(e.reject).progress(e.notify);
      +else e[c[0]+"With"](this===k?e.promise():this,f?[a]:arguments)})});a=null}).promise()},promise:function(a){return null!=a?d.extend(a,k):k}},l={};k.pipe=k.then;d.each(b,function(a,d){var c=d[2],f=d[3];k[d[1]]=c.add;f&&c.add(function(){e=f},b[a^1][2].disable,b[2][2].lock);l[d[0]]=function(){l[d[0]+"With"](this===l?k:this,arguments);return this};l[d[0]+"With"]=c.fireWith});k.promise(l);a&&a.call(l,l);return l},when:function(a){var b=0,e=ba.call(arguments),k=e.length,l=1!==k||a&&d.isFunction(a.promise)?
      +k:0,c=1===l?a:d.Deferred(),f=function(a,b,d){return function(e){b[a]=this;d[a]=1<arguments.length?ba.call(arguments):e;d===g?c.notifyWith(b,d):--l||c.resolveWith(b,d)}},g,h,m;if(1<k)for(g=Array(k),h=Array(k),m=Array(k);b<k;b++)e[b]&&d.isFunction(e[b].promise)?e[b].promise().done(f(b,m,e)).fail(c.reject).progress(f(b,h,g)):--l;l||c.resolveWith(m,e);return c.promise()}});var Na;d.fn.ready=function(a){d.ready.promise().done(a);return this};d.extend({isReady:!1,readyWait:1,holdReady:function(a){a?d.readyWait++:
      +d.ready(!0)},ready:function(a){if(!0===a?!--d.readyWait:!d.isReady){if(!z.body)return setTimeout(d.ready);d.isReady=!0;!0!==a&&0<--d.readyWait||(Na.resolveWith(z,[d]),d.fn.triggerHandler&&(d(z).triggerHandler("ready"),d(z).off("ready")))}}});d.ready.promise=function(a){if(!Na)if(Na=d.Deferred(),"complete"===z.readyState)setTimeout(d.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",n,!1),g.addEventListener("load",n,!1);else{z.attachEvent("onreadystatechange",n);g.attachEvent("onload",
      +n);var b=!1;try{b=null==g.frameElement&&z.documentElement}catch(e){}b&&b.doScroll&&function k(){if(!d.isReady){try{b.doScroll("left")}catch(l){return setTimeout(k,50)}m();d.ready()}}()}return Na.promise(a)};for(var Yb in d(w))break;w.ownLast="0"!==Yb;w.inlineBlockNeedsLayout=!1;d(function(){var a,b,d;(b=z.getElementsByTagName("body")[0])&&b.style&&(a=z.createElement("div"),d=z.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",b.appendChild(d).appendChild(a),
      +"undefined"!==typeof a.style.zoom&&(a.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",w.inlineBlockNeedsLayout=a=3===a.offsetWidth)&&(b.style.zoom=1),b.removeChild(d))});(function(){var a=z.createElement("div");if(null==w.deleteExpando){w.deleteExpando=!0;try{delete a.test}catch(b){w.deleteExpando=!1}}})();d.acceptData=function(a){var b=d.noData[(a.nodeName+" ").toLowerCase()],e=+a.nodeType||1;return 1!==e&&9!==e?!1:!b||!0!==b&&a.getAttribute("classid")===b};var Ib=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
      +Hb=/([A-Z])/g;d.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){a=a.nodeType?d.cache[a[d.expando]]:a[d.expando];return!!a&&!r(a)},data:function(a,b,d){return E(a,b,d)},removeData:function(a,b){return fa(a,b)},_data:function(a,b,d){return E(a,b,d,!0)},_removeData:function(a,b){return fa(a,b,!0)}});d.fn.extend({data:function(a,b){var e,k,c,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(c=d.data(f),1===f.nodeType&&
      +!d._data(f,"parsedAttrs"))){for(e=g.length;e--;)g[e]&&(k=g[e].name,0===k.indexOf("data-")&&(k=d.camelCase(k.slice(5)),W(f,k,c[k])));d._data(f,"parsedAttrs",!0)}return c}return"object"===typeof a?this.each(function(){d.data(this,a)}):1<arguments.length?this.each(function(){d.data(this,a,b)}):f?W(f,a,d.data(f,a)):void 0},removeData:function(a){return this.each(function(){d.removeData(this,a)})}});d.extend({queue:function(a,b,e){var k;if(a)return b=(b||"fx")+"queue",k=d._data(a,b),e&&(!k||d.isArray(e)?
      +k=d._data(a,b,d.makeArray(e)):k.push(e)),k||[]},dequeue:function(a,b){b=b||"fx";var e=d.queue(a,b),k=e.length,c=e.shift(),f=d._queueHooks(a,b),g=function(){d.dequeue(a,b)};"inprogress"===c&&(c=e.shift(),k--);c&&("fx"===b&&e.unshift("inprogress"),delete f.stop,c.call(a,g,f));!k&&f&&f.empty.fire()},_queueHooks:function(a,b){var e=b+"queueHooks";return d._data(a,e)||d._data(a,e,{empty:d.Callbacks("once memory").add(function(){d._removeData(a,b+"queue");d._removeData(a,e)})})}});d.fn.extend({queue:function(a,
      +b){var e=2;"string"!==typeof a&&(b=a,a="fx",e--);return arguments.length<e?d.queue(this[0],a):void 0===b?this:this.each(function(){var e=d.queue(this,a,b);d._queueHooks(this,a);"fx"===a&&"inprogress"!==e[0]&&d.dequeue(this,a)})},dequeue:function(a){return this.each(function(){d.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var e,k=1,c=d.Deferred(),f=this,g=this.length,h=function(){--k||c.resolveWith(f,[f])};"string"!==typeof a&&(b=a,a=void 0);for(a=
      +a||"fx";g--;)(e=d._data(f[g],a+"queueHooks"))&&e.empty&&(k++,e.empty.add(h));h();return c.promise(b)}});var Oa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,oa=["Top","Right","Bottom","Left"],Ca=function(a,b){a=b||a;return"none"===d.css(a,"display")||!d.contains(a.ownerDocument,a)},sa=d.access=function(a,b,e,k,c,f,g){var l=0,u=a.length,h=null==e;if("object"===d.type(e))for(l in c=!0,e)d.access(a,b,l,e[l],!0,f,g);else if(void 0!==k&&(c=!0,d.isFunction(k)||(g=!0),h&&(g?(b.call(a,k),b=null):(h=b,b=function(a,
      +b,e){return h.call(d(a),e)})),b))for(;l<u;l++)b(a[l],e,g?k:k.call(a[l],l,b(a[l],e)));return c?a:h?b.call(a):u?b(a[0],e):f},Ua=/^(?:checkbox|radio)$/i;(function(){var a=z.createElement("input"),b=z.createElement("div"),d=z.createDocumentFragment();b.innerHTML="  \x3clink/\x3e\x3ctable\x3e\x3c/table\x3e\x3ca href\x3d'/a'\x3ea\x3c/a\x3e\x3cinput type\x3d'checkbox'/\x3e";w.leadingWhitespace=3===b.firstChild.nodeType;w.tbody=!b.getElementsByTagName("tbody").length;w.htmlSerialize=!!b.getElementsByTagName("link").length;
      +w.html5Clone="\x3c:nav\x3e\x3c/:nav\x3e"!==z.createElement("nav").cloneNode(!0).outerHTML;a.type="checkbox";a.checked=!0;d.appendChild(a);w.appendChecked=a.checked;b.innerHTML="\x3ctextarea\x3ex\x3c/textarea\x3e";w.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue;d.appendChild(b);b.innerHTML="\x3cinput type\x3d'radio' checked\x3d'checked' name\x3d't'/\x3e";w.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked;w.noCloneEvent=!0;b.attachEvent&&(b.attachEvent("onclick",function(){w.noCloneEvent=
      +!1}),b.cloneNode(!0).click());if(null==w.deleteExpando){w.deleteExpando=!0;try{delete b.test}catch(k){w.deleteExpando=!1}}})();(function(){var a,b,d=z.createElement("div");for(a in{submit:!0,change:!0,focusin:!0})b="on"+a,(w[a+"Bubbles"]=b in g)||(d.setAttribute(b,"t"),w[a+"Bubbles"]=!1===d.attributes[b].expando)})();var Xa=/^(?:input|select|textarea)$/i,Zb=/^key/,$b=/^(?:mouse|pointer|contextmenu)|click/,nb=/^(?:focusinfocus|focusoutblur)$/,ob=/^([^.]*)(?:\.(.+)|)$/;d.event={global:{},add:function(a,
      +b,e,k,c){var l,f,g,h,m,t,n,v,p;if(g=d._data(a)){e.handler&&(h=e,e=h.handler,c=h.selector);e.guid||(e.guid=d.guid++);(f=g.events)||(f=g.events={});(m=g.handle)||(m=g.handle=function(a){return"undefined"===typeof d||a&&d.event.triggered===a.type?void 0:d.event.dispatch.apply(m.elem,arguments)},m.elem=a);b=(b||"").match(Y)||[""];for(g=b.length;g--;)l=ob.exec(b[g])||[],v=t=l[1],p=(l[2]||"").split(".").sort(),v&&(l=d.event.special[v]||{},v=(c?l.delegateType:l.bindType)||v,l=d.event.special[v]||{},t=d.extend({type:v,
      +origType:t,data:k,handler:e,guid:e.guid,selector:c,needsContext:c&&d.expr.match.needsContext.test(c),namespace:p.join(".")},h),(n=f[v])||(n=f[v]=[],n.delegateCount=0,l.setup&&!1!==l.setup.call(a,k,p,m)||(a.addEventListener?a.addEventListener(v,m,!1):a.attachEvent&&a.attachEvent("on"+v,m))),l.add&&(l.add.call(a,t),t.handler.guid||(t.handler.guid=e.guid)),c?n.splice(n.delegateCount++,0,t):n.push(t),d.event.global[v]=!0);a=null}},remove:function(a,b,e,k,c){var l,f,g,h,m,t,n,v,p,y,w,C=d.hasData(a)&&d._data(a);
      +if(C&&(t=C.events)){b=(b||"").match(Y)||[""];for(m=b.length;m--;)if(g=ob.exec(b[m])||[],p=w=g[1],y=(g[2]||"").split(".").sort(),p){n=d.event.special[p]||{};p=(k?n.delegateType:n.bindType)||p;v=t[p]||[];g=g[2]&&new RegExp("(^|\\.)"+y.join("\\.(?:.*\\.|)")+"(\\.|$)");for(h=l=v.length;l--;)f=v[l],!c&&w!==f.origType||e&&e.guid!==f.guid||g&&!g.test(f.namespace)||k&&k!==f.selector&&("**"!==k||!f.selector)||(v.splice(l,1),f.selector&&v.delegateCount--,n.remove&&n.remove.call(a,f));h&&!v.length&&(n.teardown&&
      +!1!==n.teardown.call(a,y,C.handle)||d.removeEvent(a,p,C.handle),delete t[p])}else for(p in t)d.event.remove(a,p+b[m],e,k,!0);d.isEmptyObject(t)&&(delete C.handle,d._removeData(a,"events"))}},trigger:function(a,b,e,k){var c,f,h,m,n,v,t=[e||z],p=ja.call(a,"type")?a.type:a;n=ja.call(a,"namespace")?a.namespace.split("."):[];h=c=e=e||z;if(3!==e.nodeType&&8!==e.nodeType&&!nb.test(p+d.event.triggered)&&(0<=p.indexOf(".")&&(n=p.split("."),p=n.shift(),n.sort()),f=0>p.indexOf(":")&&"on"+p,a=a[d.expando]?a:
      +new d.Event(p,"object"===typeof a&&a),a.isTrigger=k?2:3,a.namespace=n.join("."),a.namespace_re=a.namespace?new RegExp("(^|\\.)"+n.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,a.result=void 0,a.target||(a.target=e),b=null==b?[a]:d.makeArray(b,[a]),n=d.event.special[p]||{},k||!n.trigger||!1!==n.trigger.apply(e,b))){if(!k&&!n.noBubble&&!d.isWindow(e)){m=n.delegateType||p;nb.test(m+p)||(h=h.parentNode);for(;h;h=h.parentNode)t.push(h),c=h;c===(e.ownerDocument||z)&&t.push(c.defaultView||c.parentWindow||g)}for(v=
      +0;(h=t[v++])&&!a.isPropagationStopped();)a.type=1<v?m:n.bindType||p,(c=(d._data(h,"events")||{})[a.type]&&d._data(h,"handle"))&&c.apply(h,b),(c=f&&h[f])&&c.apply&&d.acceptData(h)&&(a.result=c.apply(h,b),!1===a.result&&a.preventDefault());a.type=p;if(!(k||a.isDefaultPrevented()||n._default&&!1!==n._default.apply(t.pop(),b))&&d.acceptData(e)&&f&&e[p]&&!d.isWindow(e)){(c=e[f])&&(e[f]=null);d.event.triggered=p;try{e[p]()}catch(Mb){}d.event.triggered=void 0;c&&(e[f]=c)}return a.result}},dispatch:function(a){a=
      +d.event.fix(a);var b,e,k,c,f,g=ba.call(arguments);b=(d._data(this,"events")||{})[a.type]||[];var h=d.event.special[a.type]||{};g[0]=a;a.delegateTarget=this;if(!h.preDispatch||!1!==h.preDispatch.call(this,a)){f=d.event.handlers.call(this,a,b);for(b=0;(k=f[b++])&&!a.isPropagationStopped();)for(a.currentTarget=k.elem,c=0;(e=k.handlers[c++])&&!a.isImmediatePropagationStopped();)if(!a.namespace_re||a.namespace_re.test(e.namespace))a.handleObj=e,a.data=e.data,e=((d.event.special[e.origType]||{}).handle||
      +e.handler).apply(k.elem,g),void 0!==e&&!1===(a.result=e)&&(a.preventDefault(),a.stopPropagation());h.postDispatch&&h.postDispatch.call(this,a);return a.result}},handlers:function(a,b){var e,k,c,f,g=[],h=b.delegateCount,m=a.target;if(h&&m.nodeType&&(!a.button||"click"!==a.type))for(;m!=this;m=m.parentNode||this)if(1===m.nodeType&&(!0!==m.disabled||"click"!==a.type)){c=[];for(f=0;f<h;f++)k=b[f],e=k.selector+" ",void 0===c[e]&&(c[e]=k.needsContext?0<=d(e,this).index(m):d.find(e,this,null,[m]).length),
      +c[e]&&c.push(k);c.length&&g.push({elem:m,handlers:c})}h<b.length&&g.push({elem:this,handlers:b.slice(h)});return g},fix:function(a){if(a[d.expando])return a;var b,e,k;b=a.type;var c=a,f=this.fixHooks[b];f||(this.fixHooks[b]=f=$b.test(b)?this.mouseHooks:Zb.test(b)?this.keyHooks:{});k=f.props?this.props.concat(f.props):this.props;a=new d.Event(c);for(b=k.length;b--;)e=k[b],a[e]=c[e];a.target||(a.target=c.srcElement||z);3===a.target.nodeType&&(a.target=a.target.parentNode);a.metaKey=!!a.metaKey;return f.filter?
      +f.filter(a,c):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:["char","charCode","key","keyCode"],filter:function(a,b){null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var d,k,c=b.button,f=b.fromElement;null==
      +a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||z,k=d.documentElement,d=d.body,a.pageX=b.clientX+(k&&k.scrollLeft||d&&d.scrollLeft||0)-(k&&k.clientLeft||d&&d.clientLeft||0),a.pageY=b.clientY+(k&&k.scrollTop||d&&d.scrollTop||0)-(k&&k.clientTop||d&&d.clientTop||0));!a.relatedTarget&&f&&(a.relatedTarget=f===a.target?b.toElement:f);a.which||void 0===c||(a.which=c&1?1:c&2?3:c&4?2:0);return a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ha()&&this.focus)try{return this.focus(),
      +!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){if(this===ha()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(d.nodeName(this,"input")&&"checkbox"===this.type&&this.click)return this.click(),!1},_default:function(a){return d.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,e,k){a=d.extend(new d.Event,e,{type:a,isSimulated:!0,originalEvent:{}});
      +k?d.event.trigger(a,null,b):d.event.dispatch.call(b,a);a.isDefaultPrevented()&&e.preventDefault()}};d.removeEvent=z.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,!1)}:function(a,b,d){b="on"+b;a.detachEvent&&("undefined"===typeof a[b]&&(a[b]=null),a.detachEvent(b,d))};d.Event=function(a,b){if(!(this instanceof d.Event))return new d.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&
      +!1===a.returnValue?aa:V):this.type=a;b&&d.extend(this,b);this.timeStamp=a&&a.timeStamp||d.now();this[d.expando]=!0};d.Event.prototype={isDefaultPrevented:V,isPropagationStopped:V,isImmediatePropagationStopped:V,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa;a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa;a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=
      +this.originalEvent;this.isImmediatePropagationStopped=aa;a&&a.stopImmediatePropagation&&a.stopImmediatePropagation();this.stopPropagation()}};d.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){d.event.special[a]={delegateType:b,bindType:b,handle:function(a){var e,c=a.relatedTarget,f=a.handleObj;if(!c||c!==this&&!d.contains(this,c))a.type=f.origType,e=f.handler.apply(this,arguments),a.type=b;return e}}});w.submitBubbles||(d.event.special.submit=
      +{setup:function(){if(d.nodeName(this,"form"))return!1;d.event.add(this,"click._submit keypress._submit",function(a){a=a.target;(a=d.nodeName(a,"input")||d.nodeName(a,"button")?a.form:void 0)&&!d._data(a,"submitBubbles")&&(d.event.add(a,"submit._submit",function(a){a._submit_bubble=!0}),d._data(a,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&d.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(d.nodeName(this,
      +"form"))return!1;d.event.remove(this,"._submit")}});w.changeBubbles||(d.event.special.change={setup:function(){if(Xa.test(this.nodeName)){if("checkbox"===this.type||"radio"===this.type)d.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),d.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1);d.event.simulate("change",this,a,!0)});return!1}d.event.add(this,"beforeactivate._change",function(a){a=
      +a.target;Xa.test(a.nodeName)&&!d._data(a,"changeBubbles")&&(d.event.add(a,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||d.event.simulate("change",this.parentNode,a,!0)}),d._data(a,"changeBubbles",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type)return a.handleObj.handler.apply(this,arguments)},teardown:function(){d.event.remove(this,"._change");return!Xa.test(this.nodeName)}});w.focusinBubbles||d.each({focus:"focusin",
      +blur:"focusout"},function(a,b){var e=function(a){d.event.simulate(b,a.target,d.event.fix(a),!0)};d.event.special[b]={setup:function(){var c=this.ownerDocument||this,l=d._data(c,b);l||c.addEventListener(a,e,!0);d._data(c,b,(l||0)+1)},teardown:function(){var c=this.ownerDocument||this,l=d._data(c,b)-1;l?d._data(c,b,l):(c.removeEventListener(a,e,!0),d._removeData(c,b))}}});d.fn.extend({on:function(a,b,e,c,l){var k,f;if("object"===typeof a){"string"!==typeof b&&(e=e||b,b=void 0);for(k in a)this.on(k,
      +b,e,a[k],l);return this}null==e&&null==c?(c=b,e=b=void 0):null==c&&("string"===typeof b?(c=e,e=void 0):(c=e,e=b,b=void 0));if(!1===c)c=V;else if(!c)return this;1===l&&(f=c,c=function(a){d().off(a);return f.apply(this,arguments)},c.guid=f.guid||(f.guid=d.guid++));return this.each(function(){d.event.add(this,a,c,e,b)})},one:function(a,b,d,c){return this.on(a,b,d,c,1)},off:function(a,b,e){var c;if(a&&a.preventDefault&&a.handleObj)return c=a.handleObj,d(a.delegateTarget).off(c.namespace?c.origType+"."+
      +c.namespace:c.origType,c.selector,c.handler),this;if("object"===typeof a){for(c in a)this.off(c,b,a[c]);return this}if(!1===b||"function"===typeof b)e=b,b=void 0;!1===e&&(e=V);return this.each(function(){d.event.remove(this,a,e,b)})},trigger:function(a,b){return this.each(function(){d.event.trigger(a,b,this)})},triggerHandler:function(a,b){var e=this[0];if(e)return d.event.trigger(a,b,e,!0)}});var gb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
      +ac=/ jQuery\d+="(?:null|\d+)"/g,pb=new RegExp("\x3c(?:"+gb+")[\\s/\x3e]","i"),Ya=/^\s+/,qb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,rb=/<([\w:]+)/,sb=/<tbody/i,bc=/<|&#?\w+;/,cc=/<(?:script|style|link)/i,dc=/checked\s*(?:[^=]|=\s*.checked.)/i,tb=/^$|\/(?:java|ecma)script/i,Jb=/^true\/(.*)/,ec=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ca={option:[1,"\x3cselect multiple\x3d'multiple'\x3e","\x3c/select\x3e"],legend:[1,"\x3cfieldset\x3e","\x3c/fieldset\x3e"],area:[1,
      +"\x3cmap\x3e","\x3c/map\x3e"],param:[1,"\x3cobject\x3e","\x3c/object\x3e"],thead:[1,"\x3ctable\x3e","\x3c/table\x3e"],tr:[2,"\x3ctable\x3e\x3ctbody\x3e","\x3c/tbody\x3e\x3c/table\x3e"],col:[2,"\x3ctable\x3e\x3ctbody\x3e\x3c/tbody\x3e\x3ccolgroup\x3e","\x3c/colgroup\x3e\x3c/table\x3e"],td:[3,"\x3ctable\x3e\x3ctbody\x3e\x3ctr\x3e","\x3c/tr\x3e\x3c/tbody\x3e\x3c/table\x3e"],_default:w.htmlSerialize?[0,"",""]:[1,"X\x3cdiv\x3e","\x3c/div\x3e"]},Za=Aa(z).appendChild(z.createElement("div"));ca.optgroup=
      +ca.option;ca.tbody=ca.tfoot=ca.colgroup=ca.caption=ca.thead;ca.th=ca.td;d.extend({clone:function(a,b,e){var c,l,f,g,h,m=d.contains(a.ownerDocument,a);w.html5Clone||d.isXMLDoc(a)||!pb.test("\x3c"+a.nodeName+"\x3e")?f=a.cloneNode(!0):(Za.innerHTML=a.outerHTML,Za.removeChild(f=Za.firstChild));if(!(w.noCloneEvent&&w.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||d.isXMLDoc(a)))for(c=N(f),h=N(a),g=0;null!=(l=h[g]);++g)if(c[g]){var n=c[g],t,p=void 0,v;if(1===n.nodeType){t=n.nodeName.toLowerCase();if(!w.noCloneEvent&&
      +n[d.expando]){v=d._data(n);for(p in v.events)d.removeEvent(n,p,v.handle);n.removeAttribute(d.expando)}if("script"===t&&n.text!==l.text)ia(n).text=l.text,A(n);else if("object"===t)n.parentNode&&(n.outerHTML=l.outerHTML),w.html5Clone&&l.innerHTML&&!d.trim(n.innerHTML)&&(n.innerHTML=l.innerHTML);else if("input"===t&&Ua.test(l.type))n.defaultChecked=n.checked=l.checked,n.value!==l.value&&(n.value=l.value);else if("option"===t)n.defaultSelected=n.selected=l.defaultSelected;else if("input"===t||"textarea"===
      +t)n.defaultValue=l.defaultValue}}if(b)if(e)for(h=h||N(a),c=c||N(f),g=0;null!=(l=h[g]);g++)P(l,c[g]);else P(a,f);c=N(f,"script");0<c.length&&R(c,!m&&N(a,"script"));return f},buildFragment:function(a,b,e,c){for(var k,f,g,h,m,n,t=a.length,p=Aa(b),v=[],y=0;y<t;y++)if((f=a[y])||0===f)if("object"===d.type(f))d.merge(v,f.nodeType?[f]:f);else if(bc.test(f)){g=g||p.appendChild(b.createElement("div"));h=(rb.exec(f)||["",""])[1].toLowerCase();n=ca[h]||ca._default;g.innerHTML=n[1]+f.replace(qb,"\x3c$1\x3e\x3c/$2\x3e")+
      +n[2];for(k=n[0];k--;)g=g.lastChild;!w.leadingWhitespace&&Ya.test(f)&&v.push(b.createTextNode(Ya.exec(f)[0]));if(!w.tbody)for(k=(f="table"!==h||sb.test(f)?"\x3ctable\x3e"!==n[1]||sb.test(f)?0:g:g.firstChild)&&f.childNodes.length;k--;)d.nodeName(m=f.childNodes[k],"tbody")&&!m.childNodes.length&&f.removeChild(m);d.merge(v,g.childNodes);for(g.textContent="";g.firstChild;)g.removeChild(g.firstChild);g=p.lastChild}else v.push(b.createTextNode(f));g&&p.removeChild(g);w.appendChecked||d.grep(N(v,"input"),
      +Ta);for(y=0;f=v[y++];)if(!c||-1===d.inArray(f,c))if(a=d.contains(f.ownerDocument,f),g=N(p.appendChild(f),"script"),a&&R(g),e)for(k=0;f=g[k++];)tb.test(f.type||"")&&e.push(f);return p},cleanData:function(a,b){for(var e,c,f,g,h=0,m=d.expando,n=d.cache,p=w.deleteExpando,t=d.event.special;null!=(e=a[h]);h++)if(b||d.acceptData(e))if(g=(f=e[m])&&n[f]){if(g.events)for(c in g.events)t[c]?d.event.remove(e,c):d.removeEvent(e,c,g.handle);n[f]&&(delete n[f],p?delete e[m]:"undefined"!==typeof e.removeAttribute?
      +e.removeAttribute(m):e[m]=null,Z.push(f))}}});d.fn.extend({text:function(a){return sa(this,function(a){return void 0===a?d.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Ia(this,a).appendChild(a)})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=
      +Ia(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var e=a?d.filter(a,this):this,c=0;null!=(a=e[c]);c++)b||1!==a.nodeType||d.cleanData(N(a)),a.parentNode&&(b&&d.contains(a.ownerDocument,a)&&R(N(a,"script")),a.parentNode.removeChild(a));
      +return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){for(1===a.nodeType&&d.cleanData(N(a,!1));a.firstChild;)a.removeChild(a.firstChild);a.options&&d.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){a=null==a?!1:a;b=null==b?a:b;return this.map(function(){return d.clone(this,a,b)})},html:function(a){return sa(this,function(a){var b=this[0]||{},c=0,f=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ac,""):void 0;if(!("string"!==typeof a||cc.test(a)||
      +!w.htmlSerialize&&pb.test(a)||!w.leadingWhitespace&&Ya.test(a)||ca[(rb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(qb,"\x3c$1\x3e\x3c/$2\x3e");try{for(;c<f;c++)b=this[c]||{},1===b.nodeType&&(d.cleanData(N(b,!1)),b.innerHTML=a);b=0}catch(u){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];this.domManip(arguments,function(b){a=this.parentNode;d.cleanData(N(this));a&&a.replaceChild(b,this)});return a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,
      +!0)},domManip:function(a,b){a=jb.apply([],a);var e,c,f,g,h=0,m=this.length,n=this,p=m-1,t=a[0],v=d.isFunction(t);if(v||1<m&&"string"===typeof t&&!w.checkClone&&dc.test(t))return this.each(function(d){var e=n.eq(d);v&&(a[0]=t.call(this,d,e.html()));e.domManip(a,b)});if(m&&(g=d.buildFragment(a,this[0].ownerDocument,!1,this),e=g.firstChild,1===g.childNodes.length&&(g=e),e)){f=d.map(N(g,"script"),ia);for(c=f.length;h<m;h++)e=g,h!==p&&(e=d.clone(e,!0,!0),c&&d.merge(f,N(e,"script"))),b.call(this[h],e,h);
      +if(c)for(g=f[f.length-1].ownerDocument,d.map(f,A),h=0;h<c;h++)e=f[h],tb.test(e.type||"")&&!d._data(e,"globalEval")&&d.contains(g,e)&&(e.src?d._evalUrl&&d._evalUrl(e.src):d.globalEval((e.text||e.textContent||e.innerHTML||"").replace(ec,"")));g=e=null}return this}});d.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){d.fn[a]=function(a){for(var e=0,c=[],f=d(a),g=f.length-1;e<=g;e++)a=e===g?this:this.clone(!0),d(f[e])[b](a),
      +Wa.apply(c,a.get());return this.pushStack(c)}});var na,hb={};(function(){var a;w.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,d,c;if((d=z.getElementsByTagName("body")[0])&&d.style)return b=z.createElement("div"),c=z.createElement("div"),c.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",d.appendChild(c).appendChild(b),"undefined"!==typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",
      +b.appendChild(z.createElement("div")).style.width="5px",a=3!==b.offsetWidth),d.removeChild(c),a}})();var ub=/^margin/,Ja=new RegExp("^("+Oa+")(?!px)[a-z%]+$","i"),ga,pa,fc=/^(top|right|bottom|left)$/;g.getComputedStyle?(ga=function(a){return a.ownerDocument.defaultView.opener?a.ownerDocument.defaultView.getComputedStyle(a,null):g.getComputedStyle(a,null)},pa=function(a,b,e){var c,f,g=a.style;f=(e=e||ga(a))?e.getPropertyValue(b)||e[b]:void 0;e&&(""!==f||d.contains(a.ownerDocument,a)||(f=d.style(a,
      +b)),Ja.test(f)&&ub.test(b)&&(a=g.width,b=g.minWidth,c=g.maxWidth,g.minWidth=g.maxWidth=g.width=f,f=e.width,g.width=a,g.minWidth=b,g.maxWidth=c));return void 0===f?f:f+""}):z.documentElement.currentStyle&&(ga=function(a){return a.currentStyle},pa=function(a,b,d){var e,c,f,g=a.style;f=(d=d||ga(a))?d[b]:void 0;null==f&&g&&g[b]&&(f=g[b]);if(Ja.test(f)&&!fc.test(b)){d=g.left;if(c=(e=a.runtimeStyle)&&e.left)e.left=a.currentStyle.left;g.left="fontSize"===b?"1em":f;f=g.pixelLeft+"px";g.left=d;c&&(e.left=
      +c)}return void 0===f?f:f+""||"auto"});(function(){function a(){var a,b,d,e;if((b=z.getElementsByTagName("body")[0])&&b.style){a=z.createElement("div");d=z.createElement("div");d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px";b.appendChild(d).appendChild(a);a.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute";c=f=!1;m=!0;g.getComputedStyle&&
      +(c="1%"!==(g.getComputedStyle(a,null)||{}).top,f="4px"===(g.getComputedStyle(a,null)||{width:"4px"}).width,e=a.appendChild(z.createElement("div")),e.style.cssText=a.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",e.style.marginRight=e.style.width="0",a.style.width="1px",m=!parseFloat((g.getComputedStyle(e,null)||{}).marginRight),a.removeChild(e));a.innerHTML="\x3ctable\x3e\x3ctr\x3e\x3ctd\x3e\x3c/td\x3e\x3ctd\x3et\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e";
      +e=a.getElementsByTagName("td");e[0].style.cssText="margin:0;border:0;padding:0;display:none";if(h=0===e[0].offsetHeight)e[0].style.display="",e[1].style.display="none",h=0===e[0].offsetHeight;b.removeChild(d)}}var b,e,c,f,h,m;b=z.createElement("div");b.innerHTML="  \x3clink/\x3e\x3ctable\x3e\x3c/table\x3e\x3ca href\x3d'/a'\x3ea\x3c/a\x3e\x3cinput type\x3d'checkbox'/\x3e";if(e=(e=b.getElementsByTagName("a")[0])&&e.style)e.cssText="float:left;opacity:.5",w.opacity="0.5"===e.opacity,w.cssFloat=!!e.cssFloat,
      +b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",w.clearCloneStyle="content-box"===b.style.backgroundClip,w.boxSizing=""===e.boxSizing||""===e.MozBoxSizing||""===e.WebkitBoxSizing,d.extend(w,{reliableHiddenOffsets:function(){null==h&&a();return h},boxSizingReliable:function(){null==f&&a();return f},pixelPosition:function(){null==c&&a();return c},reliableMarginRight:function(){null==m&&a();return m}})})();d.swap=function(a,b,d,c){var e,f={};for(e in b)f[e]=a.style[e],a.style[e]=
      +b[e];d=d.apply(a,c||[]);for(e in b)a.style[e]=f[e];return d};var $a=/alpha\([^)]*\)/i,gc=/opacity\s*=\s*([^)]*)/,hc=/^(none|table(?!-c[ea]).+)/,Kb=new RegExp("^("+Oa+")(.*)$","i"),ic=new RegExp("^([+-])\x3d("+Oa+")","i"),jc={position:"absolute",visibility:"hidden",display:"block"},vb={letterSpacing:"0",fontWeight:"400"},ib=["Webkit","O","Moz","ms"];d.extend({cssHooks:{opacity:{get:function(a,b){if(b)return a=pa(a,"opacity"),""===a?"1":a}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,
      +fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":w.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,e,c){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var f,k,g,h=d.camelCase(b),m=a.style;b=d.cssProps[h]||(d.cssProps[h]=Ba(m,h));g=d.cssHooks[b]||d.cssHooks[h];if(void 0!==e){if(k=typeof e,"string"===k&&(f=ic.exec(e))&&(e=(f[1]+1)*f[2]+parseFloat(d.css(a,b)),k="number"),null!=e&&e===e&&("number"!==k||d.cssNumber[h]||(e+="px"),w.clearCloneStyle||
      +""!==e||0!==b.indexOf("background")||(m[b]="inherit"),!(g&&"set"in g)||void 0!==(e=g.set(a,e,c))))try{m[b]=e}catch(Ac){}}else return g&&"get"in g&&void 0!==(f=g.get(a,!1,c))?f:m[b]}},css:function(a,b,e,c){var f,k;k=d.camelCase(b);b=d.cssProps[k]||(d.cssProps[k]=Ba(a.style,k));(k=d.cssHooks[b]||d.cssHooks[k])&&"get"in k&&(f=k.get(a,!0,e));void 0===f&&(f=pa(a,b,c));"normal"===f&&b in vb&&(f=vb[b]);return""===e||e?(a=parseFloat(f),!0===e||d.isNumeric(a)?a||0:f):f}});d.each(["height","width"],function(a,
      +b){d.cssHooks[b]={get:function(a,c,f){if(c)return hc.test(d.css(a,"display"))&&0===a.offsetWidth?d.swap(a,jc,function(){return U(a,b,f)}):U(a,b,f)},set:function(a,c,f){var e=f&&ga(a);return va(a,c,f?S(a,b,f,w.boxSizing&&"border-box"===d.css(a,"boxSizing",!1,e),e):0)}}});w.opacity||(d.cssHooks.opacity={get:function(a,b){return gc.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var e=a.style;a=a.currentStyle;var c=d.isNumeric(b)?
      +"alpha(opacity\x3d"+100*b+")":"",f=a&&a.filter||e.filter||"";e.zoom=1;if((1<=b||""===b)&&""===d.trim(f.replace($a,""))&&e.removeAttribute&&(e.removeAttribute("filter"),""===b||a&&!a.filter))return;e.filter=$a.test(f)?f.replace($a,c):f+" "+c}});d.cssHooks.marginRight=Fa(w.reliableMarginRight,function(a,b){if(b)return d.swap(a,{display:"inline-block"},pa,[a,"marginRight"])});d.each({margin:"",padding:"",border:"Width"},function(a,b){d.cssHooks[a+b]={expand:function(d){var e=0,c={};for(d="string"===
      +typeof d?d.split(" "):[d];4>e;e++)c[a+oa[e]+b]=d[e]||d[e-2]||d[0];return c}};ub.test(a)||(d.cssHooks[a+b].set=va)});d.fn.extend({css:function(a,b){return sa(this,function(a,b,c){var e,f={},k=0;if(d.isArray(b)){c=ga(a);for(e=b.length;k<e;k++)f[b[k]]=d.css(a,b[k],!1,c);return f}return void 0!==c?d.style(a,b,c):d.css(a,b)},a,b,1<arguments.length)},show:function(){return O(this,!0)},hide:function(){return O(this)},toggle:function(a){return"boolean"===typeof a?a?this.show():this.hide():this.each(function(){Ca(this)?
      +d(this).show():d(this).hide()})}});d.Tween=H;H.prototype={constructor:H,init:function(a,b,e,c,f,g){this.elem=a;this.prop=e;this.easing=f||"swing";this.options=b;this.start=this.now=this.cur();this.end=c;this.unit=g||(d.cssNumber[e]?"":"px")},cur:function(){var a=H.propHooks[this.prop];return a&&a.get?a.get(this):H.propHooks._default.get(this)},run:function(a){var b,e=H.propHooks[this.prop];this.pos=this.options.duration?b=d.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):
      +b=a;this.now=(this.end-this.start)*b+this.start;this.options.step&&this.options.step.call(this.elem,this.now,this);e&&e.set?e.set(this):H.propHooks._default.set(this);return this}};H.prototype.init.prototype=H.prototype;H.propHooks={_default:{get:function(a){return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(a=d.css(a.elem,a.prop,""))&&"auto"!==a?a:0:a.elem[a.prop]},set:function(a){if(d.fx.step[a.prop])d.fx.step[a.prop](a);else a.elem.style&&(null!=a.elem.style[d.cssProps[a.prop]]||
      +d.cssHooks[a.prop])?d.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}};H.propHooks.scrollTop=H.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}};d.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}};d.fx=H.prototype.init;d.fx.step={};var wa,Pa,kc=/^(?:toggle|show|hide)$/,wb=new RegExp("^(?:([+-])\x3d|)("+Oa+")([a-z%]*)$","i"),lc=/queueHooks$/,Ka=[function(a,b,e){var c,f,g,h,m,n,p=this,t={},v=a.style,y=a.nodeType&&
      +Ca(a),C=d._data(a,"fxshow");e.queue||(h=d._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,m=h.empty.fire,h.empty.fire=function(){h.unqueued||m()}),h.unqueued++,p.always(function(){p.always(function(){h.unqueued--;d.queue(a,"fx").length||h.empty.fire()})}));1===a.nodeType&&("height"in b||"width"in b)&&(e.overflow=[v.overflow,v.overflowX,v.overflowY],n=d.css(a,"display"),f="none"===n?d._data(a,"olddisplay")||Ea(a.nodeName):n,"inline"===f&&"none"===d.css(a,"float")&&(w.inlineBlockNeedsLayout&&"inline"!==
      +Ea(a.nodeName)?v.zoom=1:v.display="inline-block"));e.overflow&&(v.overflow="hidden",w.shrinkWrapBlocks()||p.always(function(){v.overflow=e.overflow[0];v.overflowX=e.overflow[1];v.overflowY=e.overflow[2]}));for(c in b)if(f=b[c],kc.exec(f)){delete b[c];g=g||"toggle"===f;if(f===(y?"hide":"show"))if("show"===f&&C&&void 0!==C[c])y=!0;else continue;t[c]=C&&C[c]||d.style(a,c)}else n=void 0;if(d.isEmptyObject(t))"inline"===("none"===n?Ea(a.nodeName):n)&&(v.display=n);else for(c in C?"hidden"in C&&(y=C.hidden):
      +C=d._data(a,"fxshow",{}),g&&(C.hidden=!y),y?d(a).show():p.done(function(){d(a).hide()}),p.done(function(){var b;d._removeData(a,"fxshow");for(b in t)d.style(a,b,t[b])}),t)b=da(y?C[c]:0,c,p),c in C||(C[c]=b.start,y&&(b.end=b.start,b.start="width"===c||"height"===c?1:0))}],xa={"*":[function(a,b){var e=this.createTween(a,b),c=e.cur(),f=(b=wb.exec(b))&&b[3]||(d.cssNumber[a]?"":"px"),g=(d.cssNumber[a]||"px"!==f&&+c)&&wb.exec(d.css(e.elem,a)),h=1,m=20;if(g&&g[3]!==f){f=f||g[3];b=b||[];g=+c||1;do h=h||".5",
      +g/=h,d.style(e.elem,a,g+f);while(h!==(h=e.cur()/c)&&1!==h&&--m)}b&&(g=e.start=+g||+c||0,e.unit=f,e.end=b[1]?g+(b[1]+1)*b[2]:+b[2]);return e}]};d.Animation=d.extend(G,{tweener:function(a,b){d.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var e,c=0,f=a.length;c<f;c++)e=a[c],xa[e]=xa[e]||[],xa[e].unshift(b)},prefilter:function(a,b){b?Ka.unshift(a):Ka.push(a)}});d.speed=function(a,b,e){var c=a&&"object"===typeof a?d.extend({},a):{complete:e||!e&&b||d.isFunction(a)&&a,duration:a,easing:e&&b||b&&!d.isFunction(b)&&
      +b};c.duration=d.fx.off?0:"number"===typeof c.duration?c.duration:c.duration in d.fx.speeds?d.fx.speeds[c.duration]:d.fx.speeds._default;if(null==c.queue||!0===c.queue)c.queue="fx";c.old=c.complete;c.complete=function(){d.isFunction(c.old)&&c.old.call(this);c.queue&&d.dequeue(this,c.queue)};return c};d.fn.extend({fadeTo:function(a,b,d,c){return this.filter(Ca).css("opacity",0).show().end().animate({opacity:b},a,d,c)},animate:function(a,b,e,c){var f=d.isEmptyObject(a),g=d.speed(b,e,c);b=function(){var b=
      +G(this,d.extend({},a),g);(f||d._data(this,"finish"))&&b.stop(!0)};b.finish=b;return f||!1===g.queue?this.each(b):this.queue(g.queue,b)},stop:function(a,b,e){var c=function(a){var b=a.stop;delete a.stop;b(e)};"string"!==typeof a&&(e=b,b=a,a=void 0);b&&!1!==a&&this.queue(a||"fx",[]);return this.each(function(){var b=!0,f=null!=a&&a+"queueHooks",g=d.timers,k=d._data(this);if(f)k[f]&&k[f].stop&&c(k[f]);else for(f in k)k[f]&&k[f].stop&&lc.test(f)&&c(k[f]);for(f=g.length;f--;)g[f].elem!==this||null!=a&&
      +g[f].queue!==a||(g[f].anim.stop(e),b=!1,g.splice(f,1));!b&&e||d.dequeue(this,a)})},finish:function(a){!1!==a&&(a=a||"fx");return this.each(function(){var b,e=d._data(this),c=e[a+"queue"];b=e[a+"queueHooks"];var f=d.timers,g=c?c.length:0;e.finish=!0;d.queue(this,a,[]);b&&b.stop&&b.stop.call(this,!0);for(b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)c[b]&&c[b].finish&&c[b].finish.call(this);delete e.finish})}});d.each(["toggle","show","hide"],function(a,
      +b){var e=d.fn[b];d.fn[b]=function(a,d,c){return null==a||"boolean"===typeof a?e.apply(this,arguments):this.animate(v(b,!0),a,d,c)}});d.each({slideDown:v("show"),slideUp:v("hide"),slideToggle:v("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){d.fn[a]=function(a,d,c){return this.animate(b,a,d,c)}});d.timers=[];d.fx.tick=function(){var a,b=d.timers,e=0;for(wa=d.now();e<b.length;e++)a=b[e],a()||b[e]!==a||b.splice(e--,1);b.length||d.fx.stop();wa=void 0};
      +d.fx.timer=function(a){d.timers.push(a);a()?d.fx.start():d.timers.pop()};d.fx.interval=13;d.fx.start=function(){Pa||(Pa=setInterval(d.fx.tick,d.fx.interval))};d.fx.stop=function(){clearInterval(Pa);Pa=null};d.fx.speeds={slow:600,fast:200,_default:400};d.fn.delay=function(a,b){a=d.fx?d.fx.speeds[a]||a:a;return this.queue(b||"fx",function(b,d){var e=setTimeout(b,a);d.stop=function(){clearTimeout(e)}})};(function(){var a,b,d,c,f;b=z.createElement("div");b.setAttribute("className","t");b.innerHTML="  \x3clink/\x3e\x3ctable\x3e\x3c/table\x3e\x3ca href\x3d'/a'\x3ea\x3c/a\x3e\x3cinput type\x3d'checkbox'/\x3e";
      +c=b.getElementsByTagName("a")[0];d=z.createElement("select");f=d.appendChild(z.createElement("option"));a=b.getElementsByTagName("input")[0];c.style.cssText="top:1px";w.getSetAttribute="t"!==b.className;w.style=/top/.test(c.getAttribute("style"));w.hrefNormalized="/a"===c.getAttribute("href");w.checkOn=!!a.value;w.optSelected=f.selected;w.enctype=!!z.createElement("form").enctype;d.disabled=!0;w.optDisabled=!f.disabled;a=z.createElement("input");a.setAttribute("value","");w.input=""===a.getAttribute("value");
      +a.value="t";a.setAttribute("type","radio");w.radioValue="t"===a.value})();var mc=/\r/g;d.fn.extend({val:function(a){var b,e,c,f=this[0];if(arguments.length)return c=d.isFunction(a),this.each(function(e){1===this.nodeType&&(e=c?a.call(this,e,d(this).val()):a,null==e?e="":"number"===typeof e?e+="":d.isArray(e)&&(e=d.map(e,function(a){return null==a?"":a+""})),b=d.valHooks[this.type]||d.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(f){if((b=
      +d.valHooks[f.type]||d.valHooks[f.nodeName.toLowerCase()])&&"get"in b&&void 0!==(e=b.get(f,"value")))return e;e=f.value;return"string"===typeof e?e.replace(mc,""):null==e?"":e}}});d.extend({valHooks:{option:{get:function(a){var b=d.find.attr(a,"value");return null!=b?b:d.trim(d.text(a))}},select:{get:function(a){for(var b,e=a.options,c=a.selectedIndex,f=(a="select-one"===a.type||0>c)?null:[],g=a?c+1:e.length,h=0>c?g:a?c:0;h<g;h++)if(b=e[h],!(!b.selected&&h!==c||(w.optDisabled?b.disabled:null!==b.getAttribute("disabled"))||
      +b.parentNode.disabled&&d.nodeName(b.parentNode,"optgroup"))){b=d(b).val();if(a)return b;f.push(b)}return f},set:function(a,b){for(var e,c=a.options,f=d.makeArray(b),g=c.length;g--;)if(b=c[g],0<=d.inArray(d.valHooks.option.get(b),f))try{b.selected=e=!0}catch(K){b.scrollHeight}else b.selected=!1;e||(a.selectedIndex=-1);return c}}}});d.each(["radio","checkbox"],function(){d.valHooks[this]={set:function(a,b){if(d.isArray(b))return a.checked=0<=d.inArray(d(a).val(),b)}};w.checkOn||(d.valHooks[this].get=
      +function(a){return null===a.getAttribute("value")?"on":a.value})});var za,xb,ka=d.expr.attrHandle,ab=/^(?:checked|selected)$/i,ta=w.getSetAttribute,Qa=w.input;d.fn.extend({attr:function(a,b){return sa(this,d.attr,a,b,1<arguments.length)},removeAttr:function(a){return this.each(function(){d.removeAttr(this,a)})}});d.extend({attr:function(a,b,e){var c,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g){if("undefined"===typeof a.getAttribute)return d.prop(a,b,e);1===g&&d.isXMLDoc(a)||(b=b.toLowerCase(),c=d.attrHooks[b]||
      +(d.expr.match.bool.test(b)?xb:za));if(void 0!==e)if(null===e)d.removeAttr(a,b);else{if(c&&"set"in c&&void 0!==(f=c.set(a,e,b)))return f;a.setAttribute(b,e+"");return e}else{if(c&&"get"in c&&null!==(f=c.get(a,b)))return f;f=d.find.attr(a,b);return null==f?void 0:f}}},removeAttr:function(a,b){var e,c=0,f=b&&b.match(Y);if(f&&1===a.nodeType)for(;b=f[c++];)e=d.propFix[b]||b,d.expr.match.bool.test(b)?Qa&&ta||!ab.test(b)?a[e]=!1:a[d.camelCase("default-"+b)]=a[e]=!1:d.attr(a,b,""),a.removeAttribute(ta?b:
      +e)},attrHooks:{type:{set:function(a,b){if(!w.radioValue&&"radio"===b&&d.nodeName(a,"input")){var e=a.value;a.setAttribute("type",b);e&&(a.value=e);return b}}}}});xb={set:function(a,b,e){!1===b?d.removeAttr(a,e):Qa&&ta||!ab.test(e)?a.setAttribute(!ta&&d.propFix[e]||e,e):a[d.camelCase("default-"+e)]=a[e]=!0;return e}};d.each(d.expr.match.bool.source.match(/\w+/g),function(a,b){var e=ka[b]||d.find.attr;ka[b]=Qa&&ta||!ab.test(b)?function(a,b,d){var c,f;d||(f=ka[b],ka[b]=c,c=null!=e(a,b,d)?b.toLowerCase():
      +null,ka[b]=f);return c}:function(a,b,e){if(!e)return a[d.camelCase("default-"+b)]?b.toLowerCase():null}});Qa&&ta||(d.attrHooks.value={set:function(a,b,e){if(d.nodeName(a,"input"))a.defaultValue=b;else return za&&za.set(a,b,e)}});ta||(za={set:function(a,b,d){var e=a.getAttributeNode(d);e||a.setAttributeNode(e=a.ownerDocument.createAttribute(d));e.value=b+="";if("value"===d||b===a.getAttribute(d))return b}},ka.id=ka.name=ka.coords=function(a,b,d){var e;if(!d)return(e=a.getAttributeNode(b))&&""!==e.value?
      +e.value:null},d.valHooks.button={get:function(a,b){if((a=a.getAttributeNode(b))&&a.specified)return a.value},set:za.set},d.attrHooks.contenteditable={set:function(a,b,d){za.set(a,""===b?!1:b,d)}},d.each(["width","height"],function(a,b){d.attrHooks[b]={set:function(a,d){if(""===d)return a.setAttribute(b,"auto"),d}}}));w.style||(d.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var nc=/^(?:input|select|textarea|button|object)$/i,oc=/^(?:a|area)$/i;
      +d.fn.extend({prop:function(a,b){return sa(this,d.prop,a,b,1<arguments.length)},removeProp:function(a){a=d.propFix[a]||a;return this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}});d.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,e){var c,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return 1===g&&d.isXMLDoc(a)||(b=d.propFix[b]||b,f=d.propHooks[b]),void 0!==e?f&&"set"in f&&void 0!==(c=f.set(a,e,b))?c:a[b]=e:f&&"get"in f&&null!==(c=f.get(a,b))?c:a[b]},propHooks:{tabIndex:{get:function(a){var b=
      +d.find.attr(a,"tabindex");return b?parseInt(b,10):nc.test(a.nodeName)||oc.test(a.nodeName)&&a.href?0:-1}}}});w.hrefNormalized||d.each(["href","src"],function(a,b){d.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}});w.optSelected||(d.propHooks.selected={get:function(a){if(a=a.parentNode)a.selectedIndex,a.parentNode&&a.parentNode.selectedIndex;return null}});d.each("tabIndex readOnly maxLength cellSpacing cellPadding rowSpan colSpan useMap frameBorder contentEditable".split(" "),function(){d.propFix[this.toLowerCase()]=
      +this});w.enctype||(d.propFix.enctype="encoding");var bb=/[\t\r\n\f]/g;d.fn.extend({addClass:function(a){var b,e,c,f,g,h=0,m=this.length;b="string"===typeof a&&a;if(d.isFunction(a))return this.each(function(b){d(this).addClass(a.call(this,b,this.className))});if(b)for(b=(a||"").match(Y)||[];h<m;h++)if(e=this[h],c=1===e.nodeType&&(e.className?(" "+e.className+" ").replace(bb," "):" ")){for(g=0;f=b[g++];)0>c.indexOf(" "+f+" ")&&(c+=f+" ");c=d.trim(c);e.className!==c&&(e.className=c)}return this},removeClass:function(a){var b,
      +e,c,f,g,h=0,m=this.length;b=0===arguments.length||"string"===typeof a&&a;if(d.isFunction(a))return this.each(function(b){d(this).removeClass(a.call(this,b,this.className))});if(b)for(b=(a||"").match(Y)||[];h<m;h++)if(e=this[h],c=1===e.nodeType&&(e.className?(" "+e.className+" ").replace(bb," "):"")){for(g=0;f=b[g++];)for(;0<=c.indexOf(" "+f+" ");)c=c.replace(" "+f+" "," ");c=a?d.trim(c):"";e.className!==c&&(e.className=c)}return this},toggleClass:function(a,b){var e=typeof a;return"boolean"===typeof b&&
      +"string"===e?b?this.addClass(a):this.removeClass(a):d.isFunction(a)?this.each(function(e){d(this).toggleClass(a.call(this,e,this.className,b),b)}):this.each(function(){if("string"===e)for(var b,c=0,f=d(this),g=a.match(Y)||[];b=g[c++];)f.hasClass(b)?f.removeClass(b):f.addClass(b);else if("undefined"===e||"boolean"===e)this.className&&d._data(this,"__className__",this.className),this.className=this.className||!1===a?"":d._data(this,"__className__")||""})},hasClass:function(a){a=" "+a+" ";for(var b=
      +0,d=this.length;b<d;b++)if(1===this[b].nodeType&&0<=(" "+this[b].className+" ").replace(bb," ").indexOf(a))return!0;return!1}});d.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){d.fn[b]=function(a,d){return 0<arguments.length?this.on(b,null,a,d):this.trigger(b)}});d.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||
      +a)},bind:function(a,b,d){return this.on(a,null,b,d)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,d,c){return this.on(b,a,d,c)},undelegate:function(a,b,d){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",d)}});var cb=d.now(),db=/\?/,pc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;d.parseJSON=function(a){if(g.JSON&&g.JSON.parse)return g.JSON.parse(a+"");var b,e=null,c=d.trim(a+
      +"");return c&&!d.trim(c.replace(pc,function(a,d,c,f){b&&d&&(e=0);if(0===e)return a;b=c||d;e+=!f-!c;return""}))?Function("return "+c)():d.error("Invalid JSON: "+a)};d.parseXML=function(a){var b,c;if(!a||"string"!==typeof a)return null;try{g.DOMParser?(c=new DOMParser,b=c.parseFromString(a,"text/xml")):(b=new ActiveXObject("Microsoft.XMLDOM"),b.async="false",b.loadXML(a))}catch(k){b=void 0}b&&b.documentElement&&!b.getElementsByTagName("parsererror").length||d.error("Invalid XML: "+a);return b};var ua,
      +la,qc=/#.*$/,yb=/([?&])_=[^&]*/,rc=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,sc=/^(?:GET|HEAD)$/,tc=/^\/\//,zb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ab={},Va={},Bb="*/".concat("*");try{la=location.href}catch(a){la=z.createElement("a"),la.href="",la=la.href}ua=zb.exec(la.toLowerCase())||[];d.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:la,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(ua[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset\x3dUTF-8",
      +accepts:{"*":Bb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":d.parseJSON,"text xml":d.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?L(L(a,d.ajaxSettings),b):L(d.ajaxSettings,a)},ajaxPrefilter:C(Ab),ajaxTransport:C(Va),ajax:function(a,
      +b){function c(a,b,c,e){var f,k,l,u;u=b;if(2!==L){L=2;m&&clearTimeout(m);v=void 0;h=e||"";B.readyState=0<a?4:0;e=200<=a&&300>a||304===a;if(c){l=t;for(var p=B,I,z,r,D,G=l.contents,K=l.dataTypes;"*"===K[0];)K.shift(),void 0===z&&(z=l.mimeType||p.getResponseHeader("Content-Type"));if(z)for(D in G)if(G[D]&&G[D].test(z)){K.unshift(D);break}if(K[0]in c)r=K[0];else{for(D in c){if(!K[0]||l.converters[D+" "+K[0]]){r=D;break}I||(I=D)}r=r||I}r?(r!==K[0]&&K.unshift(r),l=c[r]):l=void 0}a:{c=t;I=l;z=B;r=e;var P,
      +O,F,p={},G=c.dataTypes.slice();if(G[1])for(O in c.converters)p[O.toLowerCase()]=c.converters[O];for(D=G.shift();D;)if(c.responseFields[D]&&(z[c.responseFields[D]]=I),!F&&r&&c.dataFilter&&(I=c.dataFilter(I,c.dataType)),F=D,D=G.shift())if("*"===D)D=F;else if("*"!==F&&F!==D){O=p[F+" "+D]||p["* "+D];if(!O)for(P in p)if(l=P.split(" "),l[1]===D&&(O=p[F+" "+l[0]]||p["* "+l[0]])){!0===O?O=p[P]:!0!==p[P]&&(D=l[0],G.unshift(l[1]));break}if(!0!==O)if(O&&c["throws"])I=O(I);else try{I=O(I)}catch(Tb){l={state:"parsererror",
      +error:O?Tb:"No conversion from "+F+" to "+D};break a}}l={state:"success",data:I}}if(e)t.ifModified&&((u=B.getResponseHeader("Last-Modified"))&&(d.lastModified[g]=u),(u=B.getResponseHeader("etag"))&&(d.etag[g]=u)),204===a||"HEAD"===t.type?u="nocontent":304===a?u="notmodified":(u=l.state,f=l.data,k=l.error,e=!k);else if(k=u,a||!u)u="error",0>a&&(a=0);B.status=a;B.statusText=(b||u)+"";e?w.resolveWith(y,[f,u,B]):w.rejectWith(y,[B,u,k]);B.statusCode(da);da=void 0;n&&C.trigger(e?"ajaxSuccess":"ajaxError",
      +[B,t,e?f:k]);A.fireWith(y,[B,u]);n&&(C.trigger("ajaxComplete",[B,t]),--d.active||d.event.trigger("ajaxStop"))}}"object"===typeof a&&(b=a,a=void 0);b=b||{};var f,g,h,m,n,v,p,t=d.ajaxSetup({},b),y=t.context||t,C=t.context&&(y.nodeType||y.jquery)?d(y):d.event,w=d.Deferred(),A=d.Callbacks("once memory"),da=t.statusCode||{},I={},z={},L=0,r="canceled",B={readyState:0,getResponseHeader:function(a){var b;if(2===L){if(!p)for(p={};b=rc.exec(h);)p[b[1].toLowerCase()]=b[2];b=p[a.toLowerCase()]}return null==b?
      +null:b},getAllResponseHeaders:function(){return 2===L?h:null},setRequestHeader:function(a,b){var d=a.toLowerCase();L||(a=z[d]=z[d]||a,I[a]=b);return this},overrideMimeType:function(a){L||(t.mimeType=a);return this},statusCode:function(a){var b;if(a)if(2>L)for(b in a)da[b]=[da[b],a[b]];else B.always(a[B.status]);return this},abort:function(a){a=a||r;v&&v.abort(a);c(0,a);return this}};w.promise(B).complete=A.add;B.success=B.done;B.error=B.fail;t.url=((a||t.url||la)+"").replace(qc,"").replace(tc,ua[1]+
      +"//");t.type=b.method||b.type||t.method||t.type;t.dataTypes=d.trim(t.dataType||"*").toLowerCase().match(Y)||[""];null==t.crossDomain&&(a=zb.exec(t.url.toLowerCase()),t.crossDomain=!(!a||a[1]===ua[1]&&a[2]===ua[2]&&(a[3]||("http:"===a[1]?"80":"443"))===(ua[3]||("http:"===ua[1]?"80":"443"))));t.data&&t.processData&&"string"!==typeof t.data&&(t.data=d.param(t.data,t.traditional));D(Ab,t,b,B);if(2===L)return B;(n=d.event&&t.global)&&0===d.active++&&d.event.trigger("ajaxStart");t.type=t.type.toUpperCase();
      +t.hasContent=!sc.test(t.type);g=t.url;t.hasContent||(t.data&&(g=t.url+=(db.test(g)?"\x26":"?")+t.data,delete t.data),!1===t.cache&&(t.url=yb.test(g)?g.replace(yb,"$1_\x3d"+cb++):g+(db.test(g)?"\x26":"?")+"_\x3d"+cb++));t.ifModified&&(d.lastModified[g]&&B.setRequestHeader("If-Modified-Since",d.lastModified[g]),d.etag[g]&&B.setRequestHeader("If-None-Match",d.etag[g]));(t.data&&t.hasContent&&!1!==t.contentType||b.contentType)&&B.setRequestHeader("Content-Type",t.contentType);B.setRequestHeader("Accept",
      +t.dataTypes[0]&&t.accepts[t.dataTypes[0]]?t.accepts[t.dataTypes[0]]+("*"!==t.dataTypes[0]?", "+Bb+"; q\x3d0.01":""):t.accepts["*"]);for(f in t.headers)B.setRequestHeader(f,t.headers[f]);if(t.beforeSend&&(!1===t.beforeSend.call(y,B,t)||2===L))return B.abort();r="abort";for(f in{success:1,error:1,complete:1})B[f](t[f]);if(v=D(Va,t,b,B)){B.readyState=1;n&&C.trigger("ajaxSend",[B,t]);t.async&&0<t.timeout&&(m=setTimeout(function(){B.abort("timeout")},t.timeout));try{L=1,v.send(I,c)}catch(F){if(2>L)c(-1,
      +F);else throw F;}}else c(-1,"No Transport");return B},getJSON:function(a,b,c){return d.get(a,b,c,"json")},getScript:function(a,b){return d.get(a,void 0,b,"script")}});d.each(["get","post"],function(a,b){d[b]=function(a,c,f,g){d.isFunction(c)&&(g=g||f,f=c,c=void 0);return d.ajax({url:a,type:b,dataType:g,data:c,success:f})}});d._evalUrl=function(a){return d.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})};d.fn.extend({wrapAll:function(a){if(d.isFunction(a))return this.each(function(b){d(this).wrapAll(a.call(this,
      +b))});if(this[0]){var b=d(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var a=this;a.firstChild&&1===a.firstChild.nodeType;)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return d.isFunction(a)?this.each(function(b){d(this).wrapInner(a.call(this,b))}):this.each(function(){var b=d(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=d.isFunction(a);return this.each(function(c){d(this).wrapAll(b?
      +a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){d.nodeName(this,"body")||d(this).replaceWith(this.childNodes)}).end()}});d.expr.filters.hidden=function(a){return 0>=a.offsetWidth&&0>=a.offsetHeight||!w.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||d.css(a,"display"))};d.expr.filters.visible=function(a){return!d.expr.filters.hidden(a)};var uc=/%20/g,Nb=/\[\]$/,Cb=/\r?\n/g,vc=/^(?:submit|button|image|reset|file)$/i,wc=/^(?:input|select|textarea|keygen)/i;d.param=
      +function(a,b){var c,f=[],g=function(a,b){b=d.isFunction(b)?b():null==b?"":b;f[f.length]=encodeURIComponent(a)+"\x3d"+encodeURIComponent(b)};void 0===b&&(b=d.ajaxSettings&&d.ajaxSettings.traditional);if(d.isArray(a)||a.jquery&&!d.isPlainObject(a))d.each(a,function(){g(this.name,this.value)});else for(c in a)ea(c,a[c],b,g);return f.join("\x26").replace(uc,"+")};d.fn.extend({serialize:function(){return d.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=d.prop(this,
      +"elements");return a?d.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!d(this).is(":disabled")&&wc.test(this.nodeName)&&!vc.test(a)&&(this.checked||!Ua.test(a))}).map(function(a,b){a=d(this).val();return null==a?null:d.isArray(a)?d.map(a,function(a){return{name:b.name,value:a.replace(Cb,"\r\n")}}):{name:b.name,value:a.replace(Cb,"\r\n")}}).get()}});d.ajaxSettings.xhr=void 0!==g.ActiveXObject?function(){var a;if(!(a=!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&
      +La()))a:{try{a=new g.ActiveXObject("Microsoft.XMLHTTP");break a}catch(b){}a=void 0}return a}:La;var xc=0,Ra={},Sa=d.ajaxSettings.xhr();g.attachEvent&&g.attachEvent("onunload",function(){for(var a in Ra)Ra[a](void 0,!0)});w.cors=!!Sa&&"withCredentials"in Sa;(Sa=w.ajax=!!Sa)&&d.ajaxTransport(function(a){if(!a.crossDomain||w.cors){var b;return{send:function(c,f){var e,g=a.xhr(),k=++xc;g.open(a.type,a.url,a.async,a.username,a.password);if(a.xhrFields)for(e in a.xhrFields)g[e]=a.xhrFields[e];a.mimeType&&
      +g.overrideMimeType&&g.overrideMimeType(a.mimeType);a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&g.setRequestHeader(e,c[e]+"");g.send(a.hasContent&&a.data||null);b=function(c,e){var h,l,m;if(b&&(e||4===g.readyState))if(delete Ra[k],b=void 0,g.onreadystatechange=d.noop,e)4!==g.readyState&&g.abort();else{m={};h=g.status;"string"===typeof g.responseText&&(m.text=g.responseText);try{l=g.statusText}catch(Mb){l=""}h||!a.isLocal||a.crossDomain?1223===
      +h&&(h=204):h=m.text?200:404}m&&f(h,l,m,g.getAllResponseHeaders())};a.async?4===g.readyState?setTimeout(b):g.onreadystatechange=Ra[k]=b:b()},abort:function(){b&&b(void 0,!0)}}}});d.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){d.globalEval(a);return a}}});d.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1);a.crossDomain&&(a.type="GET",
      +a.global=!1)});d.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||d("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script");b.async=!0;a.scriptCharset&&(b.charset=a.scriptCharset);b.src=a.url;b.onload=b.onreadystatechange=function(a,d){if(d||!b.readyState||/loaded|complete/.test(b.readyState))b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,d||e(200,"success")};c.insertBefore(b,c.firstChild)},abort:function(){if(b)b.onload(void 0,
      +!0)}}}});var Db=[],eb=/(=)\?(?=&|$)|\?\?/;d.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Db.pop()||d.expando+"_"+cb++;this[a]=!0;return a}});d.ajaxPrefilter("json jsonp",function(a,b,c){var e,f,h,m=!1!==a.jsonp&&(eb.test(a.url)?"url":"string"===typeof a.data&&!(a.contentType||"").indexOf("application/x-www-form-urlencoded")&&eb.test(a.data)&&"data");if(m||"jsonp"===a.dataTypes[0])return e=a.jsonpCallback=d.isFunction(a.jsonpCallback)?a.jsonpCallback():a.jsonpCallback,m?a[m]=a[m].replace(eb,
      +"$1"+e):!1!==a.jsonp&&(a.url+=(db.test(a.url)?"\x26":"?")+a.jsonp+"\x3d"+e),a.converters["script json"]=function(){h||d.error(e+" was not called");return h[0]},a.dataTypes[0]="json",f=g[e],g[e]=function(){h=arguments},c.always(function(){g[e]=f;a[e]&&(a.jsonpCallback=b.jsonpCallback,Db.push(e));h&&d.isFunction(f)&&f(h[0]);h=f=void 0}),"script"});d.parseHTML=function(a,b,c){if(!a||"string"!==typeof a)return null;"boolean"===typeof b&&(c=b,b=!1);b=b||z;var e=mb.exec(a);c=!c&&[];if(e)return[b.createElement(e[1])];
      +e=d.buildFragment([a],b,c);c&&c.length&&d(c).remove();return d.merge([],e.childNodes)};var Eb=d.fn.load;d.fn.load=function(a,b,c){if("string"!==typeof a&&Eb)return Eb.apply(this,arguments);var e,f,g,h=this,m=a.indexOf(" ");0<=m&&(e=d.trim(a.slice(m,a.length)),a=a.slice(0,m));d.isFunction(b)?(c=b,b=void 0):b&&"object"===typeof b&&(g="POST");0<h.length&&d.ajax({url:a,type:g,dataType:"html",data:b}).done(function(a){f=arguments;h.html(e?d("\x3cdiv\x3e").append(d.parseHTML(a)).find(e):a)}).complete(c&&
      +function(a,b){h.each(c,f||[a.responseText,b,a])});return this};d.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){d.fn[b]=function(a){return this.on(b,a)}});d.expr.filters.animated=function(a){return d.grep(d.timers,function(b){return a===b.elem}).length};var Fb=g.document.documentElement;d.offset={setOffset:function(a,b,c){var e,f,g,h=d.css(a,"position"),m=d(a),n={};"static"===h&&(a.style.position="relative");g=m.offset();f=d.css(a,"top");e=d.css(a,"left");
      +("absolute"===h||"fixed"===h)&&-1<d.inArray("auto",[f,e])?(e=m.position(),f=e.top,e=e.left):(f=parseFloat(f)||0,e=parseFloat(e)||0);d.isFunction(b)&&(b=b.call(a,c,g));null!=b.top&&(n.top=b.top-g.top+f);null!=b.left&&(n.left=b.left-g.left+e);"using"in b?b.using.call(a,n):m.css(n)}};d.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){d.offset.setOffset(this,a,b)});var b,c,f={top:0,left:0},g=(c=this[0])&&c.ownerDocument;if(g){b=g.documentElement;if(!d.contains(b,
      +c))return f;"undefined"!==typeof c.getBoundingClientRect&&(f=c.getBoundingClientRect());c=Ga(g);return{top:f.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:f.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}}},position:function(){if(this[0]){var a,b,c={top:0,left:0},f=this[0];"fixed"===d.css(f,"position")?b=f.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),d.nodeName(a[0],"html")||(c=a.offset()),c.top+=d.css(a[0],"borderTopWidth",!0),c.left+=d.css(a[0],"borderLeftWidth",
      +!0));return{top:b.top-c.top-d.css(f,"marginTop",!0),left:b.left-c.left-d.css(f,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||Fb;a&&!d.nodeName(a,"html")&&"static"===d.css(a,"position");)a=a.offsetParent;return a||Fb})}});d.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);d.fn[a]=function(e){return sa(this,function(a,e,f){var g=Ga(a);if(void 0===f)return g?b in g?g[b]:g.document.documentElement[e]:a[e];g?g.scrollTo(c?
      +d(g).scrollLeft():f,c?f:d(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}});d.each(["top","left"],function(a,b){d.cssHooks[b]=Fa(w.pixelPosition,function(a,c){if(c)return c=pa(a,b),Ja.test(c)?d(a).position()[b]+"px":c})});d.each({Height:"height",Width:"width"},function(a,b){d.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,f){d.fn[f]=function(e,f){var g=arguments.length&&(c||"boolean"!==typeof e),h=c||(!0===e||!0===f?"margin":"border");return sa(this,function(b,c,e){return d.isWindow(b)?
      +b.document.documentElement["client"+a]:9===b.nodeType?(c=b.documentElement,Math.max(b.body["scroll"+a],c["scroll"+a],b.body["offset"+a],c["offset"+a],c["client"+a])):void 0===e?d.css(b,c,h):d.style(b,c,e,h)},b,g?e:void 0,g,null)}})});d.fn.size=function(){return this.length};d.fn.andSelf=d.fn.addBack;"function"===typeof define&&define.amd&&define("jquery",[],function(){return d});var yc=g.jQuery,zc=g.$;d.noConflict=function(a){g.$===d&&(g.$=zc);a&&g.jQuery===d&&(g.jQuery=yc);return d};"undefined"===
      +typeof p&&(g.jQuery=g.$=d);return d});!function(g){g(function(){var p=g.support,x;a:{x=document.createElement("bootstrap");var c={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},f;for(f in c)if(void 0!==x.style[f]){x=c[f];break a}x=void 0}p.transition=x&&{end:x}})}(window.jQuery);
      +!function(g){var p=function(c){g(c).on("click",'[data-dismiss\x3d"alert"]',this.close)};p.prototype.close=function(c){function f(){n.trigger("closed").remove()}var h=g(this),m=h.attr("data-target"),n;m||(m=(m=h.attr("href"))&&m.replace(/.*(?=#[^\s]*$)/,""));n=g(m);c&&c.preventDefault();n.length||(n=h.hasClass("alert")?h:h.parent());n.trigger(c=g.Event("close"));c.isDefaultPrevented()||(n.removeClass("in"),g.support.transition&&n.hasClass("fade")?n.on(g.support.transition.end,f):f())};var x=g.fn.alert;
      +g.fn.alert=function(c){return this.each(function(){var f=g(this),h=f.data("alert");h||f.data("alert",h=new p(this));"string"==typeof c&&h[c].call(f)})};g.fn.alert.Constructor=p;g.fn.alert.noConflict=function(){g.fn.alert=x;return this};g(document).on("click.alert.data-api",'[data-dismiss\x3d"alert"]',p.prototype.close)}(window.jQuery);
      +!function(g){var p=function(c,f){this.$element=g(c);this.options=g.extend({},g.fn.button.defaults,f)};p.prototype.setState=function(c){var f=this.$element,g=f.data(),m=f.is("input")?"val":"html";c+="Text";g.resetText||f.data("resetText",f[m]());f[m](g[c]||this.options[c]);setTimeout(function(){"loadingText"==c?f.addClass("disabled").attr("disabled","disabled"):f.removeClass("disabled").removeAttr("disabled")},0)};p.prototype.toggle=function(){var c=this.$element.closest('[data-toggle\x3d"buttons-radio"]');
      +c&&c.find(".active").removeClass("active");this.$element.toggleClass("active")};var x=g.fn.button;g.fn.button=function(c){return this.each(function(){var f=g(this),h=f.data("button"),m="object"==typeof c&&c;h||f.data("button",h=new p(this,m));"toggle"==c?h.toggle():c&&h.setState(c)})};g.fn.button.defaults={loadingText:"loading..."};g.fn.button.Constructor=p;g.fn.button.noConflict=function(){g.fn.button=x;return this};g(document).on("click.button.data-api","[data-toggle^\x3dbutton]",function(c){c=
      +g(c.target);c.hasClass("btn")||(c=c.closest(".btn"));c.button("toggle")})}(window.jQuery);
      +!function(g){var p=function(c,f){this.$element=g(c);this.$indicators=this.$element.find(".carousel-indicators");this.options=f;"hover"==this.options.pause&&this.$element.on("mouseenter",g.proxy(this.pause,this)).on("mouseleave",g.proxy(this.cycle,this))};p.prototype={cycle:function(c){c||(this.paused=!1);this.interval&&clearInterval(this.interval);this.options.interval&&!this.paused&&(this.interval=setInterval(g.proxy(this.next,this),this.options.interval));return this},getActiveIndex:function(){this.$active=
      +this.$element.find(".item.active");this.$items=this.$active.parent().children();return this.$items.index(this.$active)},to:function(c){var f=this.getActiveIndex(),h=this;if(!(c>this.$items.length-1||0>c))return this.sliding?this.$element.one("slid",function(){h.to(c)}):f==c?this.pause().cycle():this.slide(c>f?"next":"prev",g(this.$items[c]))},pause:function(c){c||(this.paused=!0);this.$element.find(".next, .prev").length&&g.support.transition.end&&(this.$element.trigger(g.support.transition.end),
      +this.cycle(!0));clearInterval(this.interval);this.interval=null;return this},next:function(){if(!this.sliding)return this.slide("next")},prev:function(){if(!this.sliding)return this.slide("prev")},slide:function(c,f){var h=this.$element.find(".item.active"),m=f||h[c]();f=this.interval;var n="next"==c?"left":"right",p="next"==c?"first":"last",r=this;this.sliding=!0;f&&this.pause();m=m.length?m:this.$element.find(".item")[p]();p=g.Event("slide",{relatedTarget:m[0],direction:n});if(!m.hasClass("active")){this.$indicators.length&&
      +(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var c=g(r.$indicators.children()[r.getActiveIndex()]);c&&c.addClass("active")}));if(g.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(p);if(p.isDefaultPrevented())return;m.addClass(c);m[0].offsetWidth;h.addClass(n);m.addClass(n);this.$element.one(g.support.transition.end,function(){m.removeClass([c,n].join(" ")).addClass("active");h.removeClass(["active",n].join(" "));r.sliding=!1;
      +setTimeout(function(){r.$element.trigger("slid")},0)})}else{this.$element.trigger(p);if(p.isDefaultPrevented())return;h.removeClass("active");m.addClass("active");this.sliding=!1;this.$element.trigger("slid")}f&&this.cycle();return this}}};var x=g.fn.carousel;g.fn.carousel=function(c){return this.each(function(){var f=g(this),h=f.data("carousel"),m=g.extend({},g.fn.carousel.defaults,"object"==typeof c&&c),n="string"==typeof c?c:m.slide;h||f.data("carousel",h=new p(this,m));if("number"==typeof c)h.to(c);
      +else if(n)h[n]();else m.interval&&h.pause().cycle()})};g.fn.carousel.defaults={interval:5E3,pause:"hover"};g.fn.carousel.Constructor=p;g.fn.carousel.noConflict=function(){g.fn.carousel=x;return this};g(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(c){var f=g(this),h,m=g(f.attr("data-target")||(h=f.attr("href"))&&h.replace(/.*(?=#[^\s]+$)/,""));h=g.extend({},m.data(),f.data());var n;m.carousel(h);(n=f.attr("data-slide-to"))&&m.data("carousel").pause().to(n).cycle();
      +c.preventDefault()})}(window.jQuery);
      +!function(g){var p=function(c,f){this.$element=g(c);this.options=g.extend({},g.fn.collapse.defaults,f);this.options.parent&&(this.$parent=g(this.options.parent));this.options.toggle&&this.toggle()};p.prototype={constructor:p,dimension:function(){return this.$element.hasClass("width")?"width":"height"},show:function(){var c,f,h,m;if(!this.transitioning&&!this.$element.hasClass("in")){c=this.dimension();f=g.camelCase(["scroll",c].join("-"));if((h=this.$parent&&this.$parent.find("\x3e .accordion-group \x3e .in"))&&h.length){if((m=
      +h.data("collapse"))&&m.transitioning)return;h.collapse("hide");m||h.data("collapse",null)}this.$element[c](0);this.transition("addClass",g.Event("show"),"shown");g.support.transition&&this.$element[c](this.$element[0][f])}},hide:function(){var c;!this.transitioning&&this.$element.hasClass("in")&&(c=this.dimension(),this.reset(this.$element[c]()),this.transition("removeClass",g.Event("hide"),"hidden"),this.$element[c](0))},reset:function(c){var f=this.dimension();this.$element.removeClass("collapse")[f](c||
      +"auto")[0].offsetWidth;this.$element[null!==c?"addClass":"removeClass"]("collapse");return this},transition:function(c,f,h){var m=this,n=function(){"show"==f.type&&m.reset();m.transitioning=0;m.$element.trigger(h)};this.$element.trigger(f);f.isDefaultPrevented()||(this.transitioning=1,this.$element[c]("in"),g.support.transition&&this.$element.hasClass("collapse")?this.$element.one(g.support.transition.end,n):n())},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var x=g.fn.collapse;
      +g.fn.collapse=function(c){return this.each(function(){var f=g(this),h=f.data("collapse"),m=g.extend({},g.fn.collapse.defaults,f.data(),"object"==typeof c&&c);h||f.data("collapse",h=new p(this,m));if("string"==typeof c)h[c]()})};g.fn.collapse.defaults={toggle:!0};g.fn.collapse.Constructor=p;g.fn.collapse.noConflict=function(){g.fn.collapse=x;return this};g(document).on("click.collapse.data-api","[data-toggle\x3dcollapse]",function(c){var f=g(this),h;c=f.attr("data-target")||c.preventDefault()||(h=
      +f.attr("href"))&&h.replace(/.*(?=#[^\s]+$)/,"");h=g(c).data("collapse")?"toggle":f.data();f[g(c).hasClass("in")?"addClass":"removeClass"]("collapsed");g(c).collapse(h)})}(window.jQuery);
      +!function(g){function p(){g(".dropdown-backdrop").remove();g("[data-toggle\x3ddropdown]").each(function(){x(g(this)).removeClass("open")})}function x(c){var f=c.attr("data-target");f||(f=(f=c.attr("href"))&&/#/.test(f)&&f.replace(/.*(?=#[^\s]*$)/,""));(f=f&&g(f))&&f.length||(f=c.parent());return f}var c=function(c){var f=g(c).on("click.dropdown.data-api",this.toggle);g("html").on("click.dropdown.data-api",function(){f.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(c){c=
      +g(this);var f,h;if(!c.is(".disabled, :disabled")){f=x(c);h=f.hasClass("open");p();if(!h){if("ontouchstart"in document.documentElement)g('\x3cdiv class\x3d"dropdown-backdrop"/\x3e').insertBefore(g(this)).on("click",p);f.toggleClass("open")}c.focus();return!1}},keydown:function(c){var f,h,p;if(/(38|40|27)/.test(c.keyCode)&&(f=g(this),c.preventDefault(),c.stopPropagation(),!f.is(".disabled, :disabled"))){h=x(f);p=h.hasClass("open");if(!p||p&&27==c.keyCode)return 27==c.which&&h.find("[data-toggle\x3ddropdown]").focus(),
      +f.click();f=g("[role\x3dmenu] li:not(.divider):visible a",h);f.length&&(h=f.index(f.filter(":focus")),38==c.keyCode&&0<h&&h--,40==c.keyCode&&h<f.length-1&&h++,~h||(h=0),f.eq(h).focus())}}};var f=g.fn.dropdown;g.fn.dropdown=function(f){return this.each(function(){var h=g(this),n=h.data("dropdown");n||h.data("dropdown",n=new c(this));"string"==typeof f&&n[f].call(h)})};g.fn.dropdown.Constructor=c;g.fn.dropdown.noConflict=function(){g.fn.dropdown=f;return this};g(document).on("click.dropdown.data-api",
      +p).on("click.dropdown.data-api",".dropdown form",function(c){c.stopPropagation()}).on("click.dropdown.data-api","[data-toggle\x3ddropdown]",c.prototype.toggle).on("keydown.dropdown.data-api","[data-toggle\x3ddropdown], [role\x3dmenu]",c.prototype.keydown)}(window.jQuery);
      +!function(g){var p=function(c,f){this.options=f;this.$element=g(c).delegate('[data-dismiss\x3d"modal"]',"click.dismiss.modal",g.proxy(this.hide,this));this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};p.prototype={constructor:p,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var c=this,f=g.Event("show");this.$element.trigger(f);this.isShown||f.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.backdrop(function(){var f=g.support.transition&&
      +c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(document.body);c.$element.show();f&&c.$element[0].offsetWidth;c.$element.addClass("in").attr("aria-hidden",!1);c.enforceFocus();f?c.$element.one(g.support.transition.end,function(){c.$element.focus().trigger("shown")}):c.$element.focus().trigger("shown")}))},hide:function(c){c&&c.preventDefault();c=g.Event("hide");this.$element.trigger(c);this.isShown&&!c.isDefaultPrevented()&&(this.isShown=!1,this.escape(),g(document).off("focusin.modal"),
      +this.$element.removeClass("in").attr("aria-hidden",!0),g.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal())},enforceFocus:function(){var c=this;g(document).on("focusin.modal",function(f){c.$element[0]===f.target||c.$element.has(f.target).length||c.$element.focus()})},escape:function(){var c=this;if(this.isShown&&this.options.keyboard)this.$element.on("keyup.dismiss.modal",function(f){27==f.which&&c.hide()});else this.isShown||this.$element.off("keyup.dismiss.modal")},
      +hideWithTransition:function(){var c=this,f=setTimeout(function(){c.$element.off(g.support.transition.end);c.hideModal()},500);this.$element.one(g.support.transition.end,function(){clearTimeout(f);c.hideModal()})},hideModal:function(){var c=this;this.$element.hide();this.backdrop(function(){c.removeBackdrop();c.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop&&this.$backdrop.remove();this.$backdrop=null},backdrop:function(c){var f=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&
      +this.options.backdrop){var h=g.support.transition&&f;this.$backdrop=g('\x3cdiv class\x3d"modal-backdrop '+f+'" /\x3e').appendTo(document.body);this.$backdrop.click("static"==this.options.backdrop?g.proxy(this.$element[0].focus,this.$element[0]):g.proxy(this.hide,this));h&&this.$backdrop[0].offsetWidth;this.$backdrop.addClass("in");c&&(h?this.$backdrop.one(g.support.transition.end,c):c())}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),g.support.transition&&this.$element.hasClass("fade")?
      +this.$backdrop.one(g.support.transition.end,c):c()):c&&c()}};var x=g.fn.modal;g.fn.modal=function(c){return this.each(function(){var f=g(this),h=f.data("modal"),m=g.extend({},g.fn.modal.defaults,f.data(),"object"==typeof c&&c);h||f.data("modal",h=new p(this,m));if("string"==typeof c)h[c]();else m.show&&h.show()})};g.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0};g.fn.modal.Constructor=p;g.fn.modal.noConflict=function(){g.fn.modal=x;return this};g(document).on("click.modal.data-api",'[data-toggle\x3d"modal"]',
      +function(c){var f=g(this),h=f.attr("href"),m=g(f.attr("data-target")||h&&h.replace(/.*(?=#[^\s]+$)/,"")),h=m.data("modal")?"toggle":g.extend({remote:!/#/.test(h)&&h},m.data(),f.data());c.preventDefault();m.modal(h).one("hide",function(){f.focus()})})}(window.jQuery);
      +!function(g){var p=function(c,f){this.init("tooltip",c,f)};p.prototype={constructor:p,init:function(c,f,h){var m;this.type=c;this.$element=g(f);this.options=this.getOptions(h);this.enabled=!0;f=this.options.trigger.split(" ");for(h=f.length;h--;)if(m=f[h],"click"==m)this.$element.on("click."+this.type,this.options.selector,g.proxy(this.toggle,this));else"manual"!=m&&(c="hover"==m?"mouseenter":"focus",m="hover"==m?"mouseleave":"blur",this.$element.on(c+"."+this.type,this.options.selector,g.proxy(this.enter,
      +this)),this.$element.on(m+"."+this.type,this.options.selector,g.proxy(this.leave,this)));this.options.selector?this._options=g.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(c){c=g.extend({},g.fn[this.type].defaults,this.$element.data(),c);c.delay&&"number"==typeof c.delay&&(c.delay={show:c.delay,hide:c.delay});return c},enter:function(c){var f=g.fn[this.type].defaults,h={},m;this._options&&g.each(this._options,function(c,g){f[c]!=g&&(h[c]=g)},this);m=
      +g(c.currentTarget)[this.type](h).data(this.type);if(!m.options.delay||!m.options.delay.show)return m.show();clearTimeout(this.timeout);m.hoverState="in";this.timeout=setTimeout(function(){"in"==m.hoverState&&m.show()},m.options.delay.show)},leave:function(c){var f=g(c.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!f.options.delay||!f.options.delay.hide)return f.hide();f.hoverState="out";this.timeout=setTimeout(function(){"out"==f.hoverState&&
      +f.hide()},f.options.delay.hide)},show:function(){var c,f,h,m,n;f=g.Event("show");if(this.hasContent()&&this.enabled&&(this.$element.trigger(f),!f.isDefaultPrevented())){c=this.tip();this.setContent();this.options.animation&&c.addClass("fade");m="function"==typeof this.options.placement?this.options.placement.call(this,c[0],this.$element[0]):this.options.placement;c.detach().css({top:0,left:0,display:"block"});this.options.container?c.appendTo(this.options.container):c.insertAfter(this.$element);f=
      +this.getPosition();h=c[0].offsetWidth;c=c[0].offsetHeight;switch(m){case "bottom":n={top:f.top+f.height,left:f.left+f.width/2-h/2};break;case "top":n={top:f.top-c,left:f.left+f.width/2-h/2};break;case "left":n={top:f.top+f.height/2-c/2,left:f.left-h};break;case "right":n={top:f.top+f.height/2-c/2,left:f.left+f.width}}this.applyPlacement(n,m);this.$element.trigger("shown")}},applyPlacement:function(c,f){var g=this.tip(),m=g[0].offsetWidth,n=g[0].offsetHeight,p,r,x;g.offset(c).addClass(f).addClass("in");
      +p=g[0].offsetWidth;r=g[0].offsetHeight;"top"==f&&r!=n&&(c.top=c.top+n-r,x=!0);"bottom"==f||"top"==f?(f=0,0>c.left&&(f=-2*c.left,c.left=0,g.offset(c),p=g[0].offsetWidth),this.replaceArrow(f-m+p,p,"left")):this.replaceArrow(r-n,r,"top");x&&g.offset(c)},replaceArrow:function(c,f,g){this.arrow().css(g,c?50*(1-c/f)+"%":"")},setContent:function(){var c=this.tip(),f=this.getTitle();c.find(".tooltip-inner")[this.options.html?"html":"text"](f);c.removeClass("fade in top bottom left right")},hide:function(){function c(){var c=
      +setTimeout(function(){f.off(g.support.transition.end).detach()},500);f.one(g.support.transition.end,function(){clearTimeout(c);f.detach()})}var f=this.tip(),h=g.Event("hide");this.$element.trigger(h);if(!h.isDefaultPrevented())return f.removeClass("in"),g.support.transition&&this.$tip.hasClass("fade")?c():f.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var c=this.$element;(c.attr("title")||"string"!=typeof c.attr("data-original-title"))&&c.attr("data-original-title",c.attr("title")||
      +"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var c=this.$element[0];return g.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():{width:c.offsetWidth,height:c.offsetHeight},this.$element.offset())},getTitle:function(){var c=this.$element,f=this.options;return c.attr("data-original-title")||("function"==typeof f.title?f.title.call(c[0]):f.title)},tip:function(){return this.$tip=this.$tip||g(this.options.template)},arrow:function(){return this.$arrow=
      +this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.options=this.$element=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(c){c=c?g(c.currentTarget)[this.type](this._options).data(this.type):this;c.tip().hasClass("in")?c.hide():c.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var x=g.fn.tooltip;
      +g.fn.tooltip=function(c){return this.each(function(){var f=g(this),h=f.data("tooltip"),m="object"==typeof c&&c;h||f.data("tooltip",h=new p(this,m));if("string"==typeof c)h[c]()})};g.fn.tooltip.Constructor=p;g.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'\x3cdiv class\x3d"tooltip"\x3e\x3cdiv class\x3d"tooltip-arrow"\x3e\x3c/div\x3e\x3cdiv class\x3d"tooltip-inner"\x3e\x3c/div\x3e\x3c/div\x3e',trigger:"hover focus",title:"",delay:0,html:!1,container:!1};g.fn.tooltip.noConflict=
      +function(){g.fn.tooltip=x;return this}}(window.jQuery);
      +!function(g){var p=function(c,f){this.init("popover",c,f)};p.prototype=g.extend({},g.fn.tooltip.Constructor.prototype,{constructor:p,setContent:function(){var c=this.tip(),f=this.getTitle(),g=this.getContent();c.find(".popover-title")[this.options.html?"html":"text"](f);c.find(".popover-content")[this.options.html?"html":"text"](g);c.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var c=this.$element,f=this.options;
      +return("function"==typeof f.content?f.content.call(c[0]):f.content)||c.attr("data-content")},tip:function(){this.$tip||(this.$tip=g(this.options.template));return this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var x=g.fn.popover;g.fn.popover=function(c){return this.each(function(){var f=g(this),h=f.data("popover"),m="object"==typeof c&&c;h||f.data("popover",h=new p(this,m));if("string"==typeof c)h[c]()})};g.fn.popover.Constructor=p;g.fn.popover.defaults=
      +g.extend({},g.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'\x3cdiv class\x3d"popover"\x3e\x3cdiv class\x3d"arrow"\x3e\x3c/div\x3e\x3ch3 class\x3d"popover-title"\x3e\x3c/h3\x3e\x3cdiv class\x3d"popover-content"\x3e\x3c/div\x3e\x3c/div\x3e'});g.fn.popover.noConflict=function(){g.fn.popover=x;return this}}(window.jQuery);
      +!function(g){function p(c,f){var h=g.proxy(this.process,this),m=g(c).is("body")?g(window):g(c),n;this.options=g.extend({},g.fn.scrollspy.defaults,f);this.$scrollElement=m.on("scroll.scroll-spy.data-api",h);this.selector=(this.options.target||(n=g(c).attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li \x3e a";this.$body=g("body");this.refresh();this.process()}p.prototype={constructor:p,refresh:function(){var c=this;this.offsets=g([]);this.targets=g([]);this.$body.find(this.selector).map(function(){var f=
      +g(this),f=f.data("target")||f.attr("href"),h=/^#\w/.test(f)&&g(f);return h&&h.length&&[[h.position().top+(!g.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),f]]||null}).sort(function(c,g){return c[0]-g[0]}).each(function(){c.offsets.push(this[0]);c.targets.push(this[1])})},process:function(){var c=this.$scrollElement.scrollTop()+this.options.offset,f=(this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight)-this.$scrollElement.height(),g=this.offsets,m=this.targets,n=this.activeTarget,
      +p;if(c>=f)return n!=(p=m.last()[0])&&this.activate(p);for(p=g.length;p--;)n!=m[p]&&c>=g[p]&&(!g[p+1]||c<=g[p+1])&&this.activate(m[p])},activate:function(c){this.activeTarget=c;g(this.selector).parent(".active").removeClass("active");c=g(this.selector+'[data-target\x3d"'+c+'"],'+this.selector+'[href\x3d"'+c+'"]').parent("li").addClass("active");c.parent(".dropdown-menu").length&&(c=c.closest("li.dropdown").addClass("active"));c.trigger("activate")}};var x=g.fn.scrollspy;g.fn.scrollspy=function(c){return this.each(function(){var f=
      +g(this),h=f.data("scrollspy"),m="object"==typeof c&&c;h||f.data("scrollspy",h=new p(this,m));if("string"==typeof c)h[c]()})};g.fn.scrollspy.Constructor=p;g.fn.scrollspy.defaults={offset:10};g.fn.scrollspy.noConflict=function(){g.fn.scrollspy=x;return this};g(window).on("load",function(){g('[data-spy\x3d"scroll"]').each(function(){var c=g(this);c.scrollspy(c.data())})})}(window.jQuery);
      +!function(g){var p=function(c){this.element=g(c)};p.prototype={constructor:p,show:function(){var c=this.element,f=c.closest("ul:not(.dropdown-menu)"),h=c.attr("data-target"),m,n;h||(h=(h=c.attr("href"))&&h.replace(/.*(?=#[^\s]*$)/,""));c.parent("li").hasClass("active")||(m=f.find(".active:last a")[0],n=g.Event("show",{relatedTarget:m}),c.trigger(n),n.isDefaultPrevented()||(h=g(h),this.activate(c.parent("li"),f),this.activate(h,h.parent(),function(){c.trigger({type:"shown",relatedTarget:m})})))},activate:function(c,
      +f,h){function m(){n.removeClass("active").find("\x3e .dropdown-menu \x3e .active").removeClass("active");c.addClass("active");p?(c[0].offsetWidth,c.addClass("in")):c.removeClass("fade");c.parent(".dropdown-menu")&&c.closest("li.dropdown").addClass("active");h&&h()}var n=f.find("\x3e .active"),p=h&&g.support.transition&&n.hasClass("fade");p?n.one(g.support.transition.end,m):m();n.removeClass("in")}};var x=g.fn.tab;g.fn.tab=function(c){return this.each(function(){var f=g(this),h=f.data("tab");h||f.data("tab",
      +h=new p(this));if("string"==typeof c)h[c]()})};g.fn.tab.Constructor=p;g.fn.tab.noConflict=function(){g.fn.tab=x;return this};g(document).on("click.tab.data-api",'[data-toggle\x3d"tab"], [data-toggle\x3d"pill"]',function(c){c.preventDefault();g(this).tab("show")})}(window.jQuery);
      +!function(g){var p=function(c,f){this.$element=g(c);this.options=g.extend({},g.fn.typeahead.defaults,f);this.matcher=this.options.matcher||this.matcher;this.sorter=this.options.sorter||this.sorter;this.highlighter=this.options.highlighter||this.highlighter;this.updater=this.options.updater||this.updater;this.source=this.options.source;this.$menu=g(this.options.menu);this.shown=!1;this.listen()};p.prototype={constructor:p,select:function(){var c=this.$menu.find(".active").attr("data-value");this.$element.val(this.updater(c)).change();
      +return this.hide()},updater:function(c){return c},show:function(){var c=g.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});this.$menu.insertAfter(this.$element).css({top:c.top+c.height,left:c.left}).show();this.shown=!0;return this},hide:function(){this.$menu.hide();this.shown=!1;return this},lookup:function(c){this.query=this.$element.val();return!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(c=g.isFunction(this.source)?this.source(this.query,
      +g.proxy(this.process,this)):this.source)?this.process(c):this},process:function(c){var f=this;c=g.grep(c,function(c){return f.matcher(c)});c=this.sorter(c);return c.length?this.render(c.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(c){return~c.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(c){for(var f=[],g=[],m=[],n;n=c.shift();)n.toLowerCase().indexOf(this.query.toLowerCase())?~n.indexOf(this.query)?g.push(n):m.push(n):f.push(n);return f.concat(g,
      +m)},highlighter:function(c){var f=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$\x26");return c.replace(new RegExp("("+f+")","ig"),function(c,f){return"\x3cstrong\x3e"+f+"\x3c/strong\x3e"})},render:function(c){var f=this;c=g(c).map(function(c,m){c=g(f.options.item).attr("data-value",m);c.find("a").html(f.highlighter(m));return c[0]});c.first().addClass("active");this.$menu.html(c);return this},next:function(c){c=this.$menu.find(".active").removeClass("active").next();c.length||(c=g(this.$menu.find("li")[0]));
      +c.addClass("active")},prev:function(c){c=this.$menu.find(".active").removeClass("active").prev();c.length||(c=this.$menu.find("li").last());c.addClass("active")},listen:function(){this.$element.on("focus",g.proxy(this.focus,this)).on("blur",g.proxy(this.blur,this)).on("keypress",g.proxy(this.keypress,this)).on("keyup",g.proxy(this.keyup,this));if(this.eventSupported("keydown"))this.$element.on("keydown",g.proxy(this.keydown,this));this.$menu.on("click",g.proxy(this.click,this)).on("mouseenter","li",
      +g.proxy(this.mouseenter,this)).on("mouseleave","li",g.proxy(this.mouseleave,this))},eventSupported:function(c){var f=c in this.$element;f||(this.$element.setAttribute(c,"return;"),f="function"===typeof this.$element[c]);return f},move:function(c){if(this.shown){switch(c.keyCode){case 9:case 13:case 27:c.preventDefault();break;case 38:c.preventDefault();this.prev();break;case 40:c.preventDefault(),this.next()}c.stopPropagation()}},keydown:function(c){this.suppressKeyPressRepeat=~g.inArray(c.keyCode,
      +[40,38,9,13,27]);this.move(c)},keypress:function(c){this.suppressKeyPressRepeat||this.move(c)},keyup:function(c){switch(c.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}c.stopPropagation();c.preventDefault()},focus:function(c){this.focused=!0},blur:function(c){this.focused=!1;!this.mousedover&&this.shown&&this.hide()},click:function(c){c.stopPropagation();c.preventDefault();
      +this.select();this.$element.focus()},mouseenter:function(c){this.mousedover=!0;this.$menu.find(".active").removeClass("active");g(c.currentTarget).addClass("active")},mouseleave:function(c){this.mousedover=!1;!this.focused&&this.shown&&this.hide()}};var x=g.fn.typeahead;g.fn.typeahead=function(c){return this.each(function(){var f=g(this),h=f.data("typeahead"),m="object"==typeof c&&c;h||f.data("typeahead",h=new p(this,m));if("string"==typeof c)h[c]()})};g.fn.typeahead.defaults={source:[],items:8,menu:'\x3cul class\x3d"typeahead dropdown-menu"\x3e\x3c/ul\x3e',
      +item:'\x3cli\x3e\x3ca href\x3d"#"\x3e\x3c/a\x3e\x3c/li\x3e',minLength:1};g.fn.typeahead.Constructor=p;g.fn.typeahead.noConflict=function(){g.fn.typeahead=x;return this};g(document).on("focus.typeahead.data-api",'[data-provide\x3d"typeahead"]',function(c){c=g(this);c.data("typeahead")||c.typeahead(c.data())})}(window.jQuery);
      +!function(g){var p=function(c,f){this.options=g.extend({},g.fn.affix.defaults,f);this.$window=g(window).on("scroll.affix.data-api",g.proxy(this.checkPosition,this)).on("click.affix.data-api",g.proxy(function(){setTimeout(g.proxy(this.checkPosition,this),1)},this));this.$element=g(c);this.checkPosition()};p.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=g(document).height(),f=this.$window.scrollTop(),h=this.$element.offset(),m=this.options.offset,n=m.bottom,p=m.top;"object"!=
      +typeof m&&(n=p=m);"function"==typeof p&&(p=m.top());"function"==typeof n&&(n=m.bottom());c=null!=this.unpin&&f+this.unpin<=h.top?!1:null!=n&&h.top+this.$element.height()>=c-n?"bottom":null!=p&&f<=p?"top":!1;this.affixed!==c&&(this.affixed=c,this.unpin="bottom"==c?h.top-f:null,this.$element.removeClass("affix affix-top affix-bottom").addClass("affix"+(c?"-"+c:"")))}};var x=g.fn.affix;g.fn.affix=function(c){return this.each(function(){var f=g(this),h=f.data("affix"),m="object"==typeof c&&c;h||f.data("affix",
      +h=new p(this,m));if("string"==typeof c)h[c]()})};g.fn.affix.Constructor=p;g.fn.affix.defaults={offset:0};g.fn.affix.noConflict=function(){g.fn.affix=x;return this};g(window).on("load",function(){g('[data-spy\x3d"affix"]').each(function(){var c=g(this),f=c.data();f.offset=f.offset||{};f.offsetBottom&&(f.offset.bottom=f.offsetBottom);f.offsetTop&&(f.offset.top=f.offsetTop);c.affix(f)})})}(window.jQuery);var q=null;window.PR_SHOULD_USE_CONTINUATION=!0;
      +(function(){function g(c){function f(c){var f=c.charCodeAt(0);if(92!==f)return f;var g=c.charAt(1);return(f=H[g])?f:"0"<=g&&"7">=g?parseInt(c.substring(1),8):"u"===g||"x"===g?parseInt(c.substring(2),16):c.charCodeAt(1)}function g(c){if(32>c)return(16>c?"\\x0":"\\x")+c.toString(16);c=String.fromCharCode(c);if("\\"===c||"-"===c||"["===c||"]"===c)c="\\"+c;return c}function h(c){var h=c.substring(1,c.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g);c=
      +[];for(var m=[],n="^"===h[0],p=n?1:0,v=h.length;p<v;++p){var A=h[p];if(/\\[bdsw]/i.test(A))c.push(A);else{var A=f(A),r;p+2<v&&"-"===h[p+1]?(r=f(h[p+2]),p+=2):r=A;m.push([A,r]);65>r||122<A||(65>r||90<A||m.push([Math.max(65,A)|32,Math.min(r,90)|32]),97>r||122<A||m.push([Math.max(97,A)&-33,Math.min(r,122)&-33]))}}m.sort(function(c,f){return c[0]-f[0]||f[1]-c[1]});h=[];A=[NaN,NaN];for(p=0;p<m.length;++p)v=m[p],v[0]<=A[1]+1?A[1]=Math.max(A[1],v[1]):h.push(A=v);m=["["];n&&m.push("^");m.push.apply(m,c);
      +for(p=0;p<h.length;++p)v=h[p],m.push(g(v[0])),v[1]>v[0]&&(v[1]+1>v[0]&&m.push("-"),m.push(g(v[1])));m.push("]");return m.join("")}function m(c){for(var f=c.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),g=f.length,m=[],v=0,A=0;v<g;++v){var r=f[v];"("===r?++A:"\\"===r.charAt(0)&&(r=+r.substring(1))&&r<=A&&(m[r]=-1)}for(v=1;v<m.length;++v)-1===m[v]&&(m[v]=++n);for(A=v=0;v<g;++v)r=f[v],"("===r?(++A,void 0===m[A]&&(f[v]="(?:")):"\\"===
      +r.charAt(0)&&(r=+r.substring(1))&&r<=A&&(f[v]="\\"+m[A]);for(A=v=0;v<g;++v)"^"===f[v]&&"^"!==f[v+1]&&(f[v]="");if(c.ignoreCase&&p)for(v=0;v<g;++v)r=f[v],c=r.charAt(0),2<=r.length&&"["===c?f[v]=h(r):"\\"!==c&&(f[v]=r.replace(/[A-Za-z]/g,function(c){c=c.charCodeAt(0);return"["+String.fromCharCode(c&-33,c|32)+"]"}));return f.join("")}for(var n=0,p=!1,r=!1,A=0,x=c.length;A<x;++A){var U=c[A];if(U.ignoreCase)r=!0;else if(/[a-z]/i.test(U.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){p=!0;
      +r=!1;break}}for(var H={b:8,t:9,n:10,v:11,f:12,r:13},J=[],A=0,x=c.length;A<x;++A){U=c[A];if(U.global||U.multiline)throw Error(""+U);J.push("(?:"+m(U)+")")}return RegExp(J.join("|"),r?"gi":"g")}function p(c){function f(c){switch(c.nodeType){case 1:if(g.test(c.className))break;for(var r=c.firstChild;r;r=r.nextSibling)f(r);r=c.nodeName;if("BR"===r||"LI"===r)h[n]="\n",p[n<<1]=m++,p[n++<<1|1]=c;break;case 3:case 4:r=c.nodeValue,r.length&&(r=A?r.replace(/\r\n?/g,"\n"):r.replace(/[\t\n\r ]+/g," "),h[n]=r,
      +p[n<<1]=m,m+=r.length,p[n++<<1|1]=c)}}var g=/(?:^|\s)nocode(?:\s|$)/,h=[],m=0,p=[],n=0,r;c.currentStyle?r=c.currentStyle.whiteSpace:window.getComputedStyle&&(r=document.defaultView.getComputedStyle(c,q).getPropertyValue("white-space"));var A=r&&"pre"===r.substring(0,3);f(c);return{a:h.join("").replace(/\n$/,""),c:p}}function x(c,f,g,h){f&&(c={a:f,d:c},g(c),h.push.apply(h,c.e))}function c(c,f){function h(c){for(var g=c.d,A=[g,"pln"],I=0,P=c.a.match(p)||[],H={},J=0,v=P.length;J<v;++J){var R=P[J],y=
      +H[R],G=void 0,C;if("string"===typeof y)C=!1;else{var D=m[R.charAt(0)];if(D)G=R.match(D[1]),y=D[0];else{for(C=0;C<r;++C)if(D=f[C],G=R.match(D[1])){y=D[0];break}G||(y="pln")}!(C=5<=y.length&&"lang-"===y.substring(0,5))||G&&"string"===typeof G[1]||(C=!1,y="src");C||(H[R]=y)}D=I;I+=R.length;if(C){C=G[1];var L=R.indexOf(C),E=L+C.length;G[2]&&(E=R.length-G[2].length,L=E-C.length);y=y.substring(5);x(g+D,R.substring(0,L),h,A);x(g+D+L,C,n(y,C),A);x(g+D+E,R.substring(E),h,A)}else A.push(g+D,y)}c.e=A}var m=
      +{},p;(function(){for(var h=c.concat(f),n=[],r={},A=0,I=h.length;A<I;++A){var x=h[A],P=x[3];if(P)for(var v=P.length;0<=--v;)m[P.charAt(v)]=x;x=x[1];P=""+x;r.hasOwnProperty(P)||(n.push(x),r[P]=q)}n.push(/[\S\s]/);p=g(n)})();var r=f.length;return h}function f(f){var g=[],h=[];f.tripleQuotedStrings?g.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):f.multiLineStrings?g.push(["str",
      +/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,q,"'\"`"]):g.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);f.verbatimStrings&&h.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var m=f.hashComments;m&&(f.cStyleComments?(1<m?g.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):g.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),h.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
      +q])):g.push(["com",/^#[^\n\r]*/,q,"#"]));f.cStyleComments&&(h.push(["com",/^\/\/[^\n\r]*/,q]),h.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));f.regexLiterals&&h.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(m=f.types)&&
      +h.push(["typ",m]);f=(""+f.keywords).replace(/^ | $/g,"");f.length&&h.push(["kwd",RegExp("^(?:"+f.replace(/[\s,]+/g,"|")+")\\b"),q]);g.push(["pln",/^\s+/,q," \r\n\t "]);h.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return c(g,h)}function h(c,f){function g(c){switch(c.nodeType){case 1:if(m.test(c.className))break;
      +if("BR"===c.nodeName)h(c),c.parentNode&&c.parentNode.removeChild(c);else for(c=c.firstChild;c;c=c.nextSibling)g(c);break;case 3:case 4:if(A){var f=c.nodeValue,r=f.match(p);if(r){var v=f.substring(0,r.index);c.nodeValue=v;(f=f.substring(r.index+r[0].length))&&c.parentNode.insertBefore(n.createTextNode(f),c.nextSibling);h(c);v||c.parentNode.removeChild(c)}}}}function h(c){function f(c,g){g=g?c.cloneNode(!1):c;var h=c.parentNode;if(h){h=f(h,1);c=c.nextSibling;h.appendChild(g);for(var m=c;m;m=c)c=m.nextSibling,
      +h.appendChild(m)}return g}for(;!c.nextSibling;)if(c=c.parentNode,!c)return;c=f(c.nextSibling,0);for(var g;(g=c.parentNode)&&1===g.nodeType;)c=g;x.push(c)}var m=/(?:^|\s)nocode(?:\s|$)/,p=/\r\n?|\n/,n=c.ownerDocument,r;c.currentStyle?r=c.currentStyle.whiteSpace:window.getComputedStyle&&(r=n.defaultView.getComputedStyle(c,q).getPropertyValue("white-space"));var A=r&&"pre"===r.substring(0,3);for(r=n.createElement("LI");c.firstChild;)r.appendChild(c.firstChild);for(var x=[r],E=0;E<x.length;++E)g(x[E]);
      +f===(f|0)&&x[0].setAttribute("value",f);var H=n.createElement("OL");H.className="linenums";f=Math.max(0,f-1|0)||0;for(var E=0,J=x.length;E<J;++E)r=x[E],r.className="L"+(E+f)%10,r.firstChild||r.appendChild(n.createTextNode(" ")),H.appendChild(r);c.appendChild(H)}function m(c,f){for(var g=f.length;0<=--g;){var h=f[g];ia.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):ia[h]=c}}function n(c,f){c&&ia.hasOwnProperty(c)||(c=/^\s*</.test(f)?"default-markup":"default-code");
      +return ia[c]}function W(c){var f=c.g;try{var g=p(c.h),h=g.a;c.a=h;c.c=g.c;c.d=0;n(f,h)(c);var m=/\bMSIE\b/.test(navigator.userAgent),f=/\n/g,r=c.a,x=r.length,g=0,A=c.c,E=A.length,h=0,S=c.e,U=S.length;c=0;S[U]=x;var H,J;for(J=H=0;J<U;)S[J]!==S[J+2]?(S[H++]=S[J++],S[H++]=S[J++]):J+=2;U=H;for(J=H=0;J<U;){for(var v=S[J],N=S[J+1],y=J+2;y+2<=U&&S[y+1]===N;)y+=2;S[H++]=v;S[H++]=N;J=y}for(S.length=H;h<E;){var G=A[h+2]||x,C=S[c+2]||x,y=Math.min(G,C),D=A[h+1],L;if(1!==D.nodeType&&(L=r.substring(g,y))){m&&(L=
      +L.replace(f,"\r"));D.nodeValue=L;var V=D.ownerDocument,W=V.createElement("SPAN");W.className=S[c+1];var aa=D.parentNode;aa.replaceChild(W,D);W.appendChild(D);g<G&&(A[h+1]=D=V.createTextNode(r.substring(y,G)),aa.insertBefore(D,W.nextSibling))}g=y;g>=G&&(h+=2);g>=C&&(c+=2)}}catch(Z){"console"in window&&console.log(Z&&Z.stack?Z.stack:Z)}}var r=["break,continue,do,else,for,if,return,while"],E=[[r,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],
      +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],fa=[E,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],aa=[E,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"],
      +V=[aa,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],E=[E,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],ha=[r,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],
      +Aa=[r,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],r=[r,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],N=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,Ta=/\S/,Ia=f({keywords:[fa,V,E,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+
      +ha,Aa,r],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),ia={};m(Ia,["default-code"]);m(c([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),
      +"default-markup htm html mxml xhtml xml xsl".split(" "));m(c([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",
      +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);m(c([],[["atv",/^[\S\s]+/]]),["uq.val"]);m(f({keywords:fa,hashComments:!0,cStyleComments:!0,types:N}),"c cc cpp cxx cyc m".split(" "));m(f({keywords:"null,true,false"}),["json"]);m(f({keywords:V,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:N}),["cs"]);m(f({keywords:aa,cStyleComments:!0}),["java"]);m(f({keywords:r,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);m(f({keywords:ha,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),
      +["cv","py"]);m(f({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);m(f({keywords:Aa,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);m(f({keywords:E,cStyleComments:!0,regexLiterals:!0}),["js"]);m(f({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes",
      +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);m(c([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(c,f,g){var m=document.createElement("PRE");m.innerHTML=c;g&&h(m,g);W({g:f,i:g,h:m});return m.innerHTML};window.prettyPrint=function(c){function f(){for(var g=window.PR_SHOULD_USE_CONTINUATION?x.now()+250:Infinity;A<m.length&&x.now()<g;A++){var n=m[A],p=n.className;if(0<=p.indexOf("prettyprint")){var p=p.match(N),r,y;if(y=
      +!p){y=n;for(var G=void 0,C=y.firstChild;C;C=C.nextSibling)var D=C.nodeType,G=1===D?G?y:C:3===D?Ta.test(C.nodeValue)?y:G:G;y=(r=G===y?void 0:G)&&"CODE"===r.tagName}y&&(p=r.className.match(N));p&&(p=p[1]);y=!1;for(G=n.parentNode;G;G=G.parentNode)if(("pre"===G.tagName||"code"===G.tagName||"xmp"===G.tagName)&&G.className&&0<=G.className.indexOf("prettyprint")){y=!0;break}y||((y=(y=n.className.match(/\blinenums\b(?::(\d+))?/))?y[1]&&y[1].length?+y[1]:!0:!1)&&h(n,y),E={g:p,h:n,i:y},W(E))}}A<m.length?setTimeout(f,
      +250):c&&c()}for(var g=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],m=[],n=0;n<g.length;++n)for(var p=0,r=g[n].length;p<r;++p)m.push(g[n][p]);var g=q,x=Date;x.now||(x={now:function(){return+new Date}});var A=0,E,N=/\blang(?:uage)?-([\w.]+)(?!\S)/;f()};window.PR={createSimpleLexer:c,registerLangHandler:m,sourceDecorator:f,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",
      +PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})();jQuery(document).ready(function(){$(".topbar").dropdown();prettyPrint()});function asyncJs(g){var p=document.createElement("script"),x=document.getElementsByTagName("script")[0];p.type="text/javascript";p.async=!0;p.src=g;x.parentNode.insertBefore(p,x)}
      +(function(g,p){"function"===typeof define&&define.amd?define([],p):"object"===typeof module&&module.exports?module.exports=p():(g.AnchorJS=p(),g.anchors=new g.AnchorJS)})(this,function(){return function(g){function p(c){c.icon=Object.prototype.hasOwnProperty.call(c,"icon")?c.icon:"";c.visible=Object.prototype.hasOwnProperty.call(c,"visible")?c.visible:"hover";c.placement=Object.prototype.hasOwnProperty.call(c,"placement")?c.placement:"right";c.ariaLabel=Object.prototype.hasOwnProperty.call(c,"ariaLabel")?
      +c.ariaLabel:"Anchor";c.class=Object.prototype.hasOwnProperty.call(c,"class")?c.class:"";c.base=Object.prototype.hasOwnProperty.call(c,"base")?c.base:"";c.truncate=Object.prototype.hasOwnProperty.call(c,"truncate")?Math.floor(c.truncate):64;c.titleText=Object.prototype.hasOwnProperty.call(c,"titleText")?c.titleText:""}function x(c){if("string"===typeof c||c instanceof String)c=[].slice.call(document.querySelectorAll(c));else if(Array.isArray(c)||c instanceof NodeList)c=[].slice.call(c);else throw new TypeError("The selector provided to AnchorJS was invalid.");
      +return c}function c(){if(null===document.head.querySelector("style.anchorjs")){var c=document.createElement("style"),g;c.className="anchorjs";c.appendChild(document.createTextNode(""));g=document.head.querySelector('[rel\x3d"stylesheet"],style');void 0===g?document.head.appendChild(c):document.head.insertBefore(c,g);c.sheet.insertRule(".anchorjs-link{opacity:0;text-decoration:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}",c.sheet.cssRules.length);c.sheet.insertRule(":hover\x3e.anchorjs-link,.anchorjs-link:focus{opacity:1}",
      +c.sheet.cssRules.length);c.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",c.sheet.cssRules.length);c.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',
      +c.sheet.cssRules.length)}}this.options=g||{};this.elements=[];p(this.options);this.isTouchDevice=function(){return!!("ontouchstart"in window||window.TouchEvent||window.DocumentTouch&&document instanceof DocumentTouch)};this.add=function(f){var g,m,n,W,r,E,fa,aa=[];p(this.options);fa=this.options.visible;"touch"===fa&&(fa=this.isTouchDevice()?"always":"hover");f||(f="h2, h3, h4, h5, h6");f=x(f);if(0===f.length)return this;c();g=document.querySelectorAll("[id]");g=[].map.call(g,function(c){return c.id});
      +for(n=0;n<f.length;n++)if(this.hasAnchorJSLink(f[n]))aa.push(n);else{if(f[n].hasAttribute("id"))m=f[n].getAttribute("id");else if(f[n].hasAttribute("data-anchor-id"))m=f[n].getAttribute("data-anchor-id");else{E=r=this.urlify(f[n].textContent);m=0;do void 0!==W&&(E=r+"-"+m),W=g.indexOf(E),m+=1;while(-1!==W);W=void 0;g.push(E);f[n].setAttribute("id",E);m=E}r=document.createElement("a");r.className="anchorjs-link "+this.options.class;r.setAttribute("aria-label",this.options.ariaLabel);r.setAttribute("data-anchorjs-icon",
      +this.options.icon);this.options.titleText&&(r.title=this.options.titleText);E=document.querySelector("base")?window.location.pathname+window.location.search:"";E=this.options.base||E;r.href=E+"#"+m;"always"===fa&&(r.style.opacity="1");""===this.options.icon&&(r.style.font="1em/1 anchorjs-icons","left"===this.options.placement&&(r.style.lineHeight="inherit"));"left"===this.options.placement?(r.style.position="absolute",r.style.marginLeft="-1em",r.style.paddingRight=".5em",f[n].insertBefore(r,f[n].firstChild)):
      +(r.style.paddingLeft=".375em",f[n].appendChild(r))}for(n=0;n<aa.length;n++)f.splice(aa[n]-n,1);this.elements=this.elements.concat(f);return this};this.remove=function(c){for(var f,g=x(c),n=0;n<g.length;n++)if(f=g[n].querySelector(".anchorjs-link"))c=this.elements.indexOf(g[n]),-1!==c&&this.elements.splice(c,1),g[n].removeChild(f);return this};this.removeAll=function(){this.remove(this.elements)};this.urlify=function(c){var f=document.createElement("textarea");f.innerHTML=c;c=f.value;this.options.truncate||
      +p(this.options);return c.trim().replace(/'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()};this.hasAnchorJSLink=function(c){var f=c.firstChild&&-1<(" "+c.firstChild.className+" ").indexOf(" anchorjs-link ");c=c.lastChild&&-1<(" "+c.lastChild.className+" ").indexOf(" anchorjs-link ");return f||c||!1}}});
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/licenses.html b/waffle-jna-jakarta/licenses.html
      new file mode 100644
      index 0000000000..e32e68a945
      --- /dev/null
      +++ b/waffle-jna-jakarta/licenses.html
      @@ -0,0 +1,173 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.8.0:licenses at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>Project Licenses – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a>Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-down"></span>Project Information</a>
      +     <ul class="nav nav-list">
      +      <li><a href="ci-management.html">CI Management</a></li>
      +      <li><a href="dependencies.html">Dependencies</a></li>
      +      <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +      <li><a href="dependency-management.html">Dependency Management</a></li>
      +      <li><a href="distribution-management.html">Distribution Management</a></li>
      +      <li><a href="index.html">About</a></li>
      +      <li><a href="issue-management.html">Issue Management</a></li>
      +      <li class="active"><a>Licenses</a></li>
      +      <li><a href="plugin-management.html">Plugin Management</a></li>
      +      <li><a href="plugins.html">Plugins</a></li>
      +      <li><a href="scm.html">Source Code Management</a></li>
      +      <li><a href="summary.html">Summary</a></li>
      +      <li><a href="team.html">Team</a></li>
      +     </ul></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-right"></span>Project Reports</a></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section><a id="Overview"></a>
      +<h1>Overview</h1>
      +<p>Typically the licenses listed for the project are that of the project itself, and not of dependencies.</p></section><section><a id="Project_Licenses"></a>
      +<h1>Project Licenses</h1><section><a id="MIT"></a>
      +<h2>MIT</h2>
      +<pre>MIT License
      +
      +Copyright (c) ${license.git.copyrightYears} The Waffle Project Contributors: https://github.com/Waffle/waffle/graphs/contributors
      +
      +Permission is hereby granted, free of charge, to any person obtaining a copy
      +of this software and associated documentation files (the &quot;Software&quot;), to deal
      +in the Software without restriction, including without limitation the rights
      +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
      +copies of the Software, and to permit persons to whom the Software is
      +furnished to do so, subject to the following conditions:
      +
      +The above copyright notice and this permission notice shall be included in all
      +copies or substantial portions of the Software.
      +
      +THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
      +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
      +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
      +SOFTWARE.
      +</pre></section></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/plugin-management.html b/waffle-jna-jakarta/plugin-management.html
      new file mode 100644
      index 0000000000..3bbb73fdad
      --- /dev/null
      +++ b/waffle-jna-jakarta/plugin-management.html
      @@ -0,0 +1,329 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.8.0:plugin-management at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>Project Plugin Management – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a>Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-down"></span>Project Information</a>
      +     <ul class="nav nav-list">
      +      <li><a href="ci-management.html">CI Management</a></li>
      +      <li><a href="dependencies.html">Dependencies</a></li>
      +      <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +      <li><a href="dependency-management.html">Dependency Management</a></li>
      +      <li><a href="distribution-management.html">Distribution Management</a></li>
      +      <li><a href="index.html">About</a></li>
      +      <li><a href="issue-management.html">Issue Management</a></li>
      +      <li><a href="licenses.html">Licenses</a></li>
      +      <li class="active"><a>Plugin Management</a></li>
      +      <li><a href="plugins.html">Plugins</a></li>
      +      <li><a href="scm.html">Source Code Management</a></li>
      +      <li><a href="summary.html">Summary</a></li>
      +      <li><a href="team.html">Team</a></li>
      +     </ul></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-right"></span>Project Reports</a></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section><a id="Project_Plugin_Management"></a>
      +<h1>Project Plugin Management</h1>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>GroupId</th>
      +<th>ArtifactId</th>
      +<th>Version</th></tr>
      +<tr class="b">
      +<td>com.diffplug.spotless</td>
      +<td><a class="externalLink" href="https://github.com/diffplug/spotless">spotless-maven-plugin</a></td>
      +<td>2.43.0</td></tr>
      +<tr class="a">
      +<td>com.github.ekryd.sortpom</td>
      +<td><a class="externalLink" href="https://github.com/Ekryd/sortpom/sortpom-maven-plugin/">sortpom-maven-plugin</a></td>
      +<td>4.0.0</td></tr>
      +<tr class="b">
      +<td>com.github.hazendaz.maven</td>
      +<td><a class="externalLink" href="https://github.com/trautonen/coveralls-maven-plugin">coveralls-maven-plugin</a></td>
      +<td>4.5.0-M5</td></tr>
      +<tr class="a">
      +<td>com.github.hazendaz.maven</td>
      +<td><a class="externalLink" href="https://github.com/hazendaz/directory-maven-plugin">directory-maven-plugin</a></td>
      +<td>1.2.0</td></tr>
      +<tr class="b">
      +<td>com.github.hazendaz.maven</td>
      +<td><a class="externalLink" href="https://github.com/alextunyk/htmlcompressor-maven-plugin">htmlcompressor-maven-plugin</a></td>
      +<td>1.10.0</td></tr>
      +<tr class="a">
      +<td>com.github.hazendaz.maven</td>
      +<td><a class="externalLink" href="https://github.com/dantwining/whitespace-maven-plugin">whitespace-maven-plugin</a></td>
      +<td>1.4.0</td></tr>
      +<tr class="b">
      +<td>com.github.hazendaz.maven</td>
      +<td><a class="externalLink" href="https://github.com/hazendaz/yuicompressor-maven-plugin">yuicompressor-maven-plugin</a></td>
      +<td>2.1.0</td></tr>
      +<tr class="a">
      +<td>com.github.spotbugs</td>
      +<td><a class="externalLink" href="https://spotbugs.github.io/spotbugs-maven-plugin/">spotbugs-maven-plugin</a></td>
      +<td>4.8.6.6</td></tr>
      +<tr class="b">
      +<td>com.mycila</td>
      +<td><a class="externalLink" href="https://oss.carbou.me/license-maven-plugin">license-maven-plugin</a></td>
      +<td>4.6</td></tr>
      +<tr class="a">
      +<td>io.github.git-commit-id</td>
      +<td><a class="externalLink" href="https://github.com/git-commit-id/git-commit-id-maven-plugin">git-commit-id-maven-plugin</a></td>
      +<td>9.0.1</td></tr>
      +<tr class="b">
      +<td>net.revelc.code</td>
      +<td><a class="externalLink" href="http://code.revelc.net/impsort-maven-plugin">impsort-maven-plugin</a></td>
      +<td>1.12.0</td></tr>
      +<tr class="a">
      +<td>net.revelc.code.formatter</td>
      +<td><a class="externalLink" href="https://code.revelc.net/revelc/formatter-maven-plugin">formatter-maven-plugin</a></td>
      +<td>2.24.1</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-antrun-plugin/">maven-antrun-plugin</a></td>
      +<td>3.1.0</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-assembly-plugin/">maven-assembly-plugin</a></td>
      +<td>3.7.1</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-checkstyle-plugin/">maven-checkstyle-plugin</a></td>
      +<td>3.6.0</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-clean-plugin/">maven-clean-plugin</a></td>
      +<td>3.4.0</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-compiler-plugin/">maven-compiler-plugin</a></td>
      +<td>3.13.0</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-dependency-plugin/">maven-dependency-plugin</a></td>
      +<td>3.8.1</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-deploy-plugin/">maven-deploy-plugin</a></td>
      +<td>3.1.3</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/enforcer/maven-enforcer-plugin/">maven-enforcer-plugin</a></td>
      +<td>3.5.0</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-gpg-plugin/">maven-gpg-plugin</a></td>
      +<td>3.2.7</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-install-plugin/">maven-install-plugin</a></td>
      +<td>3.1.3</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-jar-plugin/">maven-jar-plugin</a></td>
      +<td>3.4.2</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-javadoc-plugin/">maven-javadoc-plugin</a></td>
      +<td>3.11.2</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/jxr/maven-jxr-plugin/">maven-jxr-plugin</a></td>
      +<td>3.6.0</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-pmd-plugin/">maven-pmd-plugin</a></td>
      +<td>3.26.0</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-project-info-reports-plugin/">maven-project-info-reports-plugin</a></td>
      +<td>3.8.0</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/maven-release/maven-release-plugin/">maven-release-plugin</a></td>
      +<td>3.1.1</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-resources-plugin/">maven-resources-plugin</a></td>
      +<td>3.3.1</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/scm/maven-scm-plugin/">maven-scm-plugin</a></td>
      +<td>2.1.0</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-site-plugin/">maven-site-plugin</a></td>
      +<td>3.21.0</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-source-plugin/">maven-source-plugin</a></td>
      +<td>3.3.1</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/surefire/maven-surefire-plugin/">maven-surefire-plugin</a></td>
      +<td>3.5.2</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/surefire/maven-surefire-report-plugin/">maven-surefire-report-plugin</a></td>
      +<td>3.5.2</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-war-plugin/">maven-war-plugin</a></td>
      +<td>3.4.0</td></tr>
      +<tr class="a">
      +<td>org.codehaus.mojo</td>
      +<td><a class="externalLink" href="https://www.mojohaus.org/build-helper-maven-plugin/">build-helper-maven-plugin</a></td>
      +<td>3.6.0</td></tr>
      +<tr class="b">
      +<td>org.codehaus.mojo</td>
      +<td><a class="externalLink" href="https://www.mojohaus.org/taglist-maven-plugin/">taglist-maven-plugin</a></td>
      +<td>3.2.1</td></tr>
      +<tr class="a">
      +<td>org.codehaus.mojo</td>
      +<td><a class="externalLink" href="https://www.mojohaus.org/versions/versions-maven-plugin/">versions-maven-plugin</a></td>
      +<td>2.18.0</td></tr>
      +<tr class="b">
      +<td>org.codehaus.mojo</td>
      +<td><a class="externalLink" href="http://www.mojohaus.org/wagon-maven-plugin/">wagon-maven-plugin</a></td>
      +<td>2.0.2</td></tr>
      +<tr class="a">
      +<td>org.gaul</td>
      +<td><a class="externalLink" href="https://github.com/gaul/modernizer-maven-plugin">modernizer-maven-plugin</a></td>
      +<td>3.0.0</td></tr>
      +<tr class="b">
      +<td>org.jacoco</td>
      +<td><a class="externalLink" href="https://www.jacoco.org/jacoco/trunk/doc/maven.html">jacoco-maven-plugin</a></td>
      +<td>0.8.12</td></tr>
      +<tr class="a">
      +<td>org.openrewrite.maven</td>
      +<td><a class="externalLink" href="https://openrewrite.github.io/rewrite-maven-plugin/">rewrite-maven-plugin</a></td>
      +<td>5.47.3</td></tr>
      +<tr class="b">
      +<td>org.owasp</td>
      +<td><a class="externalLink" href="https://github.com/jeremylong/DependencyCheck.git/dependency-check-maven">dependency-check-maven</a></td>
      +<td>11.1.1</td></tr>
      +<tr class="a">
      +<td>org.sonarsource.scanner.maven</td>
      +<td><a class="externalLink" href="http://docs.sonarqube.org/display/PLUG/Plugin+Library/sonar-maven-plugin">sonar-maven-plugin</a></td>
      +<td>5.0.0.4389</td></tr></table></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/plugin-updates-report.html b/waffle-jna-jakarta/plugin-updates-report.html
      new file mode 100644
      index 0000000000..f1f8978ae4
      --- /dev/null
      +++ b/waffle-jna-jakarta/plugin-updates-report.html
      @@ -0,0 +1,1973 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.codehaus.mojo:versions-maven-plugin:2.18.0:plugin-updates-report at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>Plugin Updates Report – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a>Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-right"></span>Project Information</a></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-down"></span>Project Reports</a>
      +     <ul class="nav nav-list">
      +      <li><a href="checkstyle.html">Checkstyle</a></li>
      +      <li><a href="apidocs/index.html">Javadoc</a></li>
      +      <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +      <li><a href="xref/index.html">Source Xref</a></li>
      +      <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +      <li><a href="cpd.html">CPD</a></li>
      +      <li><a href="pmd.html">PMD</a></li>
      +      <li><a href="surefire.html">Surefire</a></li>
      +      <li><a href="spotbugs.html">SpotBugs</a></li>
      +      <li><a href="jacoco/index.html">JaCoCo</a></li>
      +      <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +      <li class="active"><a>Plugin Updates Report</a></li>
      +      <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +      <li><a href="taglist.html">Tag List</a></li>
      +      <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +     </ul></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section><a id="Overview"></a>
      +<h1>Overview</h1>
      +<p>This report summarizes newer versions that may be available for your project's various plugins.</p>
      +<table class="table table-striped">
      +<tr class="a">
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td># of plugins using the latest version available</td>
      +<td>34</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td># of plugins where the next version available is smaller than an incremental version update</td>
      +<td>0</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td># of plugins where the next version available is an incremental version update</td>
      +<td>0</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td># of plugins where the next version available is a minor version update</td>
      +<td>1</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td># of plugins where the next version available is a major version update</td>
      +<td>9</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td># of plugins where a dependencies section containes a dependency with an updated version</td>
      +<td>2</td></tr></tr></table><section><a id="Plugin_Management"></a>
      +<h2>Plugin Management</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>com.diffplug.spotless</td>
      +<td>spotless-maven-plugin</td>
      +<td>2.43.0</td>
      +<td></td>
      +<td></td>
      +<td><b>2.44.0.BETA4</b></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>com.github.ekryd.sortpom</td>
      +<td>sortpom-maven-plugin</td>
      +<td><b>4.0.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>com.github.hazendaz.maven</td>
      +<td>coveralls-maven-plugin</td>
      +<td><b>4.5.0-M5</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>com.github.hazendaz.maven</td>
      +<td>directory-maven-plugin</td>
      +<td><b>1.2.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>com.github.hazendaz.maven</td>
      +<td>htmlcompressor-maven-plugin</td>
      +<td>1.10.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>2.1.0</b></td>
      +<td><img src="images/icon_warning_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>com.github.hazendaz.maven</td>
      +<td>whitespace-maven-plugin</td>
      +<td><b>1.4.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>com.github.hazendaz.maven</td>
      +<td>yuicompressor-maven-plugin</td>
      +<td><b>2.1.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>com.github.spotbugs</td>
      +<td>spotbugs-maven-plugin</td>
      +<td><b>4.8.6.6</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>com.mycila</td>
      +<td>license-maven-plugin</td>
      +<td><b>4.6</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>io.github.git-commit-id</td>
      +<td>git-commit-id-maven-plugin</td>
      +<td><b>9.0.1</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>net.revelc.code</td>
      +<td>impsort-maven-plugin</td>
      +<td><b>1.12.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>net.revelc.code.formatter</td>
      +<td>formatter-maven-plugin</td>
      +<td><b>2.24.1</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-antrun-plugin</td>
      +<td><b>3.1.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-assembly-plugin</td>
      +<td><b>3.7.1</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-checkstyle-plugin</td>
      +<td><b>3.6.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-clean-plugin</td>
      +<td>3.4.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-compiler-plugin</td>
      +<td>3.13.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-dependency-plugin</td>
      +<td><b>3.8.1</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-deploy-plugin</td>
      +<td>3.1.3</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-enforcer-plugin</td>
      +<td><b>3.5.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-gpg-plugin</td>
      +<td><b>3.2.7</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-install-plugin</td>
      +<td>3.1.3</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-jar-plugin</td>
      +<td>3.4.2</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-javadoc-plugin</td>
      +<td><b>3.11.2</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-jxr-plugin</td>
      +<td><b>3.6.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-pmd-plugin</td>
      +<td><b>3.26.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-project-info-reports-plugin</td>
      +<td><b>3.8.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-release-plugin</td>
      +<td><b>3.1.1</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-resources-plugin</td>
      +<td>3.3.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-scm-plugin</td>
      +<td><b>2.1.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-site-plugin</td>
      +<td>3.21.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-M16</b></td>
      +<td><img src="images/icon_warning_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-source-plugin</td>
      +<td>3.3.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-surefire-plugin</td>
      +<td><b>3.5.2</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-surefire-report-plugin</td>
      +<td><b>3.5.2</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.plugins</td>
      +<td>maven-war-plugin</td>
      +<td><b>3.4.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.codehaus.mojo</td>
      +<td>build-helper-maven-plugin</td>
      +<td><b>3.6.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.codehaus.mojo</td>
      +<td>taglist-maven-plugin</td>
      +<td><b>3.2.1</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.codehaus.mojo</td>
      +<td>versions-maven-plugin</td>
      +<td><b>2.18.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.codehaus.mojo</td>
      +<td>wagon-maven-plugin</td>
      +<td><b>2.0.2</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.gaul</td>
      +<td>modernizer-maven-plugin</td>
      +<td><b>3.0.0</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.jacoco</td>
      +<td>jacoco-maven-plugin</td>
      +<td><b>0.8.12</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.openrewrite.maven</td>
      +<td>rewrite-maven-plugin</td>
      +<td><b>5.47.3</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.owasp</td>
      +<td>dependency-check-maven</td>
      +<td><b>11.1.1</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.sonarsource.scanner.maven</td>
      +<td>sonar-maven-plugin</td>
      +<td><b>5.0.0.4389</b></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><img src="images/icon_success_sml.gif" /></td></tr>
      +<tr class="b">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr></table></section><section><a id="Plugins"></a>
      +<h2>Plugins</h2>
      +<p>This project does not declare any plugins in a build/plugins section.</p></section></section><section><a id="Plugin_Updates"></a>
      +<h1>Plugin Updates</h1>
      +<p>-</p><section><a id="Plugin_com.diffplug.spotless.3Aspotless-maven-plugin"></a>
      +<h2>Plugin com.diffplug.spotless:spotless-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer minor version available. Minor updates are sometimes passive.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.diffplug.spotless</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">spotless-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.43.0</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;">2.44.0.BETA1<br />2.44.0.BETA2<br />2.44.0.BETA3<br /><b>2.44.0.BETA4</b>&#160;<i>Latest Minor</i></td></tr></table></section><section><a id="Plugin_com.github.ekryd.sortpom.3Asortpom-maven-plugin"></a>
      +<h2>Plugin com.github.ekryd.sortpom:sortpom-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.github.ekryd.sortpom</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">sortpom-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">4.0.0</td></tr></table></section><section><a id="Plugin_com.github.hazendaz.maven.3Acoveralls-maven-plugin"></a>
      +<h2>Plugin com.github.hazendaz.maven:coveralls-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.github.hazendaz.maven</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">coveralls-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">4.5.0-M5</td></tr></table></section><section><a id="Plugin_com.github.hazendaz.maven.3Adirectory-maven-plugin"></a>
      +<h2>Plugin com.github.hazendaz.maven:directory-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.github.hazendaz.maven</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">directory-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.2.0</td></tr></table></section><section><a id="Plugin_com.github.hazendaz.maven.3Ahtmlcompressor-maven-plugin"></a>
      +<h2>Plugin com.github.hazendaz.maven:htmlcompressor-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.github.hazendaz.maven</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">htmlcompressor-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.10.0</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;">2.0.0<br />2.0.1<br />2.0.2<br /><b>2.1.0</b>&#160;<i>Latest Major</i></td></tr></table><section><a id="Dependencies_of_com.github.hazendaz.maven.3Ahtmlcompressor-maven-plugin"></a>
      +<h3>Dependencies of com.github.hazendaz.maven:htmlcompressor-maven-plugin</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>com.github.hazendaz</td>
      +<td>htmlcompressor</td>
      +<td>1.9.4</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>2.0.2</b></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>com.yahoo.platform.yui</td>
      +<td>yuicompressor</td>
      +<td>2.4.8</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr></table></section><section><a id="Dependency_com.github.hazendaz.3Ahtmlcompressor"></a>
      +<h3>Dependency com.github.hazendaz:htmlcompressor</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.github.hazendaz</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">htmlcompressor</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.9.4</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;">2.0.0<br />2.0.1<br /><b>2.0.2</b>&#160;<i>Latest Major</i></td></tr></table></section><section><a id="Dependency_com.yahoo.platform.yui.3Ayuicompressor"></a>
      +<h3>Dependency com.yahoo.platform.yui:yuicompressor</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.yahoo.platform.yui</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">yuicompressor</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.4.8</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section></section><section><a id="Plugin_com.github.hazendaz.maven.3Awhitespace-maven-plugin"></a>
      +<h2>Plugin com.github.hazendaz.maven:whitespace-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.github.hazendaz.maven</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">whitespace-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.4.0</td></tr></table></section><section><a id="Plugin_com.github.hazendaz.maven.3Ayuicompressor-maven-plugin"></a>
      +<h2>Plugin com.github.hazendaz.maven:yuicompressor-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.github.hazendaz.maven</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">yuicompressor-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.1.0</td></tr></table><section><a id="Dependencies_of_com.github.hazendaz.maven.3Ayuicompressor-maven-plugin"></a>
      +<h3>Dependencies of com.github.hazendaz.maven:yuicompressor-maven-plugin</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>com.yahoo.platform.yui</td>
      +<td>yuicompressor</td>
      +<td>2.4.8</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr></table></section><section><a id="Dependency_com.yahoo.platform.yui.3Ayuicompressor"></a>
      +<h3>Dependency com.yahoo.platform.yui:yuicompressor</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.yahoo.platform.yui</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">yuicompressor</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.4.8</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section></section><section><a id="Plugin_com.github.spotbugs.3Aspotbugs-maven-plugin"></a>
      +<h2>Plugin com.github.spotbugs:spotbugs-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.github.spotbugs</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">spotbugs-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">4.8.6.6</td></tr></table></section><section><a id="Plugin_com.mycila.3Alicense-maven-plugin"></a>
      +<h2>Plugin com.mycila:license-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.mycila</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">license-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">4.6</td></tr></table><section><a id="Dependencies_of_com.mycila.3Alicense-maven-plugin"></a>
      +<h3>Dependencies of com.mycila:license-maven-plugin</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>com.mycila</td>
      +<td>license-maven-plugin-git</td>
      +<td>4.6</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr></table></section><section><a id="Dependency_com.mycila.3Alicense-maven-plugin-git"></a>
      +<h3>Dependency com.mycila:license-maven-plugin-git</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.mycila</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">license-maven-plugin-git</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">4.6</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section></section><section><a id="Plugin_io.github.git-commit-id.3Agit-commit-id-maven-plugin"></a>
      +<h2>Plugin io.github.git-commit-id:git-commit-id-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">io.github.git-commit-id</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">git-commit-id-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">9.0.1</td></tr></table></section><section><a id="Plugin_net.revelc.code.3Aimpsort-maven-plugin"></a>
      +<h2>Plugin net.revelc.code:impsort-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">net.revelc.code</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">impsort-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.12.0</td></tr></table></section><section><a id="Plugin_net.revelc.code.formatter.3Aformatter-maven-plugin"></a>
      +<h2>Plugin net.revelc.code.formatter:formatter-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">net.revelc.code.formatter</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">formatter-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.24.1</td></tr></table><section><a id="Dependencies_of_net.revelc.code.formatter.3Aformatter-maven-plugin"></a>
      +<h3>Dependencies of net.revelc.code.formatter:formatter-maven-plugin</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>com.github.hazendaz</td>
      +<td>build-tools</td>
      +<td>1.4.0</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr></table></section><section><a id="Dependency_com.github.hazendaz.3Abuild-tools"></a>
      +<h3>Dependency com.github.hazendaz:build-tools</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">com.github.hazendaz</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">build-tools</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.4.0</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-antrun-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-antrun-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-antrun-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.1.0</td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-assembly-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-assembly-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-assembly-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.7.1</td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-checkstyle-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-checkstyle-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-checkstyle-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.6.0</td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-clean-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-clean-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-clean-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.4.0</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-compiler-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-compiler-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-compiler-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.13.0</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-dependency-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-dependency-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-dependency-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.8.1</td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-deploy-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-deploy-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-deploy-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.1.3</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-enforcer-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-enforcer-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-enforcer-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.5.0</td></tr></table><section><a id="Dependencies_of_org.apache.maven.plugins.3Amaven-enforcer-plugin"></a>
      +<h3>Dependencies of org.apache.maven.plugins:maven-enforcer-plugin</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.codehaus.mojo</td>
      +<td>extra-enforcer-rules</td>
      +<td>1.9.0</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr></table></section><section><a id="Dependency_org.codehaus.mojo.3Aextra-enforcer-rules"></a>
      +<h3>Dependency org.codehaus.mojo:extra-enforcer-rules</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.codehaus.mojo</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">extra-enforcer-rules</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.9.0</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-gpg-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-gpg-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-gpg-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.2.7</td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-install-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-install-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-install-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.1.3</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-jar-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-jar-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-jar-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.4.2</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-javadoc-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-javadoc-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-javadoc-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.11.2</td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-jxr-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-jxr-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-jxr-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.6.0</td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-pmd-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-pmd-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-pmd-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.26.0</td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-project-info-reports-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-project-info-reports-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-project-info-reports-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.8.0</td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-release-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-release-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-release-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.1.1</td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-resources-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-resources-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-resources-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.3.1</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-scm-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-scm-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-scm-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.1.0</td></tr></table><section><a id="Dependencies_of_org.apache.maven.plugins.3Amaven-scm-plugin"></a>
      +<h3>Dependencies of org.apache.maven.plugins:maven-scm-plugin</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.scm</td>
      +<td>maven-scm-provider-jgit</td>
      +<td>2.1.0</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.eclipse.jgit</td>
      +<td>org.eclipse.jgit</td>
      +<td>7.1.0.202411261347-r</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr></table></section><section><a id="Dependency_org.apache.maven.scm.3Amaven-scm-provider-jgit"></a>
      +<h3>Dependency org.apache.maven.scm:maven-scm-provider-jgit</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.scm</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-scm-provider-jgit</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.1.0</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section><section><a id="Dependency_org.eclipse.jgit.3Aorg.eclipse.jgit"></a>
      +<h3>Dependency org.eclipse.jgit:org.eclipse.jgit</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.eclipse.jgit</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">org.eclipse.jgit</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">7.1.0.202411261347-r</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-site-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-site-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-site-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.21.0</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;">4.0.0-M1<br />4.0.0-M2<br />4.0.0-M3<br />4.0.0-M4<br />4.0.0-M5<br />4.0.0-M6<br />4.0.0-M7<br />4.0.0-M8<br />4.0.0-M9<br />4.0.0-M10<br />4.0.0-M11<br />4.0.0-M12<br />4.0.0-M13<br />4.0.0-M14<br />4.0.0-M15<br /><b>4.0.0-M16</b>&#160;<i>Latest Major</i></td></tr></table><section><a id="Dependencies_of_org.apache.maven.plugins.3Amaven-site-plugin"></a>
      +<h3>Dependencies of org.apache.maven.plugins:maven-site-plugin</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.doxia</td>
      +<td>doxia-module-markdown</td>
      +<td>2.0.0</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.scm</td>
      +<td>maven-scm-api</td>
      +<td>2.1.0</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.scm</td>
      +<td>maven-scm-manager-plexus</td>
      +<td>2.1.0</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.scm</td>
      +<td>maven-scm-provider-gitexe</td>
      +<td>2.1.0</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.skins</td>
      +<td>maven-fluido-skin</td>
      +<td>2.0.1</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.apache.maven.wagon</td>
      +<td>wagon-scm</td>
      +<td>3.5.3</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>org.codehaus.plexus</td>
      +<td>plexus-utils</td>
      +<td>4.0.2</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>org.codehaus.plexus</td>
      +<td>plexus-xml</td>
      +<td>3.0.1</td>
      +<td></td>
      +<td>jar</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.4</b></td></tr>
      +<tr class="b">
      +<th>Status</th>
      +<th>Group Id</th>
      +<th>Artifact Id</th>
      +<th>Current Version</th>
      +<th>Classifier</th>
      +<th>Type</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th>
      +<th>Dependency status</th></tr></table></section><section><a id="Dependency_org.apache.maven.doxia.3Adoxia-module-markdown"></a>
      +<h3>Dependency org.apache.maven.doxia:doxia-module-markdown</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.doxia</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">doxia-module-markdown</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.0.0</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section><section><a id="Dependency_org.apache.maven.scm.3Amaven-scm-api"></a>
      +<h3>Dependency org.apache.maven.scm:maven-scm-api</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.scm</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-scm-api</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.1.0</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section><section><a id="Dependency_org.apache.maven.scm.3Amaven-scm-manager-plexus"></a>
      +<h3>Dependency org.apache.maven.scm:maven-scm-manager-plexus</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.scm</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-scm-manager-plexus</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.1.0</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section><section><a id="Dependency_org.apache.maven.scm.3Amaven-scm-provider-gitexe"></a>
      +<h3>Dependency org.apache.maven.scm:maven-scm-provider-gitexe</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.scm</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-scm-provider-gitexe</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.1.0</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section><section><a id="Dependency_org.apache.maven.skins.3Amaven-fluido-skin"></a>
      +<h3>Dependency org.apache.maven.skins:maven-fluido-skin</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.skins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-fluido-skin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.0.1</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section><section><a id="Dependency_org.apache.maven.wagon.3Awagon-scm"></a>
      +<h3>Dependency org.apache.maven.wagon:wagon-scm</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.wagon</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">wagon-scm</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.5.3</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section><section><a id="Dependency_org.codehaus.plexus.3Aplexus-utils"></a>
      +<h3>Dependency org.codehaus.plexus:plexus-utils</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.codehaus.plexus</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">plexus-utils</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">4.0.2</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr></table></section><section><a id="Dependency_org.codehaus.plexus.3Aplexus-xml"></a>
      +<h3>Dependency org.codehaus.plexus:plexus-xml</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.codehaus.plexus</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">plexus-xml</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.0.1</td></tr>
      +<tr class="a">
      +<th>Classifier</th>
      +<td style="text-align: left;"></td></tr>
      +<tr class="b">
      +<th>Type</th>
      +<td style="text-align: left;">jar</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;">4.0.0<br />4.0.1<br />4.0.2<br />4.0.3<br /><b>4.0.4</b>&#160;<i>Latest Major</i></td></tr></table></section></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-source-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-source-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-source-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.3.1</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-surefire-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-surefire-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-surefire-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.5.2</td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-surefire-report-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-surefire-report-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-surefire-report-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.5.2</td></tr></table></section><section><a id="Plugin_org.apache.maven.plugins.3Amaven-war-plugin"></a>
      +<h2>Plugin org.apache.maven.plugins:maven-war-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.apache.maven.plugins</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">maven-war-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.4.0</td></tr></table></section><section><a id="Plugin_org.codehaus.mojo.3Abuild-helper-maven-plugin"></a>
      +<h2>Plugin org.codehaus.mojo:build-helper-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.codehaus.mojo</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">build-helper-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.6.0</td></tr></table></section><section><a id="Plugin_org.codehaus.mojo.3Ataglist-maven-plugin"></a>
      +<h2>Plugin org.codehaus.mojo:taglist-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.codehaus.mojo</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">taglist-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.2.1</td></tr></table></section><section><a id="Plugin_org.codehaus.mojo.3Aversions-maven-plugin"></a>
      +<h2>Plugin org.codehaus.mojo:versions-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.codehaus.mojo</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">versions-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.18.0</td></tr></table></section><section><a id="Plugin_org.codehaus.mojo.3Awagon-maven-plugin"></a>
      +<h2>Plugin org.codehaus.mojo:wagon-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.codehaus.mojo</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">wagon-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.0.2</td></tr></table></section><section><a id="Plugin_org.gaul.3Amodernizer-maven-plugin"></a>
      +<h2>Plugin org.gaul:modernizer-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.gaul</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">modernizer-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.0.0</td></tr></table></section><section><a id="Plugin_org.jacoco.3Ajacoco-maven-plugin"></a>
      +<h2>Plugin org.jacoco:jacoco-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.jacoco</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">jacoco-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">0.8.12</td></tr></table></section><section><a id="Plugin_org.openrewrite.maven.3Arewrite-maven-plugin"></a>
      +<h2>Plugin org.openrewrite.maven:rewrite-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.openrewrite.maven</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">rewrite-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">5.47.3</td></tr></table></section><section><a id="Plugin_org.owasp.3Adependency-check-maven"></a>
      +<h2>Plugin org.owasp:dependency-check-maven</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.owasp</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">dependency-check-maven</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">11.1.1</td></tr></table></section><section><a id="Plugin_org.sonarsource.scanner.maven.3Asonar-maven-plugin"></a>
      +<h2>Plugin org.sonarsource.scanner.maven:sonar-maven-plugin</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Group Id</th>
      +<td style="text-align: left;">org.sonarsource.scanner.maven</td></tr>
      +<tr class="a">
      +<th>Artifact Id</th>
      +<td style="text-align: left;">sonar-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">5.0.0.4389</td></tr></table></section></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/plugins.html b/waffle-jna-jakarta/plugins.html
      new file mode 100644
      index 0000000000..6da7ade86e
      --- /dev/null
      +++ b/waffle-jna-jakarta/plugins.html
      @@ -0,0 +1,307 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.8.0:plugins at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>Project Plugins – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a>Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-down"></span>Project Information</a>
      +     <ul class="nav nav-list">
      +      <li><a href="ci-management.html">CI Management</a></li>
      +      <li><a href="dependencies.html">Dependencies</a></li>
      +      <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +      <li><a href="dependency-management.html">Dependency Management</a></li>
      +      <li><a href="distribution-management.html">Distribution Management</a></li>
      +      <li><a href="index.html">About</a></li>
      +      <li><a href="issue-management.html">Issue Management</a></li>
      +      <li><a href="licenses.html">Licenses</a></li>
      +      <li><a href="plugin-management.html">Plugin Management</a></li>
      +      <li class="active"><a>Plugins</a></li>
      +      <li><a href="scm.html">Source Code Management</a></li>
      +      <li><a href="summary.html">Summary</a></li>
      +      <li><a href="team.html">Team</a></li>
      +     </ul></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-right"></span>Project Reports</a></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section><a id="Project_Build_Plugins"></a>
      +<h1>Project Build Plugins</h1>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>GroupId</th>
      +<th>ArtifactId</th>
      +<th>Version</th></tr>
      +<tr class="b">
      +<td>com.diffplug.spotless</td>
      +<td><a class="externalLink" href="https://github.com/diffplug/spotless">spotless-maven-plugin</a></td>
      +<td>2.43.0</td></tr>
      +<tr class="a">
      +<td>com.github.ekryd.sortpom</td>
      +<td><a class="externalLink" href="https://github.com/Ekryd/sortpom/sortpom-maven-plugin/">sortpom-maven-plugin</a></td>
      +<td>4.0.0</td></tr>
      +<tr class="b">
      +<td>com.github.hazendaz.maven</td>
      +<td><a class="externalLink" href="https://github.com/hazendaz/directory-maven-plugin">directory-maven-plugin</a></td>
      +<td>1.2.0</td></tr>
      +<tr class="a">
      +<td>com.github.hazendaz.maven</td>
      +<td><a class="externalLink" href="https://github.com/dantwining/whitespace-maven-plugin">whitespace-maven-plugin</a></td>
      +<td>1.4.0</td></tr>
      +<tr class="b">
      +<td>com.github.spotbugs</td>
      +<td><a class="externalLink" href="https://spotbugs.github.io/spotbugs-maven-plugin/">spotbugs-maven-plugin</a></td>
      +<td>4.8.6.6</td></tr>
      +<tr class="a">
      +<td>com.mycila</td>
      +<td><a class="externalLink" href="https://oss.carbou.me/license-maven-plugin">license-maven-plugin</a></td>
      +<td>4.6</td></tr>
      +<tr class="b">
      +<td>io.github.git-commit-id</td>
      +<td><a class="externalLink" href="https://github.com/git-commit-id/git-commit-id-maven-plugin">git-commit-id-maven-plugin</a></td>
      +<td>9.0.1</td></tr>
      +<tr class="a">
      +<td>net.revelc.code</td>
      +<td><a class="externalLink" href="http://code.revelc.net/impsort-maven-plugin">impsort-maven-plugin</a></td>
      +<td>1.12.0</td></tr>
      +<tr class="b">
      +<td>net.revelc.code.formatter</td>
      +<td><a class="externalLink" href="https://code.revelc.net/revelc/formatter-maven-plugin">formatter-maven-plugin</a></td>
      +<td>2.24.1</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-checkstyle-plugin/">maven-checkstyle-plugin</a></td>
      +<td>3.6.0</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-clean-plugin/">maven-clean-plugin</a></td>
      +<td>3.4.0</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-compiler-plugin/">maven-compiler-plugin</a></td>
      +<td>3.13.0</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-deploy-plugin/">maven-deploy-plugin</a></td>
      +<td>3.1.3</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/enforcer/maven-enforcer-plugin/">maven-enforcer-plugin</a></td>
      +<td>3.5.0</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-gpg-plugin/">maven-gpg-plugin</a></td>
      +<td>3.2.7</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-install-plugin/">maven-install-plugin</a></td>
      +<td>3.1.3</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-jar-plugin/">maven-jar-plugin</a></td>
      +<td>3.4.2</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-javadoc-plugin/">maven-javadoc-plugin</a></td>
      +<td>3.11.2</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-pmd-plugin/">maven-pmd-plugin</a></td>
      +<td>3.26.0</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-resources-plugin/">maven-resources-plugin</a></td>
      +<td>3.3.1</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-site-plugin/">maven-site-plugin</a></td>
      +<td>3.21.0</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-source-plugin/">maven-source-plugin</a></td>
      +<td>3.3.1</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/surefire/maven-surefire-plugin/">maven-surefire-plugin</a></td>
      +<td>3.5.2</td></tr>
      +<tr class="a">
      +<td>org.gaul</td>
      +<td><a class="externalLink" href="https://github.com/gaul/modernizer-maven-plugin">modernizer-maven-plugin</a></td>
      +<td>3.0.0</td></tr>
      +<tr class="b">
      +<td>org.jacoco</td>
      +<td><a class="externalLink" href="https://www.jacoco.org/jacoco/trunk/doc/maven.html">jacoco-maven-plugin</a></td>
      +<td>0.8.12</td></tr>
      +<tr class="a">
      +<td>org.openrewrite.maven</td>
      +<td><a class="externalLink" href="https://openrewrite.github.io/rewrite-maven-plugin/">rewrite-maven-plugin</a></td>
      +<td>5.47.3</td></tr></table></section><section><a id="Project_Report_Plugins"></a>
      +<h1>Project Report Plugins</h1>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>GroupId</th>
      +<th>ArtifactId</th>
      +<th>Version</th></tr>
      +<tr class="b">
      +<td>com.github.spotbugs</td>
      +<td><a class="externalLink" href="https://spotbugs.github.io/spotbugs-maven-plugin/">spotbugs-maven-plugin</a></td>
      +<td>4.8.6.6</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-checkstyle-plugin/">maven-checkstyle-plugin</a></td>
      +<td>3.6.0</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-javadoc-plugin/">maven-javadoc-plugin</a></td>
      +<td>3.11.2</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/jxr/maven-jxr-plugin/">maven-jxr-plugin</a></td>
      +<td>3.6.0</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-pmd-plugin/">maven-pmd-plugin</a></td>
      +<td>3.26.0</td></tr>
      +<tr class="a">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/plugins/maven-project-info-reports-plugin/">maven-project-info-reports-plugin</a></td>
      +<td>3.8.0</td></tr>
      +<tr class="b">
      +<td>org.apache.maven.plugins</td>
      +<td><a class="externalLink" href="https://maven.apache.org/surefire/maven-surefire-report-plugin/">maven-surefire-report-plugin</a></td>
      +<td>3.5.2</td></tr>
      +<tr class="a">
      +<td>org.codehaus.mojo</td>
      +<td><a class="externalLink" href="https://www.mojohaus.org/taglist-maven-plugin/">taglist-maven-plugin</a></td>
      +<td>3.2.1</td></tr>
      +<tr class="b">
      +<td>org.codehaus.mojo</td>
      +<td><a class="externalLink" href="https://www.mojohaus.org/versions/versions-maven-plugin/">versions-maven-plugin</a></td>
      +<td>2.18.0</td></tr>
      +<tr class="a">
      +<td>org.jacoco</td>
      +<td><a class="externalLink" href="https://www.jacoco.org/jacoco/trunk/doc/maven.html">jacoco-maven-plugin</a></td>
      +<td>0.8.12</td></tr>
      +<tr class="b">
      +<td>org.owasp</td>
      +<td><a class="externalLink" href="https://github.com/jeremylong/DependencyCheck.git/dependency-check-maven">dependency-check-maven</a></td>
      +<td>11.1.1</td></tr></table></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/pmd.html b/waffle-jna-jakarta/pmd.html
      new file mode 100644
      index 0000000000..04511f1e92
      --- /dev/null
      +++ b/waffle-jna-jakarta/pmd.html
      @@ -0,0 +1,1343 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-pmd-plugin:3.26.0:aggregate-pmd at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>PMD Results – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a>PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-right"></span>Project Information</a></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-down"></span>Project Reports</a>
      +     <ul class="nav nav-list">
      +      <li><a href="checkstyle.html">Checkstyle</a></li>
      +      <li><a href="apidocs/index.html">Javadoc</a></li>
      +      <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +      <li><a href="xref/index.html">Source Xref</a></li>
      +      <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +      <li><a href="cpd.html">CPD</a></li>
      +      <li class="active"><a>PMD</a></li>
      +      <li><a href="surefire.html">Surefire</a></li>
      +      <li><a href="spotbugs.html">SpotBugs</a></li>
      +      <li><a href="jacoco/index.html">JaCoCo</a></li>
      +      <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +      <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +      <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +      <li><a href="taglist.html">Tag List</a></li>
      +      <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +     </ul></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section><a id="PMD_Results"></a>
      +<h1>PMD Results</h1>
      +<p>The following document contains the results of <a class="externalLink" href="https://pmd.github.io">PMD</a> 7.7.0.</p><section><a id="Violations_By_Priority"></a>
      +<h2>Violations By Priority</h2><section><a id="Priority_4"></a>
      +<h3>Priority 4</h3><section><a id="waffle-jna-jakarta_-_waffle.2Fjaas.2FWindowsLoginModule.java"></a>
      +<h4>waffle-jna-jakarta - waffle/jaas/WindowsLoginModule.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L139">139</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L142">142</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L151">151</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L158">158</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'getUserPrincipals' is already in scope</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L164">164</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'getRolePrincipals' is already in scope</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L169">169</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'getRolePrincipals' is already in scope</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L170">170</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L171">171</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L180">180</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L223">223</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L227">227</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L251">251</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2FCorsAwareNegotiateSecurityFilter.java"></a>
      +<h4>waffle-jna-jakarta - waffle/servlet/CorsAwareNegotiateSecurityFilter.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L54">54</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L59">59</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L61">61</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L68">68</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L74">74</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L78">78</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L82">82</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L87">87</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L95">95</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2FNegotiateSecurityFilter.java"></a>
      +<h4>waffle-jna-jakarta - waffle/servlet/NegotiateSecurityFilter.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L108">108</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L113">113</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L123">123</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'isWindows' is already in scope</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L127">127</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L128">128</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L135">135</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L145">145</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L154">154</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L163">163</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L184">184</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L185">185</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L193">193</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L198">198</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L219">219</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L223">223</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'PRINCIPALSESSIONKEY' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L225">225</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L230">230</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L237">237</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L247">247</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'PRINCIPALSESSIONKEY' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L274">274</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L290">290</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L304">304</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L311">311</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L316">316</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L326">326</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L332">332</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L335">335</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L374">374</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L396">396</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L401">401</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L407">407</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L414">414</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L418">418</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L423">423</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L428">428</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L439">439</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L459">459</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'windows' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L551">551</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'windows' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L552">552</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'windows' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L554">554</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2FWaffleInfoServlet.java"></a>
      +<h4>waffle-jna-jakarta - waffle/servlet/WaffleInfoServlet.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfoServlet': 'logger' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/WaffleInfoServlet.html#L111">111</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2FWindowsPrincipal.java"></a>
      +<h4>waffle-jna-jakarta - waffle/servlet/WindowsPrincipal.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsPrincipal': 'getGroups' is already in scope</td>
      +<td><a href="./xref/waffle/servlet/WindowsPrincipal.html#L90">90</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsPrincipal': 'getRoles' is already in scope</td>
      +<td><a href="./xref/waffle/servlet/WindowsPrincipal.html#L91">91</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsPrincipal': 'getPrincipalNames' is already in scope</td>
      +<td><a href="./xref/waffle/servlet/WindowsPrincipal.html#L109">109</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsPrincipal': 'getRoleNames' is already in scope</td>
      +<td><a href="./xref/waffle/servlet/WindowsPrincipal.html#L111">111</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2Fspi.2FBasicSecurityFilterProvider.java"></a>
      +<h4>waffle-jna-jakarta - waffle/servlet/spi/BasicSecurityFilterProvider.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'BasicSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/BasicSecurityFilterProvider.html#L74">74</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2Fspi.2FNegotiateSecurityFilterProvider.java"></a>
      +<h4>waffle-jna-jakarta - waffle/servlet/spi/NegotiateSecurityFilterProvider.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'NEGOTIATE' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L78">78</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'NTLM' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L79">79</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'WWW_AUTHENTICATE' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L104">104</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L112">112</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L127">127</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L136">136</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L143">143</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'WWW_AUTHENTICATE' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L144">144</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L147">147</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'PROTOCOLS' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L173">173</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L179">179</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'NEGOTIATE' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L180">180</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'NTLM' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L181">181</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L184">184</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2Fspi.2FSecurityFilterProviderCollection.java"></a>
      +<h4>waffle-jna-jakarta - waffle/servlet/spi/SecurityFilterProviderCollection.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SecurityFilterProviderCollection': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L63">63</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SecurityFilterProviderCollection': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L82">82</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SecurityFilterProviderCollection': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L92">92</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SecurityFilterProviderCollection': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L93">93</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Futil.2FAuthorizationHeader.java"></a>
      +<h4>waffle-jna-jakarta - waffle/util/AuthorizationHeader.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'AuthorizationHeader': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/AuthorizationHeader.html#L122">122</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Futil.2FCorsPreFlightCheck.java"></a>
      +<h4>waffle-jna-jakarta - waffle/util/CorsPreFlightCheck.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L69">69</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L78">78</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'PRE_FLIGHT_ATTRIBUTE_VALUE' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L84">84</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L91">91</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'CORS_PRE_FLIGHT_HEADERS' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L93">93</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L95">95</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L102">102</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Futil.2FNtlmMessage.java"></a>
      +<h4>waffle-jna-jakarta - waffle/util/NtlmMessage.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NtlmMessage': 'NTLM_SSP_SIGNATURE' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/NtlmMessage.html#L44">44</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NtlmMessage': 'NTLM_SSP_SIGNATURE' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/NtlmMessage.html#L48">48</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NtlmMessage': 'NTLM_SSP_SIGNATURE' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/NtlmMessage.html#L49">49</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NtlmMessage': 'NTLM_SSP_SIGNATURE' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/NtlmMessage.html#L66">66</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Futil.2FNtlmServletRequest.java"></a>
      +<h4>waffle-jna-jakarta - waffle/util/NtlmServletRequest.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NtlmServletRequest': 'getRemoteHost' is already in scope</td>
      +<td><a href="./xref/waffle/util/NtlmServletRequest.html#L49">49</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Futil.2FSPNegoMessage.java"></a>
      +<h4>waffle-jna-jakarta - waffle/util/SPNegoMessage.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SPNegoMessage': 'SPENGO_OID' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/SPNegoMessage.html#L70">70</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SPNegoMessage': 'SPENGO_OID' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/SPNegoMessage.html#L75">75</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SPNegoMessage': 'SPENGO_OID' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/SPNegoMessage.html#L76">76</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Futil.2FWaffleInfo.java"></a>
      +<h4>waffle-jna-jakarta - waffle/util/WaffleInfo.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfo': 'getException' is already in scope</td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L260">260</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfo': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L342">342</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfo': 'toPrettyXML' is already in scope</td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L356">356</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfo': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L363">363</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfo': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L366">366</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfo': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L367">367</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fwindows.2Fauth.2Fimpl.2FWindowsAuthProviderImpl.java"></a>
      +<h4>waffle-jna-jakarta - waffle/windows/auth/impl/WindowsAuthProviderImpl.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsAuthProviderImpl': 'CONTINUE_CONTEXT_TIMEOUT' is already in scope because it is declared in an enclosing type</td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsAuthProviderImpl.html#L93">93</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fwindows.2Fauth.2Fimpl.2FWindowsSecurityContextImpl.java"></a>
      +<h4>waffle-jna-jakarta - waffle/windows/auth/impl/WindowsSecurityContextImpl.java</h4>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsSecurityContextImpl': 'dispose' is already in scope</td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsSecurityContextImpl.html#L152">152</a></td></tr></table></section></section></section><section><a id="Files"></a>
      +<h2>Files</h2><section><a id="waffle-jna-jakarta_-_waffle.2Fjaas.2FWindowsLoginModule.java"></a>
      +<h3>waffle-jna-jakarta - waffle/jaas/WindowsLoginModule.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L139">139</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L142">142</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L151">151</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L158">158</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'getUserPrincipals' is already in scope</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L164">164</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'getRolePrincipals' is already in scope</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L169">169</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'getRolePrincipals' is already in scope</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L170">170</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L171">171</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L180">180</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L223">223</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L227">227</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsLoginModule': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L251">251</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2FCorsAwareNegotiateSecurityFilter.java"></a>
      +<h3>waffle-jna-jakarta - waffle/servlet/CorsAwareNegotiateSecurityFilter.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L54">54</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L59">59</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L61">61</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L68">68</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L74">74</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L78">78</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L82">82</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L87">87</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsAwareNegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html#L95">95</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2FNegotiateSecurityFilter.java"></a>
      +<h3>waffle-jna-jakarta - waffle/servlet/NegotiateSecurityFilter.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L108">108</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L113">113</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L123">123</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'isWindows' is already in scope</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L127">127</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L128">128</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L135">135</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L145">145</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L154">154</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L163">163</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L184">184</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L185">185</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L193">193</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L198">198</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L219">219</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L223">223</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'PRINCIPALSESSIONKEY' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L225">225</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L230">230</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L237">237</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L247">247</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'PRINCIPALSESSIONKEY' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L274">274</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L290">290</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L304">304</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L311">311</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L316">316</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L326">326</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L332">332</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L335">335</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L374">374</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L396">396</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L401">401</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L407">407</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L414">414</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L418">418</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L423">423</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L428">428</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L439">439</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L459">459</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'windows' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L551">551</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'windows' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L552">552</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilter': 'windows' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L554">554</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2FWaffleInfoServlet.java"></a>
      +<h3>waffle-jna-jakarta - waffle/servlet/WaffleInfoServlet.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfoServlet': 'logger' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/WaffleInfoServlet.html#L111">111</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2FWindowsPrincipal.java"></a>
      +<h3>waffle-jna-jakarta - waffle/servlet/WindowsPrincipal.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsPrincipal': 'getGroups' is already in scope</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/WindowsPrincipal.html#L90">90</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsPrincipal': 'getRoles' is already in scope</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/WindowsPrincipal.html#L91">91</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsPrincipal': 'getPrincipalNames' is already in scope</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/WindowsPrincipal.html#L109">109</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsPrincipal': 'getRoleNames' is already in scope</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/WindowsPrincipal.html#L111">111</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2Fspi.2FBasicSecurityFilterProvider.java"></a>
      +<h3>waffle-jna-jakarta - waffle/servlet/spi/BasicSecurityFilterProvider.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'BasicSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/BasicSecurityFilterProvider.html#L74">74</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2Fspi.2FNegotiateSecurityFilterProvider.java"></a>
      +<h3>waffle-jna-jakarta - waffle/servlet/spi/NegotiateSecurityFilterProvider.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'NEGOTIATE' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L78">78</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'NTLM' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L79">79</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'WWW_AUTHENTICATE' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L104">104</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L112">112</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L127">127</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L136">136</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L143">143</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'WWW_AUTHENTICATE' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L144">144</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L147">147</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'PROTOCOLS' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L173">173</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L179">179</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'NEGOTIATE' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L180">180</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'NTLM' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L181">181</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NegotiateSecurityFilterProvider': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L184">184</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fservlet.2Fspi.2FSecurityFilterProviderCollection.java"></a>
      +<h3>waffle-jna-jakarta - waffle/servlet/spi/SecurityFilterProviderCollection.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SecurityFilterProviderCollection': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L63">63</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SecurityFilterProviderCollection': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L82">82</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SecurityFilterProviderCollection': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L92">92</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SecurityFilterProviderCollection': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L93">93</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Futil.2FAuthorizationHeader.java"></a>
      +<h3>waffle-jna-jakarta - waffle/util/AuthorizationHeader.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'AuthorizationHeader': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/AuthorizationHeader.html#L122">122</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Futil.2FCorsPreFlightCheck.java"></a>
      +<h3>waffle-jna-jakarta - waffle/util/CorsPreFlightCheck.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L69">69</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L78">78</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'PRE_FLIGHT_ATTRIBUTE_VALUE' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L84">84</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L91">91</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'CORS_PRE_FLIGHT_HEADERS' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L93">93</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L95">95</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'CorsPreFlightCheck': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L102">102</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Futil.2FNtlmMessage.java"></a>
      +<h3>waffle-jna-jakarta - waffle/util/NtlmMessage.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NtlmMessage': 'NTLM_SSP_SIGNATURE' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/NtlmMessage.html#L44">44</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NtlmMessage': 'NTLM_SSP_SIGNATURE' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/NtlmMessage.html#L48">48</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NtlmMessage': 'NTLM_SSP_SIGNATURE' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/NtlmMessage.html#L49">49</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NtlmMessage': 'NTLM_SSP_SIGNATURE' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/NtlmMessage.html#L66">66</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Futil.2FNtlmServletRequest.java"></a>
      +<h3>waffle-jna-jakarta - waffle/util/NtlmServletRequest.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'NtlmServletRequest': 'getRemoteHost' is already in scope</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/NtlmServletRequest.html#L49">49</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Futil.2FSPNegoMessage.java"></a>
      +<h3>waffle-jna-jakarta - waffle/util/SPNegoMessage.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SPNegoMessage': 'SPENGO_OID' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/SPNegoMessage.html#L70">70</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SPNegoMessage': 'SPENGO_OID' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/SPNegoMessage.html#L75">75</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'SPNegoMessage': 'SPENGO_OID' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/SPNegoMessage.html#L76">76</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Futil.2FWaffleInfo.java"></a>
      +<h3>waffle-jna-jakarta - waffle/util/WaffleInfo.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfo': 'getException' is already in scope</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L260">260</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfo': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L342">342</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfo': 'toPrettyXML' is already in scope</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L356">356</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfo': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L363">363</a></td></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfo': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L366">366</a></td></tr>
      +<tr class="a">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WaffleInfo': 'LOGGER' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L367">367</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fwindows.2Fauth.2Fimpl.2FWindowsAuthProviderImpl.java"></a>
      +<h3>waffle-jna-jakarta - waffle/windows/auth/impl/WindowsAuthProviderImpl.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsAuthProviderImpl': 'CONTINUE_CONTEXT_TIMEOUT' is already in scope because it is declared in an enclosing type</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsAuthProviderImpl.html#L93">93</a></td></tr></table></section><section><a id="waffle-jna-jakarta_-_waffle.2Fwindows.2Fauth.2Fimpl.2FWindowsSecurityContextImpl.java"></a>
      +<h3>waffle-jna-jakarta - waffle/windows/auth/impl/WindowsSecurityContextImpl.java</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Rule</th>
      +<th>Violation</th>
      +<th>Priority</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td><a class="externalLink" href="https://docs.pmd-code.org/pmd-doc-7.7.0/pmd_rules_java_codestyle.html#unnecessaryfullyqualifiedname">UnnecessaryFullyQualifiedName</a></td>
      +<td>Unnecessary qualifier 'WindowsSecurityContextImpl': 'dispose' is already in scope</td>
      +<td>4</td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsSecurityContextImpl.html#L152">152</a></td></tr></table></section></section></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/project-info.html b/waffle-jna-jakarta/project-info.html
      new file mode 100644
      index 0000000000..877b93d766
      --- /dev/null
      +++ b/waffle-jna-jakarta/project-info.html
      @@ -0,0 +1,193 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>Project Information – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a>Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li class="active"><a><span class="icon-chevron-down"></span>Project Information</a>
      +     <ul class="nav nav-list">
      +      <li><a href="ci-management.html">CI Management</a></li>
      +      <li><a href="dependencies.html">Dependencies</a></li>
      +      <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +      <li><a href="dependency-management.html">Dependency Management</a></li>
      +      <li><a href="distribution-management.html">Distribution Management</a></li>
      +      <li><a href="index.html">About</a></li>
      +      <li><a href="issue-management.html">Issue Management</a></li>
      +      <li><a href="licenses.html">Licenses</a></li>
      +      <li><a href="plugin-management.html">Plugin Management</a></li>
      +      <li><a href="plugins.html">Plugins</a></li>
      +      <li><a href="scm.html">Source Code Management</a></li>
      +      <li><a href="summary.html">Summary</a></li>
      +      <li><a href="team.html">Team</a></li>
      +     </ul></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-right"></span>Project Reports</a></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section>
      +<h1>Project Information</h1>
      +<p>This document provides an overview of the various documents and links that are part of this project's general information. All of this content is automatically generated by <a class="externalLink" href="https://maven.apache.org">Maven</a> on behalf of the project.</p><section>
      +<h2>Overview</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Document</th>
      +<th>Description</th></tr>
      +<tr class="b">
      +<td><a href="ci-management.html">CI Management</a></td>
      +<td>This document lists the continuous integration management system of this project for building and testing code on a frequent, regular basis.</td></tr>
      +<tr class="a">
      +<td><a href="dependencies.html">Dependencies</a></td>
      +<td>This document lists the project's dependencies and provides information on each dependency.</td></tr>
      +<tr class="b">
      +<td><a href="dependency-info.html">Maven Coordinates</a></td>
      +<td>This document describes how to include this project as a dependency using various dependency management tools.</td></tr>
      +<tr class="a">
      +<td><a href="dependency-management.html">Dependency Management</a></td>
      +<td>This document lists the dependencies that are defined through dependencyManagement.</td></tr>
      +<tr class="b">
      +<td><a href="distribution-management.html">Distribution Management</a></td>
      +<td>This document provides informations on the distribution management of this project.</td></tr>
      +<tr class="a">
      +<td><a href="index.html">About</a></td>
      +<td>WAFFLE JNA Jakarta Pakage implementation</td></tr>
      +<tr class="b">
      +<td><a href="issue-management.html">Issue Management</a></td>
      +<td>This document provides information on the issue management system used in this project.</td></tr>
      +<tr class="a">
      +<td><a href="licenses.html">Licenses</a></td>
      +<td>This document lists the project license(s).</td></tr>
      +<tr class="b">
      +<td><a href="plugin-management.html">Plugin Management</a></td>
      +<td>This document lists the plugins that are defined through pluginManagement.</td></tr>
      +<tr class="a">
      +<td><a href="plugins.html">Plugins</a></td>
      +<td>This document lists the build plugins and the report plugins used by this project.</td></tr>
      +<tr class="b">
      +<td><a href="scm.html">Source Code Management</a></td>
      +<td>This document lists ways to access the online source repository.</td></tr>
      +<tr class="a">
      +<td><a href="summary.html">Summary</a></td>
      +<td>This document lists other related information of this project</td></tr>
      +<tr class="b">
      +<td><a href="team.html">Team</a></td>
      +<td>This document provides information on the members of this project. These are the individuals who have contributed to the project in one form or another.</td></tr></table></section></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/project-reports.html b/waffle-jna-jakarta/project-reports.html
      new file mode 100644
      index 0000000000..16b609bbaf
      --- /dev/null
      +++ b/waffle-jna-jakarta/project-reports.html
      @@ -0,0 +1,201 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-reports at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>Generated Reports – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a>Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-right"></span>Project Information</a></li>
      +    <li class="active"><a><span class="icon-chevron-down"></span>Project Reports</a>
      +     <ul class="nav nav-list">
      +      <li><a href="checkstyle.html">Checkstyle</a></li>
      +      <li><a href="apidocs/index.html">Javadoc</a></li>
      +      <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +      <li><a href="xref/index.html">Source Xref</a></li>
      +      <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +      <li><a href="cpd.html">CPD</a></li>
      +      <li><a href="pmd.html">PMD</a></li>
      +      <li><a href="surefire.html">Surefire</a></li>
      +      <li><a href="spotbugs.html">SpotBugs</a></li>
      +      <li><a href="jacoco/index.html">JaCoCo</a></li>
      +      <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +      <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +      <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +      <li><a href="taglist.html">Tag List</a></li>
      +      <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +     </ul></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section>
      +<h1>Generated Reports</h1>
      +<p>This document provides an overview of the various reports that are automatically generated by <a class="externalLink" href="https://maven.apache.org">Maven</a> . Each report is briefly described below.</p><section>
      +<h2>Overview</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Document</th>
      +<th>Description</th></tr>
      +<tr class="b">
      +<td><a href="checkstyle.html">Checkstyle</a></td>
      +<td>Report on coding style conventions.</td></tr>
      +<tr class="a">
      +<td><a href="apidocs/index.html">Javadoc</a></td>
      +<td>Javadoc API documentation.</td></tr>
      +<tr class="b">
      +<td><a href="testapidocs/index.html">Test Javadoc</a></td>
      +<td>Test Javadoc API documentation.</td></tr>
      +<tr class="a">
      +<td><a href="xref/index.html">Source Xref</a></td>
      +<td>HTML based, cross-reference version of Java source code.</td></tr>
      +<tr class="b">
      +<td><a href="xref-test/index.html">Test Source Xref</a></td>
      +<td>HTML based, cross-reference version of Java test source code.</td></tr>
      +<tr class="a">
      +<td><a href="cpd.html">CPD</a></td>
      +<td>Duplicate code detection.</td></tr>
      +<tr class="b">
      +<td><a href="pmd.html">PMD</a></td>
      +<td>Verification of coding rules.</td></tr>
      +<tr class="a">
      +<td><a href="surefire.html">Surefire</a></td>
      +<td>Report on the test results of the project.</td></tr>
      +<tr class="b">
      +<td><a href="spotbugs.html">SpotBugs</a></td>
      +<td>Generates a source code report with the SpotBugs Library.</td></tr>
      +<tr class="a">
      +<td><a href="jacoco/index.html">JaCoCo</a></td>
      +<td>JaCoCo Coverage Report.</td></tr>
      +<tr class="b">
      +<td><a href="dependency-updates-report.html">Dependency Updates Report</a></td>
      +<td>Provides details of the dependencies which have updated versions available.</td></tr>
      +<tr class="a">
      +<td><a href="plugin-updates-report.html">Plugin Updates Report</a></td>
      +<td>Provides details of the plugins used by this project which have newer versions available.</td></tr>
      +<tr class="b">
      +<td><a href="property-updates-report.html">Property Updates Report</a></td>
      +<td>Provides details of properties which control versions of dependencies and/or plugins, and indicates any newer versions which are available.</td></tr>
      +<tr class="a">
      +<td><a href="taglist.html">Tag List</a></td>
      +<td>Report on various tags found in the code.</td></tr>
      +<tr class="b">
      +<td><a href="dependency-check-report.html">dependency-check:aggregate</a></td>
      +<td>Generates an aggregate report of all child Maven projects providing details on any published vulnerabilities within project dependencies. This report is a best effort and may contain false positives and false negatives.</td></tr></table></section></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/property-updates-report.html b/waffle-jna-jakarta/property-updates-report.html
      new file mode 100644
      index 0000000000..e91be50020
      --- /dev/null
      +++ b/waffle-jna-jakarta/property-updates-report.html
      @@ -0,0 +1,2862 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.codehaus.mojo:versions-maven-plugin:2.18.0:property-updates-report at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>Property Updates Report – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a>Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-right"></span>Project Information</a></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-down"></span>Project Reports</a>
      +     <ul class="nav nav-list">
      +      <li><a href="checkstyle.html">Checkstyle</a></li>
      +      <li><a href="apidocs/index.html">Javadoc</a></li>
      +      <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +      <li><a href="xref/index.html">Source Xref</a></li>
      +      <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +      <li><a href="cpd.html">CPD</a></li>
      +      <li><a href="pmd.html">PMD</a></li>
      +      <li><a href="surefire.html">Surefire</a></li>
      +      <li><a href="spotbugs.html">SpotBugs</a></li>
      +      <li><a href="jacoco/index.html">JaCoCo</a></li>
      +      <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +      <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +      <li class="active"><a>Property Updates Report</a></li>
      +      <li><a href="taglist.html">Tag List</a></li>
      +      <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +     </ul></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section><a id="Overview"></a>
      +<h1>Overview</h1>
      +<p>This report summarizes newer versions that may be available for your project's various properties associated with artifacts.</p>
      +<table class="table table-striped">
      +<tr class="a">
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td># of properties using the latest version available</td>
      +<td>56</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td># of properties where the next version available is smaller than an incremental version update</td>
      +<td>0</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td># of properties where the next version available is an incremental version update</td>
      +<td>1</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td># of properties where the next version available is a minor version update</td>
      +<td>2</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td># of properties where the next version available is a major version update</td>
      +<td>12</td></tr></tr></table><section><a id="Summary_of_properties_associated_with_artifact_versions"></a>
      +<h2>Summary of properties associated with artifact versions</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<th>Property</th>
      +<th>Current Version</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${antrun.plugin}</td>
      +<td>3.1.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${assembly.plugin}</td>
      +<td>3.7.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${assertj.version}</td>
      +<td>3.27.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${build-helper.plugin}</td>
      +<td>3.6.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${build-tools.version}</td>
      +<td>1.4.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${byte-buddy.version}</td>
      +<td>1.15.11</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${caffeine.version}</td>
      +<td>3.1.8</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${checker-qual.version}</td>
      +<td>3.48.3</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${checkstyle.plugin}</td>
      +<td>3.6.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${checkstyle.version}</td>
      +<td>10.21.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${clean.plugin}</td>
      +<td>3.4.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${commons-math.version}</td>
      +<td>3.6.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${compiler.plugin}</td>
      +<td>3.13.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${coveralls.plugin}</td>
      +<td>4.5.0-M5</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${dependency-check.plugin}</td>
      +<td>11.1.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${dependency.plugin}</td>
      +<td>3.8.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${deploy.plugin}</td>
      +<td>3.1.3</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${directory.plugin}</td>
      +<td>1.2.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${doxia.version}</td>
      +<td>2.0.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${enforcer.plugin}</td>
      +<td>3.5.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${error-prone.version}</td>
      +<td>2.36.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${extra-enforcer-rules.version}</td>
      +<td>1.9.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${fluido.version}</td>
      +<td>2.0.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${formatter.plugin}</td>
      +<td>2.24.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${git-commit-id.plugin}</td>
      +<td>9.0.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${gpg.plugin}</td>
      +<td>3.2.7</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${htmlcompressor.plugin}</td>
      +<td>1.10.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>2.1.0</b></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${htmlcompressor.version}</td>
      +<td>1.9.4</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>2.0.2</b></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${impsort.plugin}</td>
      +<td>1.12.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${install.plugin}</td>
      +<td>3.1.3</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${j2objc.version}</td>
      +<td>3.0.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${jacoco.plugin}</td>
      +<td>0.8.12</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${jar.plugin}</td>
      +<td>3.4.2</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${javadoc.plugin}</td>
      +<td>3.11.2</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${jgit.version}</td>
      +<td>7.1.0.202411261347-r</td>
      +<td></td>
      +<td><b>7.1.0.202411261347-r</b></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${jmh.version}</td>
      +<td>1.37</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${jmockit.version}</td>
      +<td>1.55.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${jna.version}</td>
      +<td>5.16.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${jopt-simple.version}</td>
      +<td>5.0.4</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>6.0-alpha-3</b></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${junit.version}</td>
      +<td>5.11.4</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${jxr.plugin}</td>
      +<td>3.6.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${license.plugin}</td>
      +<td>4.6</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${modernizer.plugin}</td>
      +<td>3.0.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${plexus-utils.version}</td>
      +<td>4.0.2</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${plexus-xml.version}</td>
      +<td>3.0.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.4</b></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${pmd.plugin}</td>
      +<td>3.26.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${powermock.version}</td>
      +<td>2.0.9</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${project-info-reports.plugin}</td>
      +<td>3.8.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${release.plugin}</td>
      +<td>3.1.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${resources.plugin}</td>
      +<td>3.3.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${rewrite.plugin}</td>
      +<td>5.47.3</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${scm.plugin}</td>
      +<td>2.1.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${scm.version}</td>
      +<td>2.1.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${servlet.version}</td>
      +<td>6.1.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${site.plugin}</td>
      +<td>3.21.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-M16</b></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${slf4j.version}</td>
      +<td>2.0.16</td>
      +<td></td>
      +<td></td>
      +<td><b>2.1.0-alpha1</b></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${sonar.plugin}</td>
      +<td>5.0.0.4389</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${sortpom.plugin}</td>
      +<td>4.0.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${source.plugin}</td>
      +<td>3.3.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td><b>4.0.0-beta-1</b></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${spotbugs.plugin}</td>
      +<td>4.8.6.6</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${spotbugs.version}</td>
      +<td>4.8.6</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_warning_sml.gif" /></td>
      +<td>${spotless.plugin}</td>
      +<td>2.43.0</td>
      +<td></td>
      +<td></td>
      +<td><b>2.44.0.BETA4</b></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${surefire.plugin}</td>
      +<td>3.5.2</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${taglist.plugin}</td>
      +<td>3.2.1</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${versions.plugin}</td>
      +<td>2.18.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${wagon.plugin}</td>
      +<td>2.0.2</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${wagon.version}</td>
      +<td>3.5.3</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${war.plugin}</td>
      +<td>3.4.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${whitespace.plugin}</td>
      +<td>1.4.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${yuicompressor.plugin}</td>
      +<td>2.1.0</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td>${yuicompressor.version}</td>
      +<td>2.4.8</td>
      +<td></td>
      +<td></td>
      +<td></td>
      +<td></td></tr>
      +<tr class="a">
      +<th>Status</th>
      +<th>Property</th>
      +<th>Current Version</th>
      +<th>Latest Subincremental</th>
      +<th>Latest Incremental</th>
      +<th>Latest Minor</th>
      +<th>Latest Major</th></tr></table></section></section><section><a id="Properties_associated_with_artifact_versions"></a>
      +<h1>Properties associated with artifact versions</h1>
      +<p>-</p><section><a id="a.24.7Bantrun.plugin.7D"></a>
      +<h2>${antrun.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${antrun.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-antrun-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.1.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.1.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bassembly.plugin.7D"></a>
      +<h2>${assembly.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${assembly.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-assembly-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.7.1</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.7.1</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bassertj.version.7D"></a>
      +<h2>${assertj.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${assertj.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.assertj:assertj-core</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.27.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.27.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bbuild-helper.plugin.7D"></a>
      +<h2>${build-helper.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${build-helper.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.codehaus.mojo:build-helper-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.6.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.6.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bbuild-tools.version.7D"></a>
      +<h2>${build-tools.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${build-tools.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.github.hazendaz:build-tools</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.4.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">1.4.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bbyte-buddy.version.7D"></a>
      +<h2>${byte-buddy.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${byte-buddy.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">net.bytebuddy:byte-buddy<br />net.bytebuddy:byte-buddy-agent</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.15.11</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">1.15.11</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bcaffeine.version.7D"></a>
      +<h2>${caffeine.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${caffeine.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.github.ben-manes.caffeine:caffeine</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.1.8</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.1.8</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bchecker-qual.version.7D"></a>
      +<h2>${checker-qual.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${checker-qual.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.checkerframework:checker-qual</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.48.3</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.48.3</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bcheckstyle.plugin.7D"></a>
      +<h2>${checkstyle.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${checkstyle.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-checkstyle-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.6.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.6.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bcheckstyle.version.7D"></a>
      +<h2>${checkstyle.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${checkstyle.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.puppycrawl.tools:checkstyle</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">10.21.1</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">10.21.1</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bclean.plugin.7D"></a>
      +<h2>${clean.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${clean.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-clean-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.4.0</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.4.0</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bcommons-math.version.7D"></a>
      +<h2>${commons-math.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${commons-math.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.commons:commons-math3</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.6.1</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.6.1</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bcompiler.plugin.7D"></a>
      +<h2>${compiler.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${compiler.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-compiler-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.13.0</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.13.0</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bcoveralls.plugin.7D"></a>
      +<h2>${coveralls.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${coveralls.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.github.hazendaz.maven:coveralls-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">4.5.0-M5</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">4.5.0-M5</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bdependency-check.plugin.7D"></a>
      +<h2>${dependency-check.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${dependency-check.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.owasp:dependency-check-maven</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">11.1.1</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">11.1.1</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bdependency.plugin.7D"></a>
      +<h2>${dependency.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${dependency.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-dependency-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.8.1</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.8.1</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bdeploy.plugin.7D"></a>
      +<h2>${deploy.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${deploy.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-deploy-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.1.3</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.1.3</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bdirectory.plugin.7D"></a>
      +<h2>${directory.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${directory.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.github.hazendaz.maven:directory-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.2.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">1.2.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bdoxia.version.7D"></a>
      +<h2>${doxia.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${doxia.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.doxia:doxia-module-markdown</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.0.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.0.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Benforcer.plugin.7D"></a>
      +<h2>${enforcer.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${enforcer.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-enforcer-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.5.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.5.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Berror-prone.version.7D"></a>
      +<h2>${error-prone.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${error-prone.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.google.errorprone:error_prone_annotations</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.36.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.36.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bextra-enforcer-rules.version.7D"></a>
      +<h2>${extra-enforcer-rules.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${extra-enforcer-rules.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.codehaus.mojo:extra-enforcer-rules</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.9.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">1.9.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bfluido.version.7D"></a>
      +<h2>${fluido.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${fluido.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.skins:maven-fluido-skin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.0.1</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.0.1</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bformatter.plugin.7D"></a>
      +<h2>${formatter.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${formatter.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">net.revelc.code.formatter:formatter-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.24.1</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.24.1</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bgit-commit-id.plugin.7D"></a>
      +<h2>${git-commit-id.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${git-commit-id.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">io.github.git-commit-id:git-commit-id-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">9.0.1</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">9.0.1</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bgpg.plugin.7D"></a>
      +<h2>${gpg.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${gpg.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-gpg-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.2.7</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.2.7</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bhtmlcompressor.plugin.7D"></a>
      +<h2>${htmlcompressor.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${htmlcompressor.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.github.hazendaz.maven:htmlcompressor-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.10.0</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;">2.0.0<br />2.0.1<br />2.0.2<br /><b>2.1.0</b>&#160;<i>Latest Major</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">1.10.0</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bhtmlcompressor.version.7D"></a>
      +<h2>${htmlcompressor.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${htmlcompressor.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.github.hazendaz:htmlcompressor</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.9.4</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;">2.0.0<br />2.0.1<br /><b>2.0.2</b>&#160;<i>Latest Major</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">1.9.4</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bimpsort.plugin.7D"></a>
      +<h2>${impsort.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${impsort.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">net.revelc.code:impsort-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.12.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">1.12.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Binstall.plugin.7D"></a>
      +<h2>${install.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${install.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-install-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.1.3</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.1.3</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bj2objc.version.7D"></a>
      +<h2>${j2objc.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${j2objc.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.google.j2objc:j2objc-annotations</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.0.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.0.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bjacoco.plugin.7D"></a>
      +<h2>${jacoco.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${jacoco.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.jacoco:jacoco-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">0.8.12</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">0.8.12</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bjar.plugin.7D"></a>
      +<h2>${jar.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${jar.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-jar-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.4.2</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.4.2</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bjavadoc.plugin.7D"></a>
      +<h2>${javadoc.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${javadoc.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-javadoc-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.11.2</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.11.2</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bjgit.version.7D"></a>
      +<h2>${jgit.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer incremental version available. Incremental updates are typically passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${jgit.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.eclipse.jgit:org.eclipse.jgit</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">7.1.0.202411261347-r</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">7.1.0.202411261347-r</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bjmh.version.7D"></a>
      +<h2>${jmh.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${jmh.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.openjdk.jmh:jmh-core<br />org.openjdk.jmh:jmh-generator-annprocess</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.37</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">1.37</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bjmockit.version.7D"></a>
      +<h2>${jmockit.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${jmockit.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.github.hazendaz.jmockit:jmockit</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.55.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">1.55.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bjna.version.7D"></a>
      +<h2>${jna.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${jna.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">net.java.dev.jna:jna<br />net.java.dev.jna:jna-platform</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">5.16.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">5.16.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bjopt-simple.version.7D"></a>
      +<h2>${jopt-simple.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${jopt-simple.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">net.sf.jopt-simple:jopt-simple</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">5.0.4</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;">6.0-alpha-1<br />6.0-alpha-2<br /><b>6.0-alpha-3</b>&#160;<i>Latest Major</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">5.0.4</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bjunit.version.7D"></a>
      +<h2>${junit.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${junit.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.junit.jupiter:junit-jupiter-engine</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">5.11.4</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">5.11.4</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bjxr.plugin.7D"></a>
      +<h2>${jxr.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${jxr.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-jxr-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.6.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.6.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Blicense.plugin.7D"></a>
      +<h2>${license.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${license.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.mycila:license-maven-plugin<br />com.mycila:license-maven-plugin-git</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">4.6</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">4.6</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bmodernizer.plugin.7D"></a>
      +<h2>${modernizer.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${modernizer.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.gaul:modernizer-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.0.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.0.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bplexus-utils.version.7D"></a>
      +<h2>${plexus-utils.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${plexus-utils.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.codehaus.plexus:plexus-utils</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">4.0.2</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">4.0.2</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bplexus-xml.version.7D"></a>
      +<h2>${plexus-xml.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${plexus-xml.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.codehaus.plexus:plexus-xml</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.0.1</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;">4.0.0<br />4.0.1<br />4.0.2<br />4.0.3<br /><b>4.0.4</b>&#160;<i>Latest Major</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.0.1</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bpmd.plugin.7D"></a>
      +<h2>${pmd.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${pmd.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-pmd-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.26.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.26.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bpowermock.version.7D"></a>
      +<h2>${powermock.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${powermock.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.powermock:powermock-reflect</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.0.9</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.0.9</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bproject-info-reports.plugin.7D"></a>
      +<h2>${project-info-reports.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${project-info-reports.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-project-info-reports-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.8.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.8.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Brelease.plugin.7D"></a>
      +<h2>${release.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${release.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-release-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.1.1</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.1.1</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bresources.plugin.7D"></a>
      +<h2>${resources.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${resources.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-resources-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.3.1</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.3.1</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Brewrite.plugin.7D"></a>
      +<h2>${rewrite.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${rewrite.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.openrewrite.maven:rewrite-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">5.47.3</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">5.47.3</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bscm.plugin.7D"></a>
      +<h2>${scm.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${scm.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-scm-plugin<br />org.apache.maven.scm:maven-scm-provider-jgit</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.1.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.1.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bscm.version.7D"></a>
      +<h2>${scm.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${scm.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.scm:maven-scm-api<br />org.apache.maven.scm:maven-scm-manager-plexus<br />org.apache.maven.scm:maven-scm-provider-gitexe</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.1.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.1.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bservlet.version.7D"></a>
      +<h2>${servlet.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${servlet.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">jakarta.servlet:jakarta.servlet-api</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">6.1.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">6.1.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bsite.plugin.7D"></a>
      +<h2>${site.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${site.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-site-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.21.0</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;">4.0.0-M1<br />4.0.0-M2<br />4.0.0-M3<br />4.0.0-M4<br />4.0.0-M5<br />4.0.0-M6<br />4.0.0-M7<br />4.0.0-M8<br />4.0.0-M9<br />4.0.0-M10<br />4.0.0-M11<br />4.0.0-M12<br />4.0.0-M13<br />4.0.0-M14<br />4.0.0-M15<br /><b>4.0.0-M16</b>&#160;<i>Latest Major</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.21.0</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bslf4j.version.7D"></a>
      +<h2>${slf4j.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer minor version available. Minor updates are sometimes passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${slf4j.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.slf4j:jcl-over-slf4j<br />org.slf4j:slf4j-api<br />org.slf4j:slf4j-simple</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.0.16</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;">2.1.0-alpha0<br /><b>2.1.0-alpha1</b>&#160;<i>Latest Minor</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.0.16</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bsonar.plugin.7D"></a>
      +<h2>${sonar.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${sonar.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.sonarsource.scanner.maven:sonar-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">5.0.0.4389</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">5.0.0.4389</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bsortpom.plugin.7D"></a>
      +<h2>${sortpom.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${sortpom.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.github.ekryd.sortpom:sortpom-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">4.0.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">4.0.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bsource.plugin.7D"></a>
      +<h2>${source.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer major version available. Major updates are rarely passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${source.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-source-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.3.1</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;"><b>4.0.0-beta-1</b>&#160;<i>Latest Major</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.3.1</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bspotbugs.plugin.7D"></a>
      +<h2>${spotbugs.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${spotbugs.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.github.spotbugs:spotbugs-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">4.8.6.6</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">4.8.6.6</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bspotbugs.version.7D"></a>
      +<h2>${spotbugs.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${spotbugs.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.github.spotbugs:spotbugs-annotations</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">4.8.6</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">4.8.6</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bspotless.plugin.7D"></a>
      +<h2>${spotless.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_warning_sml.gif" />&#160;There is at least one newer minor version available. Minor updates are sometimes passive.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${spotless.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.diffplug.spotless:spotless-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.43.0</td></tr>
      +<tr class="a">
      +<th>Newer versions</th>
      +<td style="text-align: left;">2.44.0.BETA1<br />2.44.0.BETA2<br />2.44.0.BETA3<br /><b>2.44.0.BETA4</b>&#160;<i>Latest Minor</i></td></tr>
      +<tr class="b">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.43.0</td></tr>
      +<tr class="a">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="a">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="b">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bsurefire.plugin.7D"></a>
      +<h2>${surefire.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${surefire.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-surefire-plugin<br />org.apache.maven.plugins:maven-surefire-report-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.5.2</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.5.2</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Btaglist.plugin.7D"></a>
      +<h2>${taglist.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${taglist.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.codehaus.mojo:taglist-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.2.1</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.2.1</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bversions.plugin.7D"></a>
      +<h2>${versions.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${versions.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.codehaus.mojo:versions-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.18.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.18.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bwagon.plugin.7D"></a>
      +<h2>${wagon.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${wagon.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.codehaus.mojo:wagon-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.0.2</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.0.2</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bwagon.version.7D"></a>
      +<h2>${wagon.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${wagon.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.wagon:wagon-scm</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.5.3</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.5.3</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bwar.plugin.7D"></a>
      +<h2>${war.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${war.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">org.apache.maven.plugins:maven-war-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">3.4.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">3.4.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Bwhitespace.plugin.7D"></a>
      +<h2>${whitespace.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${whitespace.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.github.hazendaz.maven:whitespace-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">1.4.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">1.4.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Byuicompressor.plugin.7D"></a>
      +<h2>${yuicompressor.plugin}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${yuicompressor.plugin}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.github.hazendaz.maven:yuicompressor-maven-plugin</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.1.0</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.1.0</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section><section><a id="a.24.7Byuicompressor.version.7D"></a>
      +<h2>${yuicompressor.version}</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Status</th>
      +<td style="text-align: left;"><img src="images/icon_success_sml.gif" />&#160;No newer versions available.</td></tr>
      +<tr class="b">
      +<th>Property</th>
      +<td style="text-align: left;">${yuicompressor.version}</td></tr>
      +<tr class="a">
      +<th>Associated artifacts</th>
      +<td style="text-align: left;">com.yahoo.platform.yui:yuicompressor</td></tr>
      +<tr class="b">
      +<th>Current Version</th>
      +<td style="text-align: left;">2.4.8</td></tr>
      +<tr class="a">
      +<th>Allowed version range</th>
      +<td style="text-align: left;">2.4.8</td></tr>
      +<tr class="b">
      +<th>Infer associations from project</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Only use release versions</th>
      +<td style="text-align: left;">No</td></tr>
      +<tr class="b">
      +<th>Include projects from reactor</th>
      +<td style="text-align: left;">Yes</td></tr>
      +<tr class="a">
      +<th>Always use reactor projects (even if older or -SNAPSHOT)</th>
      +<td style="text-align: left;">Yes</td></tr></table></section></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/scm.html b/waffle-jna-jakarta/scm.html
      new file mode 100644
      index 0000000000..39ce5a9f9b
      --- /dev/null
      +++ b/waffle-jna-jakarta/scm.html
      @@ -0,0 +1,160 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.8.0:scm at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>Source Code Management – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a>Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-down"></span>Project Information</a>
      +     <ul class="nav nav-list">
      +      <li><a href="ci-management.html">CI Management</a></li>
      +      <li><a href="dependencies.html">Dependencies</a></li>
      +      <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +      <li><a href="dependency-management.html">Dependency Management</a></li>
      +      <li><a href="distribution-management.html">Distribution Management</a></li>
      +      <li><a href="index.html">About</a></li>
      +      <li><a href="issue-management.html">Issue Management</a></li>
      +      <li><a href="licenses.html">Licenses</a></li>
      +      <li><a href="plugin-management.html">Plugin Management</a></li>
      +      <li><a href="plugins.html">Plugins</a></li>
      +      <li class="active"><a>Source Code Management</a></li>
      +      <li><a href="summary.html">Summary</a></li>
      +      <li><a href="team.html">Team</a></li>
      +     </ul></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-right"></span>Project Reports</a></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section><a id="Overview"></a>
      +<h1>Overview</h1>
      +<p>This project uses <a class="externalLink" href="https://git-scm.com/">Git</a> to manage its source code. Instructions on Git use can be found at <a class="externalLink" href="https://git-scm.com/doc">https://git-scm.com/doc</a>.</p></section><section><a id="Web_Browser_Access"></a>
      +<h1>Web Browser Access</h1>
      +<p>The following is a link to a browsable version of the source repository:</p>
      +<pre><a class="externalLink" href="https://github.com/Waffle/waffle">https://github.com/Waffle/waffle</a></pre></section><section><a id="Anonymous_Access"></a>
      +<h1>Anonymous Access</h1>
      +<p>The source can be checked out anonymously from Git with this command (See <a class="externalLink" href="https://git-scm.com/docs/git-clone">https://git-scm.com/docs/git-clone</a>):</p>
      +<pre>$ git clone --branch waffle-3.5.1 ssh://git@github.com/waffle/waffle.git</pre></section><section><a id="Developer_Access"></a>
      +<h1>Developer Access</h1>
      +<p>Only project developers can access the Git tree via this method (See <a class="externalLink" href="https://git-scm.com/docs/git-clone">https://git-scm.com/docs/git-clone</a>).</p>
      +<pre>$ git clone --branch waffle-3.5.1 ssh://git@github.com/waffle/waffle.git</pre></section><section><a id="Access_from_Behind_a_Firewall"></a>
      +<h1>Access from Behind a Firewall</h1>
      +<p>Refer to the documentation of the SCM used for more information about access behind a firewall.</p></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/spotbugs.html b/waffle-jna-jakarta/spotbugs.html
      new file mode 100644
      index 0000000000..f7589fe015
      --- /dev/null
      +++ b/waffle-jna-jakarta/spotbugs.html
      @@ -0,0 +1,1193 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from com.github.spotbugs:spotbugs-maven-plugin:4.8.6.6:spotbugs at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>SpotBugs Bug Detector Report – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a>SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-right"></span>Project Information</a></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-down"></span>Project Reports</a>
      +     <ul class="nav nav-list">
      +      <li><a href="checkstyle.html">Checkstyle</a></li>
      +      <li><a href="apidocs/index.html">Javadoc</a></li>
      +      <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +      <li><a href="xref/index.html">Source Xref</a></li>
      +      <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +      <li><a href="cpd.html">CPD</a></li>
      +      <li><a href="pmd.html">PMD</a></li>
      +      <li><a href="surefire.html">Surefire</a></li>
      +      <li class="active"><a>SpotBugs</a></li>
      +      <li><a href="jacoco/index.html">JaCoCo</a></li>
      +      <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +      <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +      <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +      <li><a href="taglist.html">Tag List</a></li>
      +      <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +     </ul></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section>
      +<h1>SpotBugs Bug Detector Report</h1>
      +<p>The following document contains the results of <a class="externalLink" href="https://spotbugs.github.io/">SpotBugs</a></p>
      +<p>SpotBugs Version is <i>4.8.6</i></p>
      +<p>Threshold is <i>medium</i></p>
      +<p>Effort is <i></i></p></section><section>
      +<h1>Summary</h1>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Classes</th>
      +<th>Bugs</th>
      +<th>Errors</th>
      +<th>Missing Classes</th></tr>
      +<tr class="b">
      +<td>91</td>
      +<td>99</td>
      +<td>0</td>
      +<td>2</td></tr></table></section><section>
      +<h1>Files</h1>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Class</th>
      +<th>Bugs</th></tr>
      +<tr class="b">
      +<td><a href="#waffle.jaas.GroupPrincipal">waffle.jaas.GroupPrincipal</a></td>
      +<td>1</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.jaas.GroupPrincipalTest">waffle.jaas.GroupPrincipalTest</a></td>
      +<td>1</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.jaas.RolePrincipalTest">waffle.jaas.RolePrincipalTest</a></td>
      +<td>1</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.jaas.UserPrincipalTest">waffle.jaas.UserPrincipalTest</a></td>
      +<td>1</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.jaas.WindowsLoginModule">waffle.jaas.WindowsLoginModule</a></td>
      +<td>7</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.jaas.WindowsLoginModuleTest$1">waffle.jaas.WindowsLoginModuleTest$1</a></td>
      +<td>1</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.jaas.WindowsLoginModuleTest$2">waffle.jaas.WindowsLoginModuleTest$2</a></td>
      +<td>1</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.servlet.CorsAwareNegotiateSecurityFilterTest">waffle.servlet.CorsAwareNegotiateSecurityFilterTest</a></td>
      +<td>2</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.servlet.CorsAwareNegotiateSecurityFilterTest$1">waffle.servlet.CorsAwareNegotiateSecurityFilterTest$1</a></td>
      +<td>2</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.servlet.CorsAwareNegotiateSecurityFilterTest$2">waffle.servlet.CorsAwareNegotiateSecurityFilterTest$2</a></td>
      +<td>1</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.servlet.NegotiateSecurityFilter">waffle.servlet.NegotiateSecurityFilter</a></td>
      +<td>4</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.servlet.NegotiateSecurityFilterTest">waffle.servlet.NegotiateSecurityFilterTest</a></td>
      +<td>6</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.servlet.NegotiateSecurityFilterTest$4">waffle.servlet.NegotiateSecurityFilterTest$4</a></td>
      +<td>2</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.servlet.NegotiateSecurityFilterTest$5">waffle.servlet.NegotiateSecurityFilterTest$5</a></td>
      +<td>1</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.servlet.WaffleInfoServlet">waffle.servlet.WaffleInfoServlet</a></td>
      +<td>3</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.servlet.WindowsPrincipal">waffle.servlet.WindowsPrincipal</a></td>
      +<td>4</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.servlet.spi.NegotiateSecurityFilterProvider">waffle.servlet.spi.NegotiateSecurityFilterProvider</a></td>
      +<td>2</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.servlet.spi.SecurityFilterProviderCollection">waffle.servlet.spi.SecurityFilterProviderCollection</a></td>
      +<td>5</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.util.AuthorizationHeader">waffle.util.AuthorizationHeader</a></td>
      +<td>4</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.util.CorsPreFlightCheck">waffle.util.CorsPreFlightCheck</a></td>
      +<td>2</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.util.CorsPreFlightCheckTest">waffle.util.CorsPreFlightCheckTest</a></td>
      +<td>8</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.util.CorsPreFlightCheckTest$1">waffle.util.CorsPreFlightCheckTest$1</a></td>
      +<td>2</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.util.CorsPreFlightCheckTest$2">waffle.util.CorsPreFlightCheckTest$2</a></td>
      +<td>2</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.util.CorsPreFlightCheckTest$3">waffle.util.CorsPreFlightCheckTest$3</a></td>
      +<td>2</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.util.CorsPreFlightCheckTest$4">waffle.util.CorsPreFlightCheckTest$4</a></td>
      +<td>2</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.util.CorsPreFlightCheckTest$5">waffle.util.CorsPreFlightCheckTest$5</a></td>
      +<td>2</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.util.CorsPreFlightCheckTest$6">waffle.util.CorsPreFlightCheckTest$6</a></td>
      +<td>2</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.util.CorsPreFlightCheckTest$7">waffle.util.CorsPreFlightCheckTest$7</a></td>
      +<td>2</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.util.CorsPreFlightCheckTest$8">waffle.util.CorsPreFlightCheckTest$8</a></td>
      +<td>2</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.util.NtlmMessage">waffle.util.NtlmMessage</a></td>
      +<td>1</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.util.WaffleInfo">waffle.util.WaffleInfo</a></td>
      +<td>6</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.util.cache.Cache">waffle.util.cache.Cache</a></td>
      +<td>1</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.windows.auth.impl.WindowsAuthProviderImpl">waffle.windows.auth.impl.WindowsAuthProviderImpl</a></td>
      +<td>5</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.windows.auth.impl.WindowsAuthProviderImpl$ContinueContext">waffle.windows.auth.impl.WindowsAuthProviderImpl$ContinueContext</a></td>
      +<td>2</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.windows.auth.impl.WindowsComputerImpl">waffle.windows.auth.impl.WindowsComputerImpl</a></td>
      +<td>1</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.windows.auth.impl.WindowsCredentialsHandleImpl">waffle.windows.auth.impl.WindowsCredentialsHandleImpl</a></td>
      +<td>1</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.windows.auth.impl.WindowsIdentityImpersonationContextImpl">waffle.windows.auth.impl.WindowsIdentityImpersonationContextImpl</a></td>
      +<td>1</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.windows.auth.impl.WindowsIdentityImpl">waffle.windows.auth.impl.WindowsIdentityImpl</a></td>
      +<td>1</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl">waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl</a></td>
      +<td>2</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.windows.auth.impl.WindowsSecurityContextImpl">waffle.windows.auth.impl.WindowsSecurityContextImpl</a></td>
      +<td>3</td></tr></table></section><a name="waffle.jaas.GroupPrincipal"></a><section>
      +<h2>waffle.jaas.GroupPrincipal</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>waffle.jaas.GroupPrincipal doesn't override UserPrincipal.equals(Object)</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EQ_DOESNT_OVERRIDE_EQUALS">EQ_DOESNT_OVERRIDE_EQUALS</a></td>
      +<td><a href="./xref/waffle/jaas/GroupPrincipal.html#L1">1</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.jaas.GroupPrincipalTest"></a><section>
      +<h2>waffle.jaas.GroupPrincipalTest</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Object deserialization is used in waffle.jaas.GroupPrincipalTest.testIsSerializable()</td>
      +<td>SECURITY</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#OBJECT_DESERIALIZATION">OBJECT_DESERIALIZATION</a></td>
      +<td><a href="./xref-test/waffle/jaas/GroupPrincipalTest.html#L101">101</a></td>
      +<td>High</td></tr></table></section><a name="waffle.jaas.RolePrincipalTest"></a><section>
      +<h2>waffle.jaas.RolePrincipalTest</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Object deserialization is used in waffle.jaas.RolePrincipalTest.testIsSerializable()</td>
      +<td>SECURITY</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#OBJECT_DESERIALIZATION">OBJECT_DESERIALIZATION</a></td>
      +<td><a href="./xref-test/waffle/jaas/RolePrincipalTest.html#L101">101</a></td>
      +<td>High</td></tr></table></section><a name="waffle.jaas.UserPrincipalTest"></a><section>
      +<h2>waffle.jaas.UserPrincipalTest</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Object deserialization is used in waffle.jaas.UserPrincipalTest.testIsSerializable()</td>
      +<td>SECURITY</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#OBJECT_DESERIALIZATION">OBJECT_DESERIALIZATION</a></td>
      +<td><a href="./xref-test/waffle/jaas/UserPrincipalTest.html#L101">101</a></td>
      +<td>High</td></tr></table></section><a name="waffle.jaas.WindowsLoginModule"></a><section>
      +<h2>waffle.jaas.WindowsLoginModule</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>waffle.jaas.WindowsLoginModule.initialize(Subject, CallbackHandler, Map, Map) may expose internal representation by storing an externally mutable object into WindowsLoginModule.subject</td>
      +<td>MALICIOUS_CODE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EI_EXPOSE_REP2">EI_EXPOSE_REP2</a></td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L94">94</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.jaas.WindowsLoginModule.login() throws alternative exception from catch block without history</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#LEST_LOST_EXCEPTION_STACK_TRACE">LEST_LOST_EXCEPTION_STACK_TRACE</a></td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L140">140</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>Method waffle.jaas.WindowsLoginModule.login() throws alternative exception from catch block without history</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#LEST_LOST_EXCEPTION_STACK_TRACE">LEST_LOST_EXCEPTION_STACK_TRACE</a></td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L144">144</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.jaas.WindowsLoginModule.login() throws alternative exception from catch block without history</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#LEST_LOST_EXCEPTION_STACK_TRACE">LEST_LOST_EXCEPTION_STACK_TRACE</a></td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L152">152</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>To make log readable, log format () should contain non-sign character.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SLF4J_SIGN_ONLY_FORMAT">SLF4J_SIGN_ONLY_FORMAT</a></td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L139">139</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>To make log readable, log format () should contain non-sign character.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SLF4J_SIGN_ONLY_FORMAT">SLF4J_SIGN_ONLY_FORMAT</a></td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L142">142</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>To make log readable, log format () should contain non-sign character.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SLF4J_SIGN_ONLY_FORMAT">SLF4J_SIGN_ONLY_FORMAT</a></td>
      +<td><a href="./xref/waffle/jaas/WindowsLoginModule.html#L151">151</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.jaas.WindowsLoginModuleTest$1"></a><section>
      +<h2>waffle.jaas.WindowsLoginModuleTest$1</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Exception thrown in class waffle.jaas.WindowsLoginModuleTest$1 at new waffle.jaas.WindowsLoginModuleTest$1(WindowsLoginModuleTest) will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#CT_CONSTRUCTOR_THROW">CT_CONSTRUCTOR_THROW</a></td>
      +<td><a href="./xref-test/waffle/jaas/WindowsLoginModuleTest.html#L241">241</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.jaas.WindowsLoginModuleTest$2"></a><section>
      +<h2>waffle.jaas.WindowsLoginModuleTest$2</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Exception thrown in class waffle.jaas.WindowsLoginModuleTest$2 at new waffle.jaas.WindowsLoginModuleTest$2(WindowsLoginModuleTest) will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#CT_CONSTRUCTOR_THROW">CT_CONSTRUCTOR_THROW</a></td>
      +<td><a href="./xref-test/waffle/jaas/WindowsLoginModuleTest.html#L267">267</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.servlet.CorsAwareNegotiateSecurityFilterTest"></a><section>
      +<h2>waffle.servlet.CorsAwareNegotiateSecurityFilterTest</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Method waffle.servlet.CorsAwareNegotiateSecurityFilterTest.doFilterTestCorsPreflightRequest() uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/servlet/CorsAwareNegotiateSecurityFilterTest.html#L74">74</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.servlet.CorsAwareNegotiateSecurityFilterTest.doFilterTestCorsPreflightRequest() uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/servlet/CorsAwareNegotiateSecurityFilterTest.html#L89">89</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.servlet.CorsAwareNegotiateSecurityFilterTest$1"></a><section>
      +<h2>waffle.servlet.CorsAwareNegotiateSecurityFilterTest$1</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getHeader(String) ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/servlet/CorsAwareNegotiateSecurityFilterTest.html#L78">78</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getMethod() ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/servlet/CorsAwareNegotiateSecurityFilterTest.html#L76">76</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.servlet.CorsAwareNegotiateSecurityFilterTest$2"></a><section>
      +<h2>waffle.servlet.CorsAwareNegotiateSecurityFilterTest$2</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Exception thrown in class waffle.servlet.CorsAwareNegotiateSecurityFilterTest$2 at new waffle.servlet.CorsAwareNegotiateSecurityFilterTest$2(CorsAwareNegotiateSecurityFilterTest) will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#CT_CONSTRUCTOR_THROW">CT_CONSTRUCTOR_THROW</a></td>
      +<td><a href="./xref-test/waffle/servlet/CorsAwareNegotiateSecurityFilterTest.html#L93">93</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.servlet.NegotiateSecurityFilter"></a><section>
      +<h2>waffle.servlet.NegotiateSecurityFilter</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Method waffle.servlet.NegotiateSecurityFilter.init(FilterConfig) is excessively complex, with a cyclomatic complexity of 68</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#CC_CYCLOMATIC_COMPLEXITY">CC_CYCLOMATIC_COMPLEXITY</a></td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L324">324</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.servlet.NegotiateSecurityFilter.init(FilterConfig) accesses list or array with constant index</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#CLI_CONSTANT_LIST_INDEX">CLI_CONSTANT_LIST_INDEX</a></td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L418">418</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>Unconstrained method waffle.servlet.NegotiateSecurityFilter.sendUnauthorized(HttpServletResponse, boolean) converts checked exception to unchecked</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EXS_EXCEPTION_SOFTENING_NO_CONSTRAINTS">EXS_EXCEPTION_SOFTENING_NO_CONSTRAINTS</a></td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L490">490</a></td>
      +<td>High</td></tr>
      +<tr class="a">
      +<td>To make log readable, log format () should contain non-sign character.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SLF4J_SIGN_ONLY_FORMAT">SLF4J_SIGN_ONLY_FORMAT</a></td>
      +<td><a href="./xref/waffle/servlet/NegotiateSecurityFilter.html#L185">185</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.servlet.NegotiateSecurityFilterTest"></a><section>
      +<h2>waffle.servlet.NegotiateSecurityFilterTest</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Method waffle.servlet.NegotiateSecurityFilterTest.testCorsAndBearerAuthorizationI_init(FilterConfig) uses AccessibleObject.setAccessible to modify accessibility of classes</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RFI_SET_ACCESSIBLE">RFI_SET_ACCESSIBLE</a></td>
      +<td><a href="./xref-test/waffle/servlet/NegotiateSecurityFilterTest.html#L115">115</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.servlet.NegotiateSecurityFilterTest.testCorsAndBearerAuthorizationI_init(FilterConfig) uses AccessibleObject.setAccessible to modify accessibility of classes</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RFI_SET_ACCESSIBLE">RFI_SET_ACCESSIBLE</a></td>
      +<td><a href="./xref-test/waffle/servlet/NegotiateSecurityFilterTest.html#L116">116</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>Method waffle.servlet.NegotiateSecurityFilterTest.testCorsAndBearerAuthorizationI_init(FilterConfig) uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/servlet/NegotiateSecurityFilterTest.html#L86">86</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.servlet.NegotiateSecurityFilterTest.testCorsAndBearerAuthorizationI_init(FilterConfig) uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/servlet/NegotiateSecurityFilterTest.html#L122">122</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>Method waffle.servlet.NegotiateSecurityFilterTest.testExcludeCorsAndOAUTHBearerAuthorization_doFilter(HttpServletRequest, HttpServletResponse, FilterChain, FilterConfig) uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/servlet/NegotiateSecurityFilterTest.html#L152">152</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.servlet.NegotiateSecurityFilterTest.testExcludeCorsAndOAUTHBearerAuthorization_doFilter(HttpServletRequest, HttpServletResponse, FilterChain, FilterConfig) uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/servlet/NegotiateSecurityFilterTest.html#L182">182</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.servlet.NegotiateSecurityFilterTest$4"></a><section>
      +<h2>waffle.servlet.NegotiateSecurityFilterTest$4</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Method new waffle.servlet.NegotiateSecurityFilterTest$4(NegotiateSecurityFilterTest, FilterConfig, HttpServletRequest) needlessly boxes a boolean constant</td>
      +<td>PERFORMANCE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#NAB_NEEDLESS_BOOLEAN_CONSTANT_CONVERSION">NAB_NEEDLESS_BOOLEAN_CONSTANT_CONVERSION</a></td>
      +<td><a href="./xref-test/waffle/servlet/NegotiateSecurityFilterTest.html#L173">173</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getHeader(String) ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/servlet/NegotiateSecurityFilterTest.html#L174">174</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.servlet.NegotiateSecurityFilterTest$5"></a><section>
      +<h2>waffle.servlet.NegotiateSecurityFilterTest$5</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Exception thrown in class waffle.servlet.NegotiateSecurityFilterTest$5 at new waffle.servlet.NegotiateSecurityFilterTest$5(NegotiateSecurityFilterTest, FilterChain, HttpServletRequest, HttpServletResponse) will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#CT_CONSTRUCTOR_THROW">CT_CONSTRUCTOR_THROW</a></td>
      +<td><a href="./xref-test/waffle/servlet/NegotiateSecurityFilterTest.html#L184">184</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.servlet.WaffleInfoServlet"></a><section>
      +<h2>waffle.servlet.WaffleInfoServlet</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Unconstrained method waffle.servlet.WaffleInfoServlet.getWaffleInfoResponse(HttpServletRequest, HttpServletResponse) converts checked exception to unchecked</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EXS_EXCEPTION_SOFTENING_NO_CONSTRAINTS">EXS_EXCEPTION_SOFTENING_NO_CONSTRAINTS</a></td>
      +<td><a href="./xref/waffle/servlet/WaffleInfoServlet.html#L112">112</a></td>
      +<td>High</td></tr>
      +<tr class="a">
      +<td>Method waffle.servlet.WaffleInfoServlet.getWaffleInfoResponse(HttpServletRequest, HttpServletResponse) throws alternative exception from catch block without history</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#LEST_LOST_EXCEPTION_STACK_TRACE">LEST_LOST_EXCEPTION_STACK_TRACE</a></td>
      +<td><a href="./xref/waffle/servlet/WaffleInfoServlet.html#L112">112</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>To make log readable, log format () should contain non-sign character.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SLF4J_SIGN_ONLY_FORMAT">SLF4J_SIGN_ONLY_FORMAT</a></td>
      +<td><a href="./xref/waffle/servlet/WaffleInfoServlet.html#L111">111</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.servlet.WindowsPrincipal"></a><section>
      +<h2>waffle.servlet.WindowsPrincipal</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Class waffle.servlet.WindowsPrincipal defines List based fields but uses them like Sets</td>
      +<td>PERFORMANCE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#DLC_DUBIOUS_LIST_COLLECTION">DLC_DUBIOUS_LIST_COLLECTION</a></td>
      +<td><a href="./xref/waffle/servlet/WindowsPrincipal.html#L238">238</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>waffle.servlet.WindowsPrincipal.getGroups() may expose internal representation by returning WindowsPrincipal.groups</td>
      +<td>MALICIOUS_CODE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EI_EXPOSE_REP">EI_EXPOSE_REP</a></td>
      +<td><a href="./xref/waffle/servlet/WindowsPrincipal.html#L156">156</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>Class waffle.servlet.WindowsPrincipal 'overloads' a method with both instance and static versions</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#MOM_MISLEADING_OVERLOAD_MODEL">MOM_MISLEADING_OVERLOAD_MODEL</a></td>
      +<td><a href="./xref/waffle/servlet/WindowsPrincipal.html#L156">156</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.servlet.WindowsPrincipal.getGroups(IWindowsAccount[]) does not presize the allocation of a collection</td>
      +<td>PERFORMANCE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#PSC_PRESIZE_COLLECTIONS">PSC_PRESIZE_COLLECTIONS</a></td>
      +<td><a href="./xref/waffle/servlet/WindowsPrincipal.html#L127">127</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.servlet.spi.NegotiateSecurityFilterProvider"></a><section>
      +<h2>waffle.servlet.spi.NegotiateSecurityFilterProvider</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>waffle.servlet.spi.NegotiateSecurityFilterProvider.getProtocols() may expose internal representation by returning NegotiateSecurityFilterProvider.protocolsList</td>
      +<td>MALICIOUS_CODE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EI_EXPOSE_REP">EI_EXPOSE_REP</a></td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L88">88</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>waffle.servlet.spi.NegotiateSecurityFilterProvider.setProtocols(List) may expose internal representation by storing an externally mutable object into NegotiateSecurityFilterProvider.protocolsList</td>
      +<td>MALICIOUS_CODE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EI_EXPOSE_REP2">EI_EXPOSE_REP2</a></td>
      +<td><a href="./xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html#L98">98</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.servlet.spi.SecurityFilterProviderCollection"></a><section>
      +<h2>waffle.servlet.spi.SecurityFilterProviderCollection</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Exception thrown in class waffle.servlet.spi.SecurityFilterProviderCollection at new waffle.servlet.spi.SecurityFilterProviderCollection(String[], IWindowsAuthProvider) will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#CT_CONSTRUCTOR_THROW">CT_CONSTRUCTOR_THROW</a></td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L89">89</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Unconstrained method new waffle.servlet.spi.SecurityFilterProviderCollection(String[], IWindowsAuthProvider) converts checked exception to unchecked</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EXS_EXCEPTION_SOFTENING_NO_CONSTRAINTS">EXS_EXCEPTION_SOFTENING_NO_CONSTRAINTS</a></td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L89">89</a></td>
      +<td>High</td></tr>
      +<tr class="b">
      +<td>Method waffle.servlet.spi.SecurityFilterProviderCollection.doFilter(HttpServletRequest, HttpServletResponse) appears to call the same method on the same object redundantly</td>
      +<td>PERFORMANCE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS">PRMC_POSSIBLY_REDUNDANT_METHOD_CALLS</a></td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L156">156</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method new waffle.servlet.spi.SecurityFilterProviderCollection(SecurityFilterProvider[]) does not presize the allocation of a collection</td>
      +<td>PERFORMANCE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#PSC_PRESIZE_COLLECTIONS">PSC_PRESIZE_COLLECTIONS</a></td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L64">64</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>To make log readable, log format () should contain non-sign character.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SLF4J_SIGN_ONLY_FORMAT">SLF4J_SIGN_ONLY_FORMAT</a></td>
      +<td><a href="./xref/waffle/servlet/spi/SecurityFilterProviderCollection.html#L93">93</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.AuthorizationHeader"></a><section>
      +<h2>waffle.util.AuthorizationHeader</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Method waffle.util.AuthorizationHeader.getTokenBytes() throws alternative exception from catch block without history</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#LEST_LOST_EXCEPTION_STACK_TRACE">LEST_LOST_EXCEPTION_STACK_TRACE</a></td>
      +<td><a href="./xref/waffle/util/AuthorizationHeader.html#L123">123</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.util.AuthorizationHeader.isBearerAuthorizationHeader() makes literal string comparisons passing the literal as an argument</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#LSC_LITERAL_STRING_COMPARISON">LSC_LITERAL_STRING_COMPARISON</a></td>
      +<td><a href="./xref/waffle/util/AuthorizationHeader.html#L191">191</a></td>
      +<td>High</td></tr>
      +<tr class="b">
      +<td>To make log readable, log format () should contain non-sign character.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SLF4J_SIGN_ONLY_FORMAT">SLF4J_SIGN_ONLY_FORMAT</a></td>
      +<td><a href="./xref/waffle/util/AuthorizationHeader.html#L122">122</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.util.AuthorizationHeader.isBearerAuthorizationHeader() compares string without case after enforcing a case</td>
      +<td>PERFORMANCE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SPP_USELESS_CASING">SPP_USELESS_CASING</a></td>
      +<td><a href="./xref/waffle/util/AuthorizationHeader.html#L191">191</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.CorsPreFlightCheck"></a><section>
      +<h2>waffle.util.CorsPreFlightCheck</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Method waffle.util.CorsPreFlightCheck.isPreflight(HttpServletRequest) makes literal string comparisons passing the literal as an argument</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#LSC_LITERAL_STRING_COMPARISON">LSC_LITERAL_STRING_COMPARISON</a></td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L74">74</a></td>
      +<td>High</td></tr>
      +<tr class="a">
      +<td>Method waffle.util.CorsPreFlightCheck.isPreflight(HttpServletRequest) makes literal string comparisons passing the literal as an argument</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#LSC_LITERAL_STRING_COMPARISON">LSC_LITERAL_STRING_COMPARISON</a></td>
      +<td><a href="./xref/waffle/util/CorsPreFlightCheck.html#L84">84</a></td>
      +<td>High</td></tr></table></section><a name="waffle.util.CorsPreFlightCheckTest"></a><section>
      +<h2>waffle.util.CorsPreFlightCheckTest</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Method waffle.util.CorsPreFlightCheckTest.testCorsMethodPreflightHeadersPresent() uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L132">132</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.util.CorsPreFlightCheckTest.testCorsMethodPreflightHeadersPresent() uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L143">143</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>Method waffle.util.CorsPreFlightCheckTest.testExpectedCorsPreflightHeadersPresent() uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L62">62</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.util.CorsPreFlightCheckTest.testExpectedCorsPreflightHeadersPresent() uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L77">77</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>Method waffle.util.CorsPreFlightCheckTest.testNoCorsHeadersPreflightHeaderPresent() uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L160">160</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.util.CorsPreFlightCheckTest.testNoCorsHeadersPreflightHeaderPresent() uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L176">176</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>Method waffle.util.CorsPreFlightCheckTest.testNoCorsPreflightOriginPresent() uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L96">96</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.util.CorsPreFlightCheckTest.testNoCorsPreflightOriginPresent() uses a Side Effect Constructor</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SEC_SIDE_EFFECT_CONSTRUCTOR">SEC_SIDE_EFFECT_CONSTRUCTOR</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L112">112</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.CorsPreFlightCheckTest$1"></a><section>
      +<h2>waffle.util.CorsPreFlightCheckTest$1</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getHeader(String) ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L66">66</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getMethod() ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L64">64</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.CorsPreFlightCheckTest$2"></a><section>
      +<h2>waffle.util.CorsPreFlightCheckTest$2</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getHeader(String) ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L81">81</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getMethod() ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L79">79</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.CorsPreFlightCheckTest$3"></a><section>
      +<h2>waffle.util.CorsPreFlightCheckTest$3</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getHeader(String) ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L100">100</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getMethod() ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L98">98</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.CorsPreFlightCheckTest$4"></a><section>
      +<h2>waffle.util.CorsPreFlightCheckTest$4</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getHeader(String) ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L116">116</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getMethod() ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L114">114</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.CorsPreFlightCheckTest$5"></a><section>
      +<h2>waffle.util.CorsPreFlightCheckTest$5</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getHeader(String) ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L136">136</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getMethod() ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L134">134</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.CorsPreFlightCheckTest$6"></a><section>
      +<h2>waffle.util.CorsPreFlightCheckTest$6</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getHeader(String) ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L147">147</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getMethod() ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L145">145</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.CorsPreFlightCheckTest$7"></a><section>
      +<h2>waffle.util.CorsPreFlightCheckTest$7</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getHeader(String) ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L165">165</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getMethod() ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L162">162</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.CorsPreFlightCheckTest$8"></a><section>
      +<h2>waffle.util.CorsPreFlightCheckTest$8</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getHeader(String) ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L181">181</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Return value of jakarta.servlet.http.HttpServletRequest.getMethod() ignored, but method has no side effect</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT">RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT</a></td>
      +<td><a href="./xref-test/waffle/util/CorsPreFlightCheckTest.html#L178">178</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.NtlmMessage"></a><section>
      +<h2>waffle.util.NtlmMessage</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Hard coded cryptographic key found</td>
      +<td>SECURITY</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#HARD_CODE_KEY">HARD_CODE_KEY</a></td>
      +<td><a href="./xref/waffle/util/NtlmMessage.html#L33">33-74</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.WaffleInfo"></a><section>
      +<h2>waffle.util.WaffleInfo</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>This use of org/slf4j/Logger.error(Ljava/lang/String;Ljava/lang/Object;)V might be used to include CRLF characters into log messages</td>
      +<td>SECURITY</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#CRLF_INJECTION_LOGS">CRLF_INJECTION_LOGS</a></td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L342">342</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Format should be constant. Use placeholder to reduce the needless cost of parameter construction. see http://www.slf4j.org/faq.html#logging_performance</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SLF4J_FORMAT_SHOULD_BE_CONST">SLF4J_FORMAT_SHOULD_BE_CONST</a></td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L363">363</a></td>
      +<td>High</td></tr>
      +<tr class="b">
      +<td>Format should be constant. Use placeholder to reduce the needless cost of parameter construction. see http://www.slf4j.org/faq.html#logging_performance</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SLF4J_FORMAT_SHOULD_BE_CONST">SLF4J_FORMAT_SHOULD_BE_CONST</a></td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L366">366</a></td>
      +<td>High</td></tr>
      +<tr class="a">
      +<td>To make log readable, log format () should contain non-sign character.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#SLF4J_SIGN_ONLY_FORMAT">SLF4J_SIGN_ONLY_FORMAT</a></td>
      +<td><a href="./xref/waffle/util/WaffleInfo.html#L367">367</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.util.cache.Cache"></a><section>
      +<h2>waffle.util.cache.Cache</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Unconstrained method waffle.util.cache.Cache.newCache(int) converts checked exception to unchecked</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EXS_EXCEPTION_SOFTENING_NO_CONSTRAINTS">EXS_EXCEPTION_SOFTENING_NO_CONSTRAINTS</a></td>
      +<td><a href="./xref/waffle/util/cache/Cache.html#L84">84</a></td>
      +<td>High</td></tr></table></section><a name="waffle.windows.auth.impl.WindowsAuthProviderImpl"></a><section>
      +<h2>waffle.windows.auth.impl.WindowsAuthProviderImpl</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Exception thrown in class waffle.windows.auth.impl.WindowsAuthProviderImpl at new waffle.windows.auth.impl.WindowsAuthProviderImpl() will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#CT_CONSTRUCTOR_THROW">CT_CONSTRUCTOR_THROW</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsAuthProviderImpl.html#L93">93</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Exception thrown in class waffle.windows.auth.impl.WindowsAuthProviderImpl at new waffle.windows.auth.impl.WindowsAuthProviderImpl(int) will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#CT_CONSTRUCTOR_THROW">CT_CONSTRUCTOR_THROW</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsAuthProviderImpl.html#L103">103</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>Constrained method waffle.windows.auth.impl.WindowsAuthProviderImpl.getCurrentComputer() converts checked exception to unchecked</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EXS_EXCEPTION_SOFTENING_NO_CHECKED">EXS_EXCEPTION_SOFTENING_NO_CHECKED</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsAuthProviderImpl.html#L187">187</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Method waffle.windows.auth.impl.WindowsAuthProviderImpl.getCurrentComputer() calls InetAddress.getLocalHost(), which may be a security risk</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#MDM_INETADDRESS_GETLOCALHOST">MDM_INETADDRESS_GETLOCALHOST</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsAuthProviderImpl.html#L185">185</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>Method waffle.windows.auth.impl.WindowsAuthProviderImpl.getDomains() does not presize the allocation of a collection</td>
      +<td>PERFORMANCE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#PSC_PRESIZE_COLLECTIONS">PSC_PRESIZE_COLLECTIONS</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsAuthProviderImpl.html#L196">196</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.windows.auth.impl.WindowsAuthProviderImpl$ContinueContext"></a><section>
      +<h2>waffle.windows.auth.impl.WindowsAuthProviderImpl$ContinueContext</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Class waffle.windows.auth.impl.WindowsAuthProviderImpl$ContinueContext defines fields that are used only as locals</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#FCBL_FIELD_COULD_BE_LOCAL">FCBL_FIELD_COULD_BE_LOCAL</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsAuthProviderImpl.html#L81">81</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>Class waffle.windows.auth.impl.WindowsAuthProviderImpl$ContinueContext defines fields that are used only as locals</td>
      +<td>CORRECTNESS</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#FCBL_FIELD_COULD_BE_LOCAL">FCBL_FIELD_COULD_BE_LOCAL</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsAuthProviderImpl.html#L82">82</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.windows.auth.impl.WindowsComputerImpl"></a><section>
      +<h2>waffle.windows.auth.impl.WindowsComputerImpl</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Method waffle.windows.auth.impl.WindowsComputerImpl.getGroups() does not presize the allocation of a collection</td>
      +<td>PERFORMANCE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#PSC_PRESIZE_COLLECTIONS">PSC_PRESIZE_COLLECTIONS</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsComputerImpl.html#L67">67</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.windows.auth.impl.WindowsCredentialsHandleImpl"></a><section>
      +<h2>waffle.windows.auth.impl.WindowsCredentialsHandleImpl</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>waffle.windows.auth.impl.WindowsCredentialsHandleImpl.getHandle() may expose internal representation by returning WindowsCredentialsHandleImpl.handle</td>
      +<td>MALICIOUS_CODE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EI_EXPOSE_REP">EI_EXPOSE_REP</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html#L119">119</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.windows.auth.impl.WindowsIdentityImpersonationContextImpl"></a><section>
      +<h2>waffle.windows.auth.impl.WindowsIdentityImpersonationContextImpl</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Exception thrown in class waffle.windows.auth.impl.WindowsIdentityImpersonationContextImpl at new waffle.windows.auth.impl.WindowsIdentityImpersonationContextImpl(WinNT$HANDLE) will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#CT_CONSTRUCTOR_THROW">CT_CONSTRUCTOR_THROW</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.html#L46">46</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.windows.auth.impl.WindowsIdentityImpl"></a><section>
      +<h2>waffle.windows.auth.impl.WindowsIdentityImpl</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>new waffle.windows.auth.impl.WindowsIdentityImpl(WinNT$HANDLE) may expose internal representation by storing an externally mutable object into WindowsIdentityImpl.windowsIdentity</td>
      +<td>MALICIOUS_CODE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EI_EXPOSE_REP2">EI_EXPOSE_REP2</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsIdentityImpl.html#L60">60</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl"></a><section>
      +<h2>waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>Exception thrown in class waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl at new waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl(Sspi$CtxtHandle) will leave the constructor. The object under construction remains partially initialized and may be vulnerable to Finalizer attacks.</td>
      +<td>BAD_PRACTICE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#CT_CONSTRUCTOR_THROW">CT_CONSTRUCTOR_THROW</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html#L50">50</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>new waffle.windows.auth.impl.WindowsSecurityContextImpersonationContextImpl(Sspi$CtxtHandle) may expose internal representation by storing an externally mutable object into WindowsSecurityContextImpersonationContextImpl.ctx</td>
      +<td>MALICIOUS_CODE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EI_EXPOSE_REP2">EI_EXPOSE_REP2</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html#L53">53</a></td>
      +<td>Medium</td></tr></table></section><a name="waffle.windows.auth.impl.WindowsSecurityContextImpl"></a><section>
      +<h2>waffle.windows.auth.impl.WindowsSecurityContextImpl</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Bug</th>
      +<th>Category</th>
      +<th>Details</th>
      +<th>Line</th>
      +<th>Priority</th></tr>
      +<tr class="b">
      +<td>waffle.windows.auth.impl.WindowsSecurityContextImpl.getHandle() may expose internal representation by returning WindowsSecurityContextImpl.ctx</td>
      +<td>MALICIOUS_CODE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EI_EXPOSE_REP">EI_EXPOSE_REP</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsSecurityContextImpl.html#L195">195</a></td>
      +<td>Medium</td></tr>
      +<tr class="a">
      +<td>waffle.windows.auth.impl.WindowsSecurityContextImpl.setSecurityContext(Sspi$CtxtHandle) may expose internal representation by storing an externally mutable object into WindowsSecurityContextImpl.ctx</td>
      +<td>MALICIOUS_CODE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#EI_EXPOSE_REP2">EI_EXPOSE_REP2</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsSecurityContextImpl.html#L235">235</a></td>
      +<td>Medium</td></tr>
      +<tr class="b">
      +<td>Class waffle.windows.auth.impl.WindowsSecurityContextImpl 'overloads' a method with both instance and static versions</td>
      +<td>STYLE</td>
      +<td><a class="externalLink" href="https://spotbugs.readthedocs.io/en/latest/bugDescriptions.html#MOM_MISLEADING_OVERLOAD_MODEL">MOM_MISLEADING_OVERLOAD_MODEL</a></td>
      +<td><a href="./xref/waffle/windows/auth/impl/WindowsSecurityContextImpl.html#L168">168-175</a></td>
      +<td>Medium</td></tr></table></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/summary.html b/waffle-jna-jakarta/summary.html
      new file mode 100644
      index 0000000000..d0781a924a
      --- /dev/null
      +++ b/waffle-jna-jakarta/summary.html
      @@ -0,0 +1,193 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.8.0:summary at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>Project Summary – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a>Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-down"></span>Project Information</a>
      +     <ul class="nav nav-list">
      +      <li><a href="ci-management.html">CI Management</a></li>
      +      <li><a href="dependencies.html">Dependencies</a></li>
      +      <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +      <li><a href="dependency-management.html">Dependency Management</a></li>
      +      <li><a href="distribution-management.html">Distribution Management</a></li>
      +      <li><a href="index.html">About</a></li>
      +      <li><a href="issue-management.html">Issue Management</a></li>
      +      <li><a href="licenses.html">Licenses</a></li>
      +      <li><a href="plugin-management.html">Plugin Management</a></li>
      +      <li><a href="plugins.html">Plugins</a></li>
      +      <li><a href="scm.html">Source Code Management</a></li>
      +      <li class="active"><a>Summary</a></li>
      +      <li><a href="team.html">Team</a></li>
      +     </ul></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-right"></span>Project Reports</a></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section><a id="Project_Summary"></a>
      +<h1>Project Summary</h1><section><a id="Project_Information"></a>
      +<h2>Project Information</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Field</th>
      +<th>Value</th></tr>
      +<tr class="b">
      +<td>Name</td>
      +<td>waffle-jna-jakarta</td></tr>
      +<tr class="a">
      +<td>Description</td>
      +<td>WAFFLE JNA Jakarta Pakage implementation</td></tr>
      +<tr class="b">
      +<td>Homepage</td>
      +<td><a class="externalLink" href="https://waffle.github.io/waffle/">https://waffle.github.io/waffle/</a></td></tr></table></section><section><a id="Project_Organization"></a>
      +<h2>Project Organization</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Field</th>
      +<th>Value</th></tr>
      +<tr class="b">
      +<td>Name</td>
      +<td>com.github.waffle</td></tr>
      +<tr class="a">
      +<td>URL</td>
      +<td><a class="externalLink" href="https://github.com/waffle/">https://github.com/waffle/</a></td></tr></table></section><section><a id="Build_Information"></a>
      +<h2>Build Information</h2>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Field</th>
      +<th>Value</th></tr>
      +<tr class="b">
      +<td>GroupId</td>
      +<td>com.github.waffle</td></tr>
      +<tr class="a">
      +<td>ArtifactId</td>
      +<td>waffle-jna-jakarta</td></tr>
      +<tr class="b">
      +<td>Version</td>
      +<td>3.5.1</td></tr>
      +<tr class="a">
      +<td>Type</td>
      +<td>jar</td></tr>
      +<tr class="b">
      +<td>Java Version</td>
      +<td>11</td></tr></table></section></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/surefire.html b/waffle-jna-jakarta/surefire.html
      new file mode 100644
      index 0000000000..b4f110dd58
      --- /dev/null
      +++ b/waffle-jna-jakarta/surefire.html
      @@ -0,0 +1,680 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-surefire-report-plugin:3.5.2:report at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>Surefire Report – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a>Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-right"></span>Project Information</a></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-down"></span>Project Reports</a>
      +     <ul class="nav nav-list">
      +      <li><a href="checkstyle.html">Checkstyle</a></li>
      +      <li><a href="apidocs/index.html">Javadoc</a></li>
      +      <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +      <li><a href="xref/index.html">Source Xref</a></li>
      +      <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +      <li><a href="cpd.html">CPD</a></li>
      +      <li><a href="pmd.html">PMD</a></li>
      +      <li class="active"><a>Surefire</a></li>
      +      <li><a href="spotbugs.html">SpotBugs</a></li>
      +      <li><a href="jacoco/index.html">JaCoCo</a></li>
      +      <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +      <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +      <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +      <li><a href="taglist.html">Tag List</a></li>
      +      <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +     </ul></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +
      +<script>
      +function toggleDisplay(elementId) {
      + var elm = document.getElementById(elementId + '-error');
      + if (elm == null) {
      +  elm = document.getElementById(elementId + '-failure');
      + }
      + if (elm && typeof elm.style != "undefined") {
      +  if (elm.style.display == "none") {
      +   elm.style.display = "";
      +   document.getElementById(elementId + '-off').style.display = "none";
      +   document.getElementById(elementId + '-on').style.display = "inline";
      +  } else if (elm.style.display == "") {   elm.style.display = "none";
      +   document.getElementById(elementId + '-off').style.display = "inline";
      +   document.getElementById(elementId + '-on').style.display = "none";
      +  }
      + }
      + }
      +</script>
      +<section><a id="Surefire_Report"></a>
      +<h1>Surefire Report</h1><section><a id="Summary"></a>
      +<h2>Summary</h2>
      +<p>[<a href="#Summary">Summary</a>] [<a href="#Package_List">Package List</a>] [<a href="#Test_Cases">Test Cases</a>]</p><br />
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Tests</th>
      +<th>Errors</th>
      +<th>Failures</th>
      +<th>Skipped</th>
      +<th>Success Rate</th>
      +<th>Time</th></tr>
      +<tr class="b">
      +<td>52</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>1.107 s</td></tr></table><br />
      +<p>Note: failures are anticipated and checked for with assertions while errors are unanticipated.</p><br /></section><section><a id="Package_List"></a>
      +<h2>Package List</h2>
      +<p>[<a href="#Summary">Summary</a>] [<a href="#Package_List">Package List</a>] [<a href="#Test_Cases">Test Cases</a>]</p><br />
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Package</th>
      +<th>Tests</th>
      +<th>Errors</th>
      +<th>Failures</th>
      +<th>Skipped</th>
      +<th>Success Rate</th>
      +<th>Time</th></tr>
      +<tr class="b">
      +<td><a href="#waffle.servlet">waffle.servlet</a></td>
      +<td>5</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.219 s</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.windows.auth">waffle.windows.auth</a></td>
      +<td>6</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.032 s</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.util">waffle.util</a></td>
      +<td>9</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.144 s</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.jaas">waffle.jaas</a></td>
      +<td>29</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.705 s</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.servlet.spi">waffle.servlet.spi</a></td>
      +<td>3</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.007 s</td></tr></table><br />
      +<p>Note: package statistics are not computed recursively, they only sum up all of its testsuites numbers.</p><section><a id="waffle.servlet"></a>
      +<h3>waffle.servlet</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>-</th>
      +<th>Class</th>
      +<th>Tests</th>
      +<th>Errors</th>
      +<th>Failures</th>
      +<th>Skipped</th>
      +<th>Success Rate</th>
      +<th>Time</th></tr>
      +<tr class="b">
      +<td><a href="#waffle.servlet.CorsAwareNegotiateSecurityFilterTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.servlet.CorsAwareNegotiateSecurityFilterTest">CorsAwareNegotiateSecurityFilterTest</a></td>
      +<td>1</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.124 s</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.servlet.NegotiateSecurityFilterTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.servlet.NegotiateSecurityFilterTest">NegotiateSecurityFilterTest</a></td>
      +<td>2</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.081 s</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.servlet.WindowsPrincipalTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.servlet.WindowsPrincipalTest">WindowsPrincipalTest</a></td>
      +<td>2</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.014 s</td></tr></table></section><section><a id="waffle.windows.auth"></a>
      +<h3>waffle.windows.auth</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>-</th>
      +<th>Class</th>
      +<th>Tests</th>
      +<th>Errors</th>
      +<th>Failures</th>
      +<th>Skipped</th>
      +<th>Success Rate</th>
      +<th>Time</th></tr>
      +<tr class="b">
      +<td><a href="#waffle.windows.auth.PrincipalFormatTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.windows.auth.PrincipalFormatTest">PrincipalFormatTest</a></td>
      +<td>2</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.003 s</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.windows.auth.WindowsAccountTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.windows.auth.WindowsAccountTest">WindowsAccountTest</a></td>
      +<td>2</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.008 s</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.windows.auth.WindowsCredentialsHandleTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.windows.auth.WindowsCredentialsHandleTest">WindowsCredentialsHandleTest</a></td>
      +<td>1</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.007 s</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.windows.auth.WindowsSecurityContextTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.windows.auth.WindowsSecurityContextTest">WindowsSecurityContextTest</a></td>
      +<td>1</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.014 s</td></tr></table></section><section><a id="waffle.util"></a>
      +<h3>waffle.util</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>-</th>
      +<th>Class</th>
      +<th>Tests</th>
      +<th>Errors</th>
      +<th>Failures</th>
      +<th>Skipped</th>
      +<th>Success Rate</th>
      +<th>Time</th></tr>
      +<tr class="b">
      +<td><a href="#waffle.util.CorsPreFlightCheckTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.util.CorsPreFlightCheckTest">CorsPreFlightCheckTest</a></td>
      +<td>4</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.087 s</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.util.NtlmMessageTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.util.NtlmMessageTest">NtlmMessageTest</a></td>
      +<td>2</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.004 s</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.util.SPNegoMessageTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.util.SPNegoMessageTest">SPNegoMessageTest</a></td>
      +<td>2</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.003 s</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.util.WaffleInfoTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.util.WaffleInfoTest">WaffleInfoTest</a></td>
      +<td>1</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.050 s</td></tr></table></section><section><a id="waffle.jaas"></a>
      +<h3>waffle.jaas</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>-</th>
      +<th>Class</th>
      +<th>Tests</th>
      +<th>Errors</th>
      +<th>Failures</th>
      +<th>Skipped</th>
      +<th>Success Rate</th>
      +<th>Time</th></tr>
      +<tr class="b">
      +<td><a href="#waffle.jaas.GroupPrincipalTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.jaas.GroupPrincipalTest">GroupPrincipalTest</a></td>
      +<td>4</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.246 s</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.jaas.RolePrincipalTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.jaas.RolePrincipalTest">RolePrincipalTest</a></td>
      +<td>4</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.006 s</td></tr>
      +<tr class="b">
      +<td><a href="#waffle.jaas.UserPrincipalTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.jaas.UserPrincipalTest">UserPrincipalTest</a></td>
      +<td>4</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.006 s</td></tr>
      +<tr class="a">
      +<td><a href="#waffle.jaas.WindowsLoginModuleTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.jaas.WindowsLoginModuleTest">WindowsLoginModuleTest</a></td>
      +<td>17</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.447 s</td></tr></table></section><section><a id="waffle.servlet.spi"></a>
      +<h3>waffle.servlet.spi</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>-</th>
      +<th>Class</th>
      +<th>Tests</th>
      +<th>Errors</th>
      +<th>Failures</th>
      +<th>Skipped</th>
      +<th>Success Rate</th>
      +<th>Time</th></tr>
      +<tr class="b">
      +<td><a href="#waffle.servlet.spi.SecurityFilterProviderCollectionTest"><img src="images/icon_success_sml.gif" /></a></td>
      +<td><a href="#waffle.servlet.spi.SecurityFilterProviderCollectionTest">SecurityFilterProviderCollectionTest</a></td>
      +<td>3</td>
      +<td>0</td>
      +<td>0</td>
      +<td>0</td>
      +<td>100%</td>
      +<td>0.007 s</td></tr></table></section><br /></section><section><a id="Test_Cases"></a>
      +<h2>Test Cases</h2>
      +<p>[<a href="#Summary">Summary</a>] [<a href="#Package_List">Package List</a>] [<a href="#Test_Cases">Test Cases</a>]</p><section><a id="waffle.jaas.GroupPrincipalTest"></a>
      +<h3>GroupPrincipalTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.GroupPrincipalTest.testIsSerializable"></a>testIsSerializable</td>
      +<td>0.168 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.GroupPrincipalTest.equals_sameObject"></a>equals_sameObject</td>
      +<td>0.001 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.GroupPrincipalTest.equals_otherObject"></a>equals_otherObject</td>
      +<td>0.001 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.GroupPrincipalTest.testEquals_Symmetric"></a>testEquals_Symmetric</td>
      +<td>0.001 s</td></tr></table></section><section><a id="waffle.jaas.RolePrincipalTest"></a>
      +<h3>RolePrincipalTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.RolePrincipalTest.testIsSerializable"></a>testIsSerializable</td>
      +<td>0.002 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.RolePrincipalTest.equals_sameObject"></a>equals_sameObject</td>
      +<td>0.001 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.RolePrincipalTest.equals_otherObject"></a>equals_otherObject</td>
      +<td>0.001 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.RolePrincipalTest.testEquals_Symmetric"></a>testEquals_Symmetric</td>
      +<td>0.001 s</td></tr></table></section><section><a id="waffle.jaas.UserPrincipalTest"></a>
      +<h3>UserPrincipalTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.UserPrincipalTest.testIsSerializable"></a>testIsSerializable</td>
      +<td>0.001 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.UserPrincipalTest.equals_sameObject"></a>equals_sameObject</td>
      +<td>0.001 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.UserPrincipalTest.equals_otherObject"></a>equals_otherObject</td>
      +<td>0.001 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.UserPrincipalTest.testEquals_Symmetric"></a>testEquals_Symmetric</td>
      +<td>0.001 s</td></tr></table></section><section><a id="waffle.jaas.WindowsLoginModuleTest"></a>
      +<h3>WindowsLoginModuleTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.logon_noCallbackHandler"></a>logon_noCallbackHandler</td>
      +<td>0.057 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.logout_abortNoUser"></a>logout_abortNoUser</td>
      +<td>0.003 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.logout_validUser"></a>logout_validUser</td>
      +<td>0.009 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.commit_noPrincipal"></a>commit_noPrincipal</td>
      +<td>0.002 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.commit_subjectReadOnly"></a>commit_subjectReadOnly</td>
      +<td>0.001 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.checkGuestLogin"></a>checkGuestLogin</td>
      +<td>0.001 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.commit_success"></a>commit_success</td>
      +<td>0.006 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.logout_subjectReadOnly"></a>logout_subjectReadOnly</td>
      +<td>0.001 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.logout_noUser"></a>logout_noUser</td>
      +<td>0.001 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.login_invalidGuestLogin"></a>login_invalidGuestLogin</td>
      +<td>0.297 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.checkAuth"></a>checkAuth</td>
      +<td>0.002 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.login_throwIOException"></a>login_throwIOException</td>
      +<td>0.023 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.login_nullPassword"></a>login_nullPassword</td>
      +<td>0.003 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.commit_withDebug"></a>commit_withDebug</td>
      +<td>0.001 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.commit_withRoles"></a>commit_withRoles</td>
      +<td>0.001 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.login_throwUnsupportedCallbackException"></a>login_throwUnsupportedCallbackException</td>
      +<td>0.003 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.jaas.WindowsLoginModuleTest.initialize_withOptions"></a>initialize_withOptions</td>
      +<td>0.001 s</td></tr></table></section><section><a id="waffle.servlet.CorsAwareNegotiateSecurityFilterTest"></a>
      +<h3>CorsAwareNegotiateSecurityFilterTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.servlet.CorsAwareNegotiateSecurityFilterTest.doFilterTestCorsPreflightRequest"></a>doFilterTestCorsPreflightRequest</td>
      +<td>0.015 s</td></tr></table></section><section><a id="waffle.servlet.NegotiateSecurityFilterTest"></a>
      +<h3>NegotiateSecurityFilterTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.servlet.NegotiateSecurityFilterTest.testExcludeCorsAndOAUTHBearerAuthorization_doFilter.28HttpServletRequest.2C_HttpServletResponse.2C_FilterChain.2C_FilterConfig.29"></a>testExcludeCorsAndOAUTHBearerAuthorization_doFilter(HttpServletRequest, HttpServletResponse, FilterChain, FilterConfig)</td>
      +<td>0.071 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.servlet.NegotiateSecurityFilterTest.testCorsAndBearerAuthorizationI_init.28FilterConfig.29"></a>testCorsAndBearerAuthorizationI_init(FilterConfig)</td>
      +<td>0.006 s</td></tr></table></section><section><a id="waffle.servlet.spi.SecurityFilterProviderCollectionTest"></a>
      +<h3>SecurityFilterProviderCollectionTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.servlet.spi.SecurityFilterProviderCollectionTest.testDefaultCollection"></a>testDefaultCollection</td>
      +<td>0.001 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.servlet.spi.SecurityFilterProviderCollectionTest.testIsSecurityPackageSupported"></a>testIsSecurityPackageSupported</td>
      +<td>0.001 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.servlet.spi.SecurityFilterProviderCollectionTest.testGetByClassNameInvalid"></a>testGetByClassNameInvalid</td>
      +<td>0.001 s</td></tr></table></section><section><a id="waffle.servlet.WindowsPrincipalTest"></a>
      +<h3>WindowsPrincipalTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.servlet.WindowsPrincipalTest.testToString"></a>testToString</td>
      +<td>0.002 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.servlet.WindowsPrincipalTest.testEqualsAndHashCode"></a>testEqualsAndHashCode</td>
      +<td>0.002 s</td></tr></table></section><section><a id="waffle.util.CorsPreFlightCheckTest"></a>
      +<h3>CorsPreFlightCheckTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.util.CorsPreFlightCheckTest.testCorsMethodPreflightHeadersPresent"></a>testCorsMethodPreflightHeadersPresent</td>
      +<td>0.003 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.util.CorsPreFlightCheckTest.testNoCorsHeadersPreflightHeaderPresent"></a>testNoCorsHeadersPreflightHeaderPresent</td>
      +<td>0.002 s</td></tr>
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.util.CorsPreFlightCheckTest.testNoCorsPreflightOriginPresent"></a>testNoCorsPreflightOriginPresent</td>
      +<td>0.002 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.util.CorsPreFlightCheckTest.testExpectedCorsPreflightHeadersPresent"></a>testExpectedCorsPreflightHeadersPresent</td>
      +<td>0.003 s</td></tr></table></section><section><a id="waffle.util.NtlmMessageTest"></a>
      +<h3>NtlmMessageTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.util.NtlmMessageTest.testGetNtlmMessageType"></a>testGetNtlmMessageType</td>
      +<td>0.001 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.util.NtlmMessageTest.testIsNtlmMessage"></a>testIsNtlmMessage</td>
      +<td>0 s</td></tr></table></section><section><a id="waffle.util.SPNegoMessageTest"></a>
      +<h3>SPNegoMessageTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.util.SPNegoMessageTest.testIsNegTokenArg"></a>testIsNegTokenArg</td>
      +<td>0.001 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.util.SPNegoMessageTest.testIsNegTokenInit"></a>testIsNegTokenInit</td>
      +<td>0.001 s</td></tr></table></section><section><a id="waffle.util.WaffleInfoTest"></a>
      +<h3>WaffleInfoTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.util.WaffleInfoTest.testWaffleInfo"></a>testWaffleInfo</td>
      +<td>0.049 s</td></tr></table></section><section><a id="waffle.windows.auth.PrincipalFormatTest"></a>
      +<h3>PrincipalFormatTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.windows.auth.PrincipalFormatTest.testKnown"></a>testKnown</td>
      +<td>0.001 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.windows.auth.PrincipalFormatTest.testUnknown"></a>testUnknown</td>
      +<td>0.001 s</td></tr></table></section><section><a id="waffle.windows.auth.WindowsAccountTest"></a>
      +<h3>WindowsAccountTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.windows.auth.WindowsAccountTest.testGetCurrentAccount"></a>testGetCurrentAccount</td>
      +<td>0.005 s</td></tr>
      +<tr class="b">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.windows.auth.WindowsAccountTest.testGetCurrentUsername"></a>testGetCurrentUsername</td>
      +<td>0.001 s</td></tr></table></section><section><a id="waffle.windows.auth.WindowsCredentialsHandleTest"></a>
      +<h3>WindowsCredentialsHandleTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.windows.auth.WindowsCredentialsHandleTest.testGetCurrent"></a>testGetCurrent</td>
      +<td>0.006 s</td></tr></table></section><section><a id="waffle.windows.auth.WindowsSecurityContextTest"></a>
      +<h3>WindowsSecurityContextTest</h3>
      +<table class="table table-striped">
      +<tr class="a">
      +<td><img src="images/icon_success_sml.gif" /></td>
      +<td><a id="TC_waffle.windows.auth.WindowsSecurityContextTest.testNegotiate"></a>testNegotiate</td>
      +<td>0.013 s</td></tr></table></section><br /></section></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/taglist.html b/waffle-jna-jakarta/taglist.html
      new file mode 100644
      index 0000000000..531760f3b1
      --- /dev/null
      +++ b/waffle-jna-jakarta/taglist.html
      @@ -0,0 +1,178 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.codehaus.mojo:taglist-maven-plugin:3.2.1:taglist at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>Tag List report – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a href="team.html">Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a>Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-right"></span>Project Information</a></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-down"></span>Project Reports</a>
      +     <ul class="nav nav-list">
      +      <li><a href="checkstyle.html">Checkstyle</a></li>
      +      <li><a href="apidocs/index.html">Javadoc</a></li>
      +      <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +      <li><a href="xref/index.html">Source Xref</a></li>
      +      <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +      <li><a href="cpd.html">CPD</a></li>
      +      <li><a href="pmd.html">PMD</a></li>
      +      <li><a href="surefire.html">Surefire</a></li>
      +      <li><a href="spotbugs.html">SpotBugs</a></li>
      +      <li><a href="jacoco/index.html">JaCoCo</a></li>
      +      <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +      <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +      <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +      <li class="active"><a>Tag List</a></li>
      +      <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +     </ul></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section><a id="Tag_List_Report"></a>
      +<h1>Tag List Report</h1>
      +<p>The following document contains the listing of user tags found in the code. Below is the summary of the occurrences per tag.</p>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Tag Class</th>
      +<th>Total number of occurrences</th>
      +<th>Tag strings used by tag class</th></tr>
      +<tr class="b">
      +<td><a href="#tag_class_24">Deprecated Work</a></td>
      +<td>1</td>
      +<td>@deprecated</td></tr>
      +<tr class="a">
      +<td>FIXME Work</td>
      +<td>0</td>
      +<td>fixme, @fixme</td></tr>
      +<tr class="b">
      +<td>Todo Work</td>
      +<td>0</td>
      +<td>todo, @todo</td></tr></table>
      +<p>Each tag is detailed below:</p><section><a id="tag_class_24"></a>
      +<h2>Deprecated Work</h2>
      +<p>Number of occurrences found in the code: 1</p>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>waffle.jaas.GroupPrincipal</th>
      +<th>Line</th></tr>
      +<tr class="b">
      +<td>This class is deprecated as hiding a principal inside another principal is not JAAS compliant. Use the Principals in the Subject to directly enroll groups or roles by name.</td>
      +<td><a href="./xref/waffle/jaas/GroupPrincipal.html#L36">36</a></td></tr></table></section></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/team.html b/waffle-jna-jakarta/team.html
      new file mode 100644
      index 0000000000..80c8f933a5
      --- /dev/null
      +++ b/waffle-jna-jakarta/team.html
      @@ -0,0 +1,194 @@
      +<!DOCTYPE html>
      +
      +
      +<!--
      + | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.8.0:team at 2025-01-01
      + | Rendered using Apache Maven Fluido Skin 2.0.0-M10
      +-->
      +<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
      +  <head>
      +    <meta charset="UTF-8" />
      +    <meta name="viewport" content="width=device-width, initial-scale=1" />
      +    <meta name="generator" content="Apache Maven Doxia Site Renderer 2.0.0" />
      +    <title>Project Team – waffle-jna-jakarta</title>
      +    <link rel="stylesheet" href="./css/apache-maven-fluido-2.0.0-M10.min.css" />
      +    <link rel="stylesheet" href="./css/site.css" />
      +    <link rel="stylesheet" href="./css/print.css" media="print" />
      +    <script src="./js/apache-maven-fluido-2.0.0-M10.min.js"></script>
      +  </head>
      +  <body class="topBarEnabled">
      +    <header id="topbar" class="navbar navbar-fixed-top ">
      +      <div class="navbar-inner">
      +        <div class="container-fluid">
      +        <a data-target=".nav-collapse" data-toggle="collapse" class="btn btn-navbar">
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +          <span class="icon-bar"></span>
      +        </a>
      +            <ul class="nav">
      +      <li class="dropdown">
      +        <a class="dropdown-toggle" data-toggle="dropdown">Project Documentation <b class="caret"></b></a>
      +        <ul class="dropdown-menu">
      +            <li class="dropdown-submenu">
      +<a href="project-info.html">Project Information</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="ci-management.html">CI Management</a></li>
      +                  <li><a href="dependencies.html">Dependencies</a></li>
      +                  <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +                  <li><a href="dependency-management.html">Dependency Management</a></li>
      +                  <li><a href="distribution-management.html">Distribution Management</a></li>
      +                  <li><a href="index.html">About</a></li>
      +                  <li><a href="issue-management.html">Issue Management</a></li>
      +                  <li><a href="licenses.html">Licenses</a></li>
      +                  <li><a href="plugin-management.html">Plugin Management</a></li>
      +                  <li><a href="plugins.html">Plugins</a></li>
      +                  <li><a href="scm.html">Source Code Management</a></li>
      +                  <li><a href="summary.html">Summary</a></li>
      +                  <li><a>Team</a></li>
      +              </ul>
      +            </li>
      +            <li class="dropdown-submenu">
      +<a href="project-reports.html">Project Reports</a>
      +              <ul class="dropdown-menu">
      +                  <li><a href="checkstyle.html">Checkstyle</a></li>
      +                  <li><a href="apidocs/index.html">Javadoc</a></li>
      +                  <li><a href="testapidocs/index.html">Test Javadoc</a></li>
      +                  <li><a href="xref/index.html">Source Xref</a></li>
      +                  <li><a href="xref-test/index.html">Test Source Xref</a></li>
      +                  <li><a href="cpd.html">CPD</a></li>
      +                  <li><a href="pmd.html">PMD</a></li>
      +                  <li><a href="surefire.html">Surefire</a></li>
      +                  <li><a href="spotbugs.html">SpotBugs</a></li>
      +                  <li><a href="jacoco/index.html">JaCoCo</a></li>
      +                  <li><a href="dependency-updates-report.html">Dependency Updates Report</a></li>
      +                  <li><a href="plugin-updates-report.html">Plugin Updates Report</a></li>
      +                  <li><a href="property-updates-report.html">Property Updates Report</a></li>
      +                  <li><a href="taglist.html">Tag List</a></li>
      +                  <li><a href="dependency-check-report.html">dependency-check:aggregate</a></li>
      +              </ul>
      +            </li>
      +        </ul>
      +      </li>
      +            </ul>
      +            <ul class="nav pull-right">
      +              <li class="dropdown">
      +                <a class="dropdown-toggle" data-toggle="dropdown">External Links <b class="caret"></b></a>
      +                <ul class="dropdown-menu">
      +    <li><a href="https://github.com/Waffle/waffle" class="externalLink">waffle</a></li>
      +                </ul>
      +              </li>
      +            </ul>
      +        </div>
      +      </div>
      +    </header>
      +    <div class="container-fluid container-fluid-top">
      +      <header>
      +        <div id="banner">
      +          <div class="pull-left"><div id="bannerLeft"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="pull-right"><div id="bannerRight"><h1><a href="https://github.com/Waffle/waffle" class="externalLink"><img class="imageLink" src="images/waffle.jpg" /></a></h1></div></div>
      +          <div class="clear"><hr/></div>
      +        </div>
      +
      +        <div id="breadcrumbs">
      +          <ul class="breadcrumb">
      +        <li id="publishDate">Last Published: 2025-01-01<span class="divider">|</span>
      +</li>
      +          <li id="projectVersion">Version: 3.5.1</li>
      +          </ul>
      +        </div>
      +      </header>
      +      <div class="row-fluid">
      +        <header id="leftColumn" class="span2">
      +          <nav class="well sidebar-nav">
      +  <ul class="nav nav-list">
      +   <li class="nav-header">Project Documentation</li>
      +    <li><a href="project-info.html"><span class="icon-chevron-down"></span>Project Information</a>
      +     <ul class="nav nav-list">
      +      <li><a href="ci-management.html">CI Management</a></li>
      +      <li><a href="dependencies.html">Dependencies</a></li>
      +      <li><a href="dependency-info.html">Maven Coordinates</a></li>
      +      <li><a href="dependency-management.html">Dependency Management</a></li>
      +      <li><a href="distribution-management.html">Distribution Management</a></li>
      +      <li><a href="index.html">About</a></li>
      +      <li><a href="issue-management.html">Issue Management</a></li>
      +      <li><a href="licenses.html">Licenses</a></li>
      +      <li><a href="plugin-management.html">Plugin Management</a></li>
      +      <li><a href="plugins.html">Plugins</a></li>
      +      <li><a href="scm.html">Source Code Management</a></li>
      +      <li><a href="summary.html">Summary</a></li>
      +      <li class="active"><a>Team</a></li>
      +     </ul></li>
      +    <li><a href="project-reports.html"><span class="icon-chevron-right"></span>Project Reports</a></li>
      +  </ul>
      +          </nav>
      +          <div class="well sidebar-nav">
      +            <div id="poweredBy">
      +              <div class="clear"></div>
      +              <div class="clear"></div>
      +<a href="https://maven.apache.org/" class="builtBy" target="_blank"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
      +            </div>
      +          </div>
      +        </header>
      +        <main id="bodyColumn" class="span10">
      +<section><a id="Project_Team"></a>
      +<h1>Project Team</h1>
      +<p>A successful project requires many people to play many roles. Some members write code or documentation, while others are valuable as testers, submitting patches and suggestions.</p>
      +<p>The project team is comprised of Members and Contributors. Members have direct access to the source of a project and actively evolve the code-base. Contributors improve the project through submission of patches and suggestions to the Members. The number of Contributors to the project is unbounded. Get involved today. All contributions to the project are greatly appreciated.</p><section><a id="Members"></a>
      +<h2>Members</h2>
      +<p>The following is a list of developers with commit privileges that have directly contributed to the project in one way or another.</p>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Image</th>
      +<th>Id</th>
      +<th>Name</th>
      +<th>Email</th>
      +<th>URL</th>
      +<th>Organization</th>
      +<th>Organization URL</th>
      +<th>Roles</th>
      +<th>Time Zone</th></tr>
      +<tr class="b">
      +<td><figure><img src="https://avatars3.githubusercontent.com/u/542335?s=400" /></figure></td>
      +<td><a id="dblock"></a>dblock</td>
      +<td>Daniel Doubrovkine</td>
      +<td><a class="externalLink" href="mailto:dblock@dblock.org">dblock@dblock.org</a></td>
      +<td><a class="externalLink" href="https://github.com/dblock/">https://github.com/dblock/</a></td>
      +<td>dblock</td>
      +<td><a class="externalLink" href="http://code.dblock.org">http://code.dblock.org</a></td>
      +<td>Architect, Developer</td>
      +<td>-5</td></tr></table></section><section><a id="Contributors"></a>
      +<h2>Contributors</h2>
      +<p>The following additional people have contributed to this project through the way of suggestions, patches or documentation.</p>
      +<table class="table table-striped">
      +<tr class="a">
      +<th>Image</th>
      +<th>Name</th>
      +<th>Email</th>
      +<th>URL</th>
      +<th>Organization</th>
      +<th>Organization URL</th>
      +<th>Roles</th>
      +<th>Time Zone</th></tr>
      +<tr class="b">
      +<td><figure><img src="https://avatars0.githubusercontent.com/u/975267" /></figure></td>
      +<td>Jeremy Landis</td>
      +<td><a class="externalLink" href="mailto:jeremylandis@hotmail.com">jeremylandis@hotmail.com</a></td>
      +<td><a class="externalLink" href="https://www.linkedin.com/in/jeremy-landis-548b2719">https://www.linkedin.com/in/jeremy-landis-548b2719</a></td>
      +<td>hazendaz</td>
      +<td><a class="externalLink" href="https://github.com/hazendaz">https://github.com/hazendaz</a></td>
      +<td>Developer</td>
      +<td>-5</td></tr></table></section></section>        </main>
      +      </div>
      +    </div>
      +    <hr/>
      +    <footer>
      +      <div class="container-fluid">
      +        <div class="row-fluid">
      +            <p>©      2010–2025
      +<a href="https://github.com/waffle/">com.github.waffle</a>
      +</p>
      +        </div>
      +      </div>
      +    </footer>
      +  </body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/allclasses-index.html b/waffle-jna-jakarta/testapidocs/allclasses-index.html
      new file mode 100644
      index 0000000000..ff29bb3338
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/allclasses-index.html
      @@ -0,0 +1,72 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>All Classes and Interfaces (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="class index">
      +<meta name="generator" content="javadoc/AllClassesIndexWriter">
      +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="script.js"></script>
      +<script type="text/javascript" src="script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="all-classes-index-page">
      +<script type="text/javascript">var pathtoroot = "./";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="waffle.jna.jakarta/module-summary.html">Module</a></li>
      +<li>Package</li>
      +<li>Class</li>
      +<li>Use</li>
      +<li><a href="overview-tree.html">Tree</a></li>
      +<li><a href="index-all.html">Index</a></li>
      +<li><a href="help-doc.html#all-classes">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 title="All Classes and Interfaces" class="title">All Classes and Interfaces</h1>
      +</div>
      +<div id="all-classes-table">
      +<div class="caption"><span>Classes</span></div>
      +<div class="summary-table two-column-summary">
      +<div class="table-header col-first">Class</div>
      +<div class="table-header col-last">Description</div>
      +<div class="col-first even-row-color all-classes-table all-classes-table-tab2"><a href="waffle.jna.jakarta/waffle/jaas/UsernamePasswordCallbackHandler.html" title="class in waffle.jaas">UsernamePasswordCallbackHandler</a></div>
      +<div class="col-last even-row-color all-classes-table all-classes-table-tab2">
      +<div class="block">The Class UsernamePasswordCallbackHandler.</div>
      +</div>
      +</div>
      +</div>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/allpackages-index.html b/waffle-jna-jakarta/testapidocs/allpackages-index.html
      new file mode 100644
      index 0000000000..05a75cf0ff
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/allpackages-index.html
      @@ -0,0 +1,76 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>All Packages (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="package index">
      +<meta name="generator" content="javadoc/AllPackagesIndexWriter">
      +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="script.js"></script>
      +<script type="text/javascript" src="script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="all-packages-index-page">
      +<script type="text/javascript">var pathtoroot = "./";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="waffle.jna.jakarta/module-summary.html">Module</a></li>
      +<li>Package</li>
      +<li>Class</li>
      +<li>Use</li>
      +<li><a href="overview-tree.html">Tree</a></li>
      +<li><a href="index-all.html">Index</a></li>
      +<li><a href="help-doc.html#all-packages">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 title="All&amp;nbsp;Packages" class="title">All&nbsp;Packages</h1>
      +</div>
      +<div class="caption"><span>Package Summary</span></div>
      +<div class="summary-table two-column-summary">
      +<div class="table-header col-first">Package</div>
      +<div class="table-header col-last">Description</div>
      +<div class="col-first even-row-color"><a href="waffle.jna.jakarta/waffle/jaas/package-summary.html">waffle.jaas</a></div>
      +<div class="col-last even-row-color">&nbsp;</div>
      +<div class="col-first odd-row-color"><a href="waffle.jna.jakarta/waffle/servlet/package-summary.html">waffle.servlet</a></div>
      +<div class="col-last odd-row-color">&nbsp;</div>
      +<div class="col-first even-row-color"><a href="waffle.jna.jakarta/waffle/servlet/spi/package-summary.html">waffle.servlet.spi</a></div>
      +<div class="col-last even-row-color">&nbsp;</div>
      +<div class="col-first odd-row-color"><a href="waffle.jna.jakarta/waffle/util/package-summary.html">waffle.util</a></div>
      +<div class="col-last odd-row-color">&nbsp;</div>
      +<div class="col-first even-row-color"><a href="waffle.jna.jakarta/waffle/windows/auth/package-summary.html">waffle.windows.auth</a></div>
      +<div class="col-last even-row-color">&nbsp;</div>
      +</div>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/copy.svg b/waffle-jna-jakarta/testapidocs/copy.svg
      new file mode 100644
      index 0000000000..d435f6c375
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/copy.svg
      @@ -0,0 +1,33 @@
      +<?xml version="1.0" encoding="UTF-8"?>
      +
      +<!--
      + Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved.
      + ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +-->
      +
      +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 380 460" fill="#505050">
      +  <path
      +     d="M 346,8 H 108 C 90,8 75,23 75,41 v 316 c 0,18 15,33 33,33 h 238 c 18,0 33,-15 33,-33 V 41 C 379,23 364,8 346,8 Z m -8,344 H 116 c -2,0 -3,-1 -3,-3 V 49 c 0,-2 1,-3 3,-3 h 222 c 2,0 3,1 3,3 v 300 h 10e-4 c 0,2 -1,3 -3,3 z"/>
      +  <path
      +     d="m 290,389 v 26 h 10e-4 c 0,2 -1,3 -3,3 H 49 c -2,0 -3,-1 -3,-3 V 99 c 0,-2 1,-3 3,-3 h 27 v 0 l -5e-4,-38 H 41 C 23,58 8,73 8,91 v 332 c 10e-4,18 15,33 33,33 h 254 c 18,0 33,-15 33,-33 v -34"/>
      +</svg>
      diff --git a/waffle-jna-jakarta/testapidocs/element-list b/waffle-jna-jakarta/testapidocs/element-list
      new file mode 100644
      index 0000000000..9c09d5418d
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/element-list
      @@ -0,0 +1,6 @@
      +module:waffle.jna.jakarta
      +waffle.jaas
      +waffle.servlet
      +waffle.servlet.spi
      +waffle.util
      +waffle.windows.auth
      diff --git a/waffle-jna-jakarta/testapidocs/help-doc.html b/waffle-jna-jakarta/testapidocs/help-doc.html
      new file mode 100644
      index 0000000000..2d34aaacad
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/help-doc.html
      @@ -0,0 +1,197 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>API Help (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="help">
      +<meta name="generator" content="javadoc/HelpWriter">
      +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="script.js"></script>
      +<script type="text/javascript" src="script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="help-page">
      +<script type="text/javascript">var pathtoroot = "./";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="waffle.jna.jakarta/module-summary.html">Module</a></li>
      +<li>Package</li>
      +<li>Class</li>
      +<li>Use</li>
      +<li><a href="overview-tree.html">Tree</a></li>
      +<li><a href="index-all.html">Index</a></li>
      +<li class="nav-bar-cell1-rev">Help</li>
      +</ul>
      +<ul class="sub-nav-list-small">
      +<li>
      +<p>Help:</p>
      +<ul>
      +<li><a href="#help-navigation">Navigation</a></li>
      +<li><a href="#help-pages">Pages</a></li>
      +</ul>
      +</li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list">
      +<ul class="sub-nav-list">
      +<li>Help:&nbsp;</li>
      +<li><a href="#help-navigation">Navigation</a>&nbsp;|&nbsp;</li>
      +<li><a href="#help-pages">Pages</a></li>
      +</ul>
      +</div>
      +<div class="nav-list-search"><a href="search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<h1 class="title">JavaDoc Help</h1>
      +<ul class="help-toc">
      +<li><a href="#help-navigation">Navigation</a>: 
      +<ul class="help-subtoc">
      +<li><a href="#search">Search</a></li>
      +</ul>
      +</li>
      +<li><a href="#help-pages">Kinds of Pages</a>: 
      +<ul class="help-subtoc">
      +<li><a href="#module">Module</a></li>
      +<li><a href="#package">Package</a></li>
      +<li><a href="#class">Class or Interface</a></li>
      +<li><a href="#doc-file">Other Files</a></li>
      +<li><a href="#use">Use</a></li>
      +<li><a href="#tree">Tree (Class Hierarchy)</a></li>
      +<li><a href="#all-packages">All Packages</a></li>
      +<li><a href="#all-classes">All Classes and Interfaces</a></li>
      +<li><a href="#index">Index</a></li>
      +</ul>
      +</li>
      +</ul>
      +<hr>
      +<div class="sub-title">
      +<h2 id="help-navigation">Navigation</h2>
      +Starting from the <a href="index.html">Overview</a> page, you can browse the documentation using the links in each page, and in the navigation bar at the top of each page. The <a href="index-all.html">Index</a> and Search box allow you to navigate to specific declarations and summary pages, including: <a href="allpackages-index.html">All Packages</a>, <a href="allclasses-index.html">All Classes and Interfaces</a>
      +<section class="help-section" id="search">
      +<h3>Search</h3>
      +<p>You can search for definitions of modules, packages, types, fields, methods, system properties and other terms defined in the API. These items can be searched using part or all of the name, optionally using "camelCase" abbreviations, or multiple search terms separated by whitespace. Some examples:</p>
      +<ul class="help-section-list">
      +<li><code>"j.l.obj"</code> matches "java.lang.Object"</li>
      +<li><code>"InpStr"</code> matches "java.io.InputStream"</li>
      +<li><code>"math exact long"</code> matches "java.lang.Math.absExact(long)"</li>
      +</ul>
      +<p>Refer to the <a href="https://docs.oracle.com/en/java/javase/21/docs/specs/javadoc/javadoc-search-spec.html">Javadoc Search Specification</a> for a full description of search features.</p>
      +</section>
      +</div>
      +<hr>
      +<div class="sub-title">
      +<h2 id="help-pages">Kinds of Pages</h2>
      +The following sections describe the different kinds of pages in this collection.
      +<section class="help-section" id="module">
      +<h3>Module</h3>
      +<p>Each module has a page that contains a list of its packages, dependencies on other modules, and services, with a summary for each. These pages may contain the following categories:</p>
      +<ul class="help-section-list">
      +<li>Packages</li>
      +<li>Modules</li>
      +<li>Services</li>
      +</ul>
      +</section>
      +<section class="help-section" id="package">
      +<h3>Package</h3>
      +<p>Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain the following categories:</p>
      +<ul class="help-section-list">
      +<li>Interfaces</li>
      +<li>Classes</li>
      +<li>Enums</li>
      +<li>Exception Classes</li>
      +<li>Annotation Types</li>
      +</ul>
      +</section>
      +<section class="help-section" id="class">
      +<h3>Class or Interface</h3>
      +<p>Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a declaration and description, member summary tables, and detailed member descriptions. Entries in each of these sections are omitted if they are empty or not applicable.</p>
      +<ul class="help-section-list">
      +<li>Class Inheritance Diagram</li>
      +<li>Direct Subclasses</li>
      +<li>All Known Subinterfaces</li>
      +<li>All Known Implementing Classes</li>
      +<li>Class or Interface Declaration</li>
      +<li>Class or Interface Description</li>
      +</ul>
      +<br>
      +<ul class="help-section-list">
      +<li>Nested Class Summary</li>
      +<li>Enum Constant Summary</li>
      +<li>Field Summary</li>
      +<li>Property Summary</li>
      +<li>Constructor Summary</li>
      +<li>Method Summary</li>
      +<li>Required Element Summary</li>
      +<li>Optional Element Summary</li>
      +</ul>
      +<br>
      +<ul class="help-section-list">
      +<li>Enum Constant Details</li>
      +<li>Field Details</li>
      +<li>Property Details</li>
      +<li>Constructor Details</li>
      +<li>Method Details</li>
      +<li>Element Details</li>
      +</ul>
      +<p><span class="help-note">Note:</span> Annotation interfaces have required and optional elements, but not methods. Only enum classes have enum constants. The components of a record class are displayed as part of the declaration of the record class. Properties are a feature of JavaFX.</p>
      +<p>The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</p>
      +</section>
      +<section class="help-section" id="doc-file">
      +<h3>Other Files</h3>
      +<p>Packages and modules may contain pages with additional information related to the declarations nearby.</p>
      +</section>
      +<section class="help-section" id="use">
      +<h3>Use</h3>
      +<p>Each documented package, class and interface has its own Use page.  This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A.  You can access this page by first going to the package, class or interface, then clicking on the USE link in the navigation bar.</p>
      +</section>
      +<section class="help-section" id="tree">
      +<h3>Tree (Class Hierarchy)</h3>
      +<p>There is a <a href="overview-tree.html">Class Hierarchy</a> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with <code>java.lang.Object</code>. Interfaces do not inherit from <code>java.lang.Object</code>.</p>
      +<ul class="help-section-list">
      +<li>When viewing the Overview page, clicking on TREE displays the hierarchy for all packages.</li>
      +<li>When viewing a particular package, class or interface page, clicking on TREE displays the hierarchy for only that package.</li>
      +</ul>
      +</section>
      +<section class="help-section" id="all-packages">
      +<h3>All Packages</h3>
      +<p>The <a href="allpackages-index.html">All Packages</a> page contains an alphabetic index of all packages contained in the documentation.</p>
      +</section>
      +<section class="help-section" id="all-classes">
      +<h3>All Classes and Interfaces</h3>
      +<p>The <a href="allclasses-index.html">All Classes and Interfaces</a> page contains an alphabetic index of all classes and interfaces contained in the documentation, including annotation interfaces, enum classes, and record classes.</p>
      +</section>
      +<section class="help-section" id="index">
      +<h3>Index</h3>
      +<p>The <a href="index-all.html">Index</a> contains an alphabetic index of all classes, interfaces, constructors, methods, and fields in the documentation, as well as summary pages such as <a href="allpackages-index.html">All Packages</a>, <a href="allclasses-index.html">All Classes and Interfaces</a>.</p>
      +</section>
      +</div>
      +<hr>
      +<span class="help-footnote">This help file applies to API documentation generated by the standard doclet.</span></main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/index-all.html b/waffle-jna-jakarta/testapidocs/index-all.html
      new file mode 100644
      index 0000000000..43f2694251
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/index-all.html
      @@ -0,0 +1,93 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>Index (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="index">
      +<meta name="generator" content="javadoc/IndexWriter">
      +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="script.js"></script>
      +<script type="text/javascript" src="script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="index-page">
      +<script type="text/javascript">var pathtoroot = "./";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="waffle.jna.jakarta/module-summary.html">Module</a></li>
      +<li>Package</li>
      +<li>Class</li>
      +<li>Use</li>
      +<li><a href="overview-tree.html">Tree</a></li>
      +<li class="nav-bar-cell1-rev">Index</li>
      +<li><a href="help-doc.html#index">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1>Index</h1>
      +</div>
      +<a href="#I:H">H</a>&nbsp;<a href="#I:U">U</a>&nbsp;<a href="#I:W">W</a>&nbsp;<br><a href="allclasses-index.html">All&nbsp;Classes&nbsp;and&nbsp;Interfaces</a><span class="vertical-separator">|</span><a href="allpackages-index.html">All&nbsp;Packages</a>
      +<h2 class="title" id="I:H">H</h2>
      +<dl class="index">
      +<dt><a href="waffle.jna.jakarta/waffle/jaas/UsernamePasswordCallbackHandler.html#handle(javax.security.auth.callback.Callback%5B%5D)" class="member-name-link">handle(Callback[])</a> - Method in class waffle.jaas.<a href="waffle.jna.jakarta/waffle/jaas/UsernamePasswordCallbackHandler.html" title="class in waffle.jaas">UsernamePasswordCallbackHandler</a></dt>
      +<dd>&nbsp;</dd>
      +</dl>
      +<h2 class="title" id="I:U">U</h2>
      +<dl class="index">
      +<dt><a href="waffle.jna.jakarta/waffle/jaas/UsernamePasswordCallbackHandler.html" class="type-name-link" title="class in waffle.jaas">UsernamePasswordCallbackHandler</a> - Class in <a href="waffle.jna.jakarta/waffle/jaas/package-summary.html">waffle.jaas</a></dt>
      +<dd>
      +<div class="block">The Class UsernamePasswordCallbackHandler.</div>
      +</dd>
      +<dt><a href="waffle.jna.jakarta/waffle/jaas/UsernamePasswordCallbackHandler.html#%3Cinit%3E(java.lang.String,java.lang.String)" class="member-name-link">UsernamePasswordCallbackHandler(String, String)</a> - Constructor for class waffle.jaas.<a href="waffle.jna.jakarta/waffle/jaas/UsernamePasswordCallbackHandler.html" title="class in waffle.jaas">UsernamePasswordCallbackHandler</a></dt>
      +<dd>
      +<div class="block">Instantiates a new username password callback handler.</div>
      +</dd>
      +</dl>
      +<h2 class="title" id="I:W">W</h2>
      +<dl class="index">
      +<dt><a href="waffle.jna.jakarta/waffle/jaas/package-summary.html">waffle.jaas</a> - package waffle.jaas</dt>
      +<dd>&nbsp;</dd>
      +<dt><a href="waffle.jna.jakarta/module-summary.html">waffle.jna.jakarta</a> - module waffle.jna.jakarta</dt>
      +<dd>&nbsp;</dd>
      +<dt><a href="waffle.jna.jakarta/waffle/servlet/package-summary.html">waffle.servlet</a> - package waffle.servlet</dt>
      +<dd>&nbsp;</dd>
      +<dt><a href="waffle.jna.jakarta/waffle/servlet/spi/package-summary.html">waffle.servlet.spi</a> - package waffle.servlet.spi</dt>
      +<dd>&nbsp;</dd>
      +<dt><a href="waffle.jna.jakarta/waffle/util/package-summary.html">waffle.util</a> - package waffle.util</dt>
      +<dd>&nbsp;</dd>
      +<dt><a href="waffle.jna.jakarta/waffle/windows/auth/package-summary.html">waffle.windows.auth</a> - package waffle.windows.auth</dt>
      +<dd>&nbsp;</dd>
      +</dl>
      +<a href="#I:H">H</a>&nbsp;<a href="#I:U">U</a>&nbsp;<a href="#I:W">W</a>&nbsp;<br><a href="allclasses-index.html">All&nbsp;Classes&nbsp;and&nbsp;Interfaces</a><span class="vertical-separator">|</span><a href="allpackages-index.html">All&nbsp;Packages</a></main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/index.html b/waffle-jna-jakarta/testapidocs/index.html
      new file mode 100644
      index 0000000000..24a086eb67
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/index.html
      @@ -0,0 +1,25 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>waffle-jna-jakarta 3.5.1 Test API</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="index redirect">
      +<meta name="generator" content="javadoc/IndexRedirectWriter">
      +<link rel="canonical" href="waffle.jna.jakarta/module-summary.html">
      +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
      +<script type="text/javascript">window.location.replace('waffle.jna.jakarta/module-summary.html')</script>
      +<noscript>
      +<meta http-equiv="Refresh" content="0;waffle.jna.jakarta/module-summary.html">
      +</noscript>
      +</head>
      +<body class="index-redirect-page">
      +<main role="main">
      +<noscript>
      +<p>JavaScript is disabled on your browser.</p>
      +</noscript>
      +<p><a href="waffle.jna.jakarta/module-summary.html">waffle.jna.jakarta/module-summary.html</a></p>
      +</main>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/legal/COPYRIGHT b/waffle-jna-jakarta/testapidocs/legal/COPYRIGHT
      new file mode 100644
      index 0000000000..ca74fffd91
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/legal/COPYRIGHT
      @@ -0,0 +1 @@
      +Please see ..\java.base\COPYRIGHT
      diff --git a/waffle-jna-jakarta/testapidocs/legal/LICENSE b/waffle-jna-jakarta/testapidocs/legal/LICENSE
      new file mode 100644
      index 0000000000..4ad9fe4011
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/legal/LICENSE
      @@ -0,0 +1 @@
      +Please see ..\java.base\LICENSE
      diff --git a/waffle-jna-jakarta/testapidocs/legal/jquery.md b/waffle-jna-jakarta/testapidocs/legal/jquery.md
      new file mode 100644
      index 0000000000..a763ec6f18
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/legal/jquery.md
      @@ -0,0 +1,26 @@
      +## jQuery v3.7.1
      +
      +### jQuery License
      +```
      +jQuery v 3.7.1
      +Copyright OpenJS Foundation and other contributors, https://openjsf.org/
      +
      +Permission is hereby granted, free of charge, to any person obtaining
      +a copy of this software and associated documentation files (the
      +"Software"), to deal in the Software without restriction, including
      +without limitation the rights to use, copy, modify, merge, publish,
      +distribute, sublicense, and/or sell copies of the Software, and to
      +permit persons to whom the Software is furnished to do so, subject to
      +the following conditions:
      +
      +The above copyright notice and this permission notice shall be
      +included in all copies or substantial portions of the Software.
      +
      +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
      +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
      +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
      +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
      +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
      +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
      +```
      diff --git a/waffle-jna-jakarta/testapidocs/legal/jqueryUI.md b/waffle-jna-jakarta/testapidocs/legal/jqueryUI.md
      new file mode 100644
      index 0000000000..8bda9d7a85
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/legal/jqueryUI.md
      @@ -0,0 +1,49 @@
      +## jQuery UI v1.13.2
      +
      +### jQuery UI License
      +```
      +Copyright jQuery Foundation and other contributors, https://jquery.org/
      +
      +This software consists of voluntary contributions made by many
      +individuals. For exact contribution history, see the revision history
      +available at https://github.com/jquery/jquery-ui
      +
      +The following license applies to all parts of this software except as
      +documented below:
      +
      +====
      +
      +Permission is hereby granted, free of charge, to any person obtaining
      +a copy of this software and associated documentation files (the
      +"Software"), to deal in the Software without restriction, including
      +without limitation the rights to use, copy, modify, merge, publish,
      +distribute, sublicense, and/or sell copies of the Software, and to
      +permit persons to whom the Software is furnished to do so, subject to
      +the following conditions:
      +
      +The above copyright notice and this permission notice shall be
      +included in all copies or substantial portions of the Software.
      +
      +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
      +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
      +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
      +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
      +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
      +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
      +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
      +
      +====
      +
      +Copyright and related rights for sample code are waived via CC0. Sample
      +code is defined as all source code contained within the demos directory.
      +
      +CC0: http://creativecommons.org/publicdomain/zero/1.0/
      +
      +====
      +
      +All files located in the node_modules and external directories are
      +externally maintained libraries used by this software which have their
      +own licenses; we recommend you read them, as their terms may differ from
      +the terms above.
      +
      +```
      diff --git a/waffle-jna-jakarta/testapidocs/link.svg b/waffle-jna-jakarta/testapidocs/link.svg
      new file mode 100644
      index 0000000000..dadef51c52
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/link.svg
      @@ -0,0 +1,31 @@
      +<?xml version="1.0" encoding="UTF-8"?>
      +
      +<!--
      + Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
      + ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +
      +-->
      +
      +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="#505050">
      +    <path d="M32 239.3c18.2 16.7 57.1 15.4 74.5-1.7l30.9-32c8.3-8.8 4.8-15.1.7-19.9-4.7-3-12-8.1-20.4.5l-29.4 29.6a29.4 29.4 0 0 1-39.4.9l-8-7c-8.8-9.4-11-28.3-.8-38.8l49.8-51.3c7.2-6.6 21.3-10 36.1-2.4 6.9 5.4 15.6 15.7 26 6.2 9.9-11.2 2.9-20.4-10-29.3-18.7-12.6-52-14.8-70.4 3.8L17 154.2c-20 20.2-11.3 58 1.7 71.5a69 69 0 0 0 13.2 13.6z"/>
      +    <path d="M223.2 17.5c-18.4-16.6-57.3-15.3-74.6 2l-30.8 31.9c-8.3 9-4.8 15.2-.7 20 4.8 3 12.1 8 20.5-.6 4.8-5 29.3-29.6 29.3-29.6a29.4 29.4 0 0 1 39.4-1l8 6.8c8.8 9.5 11 28.3.9 38.9l-49.6 51.4c-7.2 6.7-21.3 10.1-36.1 2.6-7-5.4-15.7-15.7-26.1-6.2-9.8 11.2-2.8 20.4 10.2 29.3 18.7 12.5 52 14.7 70.3-4l54.4-56.5c20-20.3 11.2-58-1.9-71.5a69 69 0 0 0-13.2-13.5Z"/>
      +</svg>
      diff --git a/waffle-jna-jakarta/testapidocs/member-search-index.js b/waffle-jna-jakarta/testapidocs/member-search-index.js
      new file mode 100644
      index 0000000000..c1444d8b87
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/member-search-index.js
      @@ -0,0 +1 @@
      +memberSearchIndex = [{"p":"waffle.jaas","c":"UsernamePasswordCallbackHandler","l":"handle(Callback[])","u":"handle(javax.security.auth.callback.Callback[])"},{"p":"waffle.jaas","c":"UsernamePasswordCallbackHandler","l":"UsernamePasswordCallbackHandler(String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String)"}];updateSearchResults();
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/testapidocs/module-search-index.js b/waffle-jna-jakarta/testapidocs/module-search-index.js
      new file mode 100644
      index 0000000000..560ee632cb
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/module-search-index.js
      @@ -0,0 +1 @@
      +moduleSearchIndex = [{"l":"waffle.jna.jakarta"}];updateSearchResults();
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/testapidocs/overview-tree.html b/waffle-jna-jakarta/testapidocs/overview-tree.html
      new file mode 100644
      index 0000000000..24afc4ca4c
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/overview-tree.html
      @@ -0,0 +1,79 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>Class Hierarchy (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="class tree">
      +<meta name="generator" content="javadoc/TreeWriter">
      +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="script.js"></script>
      +<script type="text/javascript" src="script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="tree-page">
      +<script type="text/javascript">var pathtoroot = "./";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li>Module</li>
      +<li>Package</li>
      +<li>Class</li>
      +<li>Use</li>
      +<li class="nav-bar-cell1-rev">Tree</li>
      +<li><a href="index-all.html">Index</a></li>
      +<li><a href="help-doc.html#tree">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 class="title">Hierarchy For All Packages</h1>
      +</div>
      +<span class="package-hierarchy-label">Package Hierarchies:</span>
      +<ul class="horizontal contents-list">
      +<li><a href="waffle.jna.jakarta/waffle/jaas/package-tree.html">waffle.jaas</a>, </li>
      +<li><a href="waffle.jna.jakarta/waffle/servlet/package-tree.html">waffle.servlet</a>, </li>
      +<li><a href="waffle.jna.jakarta/waffle/servlet/spi/package-tree.html">waffle.servlet.spi</a>, </li>
      +<li><a href="waffle.jna.jakarta/waffle/util/package-tree.html">waffle.util</a>, </li>
      +<li><a href="waffle.jna.jakarta/waffle/windows/auth/package-tree.html">waffle.windows.auth</a></li>
      +</ul>
      +<section class="hierarchy">
      +<h2 title="Class Hierarchy">Class Hierarchy</h2>
      +<ul>
      +<li class="circle">java.lang.<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" class="type-name-link external-link" title="class or interface in java.lang">Object</a>
      +<ul>
      +<li class="circle">waffle.jaas.<a href="waffle.jna.jakarta/waffle/jaas/UsernamePasswordCallbackHandler.html" class="type-name-link" title="class in waffle.jaas">UsernamePasswordCallbackHandler</a> (implements javax.security.auth.callback.<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/security/auth/callback/CallbackHandler.html" title="class or interface in javax.security.auth.callback" class="external-link">CallbackHandler</a>)</li>
      +</ul>
      +</li>
      +</ul>
      +</section>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/package-search-index.js b/waffle-jna-jakarta/testapidocs/package-search-index.js
      new file mode 100644
      index 0000000000..57d6137557
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/package-search-index.js
      @@ -0,0 +1 @@
      +packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"m":"waffle.jna.jakarta","l":"waffle.jaas"},{"m":"waffle.jna.jakarta","l":"waffle.servlet"},{"m":"waffle.jna.jakarta","l":"waffle.servlet.spi"},{"m":"waffle.jna.jakarta","l":"waffle.util"},{"m":"waffle.jna.jakarta","l":"waffle.windows.auth"}];updateSearchResults();
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/testapidocs/resources/glass.png b/waffle-jna-jakarta/testapidocs/resources/glass.png
      new file mode 100644
      index 0000000000..a7f591f467
      Binary files /dev/null and b/waffle-jna-jakarta/testapidocs/resources/glass.png differ
      diff --git a/waffle-jna-jakarta/testapidocs/resources/x.png b/waffle-jna-jakarta/testapidocs/resources/x.png
      new file mode 100644
      index 0000000000..30548a756e
      Binary files /dev/null and b/waffle-jna-jakarta/testapidocs/resources/x.png differ
      diff --git a/waffle-jna-jakarta/testapidocs/script-dir/jquery-3.7.1.min.js b/waffle-jna-jakarta/testapidocs/script-dir/jquery-3.7.1.min.js
      new file mode 100644
      index 0000000000..7f37b5d991
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/script-dir/jquery-3.7.1.min.js
      @@ -0,0 +1,2 @@
      +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
      +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+"").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",t="(?:\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",p="\\["+ge+"*("+t+")(?:"+ge+"*([*^$|!~]?=)"+ge+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+t+"))|)"+ge+"*\\]",g=":("+t+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+p+")*)|.*)\\)|)",v=new RegExp(ge+"+","g"),y=new RegExp("^"+ge+"*,"+ge+"*"),m=new RegExp("^"+ge+"*([>+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="<a id='"+S+"' href='' disabled='disabled'></a><select id='"+S+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&V(e);var n=b.attrHandle[t.toLowerCase()],r=n&&ue.call(b.attrHandle,t.toLowerCase())?n(e,t,!C):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&&ae.call(e,0),de.call(e,l),a){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(b=ce.expr={cacheLength:50,createPseudo:F,match:D,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(v," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(d,e,t,h,g){var v="nth"!==d.slice(0,3),y="last"!==d.slice(-4),m="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,c=m&&e.nodeName.toLowerCase(),f=!n&&!m,p=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u="only"===d&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){p=(a=(r=(i=l[S]||(l[S]={}))[d]||[])[0]===E&&r[1])&&r[2],o=a&&l.childNodes[a];while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if(1===o.nodeType&&++p&&o===e){i[d]=[E,a,p];break}}else if(f&&(p=a=(r=(i=e[S]||(e[S]={}))[d]||[])[0]===E&&r[1]),!1===p)while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&&++p&&(f&&((i=o[S]||(o[S]={}))[d]=[E,p]),o===e))break;return(p-=g)===h||p%h==0&&0<=p/h}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||I.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?F(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:F(function(e){var r=[],i=[],s=ne(e.replace(ve,"$1"));return s[S]?F(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:F(function(t){return function(e){return 0<I(t,e).length}}),contains:F(function(t){return t=t.replace(O,P),function(e){return-1<(e.textContent||ce.text(e)).indexOf(t)}}),lang:F(function(n){return A.test(n||"")||I.error("unsupported lang: "+n),n=n.replace(O,P).toLowerCase(),function(e){var t;do{if(t=C?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=ie.location&&ie.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return T.activeElement}catch(e){}}()&&T.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:z(!1),disabled:z(!0),checked:function(e){return fe(e,"input")&&!!e.checked||fe(e,"option")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return q.test(e.nodeName)},input:function(e){return N.test(e.nodeName)},button:function(e){return fe(e,"input")&&"button"===e.type||fe(e,"button")},text:function(e){var t;return fe(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:X(function(){return[0]}),last:X(function(e,t){return[t-1]}),eq:X(function(e,t,n){return[n<0?n+t:n]}),even:X(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:X(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:X(function(e,t,n){var r;for(r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:X(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=B(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=_(e);function G(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=y.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ve," ")}),a=a.slice(n.length)),b.filter)!(r=D[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?I.error(e):c(e,s).slice(0)}function Q(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[E,f];if(n){while(e=e[s])if((1===e.nodeType||c)&&a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[S]||(e[S]={}),u&&fe(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===E&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function K(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Z(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)),F(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)I(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),p=!d||!e&&h?f:Z(f,u,d,n,r);if(g?g(p,s=y||(e?d:c||v)?[]:t,n,r):s=p,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(s[l[o]]=!(p[l[o]]=a))}if(e){if(y||d){if(y){i=[],o=s.length;while(o--)(a=s[o])&&i.push(p[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&&-1<(i=y?se.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):k.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=J(function(e){return e===i},a,!0),l=J(function(e){return-1<se.call(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!=w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[J(K(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return ee(1<s&&K(c),1<s&&Q(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ve,"$1"),t,s<n&&te(e.slice(s,n)),n<r&&te(e=e.slice(n)),n<r&&Q(e))}c.push(t)}return K(c)}function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+" "];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[S]?i.push(a):o.push(a);(a=u(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=E+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==T||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==T||(V(o),n=!C);while(s=v[a++])if(s(o,t||T,n)){k.call(r,o);break}i&&(E=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=pe.call(r));f=Z(f)}k.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&ce.uniqueSort(r)}return i&&(E=h,w=p),c},m?F(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Y(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&C&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(O,P),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=D.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(O,P),H.test(o[0].type)&&U(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&Q(o)))return k.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!C,n,!t||H.test(e)&&U(t.parentNode)||t),n}G.prototype=b.filters=b.pseudos,b.setFilters=new G,le.sortStable=S.split("").sort(l).join("")===S,V(),le.sortDetached=$(function(e){return 1&e.compareDocumentPosition(T.createElement("fieldset"))}),ce.find=I,ce.expr[":"]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.tokenize=Y,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var d=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},b=ce.expr.match.needsContext,w=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1<se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)ce.find(e,i[t],n);return 1<r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&b.test(e)?ce(e):e||[],!1).length}});var k,S=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&ce(e);if(!b.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return d(e,"parentNode")},parentsUntil:function(e,t,n){return d(e,"parentNode",n)},next:function(e){return A(e,"nextSibling")},prev:function(e){return A(e,"previousSibling")},nextAll:function(e){return d(e,"nextSibling")},prevAll:function(e){return d(e,"previousSibling")},nextUntil:function(e,t,n){return d(e,"nextSibling",n)},prevUntil:function(e,t,n){return d(e,"previousSibling",n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(fe(e,"template")&&(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=ce.filter(t,n)),1<this.length&&(j[r]||ce.uniqueSort(n),E.test(r)&&n.reverse()),this.pushStack(n)}});var D=/[^\x20\t\r\n\f]+/g;function N(e){return e}function q(e){throw e}function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},ce.each(e.match(D)||[],function(e,t){n[t]=!0}),n):ce.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){ce.each(e,function(e,t){v(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==x(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1<(n=ce.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<ce.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},ce.extend({Deferred:function(e){var o=[["notify","progress",ce.Callbacks("memory"),ce.Callbacks("memory"),2],["resolve","done",ce.Callbacks("once memory"),ce.Callbacks("once memory"),0,"resolved"],["reject","fail",ce.Callbacks("once memory"),ce.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,v(t)?s?t.call(e,l(u,o,N,s),l(u,o,q,s)):(u++,t.call(e,l(u,o,N,s),l(u,o,q,s),l(u,o,N,o.notifyWith))):(a!==N&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&&ce.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==q&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&&(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:N,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:N)),o[2][3].add(l(0,e,v(n)?n:q))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(L(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||v(i[t]&&i[t].then)))return o.then();while(t--)L(i[t],a(t),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&&ie.console.warn&&e&&H.test(e.name)&&ie.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var O=ce.Deferred();function P(){C.removeEventListener("DOMContentLoaded",P),ie.removeEventListener("load",P),ce.ready()}ce.fn.ready=function(e){return O.then(e)["catch"](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&&0<--ce.readyWait||O.resolveWith(C,[ce])}}),ce.ready.then=O.then,"complete"===C.readyState||"loading"!==C.readyState&&!C.documentElement.doScroll?ie.setTimeout(ce.ready):(C.addEventListener("DOMContentLoaded",P),ie.addEventListener("load",P));var M=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n))for(s in i=!0,n)M(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},R=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function F(e){return e.replace(R,"ms-").replace(I,W)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function B(){this.expando=ce.expando+B.uid++}B.uid=1,B.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[F(t)]=n;else for(r in t)i[F(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][F(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(F):(t=F(t))in r?[t]:t.match(D)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!ce.isEmptyObject(t)}};var _=new B,z=new B,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,U=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(U,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:X.test(i)?JSON.parse(i):i)}catch(e){}z.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return z.hasData(e)||_.hasData(e)},data:function(e,t,n){return z.access(e,t,n)},removeData:function(e,t){z.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=z.get(o),1===o.nodeType&&!_.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=F(r.slice(5)),V(o,r,i[r]));_.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){z.set(this,n)}):M(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=z.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){z.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){z.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=_.get(e,t),n&&(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks("once memory").add(function(){_.remove(e,[t+"queue",n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=_.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var G=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Y=new RegExp("^(?:([+-])=|)("+G+")([a-z%]*)$","i"),Q=["Top","Right","Bottom","Left"],J=C.documentElement,K=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};J.getRootNode&&(K=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&K(e)&&"none"===ce.css(e,"display")};function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,"")},u=s(),l=n&&n[3]||(ce.cssNumber[t]?"":"px"),c=e.nodeType&&(ce.cssNumber[t]||"px"!==l&&+u)&&Y.exec(ce.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,ce.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ne={};function re(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=_.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ee(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ne[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ne[s]=u)))):"none"!==n&&(l[c]="none",_.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return re(this,!0)},hide:function(){return re(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var xe,be,we=/^(?:checkbox|radio)$/i,Te=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="<textarea>x</textarea>",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="<option></option>",le.option=!!xe.lastChild;var ke={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],"globalEval",!t||_.get(t[n],"globalEval"))}ke.tbody=ke.tfoot=ke.colgroup=ke.caption=ke.thead,ke.th=ke.td,le.option||(ke.optgroup=ke.option=[1,"<select multiple='multiple'>","</select>"]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))ce.merge(p,o.nodeType?[o]:o);else if(je.test(o)){a=a||f.appendChild(t.createElement("div")),s=(Te.exec(o)||["",""])[1].toLowerCase(),u=ke[s]||ke._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<ce.inArray(o,r))i&&i.push(o);else if(l=K(o),a=Se(f.appendChild(o),"script"),l&&Ee(a),n){c=0;while(o=a[c++])Ce.test(o.type||"")&&n.push(o)}return f}var De=/^([^.]*)(?:\.(.+)|)/;function Ne(){return!0}function qe(){return!1}function Le(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Le(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=qe;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(ce.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&&ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.get(t);if($(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&ce.find.matchesSelector(J,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof ce&&ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(D)||[""]).length;while(l--)d=g=(s=De.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},c=ce.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),ce.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.hasData(e)&&_.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(D)||[""]).length;while(l--)if(d=g=(s=De.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=ce.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||ce.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[l],n,r,!0);ce.isEmptyObject(u)&&_.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,"events")||Object.create(null))[u.type]||[],c=ce.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=ce.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<ce(i,this).index(l):ce.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click",!0),!1},trigger:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click"),!0},_default:function(e){var t=e.target;return we.test(t.type)&&t.click&&fe(t,"input")&&_.get(t,"click")||fe(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ne:qe,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:qe,isPropagationStopped:qe,isImmediatePropagationStopped:qe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},ce.event.addProp),ce.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){if(C.documentMode){var t=_.get(this,"handle"),n=ce.event.fix(e);n.type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(He(this,r,!0),!C.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return He(this,r),!0},teardown:function(){var e;if(!C.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i);n||(C.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(C.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return Le(this,e,t,n,r)},one:function(e,t,n,r){return Le(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=qe),this.each(function(){ce.event.remove(this,e,n,t)})}});var Oe=/<script|<style|<link/i,Pe=/checked\s*(?:[^=]|=\s*.checked.)/i,Me=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)ce.event.add(t,i,s[i][n]);z.hasData(e)&&(o=z.access(e),a=ce.extend({},o),z.set(t,a))}}function $e(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=v(d);if(h||1<f&&"string"==typeof d&&!le.checkClone&&Pe.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),$e(t,r,i,o)});if(f&&(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=ce.map(Se(e,"script"),Ie)).length;c<f;c++)u=e,c!==p&&(u=ce.clone(u,!0,!0),s&&ce.merge(a,Se(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,We),c=0;c<s;c++)u=a[c],Ce.test(u.type||"")&&!_.access(u,"globalEval")&&ce.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?ce._evalUrl&&!u.noModule&&ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):m(u.textContent.replace(Me,""),u,l))}return n}function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Se(r)),r.parentNode&&(n&&K(r)&&Ee(Se(r,"script")),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=K(e);if(!(le.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=Se(c),r=0,i=(o=Se(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&we.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Se(e),a=a||Se(c),r=0,i=o.length;r<i;r++)Fe(o[r],a[r]);else Fe(e,c);return 0<(a=Se(c,"script")).length&&Ee(a,!f&&Se(e,"script")),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if($(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[z.expando]&&(n[z.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return M(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return $e(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return $e(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(Se(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return M(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Oe.test(e)&&!ke[(Te.exec(e)||["",""])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(ce.cleanData(Se(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return $e(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)<0&&(ce.cleanData(Se(this)),t&&t.replaceChild(e,this))},n)}}),ce.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var _e=new RegExp("^("+G+")(?!px)[a-z%]+$","i"),ze=/^--/,Xe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=ie),t.getComputedStyle(e)},Ue=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ve=new RegExp(Q.join("|"),"i");function Ge(e,t,n){var r,i,o,a,s=ze.test(t),u=e.style;return(n=n||Xe(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace(ve,"$1")||void 0),""!==a||K(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&&_e.test(a)&&Ve.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function Ye(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",J.appendChild(u).appendChild(l);var e=ie.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),J.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=C.createElement("div"),l=C.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",le.clearCloneStyle="content-box"===l.style.backgroundClip,ce.extend(le,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=C.createElement("table"),t=C.createElement("tr"),n=C.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="box-sizing:content-box;border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",J.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,J.removeChild(e)),a}}))}();var Qe=["Webkit","Moz","ms"],Je=C.createElement("div").style,Ke={};function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Qe.length;while(n--)if((e=Qe[n]+t)in Je)return e}(e)||e)}var et=/^(none|table(?!-c[ea]).+)/,tt={position:"absolute",visibility:"hidden",display:"block"},nt={letterSpacing:"0",fontWeight:"400"};function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function it(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=ce.css(e,n+Q[a],!0,i)),r?("content"===n&&(u-=ce.css(e,"padding"+Q[a],!0,i)),"margin"!==n&&(u-=ce.css(e,"border"+Q[a]+"Width",!0,i))):(u+=ce.css(e,"padding"+Q[a],!0,i),"padding"!==n?u+=ce.css(e,"border"+Q[a]+"Width",!0,i):s+=ce.css(e,"border"+Q[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function ot(e,t,n){var r=Xe(e),i=(!le.boxSizingReliable()||n)&&"border-box"===ce.css(e,"boxSizing",!1,r),o=i,a=Ge(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a="auto"}return(!le.boxSizingReliable()&&i||!le.reliableTrDimensions()&&fe(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===ce.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===ce.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+it(e,t,n||(i?"border":"content"),o,r,a)+"px"}function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ge(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=F(t),u=ze.test(t),l=e.style;if(u||(t=Ze(s)),a=ce.cssHooks[t]||ce.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=Y.exec(n))&&i[1]&&(n=te(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(ce.cssNumber[s]?"":"px")),le.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=F(t);return ze.test(t)||(t=Ze(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ge(e,t,r)),"normal"===i&&t in nt&&(i=nt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each(["height","width"],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!et.test(ce.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,u,n):Ue(e,tt,function(){return ot(e,u,n)})},set:function(e,t,n){var r,i=Xe(e),o=!le.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===ce.css(e,"boxSizing",!1,i),s=n?it(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-it(e,u,"border",!1,i)-.5)),s&&(r=Y.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=ce.css(e,u)),rt(0,t,s)}}}),ce.cssHooks.marginLeft=Ye(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ge(e,"marginLeft"))||e.getBoundingClientRect().left-Ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),ce.each({margin:"",padding:"",border:"Width"},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+Q[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(ce.cssHooks[i+o].set=rt)}),ce.fn.extend({css:function(e,t){return M(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Xe(e),i=t.length;a<i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1<arguments.length)}}),((ce.Tween=at).prototype={constructor:at,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?"":"px")},cur:function(){var e=at.propHooks[this.prop];return e&&e.get?e.get(this):at.propHooks._default.get(this)},run:function(e){var t,n=at.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):at.propHooks._default.set(this),this}}).init.prototype=at.prototype,(at.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||!ce.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=at.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ce.fx=at.prototype.init,ce.fx.step={};var st,ut,lt,ct,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAnimationFrame(dt):ie.setTimeout(dt,ce.fx.interval),ce.fx.tick())}function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=Q[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=st||ht(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:ce.extend({},e),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},t),originalProperties:e,originalOptions:t,startTime:st||ht(),duration:t.duration,tweens:[],createTween:function(e,t){var n=ce.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=F(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=ce.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=yt.prefilters[r].call(l,o,c,l.opts))return v(n.stop)&&(ce._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return ce.map(c,vt,l),v(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),ce.fx.timer(ce.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}ce.Animation=ce.extend(yt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return te(n.elem,e,Y.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(D);for(var n,r=0,i=e.length;r<i;r++)n=e[r],yt.tweeners[n]=yt.tweeners[n]||[],yt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ee(e),v=_.get(e,"fxshow");for(r in n.queue||(null==(a=ce._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,ce.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ft.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||ce.style(e,r)}if((u=!ce.isEmptyObject(t))||!ce.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=_.get(e,"display")),"none"===(c=ce.css(e,"display"))&&(l?c=l:(re([e],!0),l=e.style.display||l,c=ce.css(e,"display"),re([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===ce.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=_.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&re([e],!0),p.done(function(){for(r in g||re([e]),_.remove(e,"fxshow"),d)ce.style(e,r,d[r])})),u=vt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?yt.prefilters.unshift(e):yt.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&"object"==typeof e?ce.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return ce.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in ce.fx.speeds?r.duration=ce.fx.speeds[r.duration]:r.duration=ce.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ee).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=ce.isEmptyObject(t),o=ce.speed(e,n,r),a=function(){var e=yt(this,ce.extend({},t),o);(i||_.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=ce.timers,r=_.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||ce.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=_.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=ce.timers,o=n?n.length:0;for(t.finish=!0,ce.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),ce.each(["toggle","show","hide"],function(e,r){var i=ce.fn[r];ce.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),ce.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){ce.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(st=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),st=void 0},ce.fx.timer=function(e){ce.timers.push(e),ce.fx.start()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=!0,dt())},ce.fx.stop=function(){ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(r,e){return r=ce.fx&&ce.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},lt=C.createElement("input"),ct=C.createElement("select").appendChild(C.createElement("option")),lt.type="checkbox",le.checkOn=""!==lt.value,le.optSelected=ct.selected,(lt=C.createElement("input")).value="t",lt.type="radio",le.radioValue="t"===lt.value;var mt,xt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return M(this,ce.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&&"radio"===t&&fe(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(D);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),function(e,t){var a=xt[t]||ce.find.attr;xt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=xt[o],xt[o]=r,r=null!=a(e,t,n)?o:null,xt[o]=i),r}});var bt=/^(?:input|select|textarea|button)$/i,wt=/^(?:a|area)$/i;function Tt(e){return(e.match(D)||[]).join(" ")}function Ct(e){return e.getAttribute&&e.getAttribute("class")||""}function kt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)||[]}ce.fn.extend({prop:function(e,t){return M(this,ce.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),le.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,Ct(this)))}):(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,Ct(this)))}):arguments.length?(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,Ct(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=kt(t),this.each(function(){if(s)for(o=ce(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=Ct(this))&&_.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":_.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+Tt(Ct(n))+" ").indexOf(t))return!0;return!1}});var St=/\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,ce(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=ce.map(t,function(e){return null==e?"":e+""})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(St,""):null==e?"":e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,"value");return null!=t?t:Tt(ce.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!fe(n.parentNode,"optgroup"))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<ce.inArray(ce.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each(["radio","checkbox"],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=ie.location,jt={guid:Date.now()},At=/\?/;ce.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||ce.error("Invalid XML: "+(n?ce.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Dt=/^(?:focusinfocus|focusoutblur)$/,Nt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||C],d=ue.call(e,"type")?e.type:e,h=ue.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||C,3!==n.nodeType&&8!==n.nodeType&&!Dt.test(d+ce.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[ce.expando]?e:new ce.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:ce.makeArray(t,[e]),c=ce.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!y(n)){for(s=c.delegateType||d,Dt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||C)&&p.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(_.get(o,"events")||Object.create(null))[e.type]&&_.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&$(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!$(n)||u&&v(n[d])&&!y(n)&&((a=n[u])&&(n[u]=null),ce.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Nt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Nt),ce.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var qt=/\[\]$/,Lt=/\r?\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||qt.test(n)?i(n,t):Pt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==x(e))i(n,e);else for(t in e)Pt(n+"["+t+"]",e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Pt(n,e[n],t,i);return r.join("&")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,"elements");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(":disabled")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}}):{name:t.name,value:n.replace(Lt,"\r\n")}}).get()}});var Mt=/%20/g,Rt=/#.*$/,It=/([?&])_=[^&]*/,Wt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:GET|HEAD)$/,$t=/^\/\//,Bt={},_t={},zt="*/".concat("*"),Xt=C.createElement("a");function Ut(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(D)||[];if(v(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!0,ce.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}Xt.href=Et.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Gt(Gt(e,ce.ajaxSettings),t):Gt(ce.ajaxSettings,e)},ajaxPrefilter:Ut(Bt),ajaxTransport:Ut(_t),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=ce.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?ce(y):ce.event,x=ce.Deferred(),b=ce.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Wt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace($t,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(D)||[""],null==v.crossDomain){r=C.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Xt.protocol+"//"+Xt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=ce.param(v.data,v.traditional)),Vt(Bt,v,t,T),h)return T;for(i in(g=ce.event&&v.global)&&0==ce.active++&&ce.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ft.test(v.type),f=v.url.replace(Rt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Mt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(At.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(It,"$1"),o=(At.test(f)?"&":"?")+"_="+jt.guid+++o),v.url=f+o),v.ifModified&&(ce.lastModified[f]&&T.setRequestHeader("If-Modified-Since",ce.lastModified[f]),ce.etag[f]&&T.setRequestHeader("If-None-Match",ce.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+zt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Vt(_t,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=ie.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&ie.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<ce.inArray("script",v.dataTypes)&&ce.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(ce.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(ce.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--ce.active||ce.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return ce.get(e,t,n,"json")},getScript:function(e,t){return ce.get(e,void 0,t,"script")}}),ce.each(["get","post"],function(e,i){ce[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),ce.ajax(ce.extend({url:e,type:i,dataType:r,data:t,success:n},ce.isPlainObject(e)&&e))}}),ce.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),ce._evalUrl=function(e,t,n){return ce.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){ce.globalEval(e,t,n)}})},ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ce.ajaxSettings.xhr=function(){try{return new ie.XMLHttpRequest}catch(e){}};var Yt={0:200,1223:204},Qt=ce.ajaxSettings.xhr();le.cors=!!Qt&&"withCredentials"in Qt,le.ajax=Qt=!!Qt,ce.ajaxTransport(function(i){var o,a;if(le.cors||Qt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Yt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&ie.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ce.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ce.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=ce("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Tt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&ce.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?ce("<div>").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var en=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=F,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?"":(e+"").replace(en,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ce});var tn=ie.jQuery,nn=ie.$;return ce.noConflict=function(e){return ie.$===ce&&(ie.$=nn),e&&ie.jQuery===ce&&(ie.jQuery=tn),ce},"undefined"==typeof e&&(ie.jQuery=ie.$=ce),ce});
      diff --git a/waffle-jna-jakarta/testapidocs/script-dir/jquery-ui.min.css b/waffle-jna-jakarta/testapidocs/script-dir/jquery-ui.min.css
      new file mode 100644
      index 0000000000..693327f014
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/script-dir/jquery-ui.min.css
      @@ -0,0 +1,6 @@
      +/*! jQuery UI - v1.13.2 - 2023-02-27
      +* http://jqueryui.com
      +* Includes: core.css, autocomplete.css, menu.css
      +* Copyright jQuery Foundation and other contributors; Licensed MIT */
      +
      +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;-ms-filter:"alpha(opacity=0)"}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0}
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/testapidocs/script-dir/jquery-ui.min.js b/waffle-jna-jakarta/testapidocs/script-dir/jquery-ui.min.js
      new file mode 100644
      index 0000000000..8166a15ee2
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/script-dir/jquery-ui.min.js
      @@ -0,0 +1,6 @@
      +/*! jQuery UI - v1.13.2 - 2023-02-27
      +* http://jqueryui.com
      +* Includes: widget.js, position.js, keycode.js, unique-id.js, widgets/autocomplete.js, widgets/menu.js
      +* Copyright jQuery Foundation and other contributors; Licensed MIT */
      +
      +!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(x){"use strict";x.ui=x.ui||{};x.ui.version="1.13.2";var n,i=0,l=Array.prototype.hasOwnProperty,a=Array.prototype.slice;x.cleanData=(n=x.cleanData,function(t){for(var e,i,s=0;null!=(i=t[s]);s++)(e=x._data(i,"events"))&&e.remove&&x(i).triggerHandler("remove");n(t)}),x.widget=function(t,i,e){var s,n,o,l={},a=t.split(".")[0],r=a+"-"+(t=t.split(".")[1]);return e||(e=i,i=x.Widget),Array.isArray(e)&&(e=x.extend.apply(null,[{}].concat(e))),x.expr.pseudos[r.toLowerCase()]=function(t){return!!x.data(t,r)},x[a]=x[a]||{},s=x[a][t],n=x[a][t]=function(t,e){if(!this||!this._createWidget)return new n(t,e);arguments.length&&this._createWidget(t,e)},x.extend(n,s,{version:e.version,_proto:x.extend({},e),_childConstructors:[]}),(o=new i).options=x.widget.extend({},o.options),x.each(e,function(e,s){function n(){return i.prototype[e].apply(this,arguments)}function o(t){return i.prototype[e].apply(this,t)}l[e]="function"==typeof s?function(){var t,e=this._super,i=this._superApply;return this._super=n,this._superApply=o,t=s.apply(this,arguments),this._super=e,this._superApply=i,t}:s}),n.prototype=x.widget.extend(o,{widgetEventPrefix:s&&o.widgetEventPrefix||t},l,{constructor:n,namespace:a,widgetName:t,widgetFullName:r}),s?(x.each(s._childConstructors,function(t,e){var i=e.prototype;x.widget(i.namespace+"."+i.widgetName,n,e._proto)}),delete s._childConstructors):i._childConstructors.push(n),x.widget.bridge(t,n),n},x.widget.extend=function(t){for(var e,i,s=a.call(arguments,1),n=0,o=s.length;n<o;n++)for(e in s[n])i=s[n][e],l.call(s[n],e)&&void 0!==i&&(x.isPlainObject(i)?t[e]=x.isPlainObject(t[e])?x.widget.extend({},t[e],i):x.widget.extend({},i):t[e]=i);return t},x.widget.bridge=function(o,e){var l=e.prototype.widgetFullName||o;x.fn[o]=function(i){var t="string"==typeof i,s=a.call(arguments,1),n=this;return t?this.length||"instance"!==i?this.each(function(){var t,e=x.data(this,l);return"instance"===i?(n=e,!1):e?"function"!=typeof e[i]||"_"===i.charAt(0)?x.error("no such method '"+i+"' for "+o+" widget instance"):(t=e[i].apply(e,s))!==e&&void 0!==t?(n=t&&t.jquery?n.pushStack(t.get()):t,!1):void 0:x.error("cannot call methods on "+o+" prior to initialization; attempted to call method '"+i+"'")}):n=void 0:(s.length&&(i=x.widget.extend.apply(null,[i].concat(s))),this.each(function(){var t=x.data(this,l);t?(t.option(i||{}),t._init&&t._init()):x.data(this,l,new e(i,this))})),n}},x.Widget=function(){},x.Widget._childConstructors=[],x.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=x(e||this.defaultElement||this)[0],this.element=x(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=x(),this.hoverable=x(),this.focusable=x(),this.classesElementLookup={},e!==this&&(x.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=x(e.style?e.ownerDocument:e.document||e),this.window=x(this.document[0].defaultView||this.document[0].parentWindow)),this.options=x.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:x.noop,_create:x.noop,_init:x.noop,destroy:function(){var i=this;this._destroy(),x.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:x.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return x.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=x.widget.extend({},this.options[t]),n=0;n<i.length-1;n++)s[i[n]]=s[i[n]]||{},s=s[i[n]];if(t=i.pop(),1===arguments.length)return void 0===s[t]?null:s[t];s[t]=e}else{if(1===arguments.length)return void 0===this.options[t]?null:this.options[t];o[t]=e}return this._setOptions(o),this},_setOptions:function(t){for(var e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(t){var e,i,s;for(e in t)s=this.classesElementLookup[e],t[e]!==this.options.classes[e]&&s&&s.length&&(i=x(s.get()),this._removeClass(s,e),i.addClass(this._classes({element:i,keys:e,classes:t,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(n){var o=[],l=this;function t(t,e){for(var i,s=0;s<t.length;s++)i=l.classesElementLookup[t[s]]||x(),i=n.add?(function(){var i=[];n.element.each(function(t,e){x.map(l.classesElementLookup,function(t){return t}).some(function(t){return t.is(e)})||i.push(e)}),l._on(x(i),{remove:"_untrackClassesElement"})}(),x(x.uniqueSort(i.get().concat(n.element.get())))):x(i.not(n.element).get()),l.classesElementLookup[t[s]]=i,o.push(t[s]),e&&n.classes[t[s]]&&o.push(n.classes[t[s]])}return(n=x.extend({element:this.element,classes:this.options.classes||{}},n)).keys&&t(n.keys.match(/\S+/g)||[],!0),n.extra&&t(n.extra.match(/\S+/g)||[]),o.join(" ")},_untrackClassesElement:function(i){var s=this;x.each(s.classesElementLookup,function(t,e){-1!==x.inArray(i.target,e)&&(s.classesElementLookup[t]=x(e.not(i.target).get()))}),this._off(x(i.target))},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){var n="string"==typeof t||null===t,i={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s="boolean"==typeof s?s:i};return i.element.toggleClass(this._classes(i),s),this},_on:function(n,o,t){var l,a=this;"boolean"!=typeof n&&(t=o,o=n,n=!1),t?(o=l=x(o),this.bindings=this.bindings.add(o)):(t=o,o=this.element,l=this.widget()),x.each(t,function(t,e){function i(){if(n||!0!==a.options.disabled&&!x(this).hasClass("ui-state-disabled"))return("string"==typeof e?a[e]:e).apply(a,arguments)}"string"!=typeof e&&(i.guid=e.guid=e.guid||i.guid||x.guid++);var s=t.match(/^([\w:-]*)\s*(.*)$/),t=s[1]+a.eventNamespace,s=s[2];s?l.on(t,s,i):o.on(t,i)})},_off:function(t,e){e=(e||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,t.off(e),this.bindings=x(this.bindings.not(t).get()),this.focusable=x(this.focusable.not(t).get()),this.hoverable=x(this.hoverable.not(t).get())},_delay:function(t,e){var i=this;return setTimeout(function(){return("string"==typeof t?i[t]:t).apply(i,arguments)},e||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){this._addClass(x(t.currentTarget),null,"ui-state-hover")},mouseleave:function(t){this._removeClass(x(t.currentTarget),null,"ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){this._addClass(x(t.currentTarget),null,"ui-state-focus")},focusout:function(t){this._removeClass(x(t.currentTarget),null,"ui-state-focus")}})},_trigger:function(t,e,i){var s,n,o=this.options[t];if(i=i||{},(e=x.Event(e)).type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),e.target=this.element[0],n=e.originalEvent)for(s in n)s in e||(e[s]=n[s]);return this.element.trigger(e,i),!("function"==typeof o&&!1===o.apply(this.element[0],[e].concat(i))||e.isDefaultPrevented())}},x.each({show:"fadeIn",hide:"fadeOut"},function(o,l){x.Widget.prototype["_"+o]=function(e,t,i){var s,n=(t="string"==typeof t?{effect:t}:t)?!0!==t&&"number"!=typeof t&&t.effect||l:o;"number"==typeof(t=t||{})?t={duration:t}:!0===t&&(t={}),s=!x.isEmptyObject(t),t.complete=i,t.delay&&e.delay(t.delay),s&&x.effects&&x.effects.effect[n]?e[o](t):n!==o&&e[n]?e[n](t.duration,t.easing,i):e.queue(function(t){x(this)[o](),i&&i.call(e[0]),t()})}});var s,C,E,o,r,u,h,c,k;x.widget;function T(t,e,i){return[parseFloat(t[0])*(c.test(t[0])?e/100:1),parseFloat(t[1])*(c.test(t[1])?i/100:1)]}function A(t,e){return parseInt(x.css(t,e),10)||0}function W(t){return null!=t&&t===t.window}C=Math.max,E=Math.abs,o=/left|center|right/,r=/top|center|bottom/,u=/[\+\-]\d+(\.[\d]+)?%?/,h=/^\w+/,c=/%$/,k=x.fn.position,x.position={scrollbarWidth:function(){if(void 0!==s)return s;var t,e=x("<div style='display:block;position:absolute;width:200px;height:200px;overflow:hidden;'><div style='height:300px;width:auto;'></div></div>"),i=e.children()[0];return x("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.width<t.element[0].scrollWidth;return{width:"scroll"===i||"auto"===i&&t.height<t.element[0].scrollHeight?x.position.scrollbarWidth():0,height:e?x.position.scrollbarWidth():0}},getWithinInfo:function(t){var e=x(t||window),i=W(e[0]),s=!!e[0]&&9===e[0].nodeType;return{element:e,isWindow:i,isDocument:s,offset:!i&&!s?x(t).offset():{left:0,top:0},scrollLeft:e.scrollLeft(),scrollTop:e.scrollTop(),width:e.outerWidth(),height:e.outerHeight()}}},x.fn.position=function(c){if(!c||!c.of)return k.apply(this,arguments);var d,f,m,p,v,t,g="string"==typeof(c=x.extend({},c)).of?x(document).find(c.of):x(c.of),_=x.position.getWithinInfo(c.within),y=x.position.getScrollInfo(_),b=(c.collision||"flip").split(" "),w={},e=9===(t=(e=g)[0]).nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:W(t)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:t.preventDefault?{width:0,height:0,offset:{top:t.pageY,left:t.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()};return g[0].preventDefault&&(c.at="left top"),f=e.width,m=e.height,v=x.extend({},p=e.offset),x.each(["my","at"],function(){var t,e,i=(c[this]||"").split(" ");(i=1===i.length?o.test(i[0])?i.concat(["center"]):r.test(i[0])?["center"].concat(i):["center","center"]:i)[0]=o.test(i[0])?i[0]:"center",i[1]=r.test(i[1])?i[1]:"center",t=u.exec(i[0]),e=u.exec(i[1]),w[this]=[t?t[0]:0,e?e[0]:0],c[this]=[h.exec(i[0])[0],h.exec(i[1])[0]]}),1===b.length&&(b[1]=b[0]),"right"===c.at[0]?v.left+=f:"center"===c.at[0]&&(v.left+=f/2),"bottom"===c.at[1]?v.top+=m:"center"===c.at[1]&&(v.top+=m/2),d=T(w.at,f,m),v.left+=d[0],v.top+=d[1],this.each(function(){var i,t,l=x(this),a=l.outerWidth(),r=l.outerHeight(),e=A(this,"marginLeft"),s=A(this,"marginTop"),n=a+e+A(this,"marginRight")+y.width,o=r+s+A(this,"marginBottom")+y.height,u=x.extend({},v),h=T(w.my,l.outerWidth(),l.outerHeight());"right"===c.my[0]?u.left-=a:"center"===c.my[0]&&(u.left-=a/2),"bottom"===c.my[1]?u.top-=r:"center"===c.my[1]&&(u.top-=r/2),u.left+=h[0],u.top+=h[1],i={marginLeft:e,marginTop:s},x.each(["left","top"],function(t,e){x.ui.position[b[t]]&&x.ui.position[b[t]][e](u,{targetWidth:f,targetHeight:m,elemWidth:a,elemHeight:r,collisionPosition:i,collisionWidth:n,collisionHeight:o,offset:[d[0]+h[0],d[1]+h[1]],my:c.my,at:c.at,within:_,elem:l})}),c.using&&(t=function(t){var e=p.left-u.left,i=e+f-a,s=p.top-u.top,n=s+m-r,o={target:{element:g,left:p.left,top:p.top,width:f,height:m},element:{element:l,left:u.left,top:u.top,width:a,height:r},horizontal:i<0?"left":0<e?"right":"center",vertical:n<0?"top":0<s?"bottom":"middle"};f<a&&E(e+i)<f&&(o.horizontal="center"),m<r&&E(s+n)<m&&(o.vertical="middle"),C(E(e),E(i))>C(E(s),E(n))?o.important="horizontal":o.important="vertical",c.using.call(this,t,o)}),l.offset(x.extend(u,{using:t}))})},x.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,l=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0<l&&a<=0?(i=t.left+l+e.collisionWidth-n-s,t.left+=l-i):t.left=!(0<a&&l<=0)&&a<l?s+n-e.collisionWidth:s:0<l?t.left+=l:0<a?t.left-=a:t.left=C(t.left-o,t.left)},top:function(t,e){var i=e.within,s=i.isWindow?i.scrollTop:i.offset.top,n=e.within.height,o=t.top-e.collisionPosition.marginTop,l=s-o,a=o+e.collisionHeight-n-s;e.collisionHeight>n?0<l&&a<=0?(i=t.top+l+e.collisionHeight-n-s,t.top+=l-i):t.top=!(0<a&&l<=0)&&a<l?s+n-e.collisionHeight:s:0<l?t.top+=l:0<a?t.top-=a:t.top=C(t.top-o,t.top)}},flip:{left:function(t,e){var i=e.within,s=i.offset.left+i.scrollLeft,n=i.width,o=i.isWindow?i.scrollLeft:i.offset.left,l=t.left-e.collisionPosition.marginLeft,a=l-o,r=l+e.collisionWidth-n-o,u="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,i="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,l=-2*e.offset[0];a<0?((s=t.left+u+i+l+e.collisionWidth-n-s)<0||s<E(a))&&(t.left+=u+i+l):0<r&&(0<(o=t.left-e.collisionPosition.marginLeft+u+i+l-o)||E(o)<r)&&(t.left+=u+i+l)},top:function(t,e){var i=e.within,s=i.offset.top+i.scrollTop,n=i.height,o=i.isWindow?i.scrollTop:i.offset.top,l=t.top-e.collisionPosition.marginTop,a=l-o,r=l+e.collisionHeight-n-o,u="top"===e.my[1]?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,i="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,l=-2*e.offset[1];a<0?((s=t.top+u+i+l+e.collisionHeight-n-s)<0||s<E(a))&&(t.top+=u+i+l):0<r&&(0<(o=t.top-e.collisionPosition.marginTop+u+i+l-o)||E(o)<r)&&(t.top+=u+i+l)}},flipfit:{left:function(){x.ui.position.flip.left.apply(this,arguments),x.ui.position.fit.left.apply(this,arguments)},top:function(){x.ui.position.flip.top.apply(this,arguments),x.ui.position.fit.top.apply(this,arguments)}}};var t;x.ui.position,x.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},x.fn.extend({uniqueId:(t=0,function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&x(this).removeAttr("id")})}}),x.ui.safeActiveElement=function(e){var i;try{i=e.activeElement}catch(t){i=e.body}return i=!(i=i||e.body).nodeName?e.body:i},x.widget("ui.menu",{version:"1.13.2",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=x(t.target),i=x(x.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){x.contains(this.element[0],x.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=x(t.target).closest(".ui-menu-item"),i=x(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=x(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case x.ui.keyCode.PAGE_UP:this.previousPage(t);break;case x.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case x.ui.keyCode.HOME:this._move("first","first",t);break;case x.ui.keyCode.END:this._move("last","last",t);break;case x.ui.keyCode.UP:this.previous(t);break;case x.ui.keyCode.DOWN:this.next(t);break;case x.ui.keyCode.LEFT:this.collapse(t);break;case x.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case x.ui.keyCode.ENTER:case x.ui.keyCode.SPACE:this._activate(t);break;case x.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=x(this),e=t.prev(),i=x("<span>").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=x(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!x.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(x.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(x.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s<e+t&&this.activeMenu.scrollTop(i+e-s+t))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(t){var e=x.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(e)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var t=i?this.element:x(e&&e.target).closest(this.element.find(".ui-menu"));t.length||(t=this.element),this._close(t),this.blur(e),this._removeClass(t.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=t},i?0:this.delay)},_close:function(t){(t=t||(this.active?this.active.parent():this.element)).find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(t){return!x(t.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this._menuItems(this.active.children(".ui-menu")).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_menuItems:function(t){return(t||this.element).find(this.options.items).filter(".ui-menu-item")},_move:function(t,e,i){var s;(s=this.active?"first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").last():this.active[t+"All"](".ui-menu-item").first():s)&&s.length&&this.active||(s=this._menuItems(this.activeMenu)[e]()),this.focus(i,s)},nextPage:function(t){var e,i,s;this.active?this.isLastItem()||(this._hasScroll()?(i=this.active.offset().top,s=this.element.innerHeight(),0===x.fn.jquery.indexOf("3.2.")&&(s+=this.element[0].offsetHeight-this.element.outerHeight()),this.active.nextAll(".ui-menu-item").each(function(){return(e=x(this)).offset().top-i-s<0}),this.focus(t,e)):this.focus(t,this._menuItems(this.activeMenu)[this.active?"last":"first"]())):this.next(t)},previousPage:function(t){var e,i,s;this.active?this.isFirstItem()||(this._hasScroll()?(i=this.active.offset().top,s=this.element.innerHeight(),0===x.fn.jquery.indexOf("3.2.")&&(s+=this.element[0].offsetHeight-this.element.outerHeight()),this.active.prevAll(".ui-menu-item").each(function(){return 0<(e=x(this)).offset().top-i+s}),this.focus(t,e)):this.focus(t,this._menuItems(this.activeMenu).first())):this.next(t)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||x(t.target).closest(".ui-menu-item");var e={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,e)},_filterMenuItems:function(t){var t=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),e=new RegExp("^"+t,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return e.test(String.prototype.trim.call(x(this).children(".ui-menu-item-wrapper").text()))})}});x.widget("ui.autocomplete",{version:"1.13.2",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=x("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().attr({unselectable:"on"}).menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(t,e){var i,s;if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){x(t.target).trigger(t.originalEvent)});s=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:s})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(s.value),(i=e.item.attr("aria-label")||s.value)&&String.prototype.trim.call(i).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(x("<div>").text(i))},100))},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==x.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=x("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||x.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?x(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(".ui-front, dialog"):t).length?this.document[0].body:t},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(x.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(t,e){n.xhr&&n.xhr.abort(),n.xhr=x.ajax({url:s,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;t&&(e||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):!1!==this._trigger("search",e)?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")}.bind(this)},__response:function(t){t=t&&this._normalize(t),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:x.map(t,function(t){return"string"==typeof t?{label:t,value:t}:x.extend({},t,{label:t.label||t.value,value:t.value||t.label})})},_suggest:function(t){var e=this.menu.element.empty();this._renderMenu(e,t),this.isNewMenu=!0,this.menu.refresh(),e.show(),this._resizeMenu(),e.position(x.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(i,t){var s=this;x.each(t,function(t,e){s._renderItemData(i,e)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(t,e){return x("<li>").append(x("<div>").text(e.label)).appendTo(t)},_move:function(t,e){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),x.extend(x.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,e){var i=new RegExp(x.ui.autocomplete.escapeRegex(e),"i");return x.grep(t,function(t){return i.test(t.label||t.value||t)})}}),x.widget("ui.autocomplete",x.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1<t?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var e;this._superApply(arguments),this.options.disabled||this.cancelSearch||(e=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(x("<div>").text(e))},100))}});x.ui.autocomplete});
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/testapidocs/script.js b/waffle-jna-jakarta/testapidocs/script.js
      new file mode 100644
      index 0000000000..f1a0f25646
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/script.js
      @@ -0,0 +1,253 @@
      +/*
      + * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved.
      + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + */
      +
      +var moduleSearchIndex;
      +var packageSearchIndex;
      +var typeSearchIndex;
      +var memberSearchIndex;
      +var tagSearchIndex;
      +
      +var oddRowColor = "odd-row-color";
      +var evenRowColor = "even-row-color";
      +var sortAsc = "sort-asc";
      +var sortDesc = "sort-desc";
      +var tableTab = "table-tab";
      +var activeTableTab = "active-table-tab";
      +
      +function loadScripts(doc, tag) {
      +    createElem(doc, tag, 'search.js');
      +
      +    createElem(doc, tag, 'module-search-index.js');
      +    createElem(doc, tag, 'package-search-index.js');
      +    createElem(doc, tag, 'type-search-index.js');
      +    createElem(doc, tag, 'member-search-index.js');
      +    createElem(doc, tag, 'tag-search-index.js');
      +}
      +
      +function createElem(doc, tag, path) {
      +    var script = doc.createElement(tag);
      +    var scriptElement = doc.getElementsByTagName(tag)[0];
      +    script.src = pathtoroot + path;
      +    scriptElement.parentNode.insertBefore(script, scriptElement);
      +}
      +
      +// Helper for  making content containing release names comparable lexicographically
      +function makeComparable(s) {
      +    return s.toLowerCase().replace(/(\d+)/g,
      +        function(n, m) {
      +            return ("000" + m).slice(-4);
      +        });
      +}
      +
      +// Switches between two styles depending on a condition
      +function toggleStyle(classList, condition, trueStyle, falseStyle) {
      +    if (condition) {
      +        classList.remove(falseStyle);
      +        classList.add(trueStyle);
      +    } else {
      +        classList.remove(trueStyle);
      +        classList.add(falseStyle);
      +    }
      +}
      +
      +// Sorts the rows in a table lexicographically by the content of a specific column
      +function sortTable(header, columnIndex, columns) {
      +    var container = header.parentElement;
      +    var descending = header.classList.contains(sortAsc);
      +    container.querySelectorAll("div.table-header").forEach(
      +        function(header) {
      +            header.classList.remove(sortAsc);
      +            header.classList.remove(sortDesc);
      +        }
      +    )
      +    var cells = container.children;
      +    var rows = [];
      +    for (var i = columns; i < cells.length; i += columns) {
      +        rows.push(Array.prototype.slice.call(cells, i, i + columns));
      +    }
      +    var comparator = function(a, b) {
      +        var ka = makeComparable(a[columnIndex].textContent);
      +        var kb = makeComparable(b[columnIndex].textContent);
      +        if (ka < kb)
      +            return descending ? 1 : -1;
      +        if (ka > kb)
      +            return descending ? -1 : 1;
      +        return 0;
      +    };
      +    var sorted = rows.sort(comparator);
      +    var visible = 0;
      +    sorted.forEach(function(row) {
      +        if (row[0].style.display !== 'none') {
      +            var isEvenRow = visible++ % 2 === 0;
      +        }
      +        row.forEach(function(cell) {
      +            toggleStyle(cell.classList, isEvenRow, evenRowColor, oddRowColor);
      +            container.appendChild(cell);
      +        })
      +    });
      +    toggleStyle(header.classList, descending, sortDesc, sortAsc);
      +}
      +
      +// Toggles the visibility of a table category in all tables in a page
      +function toggleGlobal(checkbox, selected, columns) {
      +    var display = checkbox.checked ? '' : 'none';
      +    document.querySelectorAll("div.table-tabs").forEach(function(t) {
      +        var id = t.parentElement.getAttribute("id");
      +        var selectedClass = id + "-tab" + selected;
      +        // if selected is empty string it selects all uncategorized entries
      +        var selectUncategorized = !Boolean(selected);
      +        var visible = 0;
      +        document.querySelectorAll('div.' + id)
      +            .forEach(function(elem) {
      +                if (selectUncategorized) {
      +                    if (elem.className.indexOf(selectedClass) === -1) {
      +                        elem.style.display = display;
      +                    }
      +                } else if (elem.classList.contains(selectedClass)) {
      +                    elem.style.display = display;
      +                }
      +                if (elem.style.display === '') {
      +                    var isEvenRow = visible++ % (columns * 2) < columns;
      +                    toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor);
      +                }
      +            });
      +        var displaySection = visible === 0 ? 'none' : '';
      +        t.parentElement.style.display = displaySection;
      +        document.querySelector("li#contents-" + id).style.display = displaySection;
      +    })
      +}
      +
      +// Shows the elements of a table belonging to a specific category
      +function show(tableId, selected, columns) {
      +    if (tableId !== selected) {
      +        document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')')
      +            .forEach(function(elem) {
      +                elem.style.display = 'none';
      +            });
      +    }
      +    document.querySelectorAll('div.' + selected)
      +        .forEach(function(elem, index) {
      +            elem.style.display = '';
      +            var isEvenRow = index % (columns * 2) < columns;
      +            toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor);
      +        });
      +    updateTabs(tableId, selected);
      +}
      +
      +function updateTabs(tableId, selected) {
      +    document.querySelector('div#' + tableId +' .summary-table')
      +        .setAttribute('aria-labelledby', selected);
      +    document.querySelectorAll('button[id^="' + tableId + '"]')
      +        .forEach(function(tab, index) {
      +            if (selected === tab.id || (tableId === selected && index === 0)) {
      +                tab.className = activeTableTab;
      +                tab.setAttribute('aria-selected', true);
      +                tab.setAttribute('tabindex',0);
      +            } else {
      +                tab.className = tableTab;
      +                tab.setAttribute('aria-selected', false);
      +                tab.setAttribute('tabindex',-1);
      +            }
      +        });
      +}
      +
      +function switchTab(e) {
      +    var selected = document.querySelector('[aria-selected=true]');
      +    if (selected) {
      +        if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) {
      +            // left or up arrow key pressed: move focus to previous tab
      +            selected.previousSibling.click();
      +            selected.previousSibling.focus();
      +            e.preventDefault();
      +        } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) {
      +            // right or down arrow key pressed: move focus to next tab
      +            selected.nextSibling.click();
      +            selected.nextSibling.focus();
      +            e.preventDefault();
      +        }
      +    }
      +}
      +
      +var updateSearchResults = function() {};
      +
      +function indexFilesLoaded() {
      +    return moduleSearchIndex
      +        && packageSearchIndex
      +        && typeSearchIndex
      +        && memberSearchIndex
      +        && tagSearchIndex;
      +}
      +// Copy the contents of the local snippet to the clipboard
      +function copySnippet(button) {
      +    copyToClipboard(button.nextElementSibling.innerText);
      +    switchCopyLabel(button, button.firstElementChild);
      +}
      +function copyToClipboard(content) {
      +    var textarea = document.createElement("textarea");
      +    textarea.style.height = 0;
      +    document.body.appendChild(textarea);
      +    textarea.value = content;
      +    textarea.select();
      +    document.execCommand("copy");
      +    document.body.removeChild(textarea);
      +}
      +function switchCopyLabel(button, span) {
      +    var copied = span.getAttribute("data-copied");
      +    button.classList.add("visible");
      +    var initialLabel = span.innerHTML;
      +    span.innerHTML = copied;
      +    setTimeout(function() {
      +        button.classList.remove("visible");
      +        setTimeout(function() {
      +            if (initialLabel !== copied) {
      +                span.innerHTML = initialLabel;
      +            }
      +        }, 100);
      +    }, 1900);
      +}
      +// Workaround for scroll position not being included in browser history (8249133)
      +document.addEventListener("DOMContentLoaded", function(e) {
      +    var contentDiv = document.querySelector("div.flex-content");
      +    window.addEventListener("popstate", function(e) {
      +        if (e.state !== null) {
      +            contentDiv.scrollTop = e.state;
      +        }
      +    });
      +    window.addEventListener("hashchange", function(e) {
      +        history.replaceState(contentDiv.scrollTop, document.title);
      +    });
      +    var timeoutId;
      +    contentDiv.addEventListener("scroll", function(e) {
      +        if (timeoutId) {
      +            clearTimeout(timeoutId);
      +        }
      +        timeoutId = setTimeout(function() {
      +            history.replaceState(contentDiv.scrollTop, document.title);
      +        }, 100);
      +    });
      +    if (!location.hash) {
      +        history.replaceState(contentDiv.scrollTop, document.title);
      +    }
      +});
      diff --git a/waffle-jna-jakarta/testapidocs/search-page.js b/waffle-jna-jakarta/testapidocs/search-page.js
      new file mode 100644
      index 0000000000..e4da097d94
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/search-page.js
      @@ -0,0 +1,284 @@
      +/*
      + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved.
      + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + */
      +
      +"use strict";
      +$(function() {
      +    var copy = $("#page-search-copy");
      +    var expand = $("#page-search-expand");
      +    var searchLink = $("span#page-search-link");
      +    var redirect = $("input#search-redirect");
      +    function setSearchUrlTemplate() {
      +        var href = document.location.href.split(/[#?]/)[0];
      +        href += "?q=" + "%s";
      +        if (redirect.is(":checked")) {
      +            href += "&r=1";
      +        }
      +        searchLink.html(href);
      +        copy[0].onmouseenter();
      +    }
      +    function copyLink(e) {
      +        copyToClipboard(this.previousSibling.innerText);
      +        switchCopyLabel(this, this.lastElementChild);
      +    }
      +    copy.click(copyLink);
      +    copy[0].onmouseenter = function() {};
      +    redirect.click(setSearchUrlTemplate);
      +    setSearchUrlTemplate();
      +    copy.prop("disabled", false);
      +    redirect.prop("disabled", false);
      +    expand.click(function (e) {
      +        var searchInfo = $("div.page-search-info");
      +        if(this.parentElement.hasAttribute("open")) {
      +            searchInfo.attr("style", "border-width: 0;");
      +        } else {
      +            searchInfo.attr("style", "border-width: 1px;").height(searchInfo.prop("scrollHeight"));
      +        }
      +    });
      +});
      +$(window).on("load", function() {
      +    var input = $("#page-search-input");
      +    var reset = $("#page-search-reset");
      +    var notify = $("#page-search-notify");
      +    var resultSection = $("div#result-section");
      +    var resultContainer = $("div#result-container");
      +    var searchTerm = "";
      +    var activeTab = "";
      +    var fixedTab = false;
      +    var visibleTabs = [];
      +    var feelingLucky = false;
      +    function renderResults(result) {
      +        if (!result.length) {
      +            notify.html(messages.noResult);
      +        } else if (result.length === 1) {
      +            notify.html(messages.oneResult);
      +        } else {
      +            notify.html(messages.manyResults.replace("{0}", result.length));
      +        }
      +        resultContainer.empty();
      +        var r = {
      +            "types": [],
      +            "members": [],
      +            "packages": [],
      +            "modules": [],
      +            "searchTags": []
      +        };
      +        for (var i in result) {
      +            var item = result[i];
      +            var arr = r[item.category];
      +            arr.push(item);
      +        }
      +        if (!activeTab || r[activeTab].length === 0 || !fixedTab) {
      +            Object.keys(r).reduce(function(prev, curr) {
      +                if (r[curr].length > 0 && r[curr][0].score > prev) {
      +                    activeTab = curr;
      +                    return r[curr][0].score;
      +                }
      +                return prev;
      +            }, 0);
      +        }
      +        if (feelingLucky && activeTab) {
      +            notify.html(messages.redirecting)
      +            var firstItem = r[activeTab][0];
      +            window.location = getURL(firstItem.indexItem, firstItem.category);
      +            return;
      +        }
      +        if (result.length > 20) {
      +            if (searchTerm[searchTerm.length - 1] === ".") {
      +                if (activeTab === "types" && r["members"].length > r["types"].length) {
      +                    activeTab = "members";
      +                } else if (activeTab === "packages" && r["types"].length > r["packages"].length) {
      +                    activeTab = "types";
      +                }
      +            }
      +        }
      +        var categoryCount = Object.keys(r).reduce(function(prev, curr) {
      +            return prev + (r[curr].length > 0 ? 1 : 0);
      +        }, 0);
      +        visibleTabs = [];
      +        var tabContainer = $("<div class='table-tabs'></div>").appendTo(resultContainer);
      +        for (var key in r) {
      +            var id = "#result-tab-" + key.replace("searchTags", "search_tags");
      +            if (r[key].length) {
      +                var count = r[key].length >= 1000 ? "999+" : r[key].length;
      +                if (result.length > 20 && categoryCount > 1) {
      +                    var button = $("<button id='result-tab-" + key
      +                        + "' class='page-search-header'><span>" + categories[key] + "</span>"
      +                        + "<span style='font-weight: normal'> (" + count + ")</span></button>").appendTo(tabContainer);
      +                    button.click(key, function(e) {
      +                        fixedTab = true;
      +                        renderResult(e.data, $(this));
      +                    });
      +                    visibleTabs.push(key);
      +                } else {
      +                    $("<span class='page-search-header active-table-tab'>" + categories[key]
      +                        + "<span style='font-weight: normal'> (" + count + ")</span></span>").appendTo(tabContainer);
      +                    renderTable(key, r[key]).appendTo(resultContainer);
      +                    tabContainer = $("<div class='table-tabs'></div>").appendTo(resultContainer);
      +
      +                }
      +            }
      +        }
      +        if (activeTab && result.length > 20 && categoryCount > 1) {
      +            $("button#result-tab-" + activeTab).addClass("active-table-tab");
      +            renderTable(activeTab, r[activeTab]).appendTo(resultContainer);
      +        }
      +        resultSection.show();
      +        function renderResult(category, button) {
      +            activeTab = category;
      +            setSearchUrl();
      +            resultContainer.find("div.summary-table").remove();
      +            renderTable(activeTab, r[activeTab]).appendTo(resultContainer);
      +            button.siblings().removeClass("active-table-tab");
      +            button.addClass("active-table-tab");
      +        }
      +    }
      +    function selectTab(category) {
      +        $("button#result-tab-" + category).click();
      +    }
      +    function renderTable(category, items) {
      +        var table = $("<div class='summary-table'>")
      +            .addClass(category === "modules"
      +                ? "one-column-search-results"
      +                : "two-column-search-results");
      +        var col1, col2;
      +        if (category === "modules") {
      +            col1 = "Module";
      +        } else if (category === "packages") {
      +            col1 = "Module";
      +            col2 = "Package";
      +        } else if (category === "types") {
      +            col1 = "Package";
      +            col2 = "Class"
      +        } else if (category === "members") {
      +            col1 = "Class";
      +            col2 = "Member";
      +        } else if (category === "searchTags") {
      +            col1 = "Location";
      +            col2 = "Name";
      +        }
      +        $("<div class='table-header col-plain'>" + col1 + "</div>").appendTo(table);
      +        if (category !== "modules") {
      +            $("<div class='table-header col-plain'>" + col2 + "</div>").appendTo(table);
      +        }
      +        $.each(items, function(index, item) {
      +            var rowColor = index % 2 ? "odd-row-color" : "even-row-color";
      +            renderItem(item, table, rowColor);
      +        });
      +        return table;
      +    }
      +    function renderItem(item, table, rowColor) {
      +        var label = getHighlightedText(item.input, item.boundaries, item.prefix.length, item.input.length);
      +        var link = $("<a/>")
      +            .attr("href",  getURL(item.indexItem, item.category))
      +            .attr("tabindex", "0")
      +            .addClass("search-result-link")
      +            .html(label);
      +        var container = getHighlightedText(item.input, item.boundaries, 0, item.prefix.length - 1);
      +        if (item.category === "searchTags") {
      +            container = item.indexItem.h || "";
      +        }
      +        if (item.category !== "modules") {
      +            $("<div/>").html(container).addClass("col-plain").addClass(rowColor).appendTo(table);
      +        }
      +        $("<div/>").html(link).addClass("col-last").addClass(rowColor).appendTo(table);
      +    }
      +    var timeout;
      +    function schedulePageSearch() {
      +        if (timeout) {
      +            clearTimeout(timeout);
      +        }
      +        timeout = setTimeout(function () {
      +            doPageSearch()
      +        }, 100);
      +    }
      +    function doPageSearch() {
      +        setSearchUrl();
      +        var term = searchTerm = input.val().trim();
      +        if (term === "") {
      +            notify.html(messages.enterTerm);
      +            activeTab = "";
      +            fixedTab = false;
      +            resultContainer.empty();
      +            resultSection.hide();
      +        } else {
      +            notify.html(messages.searching);
      +            doSearch({ term: term, maxResults: 1200 }, renderResults);
      +        }
      +    }
      +    function setSearchUrl() {
      +        var query = input.val().trim();
      +        var url = document.location.pathname;
      +        if (query) {
      +            url += "?q=" + encodeURI(query);
      +            if (activeTab && fixedTab) {
      +                url += "&c=" + activeTab;
      +            }
      +        }
      +        history.replaceState({query: query}, "", url);
      +    }
      +    input.on("input", function(e) {
      +        feelingLucky = false;
      +        schedulePageSearch();
      +    });
      +    $(document).keydown(function(e) {
      +        if ((e.ctrlKey || e.metaKey) && (e.key === "ArrowLeft" || e.key === "ArrowRight")) {
      +            if (activeTab && visibleTabs.length > 1) {
      +                var idx = visibleTabs.indexOf(activeTab);
      +                idx += e.key === "ArrowLeft" ? visibleTabs.length - 1 : 1;
      +                selectTab(visibleTabs[idx % visibleTabs.length]);
      +                return false;
      +            }
      +        }
      +    });
      +    reset.click(function() {
      +        notify.html(messages.enterTerm);
      +        resultSection.hide();
      +        activeTab = "";
      +        fixedTab = false;
      +        resultContainer.empty();
      +        input.val('').focus();
      +        setSearchUrl();
      +    });
      +    input.prop("disabled", false);
      +    reset.prop("disabled", false);
      +
      +    var urlParams = new URLSearchParams(window.location.search);
      +    if (urlParams.has("q")) {
      +        input.val(urlParams.get("q"))
      +    }
      +    if (urlParams.has("c")) {
      +        activeTab = urlParams.get("c");
      +        fixedTab = true;
      +    }
      +    if (urlParams.get("r")) {
      +        feelingLucky = true;
      +    }
      +    if (input.val()) {
      +        doPageSearch();
      +    } else {
      +        notify.html(messages.enterTerm);
      +    }
      +    input.select().focus();
      +});
      diff --git a/waffle-jna-jakarta/testapidocs/search.html b/waffle-jna-jakarta/testapidocs/search.html
      new file mode 100644
      index 0000000000..b22ce2e00d
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/search.html
      @@ -0,0 +1,76 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>Search (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="search">
      +<meta name="generator" content="javadoc/SearchWriter">
      +<link rel="stylesheet" type="text/css" href="stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="script.js"></script>
      +<script type="text/javascript" src="script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="search-page">
      +<script type="text/javascript">var pathtoroot = "./";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="waffle.jna.jakarta/module-summary.html">Module</a></li>
      +<li>Package</li>
      +<li>Class</li>
      +<li>Use</li>
      +<li><a href="overview-tree.html">Tree</a></li>
      +<li><a href="index-all.html">Index</a></li>
      +<li><a href="help-doc.html#search">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<h1 class="title">Search</h1>
      +<div>
      +<input type="text" id="page-search-input" disabled placeholder="Search">
      +<input type="reset" id="page-search-reset" disabled value="Reset" style="margin: 6px;">
      +<details class="page-search-details">
      +<summary id="page-search-expand">Additional resources</summary>
      +</details>
      +</div>
      +<div class="page-search-info">
      +<p>The <a href="help-doc.html#search">help page</a> provides an introduction to the scope and syntax of JavaDoc search.</p>
      +<p>You can use the &lt;ctrl&gt; or &lt;cmd&gt; keys in combination with the left and right arrow keys to switch between result tabs in this page.</p>
      +<p>The URL template below may be used to configure this page as a search engine in browsers that support this feature. It has been tested to work in Google Chrome and Mozilla Firefox. Note that other browsers may not support this feature or require a different URL format.</p>
      +<span id="page-search-link">link</span><button class="copy" aria-label="Copy URL" id="page-search-copy"><img src="copy.svg" alt="Copy URL"><span data-copied="Copied!">Copy</span></button>
      +<p>
      +<input type="checkbox" id="search-redirect" disabled>
      +<label for="search-redirect">Redirect to first result</label></p>
      +</div>
      +<p id="page-search-notify">Loading search index...</p>
      +<div id="result-section" style="display: none;">
      +<div id="result-container"></div>
      +<script type="text/javascript" src="search-page.js"></script>
      +</div>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/search.js b/waffle-jna-jakarta/testapidocs/search.js
      new file mode 100644
      index 0000000000..293b40f52a
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/search.js
      @@ -0,0 +1,458 @@
      +/*
      + * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved.
      + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + *
      + */
      +"use strict";
      +const messages = {
      +    enterTerm: "Enter a search term",
      +    noResult: "No results found",
      +    oneResult: "Found one result",
      +    manyResults: "Found {0} results",
      +    loading: "Loading search index...",
      +    searching: "Searching...",
      +    redirecting: "Redirecting to first result...",
      +    linkIcon: "Link icon",
      +    linkToSection: "Link to this section"
      +}
      +const categories = {
      +    modules: "Modules",
      +    packages: "Packages",
      +    types: "Types",
      +    members: "Members",
      +    searchTags: "Search Tags"
      +};
      +const highlight = "<span class='result-highlight'>$&</span>";
      +const NO_MATCH = {};
      +const MAX_RESULTS = 300;
      +function checkUnnamed(name, separator) {
      +    return name === "<Unnamed>" || !name ? "" : name + separator;
      +}
      +function escapeHtml(str) {
      +    return str.replace(/</g, "&lt;").replace(/>/g, "&gt;");
      +}
      +function getHighlightedText(str, boundaries, from, to) {
      +    var start = from;
      +    var text = "";
      +    for (var i = 0; i < boundaries.length; i += 2) {
      +        var b0 = boundaries[i];
      +        var b1 = boundaries[i + 1];
      +        if (b0 >= to || b1 <= from) {
      +            continue;
      +        }
      +        text += escapeHtml(str.slice(start, Math.max(start, b0)));
      +        text += "<span class='result-highlight'>";
      +        text += escapeHtml(str.slice(Math.max(start, b0), Math.min(to, b1)));
      +        text += "</span>";
      +        start = Math.min(to, b1);
      +    }
      +    text += escapeHtml(str.slice(start, to));
      +    return text;
      +}
      +function getURLPrefix(item, category) {
      +    var urlPrefix = "";
      +    var slash = "/";
      +    if (category === "modules") {
      +        return item.l + slash;
      +    } else if (category === "packages" && item.m) {
      +        return item.m + slash;
      +    } else if (category === "types" || category === "members") {
      +        if (item.m) {
      +            urlPrefix = item.m + slash;
      +        } else {
      +            $.each(packageSearchIndex, function(index, it) {
      +                if (it.m && item.p === it.l) {
      +                    urlPrefix = it.m + slash;
      +                }
      +            });
      +        }
      +    }
      +    return urlPrefix;
      +}
      +function getURL(item, category) {
      +    if (item.url) {
      +        return item.url;
      +    }
      +    var url = getURLPrefix(item, category);
      +    if (category === "modules") {
      +        url += "module-summary.html";
      +    } else if (category === "packages") {
      +        if (item.u) {
      +            url = item.u;
      +        } else {
      +            url += item.l.replace(/\./g, '/') + "/package-summary.html";
      +        }
      +    } else if (category === "types") {
      +        if (item.u) {
      +            url = item.u;
      +        } else {
      +            url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.l + ".html";
      +        }
      +    } else if (category === "members") {
      +        url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.c + ".html" + "#";
      +        if (item.u) {
      +            url += item.u;
      +        } else {
      +            url += item.l;
      +        }
      +    } else if (category === "searchTags") {
      +        url += item.u;
      +    }
      +    item.url = url;
      +    return url;
      +}
      +function createMatcher(term, camelCase) {
      +    if (camelCase && !isUpperCase(term)) {
      +        return null;  // no need for camel-case matcher for lower case query
      +    }
      +    var pattern = "";
      +    var upperCase = [];
      +    term.trim().split(/\s+/).forEach(function(w, index, array) {
      +        var tokens = w.split(/(?=[A-Z,.()<>?[\/])/);
      +        for (var i = 0; i < tokens.length; i++) {
      +            var s = tokens[i];
      +            // ',' and '?' are the only delimiters commonly followed by space in java signatures
      +            pattern += "(" + $.ui.autocomplete.escapeRegex(s).replace(/[,?]/g, "$&\\s*?") + ")";
      +            upperCase.push(false);
      +            var isWordToken =  /\w$/.test(s);
      +            if (isWordToken) {
      +                if (i === tokens.length - 1 && index < array.length - 1) {
      +                    // space in query string matches all delimiters
      +                    pattern += "(.*?)";
      +                    upperCase.push(isUpperCase(s[0]));
      +                } else {
      +                    if (!camelCase && isUpperCase(s) && s.length === 1) {
      +                        pattern += "()";
      +                    } else {
      +                        pattern += "([a-z0-9$<>?[\\]]*?)";
      +                    }
      +                    upperCase.push(isUpperCase(s[0]));
      +                }
      +            } else {
      +                pattern += "()";
      +                upperCase.push(false);
      +            }
      +        }
      +    });
      +    var re = new RegExp(pattern, "gi");
      +    re.upperCase = upperCase;
      +    return re;
      +}
      +function findMatch(matcher, input, startOfName, endOfName) {
      +    var from = startOfName;
      +    matcher.lastIndex = from;
      +    var match = matcher.exec(input);
      +    // Expand search area until we get a valid result or reach the beginning of the string
      +    while (!match || match.index + match[0].length < startOfName || endOfName < match.index) {
      +        if (from === 0) {
      +            return NO_MATCH;
      +        }
      +        from = input.lastIndexOf(".", from - 2) + 1;
      +        matcher.lastIndex = from;
      +        match = matcher.exec(input);
      +    }
      +    var boundaries = [];
      +    var matchEnd = match.index + match[0].length;
      +    var score = 5;
      +    var start = match.index;
      +    var prevEnd = -1;
      +    for (var i = 1; i < match.length; i += 2) {
      +        var isUpper = isUpperCase(input[start]);
      +        var isMatcherUpper = matcher.upperCase[i];
      +        // capturing groups come in pairs, match and non-match
      +        boundaries.push(start, start + match[i].length);
      +        // make sure groups are anchored on a left word boundary
      +        var prevChar = input[start - 1] || "";
      +        var nextChar = input[start + 1] || "";
      +        if (start !== 0 && !/[\W_]/.test(prevChar) && !/[\W_]/.test(input[start])) {
      +            if (isUpper && (isLowerCase(prevChar) || isLowerCase(nextChar))) {
      +                score -= 0.1;
      +            } else if (isMatcherUpper && start === prevEnd) {
      +                score -= isUpper ? 0.1 : 1.0;
      +            } else {
      +                return NO_MATCH;
      +            }
      +        }
      +        prevEnd = start + match[i].length;
      +        start += match[i].length + match[i + 1].length;
      +
      +        // lower score for parts of the name that are missing
      +        if (match[i + 1] && prevEnd < endOfName) {
      +            score -= rateNoise(match[i + 1]);
      +        }
      +    }
      +    // lower score if a type name contains unmatched camel-case parts
      +    if (input[matchEnd - 1] !== "." && endOfName > matchEnd)
      +        score -= rateNoise(input.slice(matchEnd, endOfName));
      +    score -= rateNoise(input.slice(0, Math.max(startOfName, match.index)));
      +
      +    if (score <= 0) {
      +        return NO_MATCH;
      +    }
      +    return {
      +        input: input,
      +        score: score,
      +        boundaries: boundaries
      +    };
      +}
      +function isUpperCase(s) {
      +    return s !== s.toLowerCase();
      +}
      +function isLowerCase(s) {
      +    return s !== s.toUpperCase();
      +}
      +function rateNoise(str) {
      +    return (str.match(/([.(])/g) || []).length / 5
      +         + (str.match(/([A-Z]+)/g) || []).length / 10
      +         +  str.length / 20;
      +}
      +function doSearch(request, response) {
      +    var term = request.term.trim();
      +    var maxResults = request.maxResults || MAX_RESULTS;
      +    if (term.length === 0) {
      +        return this.close();
      +    }
      +    var matcher = {
      +        plainMatcher: createMatcher(term, false),
      +        camelCaseMatcher: createMatcher(term, true)
      +    }
      +    var indexLoaded = indexFilesLoaded();
      +
      +    function getPrefix(item, category) {
      +        switch (category) {
      +            case "packages":
      +                return checkUnnamed(item.m, "/");
      +            case "types":
      +                return checkUnnamed(item.p, ".");
      +            case "members":
      +                return checkUnnamed(item.p, ".") + item.c + ".";
      +            default:
      +                return "";
      +        }
      +    }
      +    function useQualifiedName(category) {
      +        switch (category) {
      +            case "packages":
      +                return /[\s/]/.test(term);
      +            case "types":
      +            case "members":
      +                return /[\s.]/.test(term);
      +            default:
      +                return false;
      +        }
      +    }
      +    function searchIndex(indexArray, category) {
      +        var matches = [];
      +        if (!indexArray) {
      +            if (!indexLoaded) {
      +                matches.push({ l: messages.loading, category: category });
      +            }
      +            return matches;
      +        }
      +        $.each(indexArray, function (i, item) {
      +            var prefix = getPrefix(item, category);
      +            var simpleName = item.l;
      +            var qualifiedName = prefix + simpleName;
      +            var useQualified = useQualifiedName(category);
      +            var input = useQualified ? qualifiedName : simpleName;
      +            var startOfName = useQualified ? prefix.length : 0;
      +            var endOfName = category === "members" && input.indexOf("(", startOfName) > -1
      +                ? input.indexOf("(", startOfName) : input.length;
      +            var m = findMatch(matcher.plainMatcher, input, startOfName, endOfName);
      +            if (m === NO_MATCH && matcher.camelCaseMatcher) {
      +                m = findMatch(matcher.camelCaseMatcher, input, startOfName, endOfName);
      +            }
      +            if (m !== NO_MATCH) {
      +                m.indexItem = item;
      +                m.prefix = prefix;
      +                m.category = category;
      +                if (!useQualified) {
      +                    m.input = qualifiedName;
      +                    m.boundaries = m.boundaries.map(function(b) {
      +                        return b + prefix.length;
      +                    });
      +                }
      +                matches.push(m);
      +            }
      +            return true;
      +        });
      +        return matches.sort(function(e1, e2) {
      +            return e2.score - e1.score;
      +        }).slice(0, maxResults);
      +    }
      +
      +    var result = searchIndex(moduleSearchIndex, "modules")
      +         .concat(searchIndex(packageSearchIndex, "packages"))
      +         .concat(searchIndex(typeSearchIndex, "types"))
      +         .concat(searchIndex(memberSearchIndex, "members"))
      +         .concat(searchIndex(tagSearchIndex, "searchTags"));
      +
      +    if (!indexLoaded) {
      +        updateSearchResults = function() {
      +            doSearch(request, response);
      +        }
      +    } else {
      +        updateSearchResults = function() {};
      +    }
      +    response(result);
      +}
      +// JQuery search menu implementation
      +$.widget("custom.catcomplete", $.ui.autocomplete, {
      +    _create: function() {
      +        this._super();
      +        this.widget().menu("option", "items", "> .result-item");
      +        // workaround for search result scrolling
      +        this.menu._scrollIntoView = function _scrollIntoView( item ) {
      +            var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;
      +            if ( this._hasScroll() ) {
      +                borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0;
      +                paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0;
      +                offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;
      +                scroll = this.activeMenu.scrollTop();
      +                elementHeight = this.activeMenu.height() - 26;
      +                itemHeight = item.outerHeight();
      +
      +                if ( offset < 0 ) {
      +                    this.activeMenu.scrollTop( scroll + offset );
      +                } else if ( offset + itemHeight > elementHeight ) {
      +                    this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );
      +                }
      +            }
      +        };
      +    },
      +    _renderMenu: function(ul, items) {
      +        var currentCategory = "";
      +        var widget = this;
      +        widget.menu.bindings = $();
      +        $.each(items, function(index, item) {
      +            if (item.category && item.category !== currentCategory) {
      +                ul.append("<li class='ui-autocomplete-category'>" + categories[item.category] + "</li>");
      +                currentCategory = item.category;
      +            }
      +            var li = widget._renderItemData(ul, item);
      +            if (item.category) {
      +                li.attr("aria-label", categories[item.category] + " : " + item.l);
      +            } else {
      +                li.attr("aria-label", item.l);
      +            }
      +            li.attr("class", "result-item");
      +        });
      +        ul.append("<li class='ui-static-link'><a href='" + pathtoroot + "search.html?q="
      +            + encodeURI(widget.term) + "'>Go to search page</a></li>");
      +    },
      +    _renderItem: function(ul, item) {
      +        var li = $("<li/>").appendTo(ul);
      +        var div = $("<div/>").appendTo(li);
      +        var label = item.l
      +            ? item.l
      +            : getHighlightedText(item.input, item.boundaries, 0, item.input.length);
      +        var idx = item.indexItem;
      +        if (item.category === "searchTags" && idx && idx.h) {
      +            if (idx.d) {
      +                div.html(label + "<span class='search-tag-holder-result'> (" + idx.h + ")</span><br><span class='search-tag-desc-result'>"
      +                    + idx.d + "</span><br>");
      +            } else {
      +                div.html(label + "<span class='search-tag-holder-result'> (" + idx.h + ")</span>");
      +            }
      +        } else {
      +            div.html(label);
      +        }
      +        return li;
      +    }
      +});
      +$(function() {
      +    var expanded = false;
      +    var windowWidth;
      +    function collapse() {
      +        if (expanded) {
      +            $("div#navbar-top").removeAttr("style");
      +            $("button#navbar-toggle-button")
      +                .removeClass("expanded")
      +                .attr("aria-expanded", "false");
      +            expanded = false;
      +        }
      +    }
      +    $("button#navbar-toggle-button").click(function (e) {
      +        if (expanded) {
      +            collapse();
      +        } else {
      +            var navbar = $("div#navbar-top");
      +            navbar.height(navbar.prop("scrollHeight"));
      +            $("button#navbar-toggle-button")
      +                .addClass("expanded")
      +                .attr("aria-expanded", "true");
      +            expanded = true;
      +            windowWidth = window.innerWidth;
      +        }
      +    });
      +    $("ul.sub-nav-list-small li a").click(collapse);
      +    $("input#search-input").focus(collapse);
      +    $("main").click(collapse);
      +    $("section[id] > :header, :header[id], :header:has(a[id])").each(function(idx, el) {
      +        // Create anchor links for headers with an associated id attribute
      +        var hdr = $(el);
      +        var id = hdr.attr("id") || hdr.parent("section").attr("id") || hdr.children("a").attr("id");
      +        if (id) {
      +            hdr.append(" <a href='#" + id + "' class='anchor-link' aria-label='" + messages.linkToSection
      +                + "'><img src='" + pathtoroot + "link.svg' alt='" + messages.linkIcon +"' tabindex='0'"
      +                + " width='16' height='16'></a>");
      +        }
      +    });
      +    $(window).on("orientationchange", collapse).on("resize", function(e) {
      +        if (expanded && windowWidth !== window.innerWidth) collapse();
      +    });
      +    var search = $("#search-input");
      +    var reset = $("#reset-button");
      +    search.catcomplete({
      +        minLength: 1,
      +        delay: 200,
      +        source: doSearch,
      +        response: function(event, ui) {
      +            if (!ui.content.length) {
      +                ui.content.push({ l: messages.noResult });
      +            } else {
      +                $("#search-input").empty();
      +            }
      +        },
      +        autoFocus: true,
      +        focus: function(event, ui) {
      +            return false;
      +        },
      +        position: {
      +            collision: "flip"
      +        },
      +        select: function(event, ui) {
      +            if (ui.item.indexItem) {
      +                var url = getURL(ui.item.indexItem, ui.item.category);
      +                window.location.href = pathtoroot + url;
      +                $("#search-input").focus();
      +            }
      +        }
      +    });
      +    search.val('');
      +    search.prop("disabled", false);
      +    reset.prop("disabled", false);
      +    reset.click(function() {
      +        search.val('').focus();
      +    });
      +    search.focus();
      +});
      diff --git a/waffle-jna-jakarta/testapidocs/stylesheet.css b/waffle-jna-jakarta/testapidocs/stylesheet.css
      new file mode 100644
      index 0000000000..f71489f86c
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/stylesheet.css
      @@ -0,0 +1,1272 @@
      +/*
      + * Javadoc style sheet
      + */
      +
      +@import url('resources/fonts/dejavu.css');
      +
      +/*
      + * These CSS custom properties (variables) define the core color and font
      + * properties used in this stylesheet.
      + */
      +:root {
      +    /* body, block and code fonts */
      +    --body-font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif;
      +    --block-font-family: 'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
      +    --code-font-family: 'DejaVu Sans Mono', monospace;
      +    /* Base font sizes for body and code elements */
      +    --body-font-size: 14px;
      +    --code-font-size: 14px;
      +    /* Text colors for body and block elements */
      +    --body-text-color: #353833;
      +    --block-text-color: #474747;
      +    /* Background colors for various structural elements */
      +    --body-background-color: #ffffff;
      +    --section-background-color: #f8f8f8;
      +    --detail-background-color: #ffffff;
      +    /* Colors for navigation bar and table captions */
      +    --navbar-background-color: #4D7A97;
      +    --navbar-text-color: #ffffff;
      +    /* Background color for subnavigation and various headers */
      +    --subnav-background-color: #dee3e9;
      +    /* Background and text colors for selected tabs and navigation items */
      +    --selected-background-color: #f8981d;
      +    --selected-text-color: #253441;
      +    --selected-link-color: #1f389c;
      +    /* Background colors for generated tables */
      +    --even-row-color: #ffffff;
      +    --odd-row-color: #eeeeef;
      +    /* Text color for page title */
      +    --title-color: #2c4557;
      +    /* Text colors for links */
      +    --link-color: #4A6782;
      +    --link-color-active: #bb7a2a;
      +    /* Snippet colors */
      +    --snippet-background-color: #ebecee;
      +    --snippet-text-color: var(--block-text-color);
      +    --snippet-highlight-color: #f7c590;
      +    /* Border colors for structural elements and user defined tables */
      +    --border-color: #ededed;
      +    --table-border-color: #000000;
      +    /* Search input colors */
      +    --search-input-background-color: #ffffff;
      +    --search-input-text-color: #000000;
      +    --search-input-placeholder-color: #909090;
      +    /* Highlight color for active search tag target */
      +    --search-tag-highlight-color: #ffff00;
      +    /* Adjustments for icon and active background colors of copy-to-clipboard buttons */
      +    --copy-icon-brightness: 100%;
      +    --copy-button-background-color-active: rgba(168, 168, 176, 0.3);
      +    /* Colors for invalid tag notifications */
      +    --invalid-tag-background-color: #ffe6e6;
      +    --invalid-tag-text-color: #000000;
      +}
      +/*
      + * Styles for individual HTML elements.
      + *
      + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular
      + * HTML element throughout the page.
      + */
      +body {
      +    background-color:var(--body-background-color);
      +    color:var(--body-text-color);
      +    font-family:var(--body-font-family);
      +    font-size:var(--body-font-size);
      +    margin:0;
      +    padding:0;
      +    height:100%;
      +    width:100%;
      +}
      +iframe {
      +    margin:0;
      +    padding:0;
      +    height:100%;
      +    width:100%;
      +    overflow-y:scroll;
      +    border:none;
      +}
      +a:link, a:visited {
      +    text-decoration:none;
      +    color:var(--link-color);
      +}
      +a[href]:hover, a[href]:focus {
      +    text-decoration:none;
      +    color:var(--link-color-active);
      +}
      +pre {
      +    font-family:var(--code-font-family);
      +    font-size:1em;
      +}
      +h1 {
      +    font-size:1.428em;
      +}
      +h2 {
      +    font-size:1.285em;
      +}
      +h3 {
      +    font-size:1.14em;
      +}
      +h4 {
      +    font-size:1.072em;
      +}
      +h5 {
      +    font-size:1.001em;
      +}
      +h6 {
      +    font-size:0.93em;
      +}
      +/* Disable font boosting for selected elements */
      +h1, h2, h3, h4, h5, h6, div.member-signature {
      +    max-height: 1000em;
      +}
      +ul {
      +    list-style-type:disc;
      +}
      +code, tt {
      +    font-family:var(--code-font-family);
      +}
      +:not(h1, h2, h3, h4, h5, h6) > code,
      +:not(h1, h2, h3, h4, h5, h6) > tt {
      +    font-size:var(--code-font-size);
      +    padding-top:4px;
      +    margin-top:8px;
      +    line-height:1.4em;
      +}
      +dt code {
      +    font-family:var(--code-font-family);
      +    font-size:1em;
      +    padding-top:4px;
      +}
      +.summary-table dt code {
      +    font-family:var(--code-font-family);
      +    font-size:1em;
      +    vertical-align:top;
      +    padding-top:4px;
      +}
      +sup {
      +    font-size:8px;
      +}
      +button {
      +    font-family: var(--body-font-family);
      +    font-size: 1em;
      +}
      +/*
      + * Styles for HTML generated by javadoc.
      + *
      + * These are style classes that are used by the standard doclet to generate HTML documentation.
      + */
      +
      +/*
      + * Styles for document title and copyright.
      + */
      +.about-language {
      +    float:right;
      +    padding:0 21px 8px 8px;
      +    font-size:0.915em;
      +    margin-top:-9px;
      +    height:2.9em;
      +}
      +.legal-copy {
      +    margin-left:.5em;
      +}
      +/*
      + * Styles for navigation bar.
      + */
      +@media screen {
      +    div.flex-box {
      +        position:fixed;
      +        display:flex;
      +        flex-direction:column;
      +        height: 100%;
      +        width: 100%;
      +    }
      +    header.flex-header {
      +        flex: 0 0 auto;
      +    }
      +    div.flex-content {
      +        flex: 1 1 auto;
      +        overflow-y: auto;
      +    }
      +}
      +.top-nav {
      +    background-color:var(--navbar-background-color);
      +    color:var(--navbar-text-color);
      +    float:left;
      +    width:100%;
      +    clear:right;
      +    min-height:2.8em;
      +    padding:10px 0 0 0;
      +    overflow:hidden;
      +    font-size:0.857em;
      +}
      +button#navbar-toggle-button {
      +    display:none;
      +}
      +ul.sub-nav-list-small {
      +    display: none;
      +}
      +.sub-nav {
      +    background-color:var(--subnav-background-color);
      +    float:left;
      +    width:100%;
      +    overflow:hidden;
      +    font-size:0.857em;
      +}
      +.sub-nav div {
      +    clear:left;
      +    float:left;
      +    padding:6px;
      +    text-transform:uppercase;
      +}
      +.sub-nav .sub-nav-list {
      +    padding-top:4px;
      +}
      +ul.nav-list {
      +    display:block;
      +    margin:0 25px 0 0;
      +    padding:0;
      +}
      +ul.sub-nav-list {
      +    float:left;
      +    margin:0 25px 0 0;
      +    padding:0;
      +}
      +ul.nav-list li {
      +    list-style:none;
      +    float:left;
      +    padding: 5px 6px;
      +    text-transform:uppercase;
      +}
      +.sub-nav .nav-list-search {
      +    float:right;
      +    margin:0;
      +    padding:6px;
      +    clear:none;
      +    text-align:right;
      +    position:relative;
      +}
      +ul.sub-nav-list li {
      +    list-style:none;
      +    float:left;
      +}
      +.top-nav a:link, .top-nav a:active, .top-nav a:visited {
      +    color:var(--navbar-text-color);
      +    text-decoration:none;
      +    text-transform:uppercase;
      +}
      +.top-nav a:hover {
      +    color:var(--link-color-active);
      +}
      +.nav-bar-cell1-rev {
      +    background-color:var(--selected-background-color);
      +    color:var(--selected-text-color);
      +    margin: auto 5px;
      +}
      +.skip-nav {
      +    position:absolute;
      +    top:auto;
      +    left:-9999px;
      +    overflow:hidden;
      +}
      +/*
      + * Hide navigation links and search box in print layout
      + */
      +@media print {
      +    ul.nav-list, div.sub-nav  {
      +        display:none;
      +    }
      +}
      +/*
      + * Styles for page header.
      + */
      +.title {
      +    color:var(--title-color);
      +    margin:10px 0;
      +}
      +.sub-title {
      +    margin:5px 0 0 0;
      +}
      +ul.contents-list {
      +    margin: 0 0 15px 0;
      +    padding: 0;
      +    list-style: none;
      +}
      +ul.contents-list li {
      +    font-size:0.93em;
      +}
      +/*
      + * Styles for headings.
      + */
      +body.class-declaration-page .summary h2,
      +body.class-declaration-page .details h2,
      +body.class-use-page h2,
      +body.module-declaration-page .block-list h2 {
      +    font-style: italic;
      +    padding:0;
      +    margin:15px 0;
      +}
      +body.class-declaration-page .summary h3,
      +body.class-declaration-page .details h3,
      +body.class-declaration-page .summary .inherited-list h2 {
      +    background-color:var(--subnav-background-color);
      +    border:1px solid var(--border-color);
      +    margin:0 0 6px -8px;
      +    padding:7px 5px;
      +}
      +/*
      + * Styles for page layout containers.
      + */
      +main {
      +    clear:both;
      +    padding:10px 20px;
      +    position:relative;
      +}
      +dl.notes > dt {
      +    font-family: var(--body-font-family);
      +    font-size:0.856em;
      +    font-weight:bold;
      +    margin:10px 0 0 0;
      +    color:var(--body-text-color);
      +}
      +dl.notes > dd {
      +    margin:5px 10px 10px 0;
      +    font-size:1em;
      +    font-family:var(--block-font-family)
      +}
      +dl.name-value > dt {
      +    margin-left:1px;
      +    font-size:1.1em;
      +    display:inline;
      +    font-weight:bold;
      +}
      +dl.name-value > dd {
      +    margin:0 0 0 1px;
      +    font-size:1.1em;
      +    display:inline;
      +}
      +/*
      + * Styles for lists.
      + */
      +li.circle {
      +    list-style:circle;
      +}
      +ul.horizontal li {
      +    display:inline;
      +    font-size:0.9em;
      +}
      +div.inheritance {
      +    margin:0;
      +    padding:0;
      +}
      +div.inheritance div.inheritance {
      +    margin-left:2em;
      +}
      +ul.block-list,
      +ul.details-list,
      +ul.member-list,
      +ul.summary-list {
      +    margin:10px 0 10px 0;
      +    padding:0;
      +}
      +ul.block-list > li,
      +ul.details-list > li,
      +ul.member-list > li,
      +ul.summary-list > li {
      +    list-style:none;
      +    margin-bottom:15px;
      +    line-height:1.4;
      +}
      +ul.ref-list {
      +  padding:0;
      +  margin:0;
      +}
      +ul.ref-list > li {
      +    list-style:none;
      +}
      +.summary-table dl, .summary-table dl dt, .summary-table dl dd {
      +    margin-top:0;
      +    margin-bottom:1px;
      +}
      +ul.tag-list, ul.tag-list-long {
      +    padding-left: 0;
      +    list-style: none;
      +}
      +ul.tag-list li {
      +    display: inline;
      +}
      +ul.tag-list li:not(:last-child):after,
      +ul.tag-list-long li:not(:last-child):after
      +{
      +    content: ", ";
      +    white-space: pre-wrap;
      +}
      +ul.preview-feature-list {
      +    list-style: none;
      +    margin:0;
      +    padding:0.1em;
      +    line-height: 1.6em;
      +}
      +/*
      + * Styles for tables.
      + */
      +.summary-table, .details-table {
      +    width:100%;
      +    border-spacing:0;
      +    border:1px solid var(--border-color);
      +    border-top:0;
      +    padding:0;
      +}
      +.caption {
      +    position:relative;
      +    text-align:left;
      +    background-repeat:no-repeat;
      +    color:var(--selected-text-color);
      +    clear:none;
      +    overflow:hidden;
      +    padding: 10px 0 0 1px;
      +    margin:0;
      +}
      +.caption a:link, .caption a:visited {
      +    color:var(--selected-link-color);
      +}
      +.caption a:hover,
      +.caption a:active {
      +    color:var(--navbar-text-color);
      +}
      +.caption span {
      +    font-weight:bold;
      +    white-space:nowrap;
      +    padding:5px 12px 7px 12px;
      +    display:inline-block;
      +    float:left;
      +    background-color:var(--selected-background-color);
      +    border: none;
      +    height:16px;
      +}
      +div.table-tabs {
      +    padding:10px 0 0 1px;
      +    margin:10px 0 0 0;
      +}
      +div.table-tabs > button {
      +    border: none;
      +    cursor: pointer;
      +    padding: 5px 12px 7px 12px;
      +    font-weight: bold;
      +    margin-right: 8px;
      +}
      +div.table-tabs > .active-table-tab {
      +    background: var(--selected-background-color);
      +    color: var(--selected-text-color);
      +}
      +div.table-tabs > button.table-tab {
      +    background: var(--navbar-background-color);
      +    color: var(--navbar-text-color);
      +}
      +.two-column-search-results {
      +    display: grid;
      +    grid-template-columns: minmax(400px, max-content) minmax(400px, auto);
      +}
      +div.checkboxes {
      +    line-height: 2em;
      +}
      +div.checkboxes > span {
      +    margin-left: 10px;
      +}
      +div.checkboxes > label {
      +    margin-left: 8px;
      +    white-space: nowrap;
      +}
      +div.checkboxes > label > input {
      +    margin: 0 2px;
      +}
      +.two-column-summary {
      +    display: grid;
      +    grid-template-columns: minmax(25%, max-content) minmax(25%, auto);
      +}
      +.three-column-summary {
      +    display: grid;
      +    grid-template-columns: minmax(15%, max-content) minmax(20%, max-content) minmax(20%, auto);
      +}
      +.three-column-release-summary {
      +    display: grid;
      +    grid-template-columns: minmax(40%, max-content) minmax(10%, max-content) minmax(40%, auto);
      +}
      +.four-column-summary {
      +    display: grid;
      +    grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, max-content) minmax(15%, auto);
      +}
      +@media screen and (max-width: 1000px) {
      +    .four-column-summary {
      +        display: grid;
      +        grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
      +    }
      +}
      +@media screen and (max-width: 800px) {
      +    .two-column-search-results {
      +        display: grid;
      +        grid-template-columns: minmax(40%, max-content) minmax(40%, auto);
      +    }
      +    .three-column-summary {
      +        display: grid;
      +        grid-template-columns: minmax(10%, max-content) minmax(25%, auto);
      +    }
      +    .three-column-release-summary {
      +        display: grid;
      +        grid-template-columns: minmax(70%, max-content) minmax(30%, max-content)
      +    }
      +    .three-column-summary .col-last,
      +    .three-column-release-summary .col-last{
      +        grid-column-end: span 2;
      +    }
      +}
      +@media screen and (max-width: 600px) {
      +    .two-column-summary {
      +        display: grid;
      +        grid-template-columns: 1fr;
      +    }
      +}
      +.summary-table > div, .details-table > div {
      +    text-align:left;
      +    padding: 8px 3px 3px 7px;
      +    overflow-x: auto;
      +    scrollbar-width: thin;
      +}
      +.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name {
      +    vertical-align:top;
      +    padding-right:0;
      +    padding-top:8px;
      +    padding-bottom:3px;
      +}
      +.table-header {
      +    background:var(--subnav-background-color);
      +    font-weight: bold;
      +}
      +/* Sortable table columns */
      +.table-header[onclick] {
      +    cursor: pointer;
      +}
      +.table-header[onclick]::after {
      +    content:"";
      +    display:inline-block;
      +    background-image:url('data:image/svg+xml; utf8, \
      +    <svg xmlns="http://www.w3.org/2000/svg" width="125" height="170"> \
      +    <path d="M10.101 57.059L63.019 4.142l52.917 52.917M10.101 86.392l52.917 52.917 52.917-52.917" style="opacity:.35;"/></svg>');
      +    background-size:100% 100%;
      +    width:9px;
      +    height:14px;
      +    margin-left:4px;
      +    margin-bottom:-3px;
      +}
      +.table-header[onclick].sort-asc::after {
      +    background-image:url('data:image/svg+xml; utf8, \
      +    <svg xmlns="http://www.w3.org/2000/svg" width="125" height="170"> \
      +    <path d="M10.101 57.059L63.019 4.142l52.917 52.917" style="opacity:.75;"/> \
      +    <path d="M10.101 86.392l52.917 52.917 52.917-52.917" style="opacity:.35;"/></svg>');
      +
      +}
      +.table-header[onclick].sort-desc::after {
      +    background-image:url('data:image/svg+xml; utf8, \
      +    <svg xmlns="http://www.w3.org/2000/svg" width="125" height="170"> \
      +    <path d="M10.101 57.059L63.019 4.142l52.917 52.917" style="opacity:.35;"/> \
      +    <path d="M10.101 86.392l52.917 52.917 52.917-52.917" style="opacity:.75;"/></svg>');
      +}
      +.col-first, .col-first {
      +    font-size:0.93em;
      +}
      +.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last {
      +    font-size:0.93em;
      +}
      +.col-first, .col-second, .col-constructor-name {
      +    vertical-align:top;
      +    overflow: auto;
      +}
      +.col-last {
      +    white-space:normal;
      +}
      +.col-first a:link, .col-first a:visited,
      +.col-second a:link, .col-second a:visited,
      +.col-first a:link, .col-first a:visited,
      +.col-second a:link, .col-second a:visited,
      +.col-constructor-name a:link, .col-constructor-name a:visited,
      +.col-summary-item-name a:link, .col-summary-item-name a:visited {
      +    font-weight:bold;
      +}
      +.even-row-color, .even-row-color .table-header {
      +    background-color:var(--even-row-color);
      +}
      +.odd-row-color, .odd-row-color .table-header {
      +    background-color:var(--odd-row-color);
      +}
      +/*
      + * Styles for contents.
      + */
      +div.block {
      +    font-size:var(--body-font-size);
      +    font-family:var(--block-font-family);
      +}
      +.col-last div {
      +    padding-top:0;
      +}
      +.col-last a {
      +    padding-bottom:3px;
      +}
      +.module-signature,
      +.package-signature,
      +.type-signature,
      +.member-signature {
      +    font-family:var(--code-font-family);
      +    font-size:1em;
      +    margin:14px 0;
      +    white-space: pre-wrap;
      +}
      +.module-signature,
      +.package-signature,
      +.type-signature {
      +    margin-top: 0;
      +}
      +.member-signature .type-parameters-long,
      +.member-signature .parameters,
      +.member-signature .exceptions {
      +    display: inline-block;
      +    vertical-align: top;
      +    white-space: pre;
      +}
      +.member-signature .type-parameters {
      +    white-space: normal;
      +}
      +/*
      + * Styles for formatting effect.
      + */
      +.source-line-no {
      +    /* Color of line numbers in source pages can be set via custom property below */
      +    color:var(--source-linenumber-color, green);
      +    padding:0 30px 0 0;
      +}
      +.block {
      +    display:block;
      +    margin:0 10px 5px 0;
      +    color:var(--block-text-color);
      +}
      +.deprecated-label, .description-from-type-label, .implementation-label, .member-name-link,
      +.module-label-in-package, .module-label-in-type, .package-label-in-type,
      +.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label {
      +    font-weight:bold;
      +}
      +.deprecation-comment, .help-footnote, .preview-comment {
      +    font-style:italic;
      +}
      +.deprecation-block {
      +    font-size:1em;
      +    font-family:var(--block-font-family);
      +    border-style:solid;
      +    border-width:thin;
      +    border-radius:10px;
      +    padding:10px;
      +    margin-bottom:10px;
      +    margin-right:10px;
      +    display:inline-block;
      +}
      +.preview-block {
      +    font-size:1em;
      +    font-family:var(--block-font-family);
      +    border-style:solid;
      +    border-width:thin;
      +    border-radius:10px;
      +    padding:10px;
      +    margin-bottom:10px;
      +    margin-right:10px;
      +    display:inline-block;
      +}
      +div.block div.deprecation-comment {
      +    font-style:normal;
      +}
      +details.invalid-tag, span.invalid-tag {
      +    font-size:1em;
      +    font-family:var(--block-font-family);
      +    color: var(--invalid-tag-text-color);
      +    background: var(--invalid-tag-background-color);
      +    border: thin solid var(--table-border-color);
      +    border-radius:2px;
      +    padding: 2px 4px;
      +    display:inline-block;
      +}
      +details summary {
      +    cursor: pointer;
      +}
      +/*
      + * Styles specific to HTML5 elements.
      + */
      +main, nav, header, footer, section {
      +    display:block;
      +}
      +/*
      + * Styles for javadoc search.
      + */
      +.ui-state-active {
      +    /* Overrides the color of selection used in jQuery UI */
      +    background: var(--selected-background-color);
      +    border: 1px solid var(--selected-background-color);
      +    color: var(--selected-text-color);
      +}
      +.ui-autocomplete-category {
      +    font-weight:bold;
      +    font-size:15px;
      +    padding:7px 0 7px 3px;
      +    background-color:var(--navbar-background-color);
      +    color:var(--navbar-text-color);
      +}
      +.ui-autocomplete {
      +    max-height:85%;
      +    max-width:65%;
      +    overflow-y:auto;
      +    overflow-x:auto;
      +    scrollbar-width: thin;
      +    white-space:nowrap;
      +    box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23);
      +}
      +ul.ui-autocomplete {
      +    position:fixed;
      +    z-index:1;
      +    background-color: var(--body-background-color);
      +}
      +ul.ui-autocomplete li {
      +    float:left;
      +    clear:both;
      +    min-width:100%;
      +}
      +ul.ui-autocomplete li.ui-static-link {
      +    position:sticky;
      +    bottom:0;
      +    left:0;
      +    background: var(--subnav-background-color);
      +    padding: 5px 0;
      +    font-family: var(--body-font-family);
      +    font-size: 0.93em;
      +    font-weight: bolder;
      +    z-index: 2;
      +}
      +li.ui-static-link a, li.ui-static-link a:visited {
      +    text-decoration:none;
      +    color:var(--link-color);
      +    float:right;
      +    margin-right:20px;
      +}
      +.ui-autocomplete .result-item {
      +    font-size: inherit;
      +}
      +.ui-autocomplete .result-highlight {
      +    font-weight:bold;
      +}
      +#search-input, #page-search-input {
      +    background-image:url('resources/glass.png');
      +    background-size:13px;
      +    background-repeat:no-repeat;
      +    background-position:2px 3px;
      +    background-color: var(--search-input-background-color);
      +    color: var(--search-input-text-color);
      +    border-color: var(--border-color);
      +    padding-left:20px;
      +    width: 250px;
      +    margin: 0;
      +}
      +#search-input {
      +    margin-left: 4px;
      +}
      +#reset-button {
      +    background-color: transparent;
      +    background-image:url('resources/x.png');
      +    background-repeat:no-repeat;
      +    background-size:contain;
      +    border:0;
      +    border-radius:0;
      +    width:12px;
      +    height:12px;
      +    position:absolute;
      +    right:12px;
      +    top:10px;
      +    font-size:0;
      +}
      +::placeholder {
      +    color:var(--search-input-placeholder-color);
      +    opacity: 1;
      +}
      +.search-tag-desc-result {
      +    font-style:italic;
      +    font-size:11px;
      +}
      +.search-tag-holder-result {
      +    font-style:italic;
      +    font-size:12px;
      +}
      +.search-tag-result:target {
      +    background-color:var(--search-tag-highlight-color);
      +}
      +details.page-search-details {
      +    display: inline-block;
      +}
      +div#result-container {
      +    font-size: 1em;
      +}
      +div#result-container a.search-result-link {
      +    padding: 0;
      +    margin: 4px 0;
      +    width: 100%;
      +}
      +#result-container .result-highlight {
      +    font-weight:bolder;
      +}
      +.page-search-info {
      +    background-color: var(--subnav-background-color);
      +    border-radius: 3px;
      +    border: 0 solid var(--border-color);
      +    padding: 0 8px;
      +    overflow: hidden;
      +    height: 0;
      +    transition: all 0.2s ease;
      +}
      +div.table-tabs > button.table-tab {
      +    background: var(--navbar-background-color);
      +    color: var(--navbar-text-color);
      +}
      +.page-search-header {
      +    padding: 5px 12px 7px 12px;
      +    font-weight: bold;
      +    margin-right: 3px;
      +    background-color:var(--navbar-background-color);
      +    color:var(--navbar-text-color);
      +    display: inline-block;
      +}
      +button.page-search-header {
      +    border: none;
      +    cursor: pointer;
      +}
      +span#page-search-link {
      +    text-decoration: underline;
      +}
      +.module-graph span, .sealed-graph span {
      +    display:none;
      +    position:absolute;
      +}
      +.module-graph:hover span, .sealed-graph:hover span {
      +    display:block;
      +    margin: -100px 0 0 100px;
      +    z-index: 1;
      +}
      +.inherited-list {
      +    margin: 10px 0 10px 0;
      +}
      +section.class-description {
      +    line-height: 1.4;
      +}
      +.summary section[class$="-summary"], .details section[class$="-details"],
      +.class-uses .detail, .serialized-class-details {
      +    padding: 0 20px 5px 10px;
      +    border: 1px solid var(--border-color);
      +    background-color: var(--section-background-color);
      +}
      +.inherited-list, section[class$="-details"] .detail {
      +    padding:0 0 5px 8px;
      +    background-color:var(--detail-background-color);
      +    border:none;
      +}
      +.vertical-separator {
      +    padding: 0 5px;
      +}
      +ul.help-section-list {
      +    margin: 0;
      +}
      +ul.help-subtoc > li {
      +  display: inline-block;
      +  padding-right: 5px;
      +  font-size: smaller;
      +}
      +ul.help-subtoc > li::before {
      +  content: "\2022" ;
      +  padding-right:2px;
      +}
      +.help-note {
      +    font-style: italic;
      +}
      +/*
      + * Indicator icon for external links.
      + */
      +main a[href*="://"]::after {
      +    content:"";
      +    display:inline-block;
      +    background-image:url('data:image/svg+xml; utf8, \
      +      <svg xmlns="http://www.w3.org/2000/svg" width="768" height="768">\
      +        <path d="M584 664H104V184h216V80H0v688h688V448H584zM384 0l132 \
      +        132-240 240 120 120 240-240 132 132V0z" fill="%234a6782"/>\
      +      </svg>');
      +    background-size:100% 100%;
      +    width:7px;
      +    height:7px;
      +    margin-left:2px;
      +    margin-bottom:4px;
      +}
      +main a[href*="://"]:hover::after,
      +main a[href*="://"]:focus::after {
      +    background-image:url('data:image/svg+xml; utf8, \
      +      <svg xmlns="http://www.w3.org/2000/svg" width="768" height="768">\
      +        <path d="M584 664H104V184h216V80H0v688h688V448H584zM384 0l132 \
      +        132-240 240 120 120 240-240 132 132V0z" fill="%23bb7a2a"/>\
      +      </svg>');
      +}
      +/*
      + * Styles for header/section anchor links
      + */
      +a.anchor-link {
      +    opacity: 0;
      +    transition: opacity 0.1s;
      +}
      +:hover > a.anchor-link {
      +    opacity: 80%;
      +}
      +a.anchor-link:hover,
      +a.anchor-link:focus-visible,
      +a.anchor-link.visible {
      +    opacity: 100%;
      +}
      +a.anchor-link > img {
      +    width: 0.9em;
      +    height: 0.9em;
      +}
      +/*
      + * Styles for copy-to-clipboard buttons
      + */
      +button.copy {
      +    opacity: 70%;
      +    border: none;
      +    border-radius: 3px;
      +    position: relative;
      +    background:none;
      +    transition: opacity 0.3s;
      +    cursor: pointer;
      +}
      +:hover > button.copy {
      +    opacity: 80%;
      +}
      +button.copy:hover,
      +button.copy:active,
      +button.copy:focus-visible,
      +button.copy.visible {
      +    opacity: 100%;
      +}
      +button.copy img {
      +    position: relative;
      +    background: none;
      +    filter: brightness(var(--copy-icon-brightness));
      +}
      +button.copy:active {
      +    background-color: var(--copy-button-background-color-active);
      +}
      +button.copy span {
      +    color: var(--body-text-color);
      +    position: relative;
      +    top: -0.1em;
      +    transition: all 0.1s;
      +    font-size: 0.76rem;
      +    line-height: 1.2em;
      +    opacity: 0;
      +}
      +button.copy:hover span,
      +button.copy:focus-visible span,
      +button.copy.visible span {
      +    opacity: 100%;
      +}
      +/* search page copy button */
      +button#page-search-copy {
      +    margin-left: 0.4em;
      +    padding:0.3em;
      +    top:0.13em;
      +}
      +button#page-search-copy img {
      +    width: 1.2em;
      +    height: 1.2em;
      +    padding: 0.01em 0;
      +    top: 0.15em;
      +}
      +button#page-search-copy span {
      +    color: var(--body-text-color);
      +    line-height: 1.2em;
      +    padding: 0.2em;
      +    top: -0.18em;
      +}
      +div.page-search-info:hover button#page-search-copy span {
      +    opacity: 100%;
      +}
      +/* snippet copy button */
      +button.snippet-copy {
      +    position: absolute;
      +    top: 6px;
      +    right: 6px;
      +    height: 1.7em;
      +    padding: 2px;
      +}
      +button.snippet-copy img {
      +    width: 18px;
      +    height: 18px;
      +    padding: 0.05em 0;
      +}
      +button.snippet-copy span {
      +    line-height: 1.2em;
      +    padding: 0.2em;
      +    position: relative;
      +    top: -0.5em;
      +}
      +div.snippet-container:hover button.snippet-copy span {
      +    opacity: 100%;
      +}
      +/*
      + * Styles for user-provided tables.
      + *
      + * borderless:
      + *      No borders, vertical margins, styled caption.
      + *      This style is provided for use with existing doc comments.
      + *      In general, borderless tables should not be used for layout purposes.
      + *
      + * plain:
      + *      Plain borders around table and cells, vertical margins, styled caption.
      + *      Best for small tables or for complex tables for tables with cells that span
      + *      rows and columns, when the "striped" style does not work well.
      + *
      + * striped:
      + *      Borders around the table and vertical borders between cells, striped rows,
      + *      vertical margins, styled caption.
      + *      Best for tables that have a header row, and a body containing a series of simple rows.
      + */
      +
      +table.borderless,
      +table.plain,
      +table.striped {
      +    margin-top: 10px;
      +    margin-bottom: 10px;
      +}
      +table.borderless > caption,
      +table.plain > caption,
      +table.striped > caption {
      +    font-weight: bold;
      +    font-size: smaller;
      +}
      +table.borderless th, table.borderless td,
      +table.plain th, table.plain td,
      +table.striped th, table.striped td {
      +    padding: 2px 5px;
      +}
      +table.borderless,
      +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th,
      +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td {
      +    border: none;
      +}
      +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr {
      +    background-color: transparent;
      +}
      +table.plain {
      +    border-collapse: collapse;
      +    border: 1px solid var(--table-border-color);
      +}
      +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr {
      +    background-color: transparent;
      +}
      +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th,
      +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td {
      +    border: 1px solid var(--table-border-color);
      +}
      +table.striped {
      +    border-collapse: collapse;
      +    border: 1px solid var(--table-border-color);
      +}
      +table.striped > thead {
      +    background-color: var(--subnav-background-color);
      +}
      +table.striped > thead > tr > th, table.striped > thead > tr > td {
      +    border: 1px solid var(--table-border-color);
      +}
      +table.striped > tbody > tr:nth-child(even) {
      +    background-color: var(--odd-row-color)
      +}
      +table.striped > tbody > tr:nth-child(odd) {
      +    background-color: var(--even-row-color)
      +}
      +table.striped > tbody > tr > th, table.striped > tbody > tr > td {
      +    border-left: 1px solid var(--table-border-color);
      +    border-right: 1px solid var(--table-border-color);
      +}
      +table.striped > tbody > tr > th {
      +    font-weight: normal;
      +}
      +/**
      + * Tweak style for small screens.
      + */
      +@media screen and (max-width: 920px) {
      +    header.flex-header {
      +        max-height: 100vh;
      +        overflow-y: auto;
      +    }
      +    div#navbar-top {
      +        height: 2.8em;
      +        transition: height 0.35s ease;
      +    }
      +    ul.nav-list {
      +        display: block;
      +        width: 40%;
      +        float:left;
      +        clear: left;
      +        margin: 10px 0 0 0;
      +        padding: 0;
      +    }
      +    ul.nav-list li {
      +        float: none;
      +        padding: 6px;
      +        margin-left: 10px;
      +        margin-top: 2px;
      +    }
      +    ul.sub-nav-list-small {
      +        display:block;
      +        height: 100%;
      +        width: 50%;
      +        float: right;
      +        clear: right;
      +        background-color: var(--subnav-background-color);
      +        color: var(--body-text-color);
      +        margin: 6px 0 0 0;
      +        padding: 0;
      +    }
      +    ul.sub-nav-list-small ul {
      +        padding-left: 20px;
      +    }
      +    ul.sub-nav-list-small a:link, ul.sub-nav-list-small a:visited {
      +        color:var(--link-color);
      +    }
      +    ul.sub-nav-list-small a:hover {
      +        color:var(--link-color-active);
      +    }
      +    ul.sub-nav-list-small li {
      +        list-style:none;
      +        float:none;
      +        padding: 6px;
      +        margin-top: 1px;
      +        text-transform:uppercase;
      +    }
      +    ul.sub-nav-list-small > li {
      +        margin-left: 10px;
      +    }
      +    ul.sub-nav-list-small li p {
      +        margin: 5px 0;
      +    }
      +    div#navbar-sub-list {
      +        display: none;
      +    }
      +    .top-nav a:link, .top-nav a:active, .top-nav a:visited {
      +        display: block;
      +    }
      +    button#navbar-toggle-button {
      +        width: 3.4em;
      +        height: 2.8em;
      +        background-color: transparent;
      +        display: block;
      +        float: left;
      +        border: 0;
      +        margin: 0 10px;
      +        cursor: pointer;
      +        font-size: 10px;
      +    }
      +    button#navbar-toggle-button .nav-bar-toggle-icon {
      +        display: block;
      +        width: 24px;
      +        height: 3px;
      +        margin: 1px 0 4px 0;
      +        border-radius: 2px;
      +        transition: all 0.1s;
      +        background-color: var(--navbar-text-color);
      +    }
      +    button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(1) {
      +        transform: rotate(45deg);
      +        transform-origin: 10% 10%;
      +        width: 26px;
      +    }
      +    button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(2) {
      +        opacity: 0;
      +    }
      +    button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(3) {
      +        transform: rotate(-45deg);
      +        transform-origin: 10% 90%;
      +        width: 26px;
      +    }
      +}
      +@media screen and (max-width: 800px) {
      +    .about-language {
      +        padding-right: 16px;
      +    }
      +    ul.nav-list li {
      +        margin-left: 5px;
      +    }
      +    ul.sub-nav-list-small > li {
      +        margin-left: 5px;
      +    }
      +    main {
      +        padding: 10px;
      +    }
      +    .summary section[class$="-summary"], .details section[class$="-details"],
      +    .class-uses .detail, .serialized-class-details {
      +        padding: 0 8px 5px 8px;
      +    }
      +    body {
      +        -webkit-text-size-adjust: none;
      +    }
      +}
      +@media screen and (max-width: 400px) {
      +    .about-language {
      +        font-size: 10px;
      +        padding-right: 12px;
      +    }
      +}
      +@media screen and (max-width: 400px) {
      +    .nav-list-search {
      +        width: 94%;
      +    }
      +    #search-input, #page-search-input {
      +        width: 70%;
      +    }
      +}
      +@media screen and (max-width: 320px) {
      +    .nav-list-search > label {
      +        display: none;
      +    }
      +    .nav-list-search {
      +        width: 90%;
      +    }
      +    #search-input, #page-search-input {
      +        width: 80%;
      +    }
      +}
      +
      +pre.snippet {
      +    background-color: var(--snippet-background-color);
      +    color: var(--snippet-text-color);
      +    padding: 10px;
      +    margin: 12px 0;
      +    overflow: auto;
      +    white-space: pre;
      +}
      +div.snippet-container {
      +    position: relative;
      +}
      +@media screen and (max-width: 800px) {
      +    pre.snippet {
      +        padding-top: 26px;
      +    }
      +    button.snippet-copy {
      +        top: 4px;
      +        right: 4px;
      +    }
      +}
      +pre.snippet .italic {
      +    font-style: italic;
      +}
      +pre.snippet .bold {
      +    font-weight: bold;
      +}
      +pre.snippet .highlighted {
      +    background-color: var(--snippet-highlight-color);
      +    border-radius: 10%;
      +}
      diff --git a/waffle-jna-jakarta/testapidocs/tag-search-index.js b/waffle-jna-jakarta/testapidocs/tag-search-index.js
      new file mode 100644
      index 0000000000..0367dae65d
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/tag-search-index.js
      @@ -0,0 +1 @@
      +tagSearchIndex = [];updateSearchResults();
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/testapidocs/type-search-index.js b/waffle-jna-jakarta/testapidocs/type-search-index.js
      new file mode 100644
      index 0000000000..8005321cd4
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/type-search-index.js
      @@ -0,0 +1 @@
      +typeSearchIndex = [{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"waffle.jaas","l":"UsernamePasswordCallbackHandler"}];updateSearchResults();
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/module-summary.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/module-summary.html
      new file mode 100644
      index 0000000000..8b0fc8cab0
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/module-summary.html
      @@ -0,0 +1,109 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>waffle.jna.jakarta (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="declaration: module: waffle.jna.jakarta">
      +<meta name="generator" content="javadoc/ModuleWriterImpl">
      +<link rel="stylesheet" type="text/css" href="../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../script.js"></script>
      +<script type="text/javascript" src="../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="module-declaration-page">
      +<script type="text/javascript">var pathtoroot = "../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li class="nav-bar-cell1-rev">Module</li>
      +<li>Package</li>
      +<li>Class</li>
      +<li>Use</li>
      +<li><a href="../overview-tree.html">Tree</a></li>
      +<li><a href="../index-all.html">Index</a></li>
      +<li><a href="../help-doc.html#module">Help</a></li>
      +</ul>
      +<ul class="sub-nav-list-small">
      +<li>
      +<p>Module:</p>
      +<ul>
      +<li>Description</li>
      +<li>Modules</li>
      +<li><a href="#packages-summary">Packages</a></li>
      +<li>Services</li>
      +</ul>
      +</li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list">
      +<ul class="sub-nav-list">
      +<li>Module:&nbsp;</li>
      +<li>Description&nbsp;|&nbsp;</li>
      +<li>Modules&nbsp;|&nbsp;</li>
      +<li><a href="#packages-summary">Packages</a>&nbsp;|&nbsp;</li>
      +<li>Services</li>
      +</ul>
      +</div>
      +<div class="nav-list-search"><a href="../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 title="Module waffle.jna.jakarta" class="title">Module waffle.jna.jakarta</h1>
      +</div>
      +<hr>
      +<div class="module-signature">module <span class="element-name">waffle.jna.jakarta</span></div>
      +<section class="summary">
      +<ul class="summary-list">
      +<li>
      +<section class="packages-summary" id="packages-summary">
      +<!-- ============ PACKAGES SUMMARY =========== -->
      +<h2>Packages</h2>
      +<div id="package-summary-table">
      +<div class="caption"><span>Exports</span></div>
      +<div class="summary-table two-column-summary">
      +<div class="table-header col-first">Package</div>
      +<div class="table-header col-last">Description</div>
      +<div class="col-first even-row-color package-summary-table package-summary-table-tab1"><a href="waffle/jaas/package-summary.html">waffle.jaas</a></div>
      +<div class="col-last even-row-color package-summary-table package-summary-table-tab1">&nbsp;</div>
      +<div class="col-first odd-row-color package-summary-table package-summary-table-tab1"><a href="waffle/servlet/package-summary.html">waffle.servlet</a></div>
      +<div class="col-last odd-row-color package-summary-table package-summary-table-tab1">&nbsp;</div>
      +<div class="col-first even-row-color package-summary-table package-summary-table-tab1"><a href="waffle/servlet/spi/package-summary.html">waffle.servlet.spi</a></div>
      +<div class="col-last even-row-color package-summary-table package-summary-table-tab1">&nbsp;</div>
      +<div class="col-first odd-row-color package-summary-table package-summary-table-tab1"><a href="waffle/util/package-summary.html">waffle.util</a></div>
      +<div class="col-last odd-row-color package-summary-table package-summary-table-tab1">&nbsp;</div>
      +<div class="col-first even-row-color package-summary-table package-summary-table-tab1"><a href="waffle/windows/auth/package-summary.html">waffle.windows.auth</a></div>
      +<div class="col-last even-row-color package-summary-table package-summary-table-tab1">&nbsp;</div>
      +</div>
      +</div>
      +</section>
      +</li>
      +</ul>
      +</section>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/UsernamePasswordCallbackHandler.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/UsernamePasswordCallbackHandler.html
      new file mode 100644
      index 0000000000..19f296d03c
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/UsernamePasswordCallbackHandler.html
      @@ -0,0 +1,202 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>UsernamePasswordCallbackHandler (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="declaration: module: waffle.jna.jakarta, package: waffle.jaas, class: UsernamePasswordCallbackHandler">
      +<meta name="generator" content="javadoc/ClassWriterImpl">
      +<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../script.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="class-declaration-page">
      +<script type="text/javascript">var pathtoroot = "../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../module-summary.html">Module</a></li>
      +<li><a href="package-summary.html">Package</a></li>
      +<li class="nav-bar-cell1-rev">Class</li>
      +<li><a href="class-use/UsernamePasswordCallbackHandler.html">Use</a></li>
      +<li><a href="package-tree.html">Tree</a></li>
      +<li><a href="../../../index-all.html">Index</a></li>
      +<li><a href="../../../help-doc.html#class">Help</a></li>
      +</ul>
      +<ul class="sub-nav-list-small">
      +<li>
      +<p>Summary:</p>
      +<ul>
      +<li>Nested</li>
      +<li>Field</li>
      +<li><a href="#constructor-summary">Constr</a></li>
      +<li><a href="#method-summary">Method</a></li>
      +</ul>
      +</li>
      +<li>
      +<p>Detail:</p>
      +<ul>
      +<li>Field</li>
      +<li><a href="#constructor-detail">Constr</a></li>
      +<li><a href="#method-detail">Method</a></li>
      +</ul>
      +</li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list">
      +<ul class="sub-nav-list">
      +<li>Summary:&nbsp;</li>
      +<li>Nested&nbsp;|&nbsp;</li>
      +<li>Field&nbsp;|&nbsp;</li>
      +<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
      +<li><a href="#method-summary">Method</a></li>
      +</ul>
      +<ul class="sub-nav-list">
      +<li>Detail:&nbsp;</li>
      +<li>Field&nbsp;|&nbsp;</li>
      +<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
      +<li><a href="#method-detail">Method</a></li>
      +</ul>
      +</div>
      +<div class="nav-list-search"><a href="../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<!-- ======== START OF CLASS DATA ======== -->
      +<div class="header">
      +<div class="sub-title"><span class="module-label-in-type">Module</span>&nbsp;<a href="../../module-summary.html">waffle.jna.jakarta</a></div>
      +<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">waffle.jaas</a></div>
      +<h1 title="Class UsernamePasswordCallbackHandler" class="title">Class UsernamePasswordCallbackHandler</h1>
      +</div>
      +<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
      +<div class="inheritance">waffle.jaas.UsernamePasswordCallbackHandler</div>
      +</div>
      +<section class="class-description" id="class-description">
      +<dl class="notes">
      +<dt>All Implemented Interfaces:</dt>
      +<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/security/auth/callback/CallbackHandler.html" title="class or interface in javax.security.auth.callback" class="external-link">CallbackHandler</a></code></dd>
      +</dl>
      +<hr>
      +<div class="type-signature"><span class="modifiers">public class </span><span class="element-name type-name-label">UsernamePasswordCallbackHandler</span>
      +<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>
      +implements <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/security/auth/callback/CallbackHandler.html" title="class or interface in javax.security.auth.callback" class="external-link">CallbackHandler</a></span></div>
      +<div class="block">The Class UsernamePasswordCallbackHandler.</div>
      +</section>
      +<section class="summary">
      +<ul class="summary-list">
      +<!-- ======== CONSTRUCTOR SUMMARY ======== -->
      +<li>
      +<section class="constructor-summary" id="constructor-summary">
      +<h2>Constructor Summary</h2>
      +<div class="caption"><span>Constructors</span></div>
      +<div class="summary-table two-column-summary">
      +<div class="table-header col-first">Constructor</div>
      +<div class="table-header col-last">Description</div>
      +<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(java.lang.String,java.lang.String)" class="member-name-link">UsernamePasswordCallbackHandler</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;newUserName,
      + <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;newPassword)</code></div>
      +<div class="col-last even-row-color">
      +<div class="block">Instantiates a new username password callback handler.</div>
      +</div>
      +</div>
      +</section>
      +</li>
      +<!-- ========== METHOD SUMMARY =========== -->
      +<li>
      +<section class="method-summary" id="method-summary">
      +<h2>Method Summary</h2>
      +<div id="method-summary-table">
      +<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
      +<div id="method-summary-table.tabpanel" role="tabpanel">
      +<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
      +<div class="table-header col-first">Modifier and Type</div>
      +<div class="table-header col-second">Method</div>
      +<div class="table-header col-last">Description</div>
      +<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
      +<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#handle(javax.security.auth.callback.Callback%5B%5D)" class="member-name-link">handle</a><wbr>(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/security/auth/callback/Callback.html" title="class or interface in javax.security.auth.callback" class="external-link">Callback</a>[]&nbsp;cb)</code></div>
      +<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
      +</div>
      +</div>
      +</div>
      +<div class="inherited-list">
      +<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
      +<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
      +</section>
      +</li>
      +</ul>
      +</section>
      +<section class="details">
      +<ul class="details-list">
      +<!-- ========= CONSTRUCTOR DETAIL ======== -->
      +<li>
      +<section class="constructor-details" id="constructor-detail">
      +<h2>Constructor Details</h2>
      +<ul class="member-list">
      +<li>
      +<section class="detail" id="&lt;init&gt;(java.lang.String,java.lang.String)">
      +<h3>UsernamePasswordCallbackHandler</h3>
      +<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name">UsernamePasswordCallbackHandler</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;newUserName,
      + <a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a>&nbsp;newPassword)</span></div>
      +<div class="block">Instantiates a new username password callback handler.</div>
      +<dl class="notes">
      +<dt>Parameters:</dt>
      +<dd><code>newUserName</code> - the new user name</dd>
      +<dd><code>newPassword</code> - the new password</dd>
      +</dl>
      +</section>
      +</li>
      +</ul>
      +</section>
      +</li>
      +<!-- ============ METHOD DETAIL ========== -->
      +<li>
      +<section class="method-details" id="method-detail">
      +<h2>Method Details</h2>
      +<ul class="member-list">
      +<li>
      +<section class="detail" id="handle(javax.security.auth.callback.Callback[])">
      +<h3>handle</h3>
      +<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name">handle</span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/security/auth/callback/Callback.html" title="class or interface in javax.security.auth.callback" class="external-link">Callback</a>[]&nbsp;cb)</span>
      +            throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a>,
      +<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/security/auth/callback/UnsupportedCallbackException.html" title="class or interface in javax.security.auth.callback" class="external-link">UnsupportedCallbackException</a></span></div>
      +<dl class="notes">
      +<dt>Specified by:</dt>
      +<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/security/auth/callback/CallbackHandler.html#handle(javax.security.auth.callback.Callback%5B%5D)" title="class or interface in javax.security.auth.callback" class="external-link">handle</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/security/auth/callback/CallbackHandler.html" title="class or interface in javax.security.auth.callback" class="external-link">CallbackHandler</a></code></dd>
      +<dt>Throws:</dt>
      +<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code></dd>
      +<dd><code><a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/security/auth/callback/UnsupportedCallbackException.html" title="class or interface in javax.security.auth.callback" class="external-link">UnsupportedCallbackException</a></code></dd>
      +</dl>
      +</section>
      +</li>
      +</ul>
      +</section>
      +</li>
      +</ul>
      +</section>
      +<!-- ========= END OF CLASS DATA ========= -->
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/class-use/UsernamePasswordCallbackHandler.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/class-use/UsernamePasswordCallbackHandler.html
      new file mode 100644
      index 0000000000..6a5c01e7e8
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/class-use/UsernamePasswordCallbackHandler.html
      @@ -0,0 +1,61 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>Uses of Class waffle.jaas.UsernamePasswordCallbackHandler (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="use: module: waffle.jna.jakarta, package: waffle.jaas, class: UsernamePasswordCallbackHandler">
      +<meta name="generator" content="javadoc/ClassUseWriter">
      +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../../script.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="class-use-page">
      +<script type="text/javascript">var pathtoroot = "../../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../../module-summary.html">Module</a></li>
      +<li><a href="../package-summary.html">Package</a></li>
      +<li><a href="../UsernamePasswordCallbackHandler.html" title="class in waffle.jaas">Class</a></li>
      +<li class="nav-bar-cell1-rev">Use</li>
      +<li><a href="../package-tree.html">Tree</a></li>
      +<li><a href="../../../../index-all.html">Index</a></li>
      +<li><a href="../../../../help-doc.html#use">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="../../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 title="Uses of Class waffle.jaas.UsernamePasswordCallbackHandler" class="title">Uses of Class<br>waffle.jaas.UsernamePasswordCallbackHandler</h1>
      +</div>
      +No usage of waffle.jaas.UsernamePasswordCallbackHandler</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/package-summary.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/package-summary.html
      new file mode 100644
      index 0000000000..77716ad558
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/package-summary.html
      @@ -0,0 +1,98 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>waffle.jaas (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="declaration: module: waffle.jna.jakarta, package: waffle.jaas">
      +<meta name="generator" content="javadoc/PackageWriterImpl">
      +<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../script.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-declaration-page">
      +<script type="text/javascript">var pathtoroot = "../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../module-summary.html">Module</a></li>
      +<li class="nav-bar-cell1-rev">Package</li>
      +<li>Class</li>
      +<li><a href="package-use.html">Use</a></li>
      +<li><a href="package-tree.html">Tree</a></li>
      +<li><a href="../../../index-all.html">Index</a></li>
      +<li><a href="../../../help-doc.html#package">Help</a></li>
      +</ul>
      +<ul class="sub-nav-list-small">
      +<li>
      +<p>Package:</p>
      +<ul>
      +<li>Description</li>
      +<li>Related Packages</li>
      +<li><a href="#class-summary">Classes and Interfaces</a></li>
      +</ul>
      +</li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list">
      +<ul class="sub-nav-list">
      +<li>Package:&nbsp;</li>
      +<li>Description&nbsp;|&nbsp;</li>
      +<li>Related Packages&nbsp;|&nbsp;</li>
      +<li><a href="#class-summary">Classes and Interfaces</a></li>
      +</ul>
      +</div>
      +<div class="nav-list-search"><a href="../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<div class="sub-title"><span class="module-label-in-package">Module</span>&nbsp;<a href="../../module-summary.html">waffle.jna.jakarta</a></div>
      +<h1 title="Package waffle.jaas" class="title">Package waffle.jaas</h1>
      +</div>
      +<hr>
      +<div class="package-signature">package <span class="element-name">waffle.jaas</span></div>
      +<section class="summary">
      +<ul class="summary-list">
      +<li>
      +<div id="class-summary">
      +<div class="caption"><span>Classes</span></div>
      +<div class="summary-table two-column-summary">
      +<div class="table-header col-first">Class</div>
      +<div class="table-header col-last">Description</div>
      +<div class="col-first even-row-color class-summary class-summary-tab2"><a href="UsernamePasswordCallbackHandler.html" title="class in waffle.jaas">UsernamePasswordCallbackHandler</a></div>
      +<div class="col-last even-row-color class-summary class-summary-tab2">
      +<div class="block">The Class UsernamePasswordCallbackHandler.</div>
      +</div>
      +</div>
      +</div>
      +</li>
      +</ul>
      +</section>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/package-tree.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/package-tree.html
      new file mode 100644
      index 0000000000..61d027f95c
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/package-tree.html
      @@ -0,0 +1,75 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>waffle.jaas Class Hierarchy (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="tree: module: waffle.jna.jakarta, package: waffle.jaas">
      +<meta name="generator" content="javadoc/PackageTreeWriter">
      +<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../script.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-tree-page">
      +<script type="text/javascript">var pathtoroot = "../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../module-summary.html">Module</a></li>
      +<li><a href="package-summary.html">Package</a></li>
      +<li>Class</li>
      +<li>Use</li>
      +<li class="nav-bar-cell1-rev">Tree</li>
      +<li><a href="../../../index-all.html">Index</a></li>
      +<li><a href="../../../help-doc.html#tree">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 class="title">Hierarchy For Package waffle.jaas</h1>
      +</div>
      +<span class="package-hierarchy-label">Package Hierarchies:</span>
      +<ul class="horizontal contents-list">
      +<li><a href="../../../overview-tree.html">All Packages</a></li>
      +</ul>
      +<section class="hierarchy">
      +<h2 title="Class Hierarchy">Class Hierarchy</h2>
      +<ul>
      +<li class="circle">java.lang.<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html" class="type-name-link external-link" title="class or interface in java.lang">Object</a>
      +<ul>
      +<li class="circle">waffle.jaas.<a href="UsernamePasswordCallbackHandler.html" class="type-name-link" title="class in waffle.jaas">UsernamePasswordCallbackHandler</a> (implements javax.security.auth.callback.<a href="https://docs.oracle.com/en/java/javase/11/docs/api/java.base/javax/security/auth/callback/CallbackHandler.html" title="class or interface in javax.security.auth.callback" class="external-link">CallbackHandler</a>)</li>
      +</ul>
      +</li>
      +</ul>
      +</section>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/package-use.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/package-use.html
      new file mode 100644
      index 0000000000..45b2f95d87
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/jaas/package-use.html
      @@ -0,0 +1,61 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>Uses of Package waffle.jaas (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="use: module: waffle.jna.jakarta, package: waffle.jaas">
      +<meta name="generator" content="javadoc/PackageUseWriter">
      +<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../script.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-use-page">
      +<script type="text/javascript">var pathtoroot = "../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../module-summary.html">Module</a></li>
      +<li><a href="package-summary.html">Package</a></li>
      +<li>Class</li>
      +<li class="nav-bar-cell1-rev">Use</li>
      +<li><a href="package-tree.html">Tree</a></li>
      +<li><a href="../../../index-all.html">Index</a></li>
      +<li><a href="../../../help-doc.html#use">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 title="Uses of Package waffle.jaas" class="title">Uses of Package<br>waffle.jaas</h1>
      +</div>
      +No usage of waffle.jaas</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/package-summary.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/package-summary.html
      new file mode 100644
      index 0000000000..0f9efee344
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/package-summary.html
      @@ -0,0 +1,96 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>waffle.servlet (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="declaration: module: waffle.jna.jakarta, package: waffle.servlet">
      +<meta name="generator" content="javadoc/PackageWriterImpl">
      +<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../script.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-declaration-page">
      +<script type="text/javascript">var pathtoroot = "../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../module-summary.html">Module</a></li>
      +<li class="nav-bar-cell1-rev">Package</li>
      +<li>Class</li>
      +<li><a href="package-use.html">Use</a></li>
      +<li><a href="package-tree.html">Tree</a></li>
      +<li><a href="../../../index-all.html">Index</a></li>
      +<li><a href="../../../help-doc.html#package">Help</a></li>
      +</ul>
      +<ul class="sub-nav-list-small">
      +<li>
      +<p>Package:</p>
      +<ul>
      +<li>Description</li>
      +<li><a href="#related-package-summary">Related Packages</a></li>
      +<li>Classes and Interfaces</li>
      +</ul>
      +</li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list">
      +<ul class="sub-nav-list">
      +<li>Package:&nbsp;</li>
      +<li>Description&nbsp;|&nbsp;</li>
      +<li><a href="#related-package-summary">Related Packages</a>&nbsp;|&nbsp;</li>
      +<li>Classes and Interfaces</li>
      +</ul>
      +</div>
      +<div class="nav-list-search"><a href="../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<div class="sub-title"><span class="module-label-in-package">Module</span>&nbsp;<a href="../../module-summary.html">waffle.jna.jakarta</a></div>
      +<h1 title="Package waffle.servlet" class="title">Package waffle.servlet</h1>
      +</div>
      +<hr>
      +<div class="package-signature">package <span class="element-name">waffle.servlet</span></div>
      +<section class="summary">
      +<ul class="summary-list">
      +<li>
      +<div id="related-package-summary">
      +<div class="caption"><span>Related Packages</span></div>
      +<div class="summary-table two-column-summary">
      +<div class="table-header col-first">Package</div>
      +<div class="table-header col-last">Description</div>
      +<div class="col-first even-row-color"><a href="spi/package-summary.html">waffle.servlet.spi</a></div>
      +<div class="col-last even-row-color">&nbsp;</div>
      +</div>
      +</div>
      +</li>
      +</ul>
      +</section>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/package-tree.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/package-tree.html
      new file mode 100644
      index 0000000000..5a3159ea32
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/package-tree.html
      @@ -0,0 +1,65 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>waffle.servlet Class Hierarchy (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="tree: module: waffle.jna.jakarta, package: waffle.servlet">
      +<meta name="generator" content="javadoc/PackageTreeWriter">
      +<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../script.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-tree-page">
      +<script type="text/javascript">var pathtoroot = "../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../module-summary.html">Module</a></li>
      +<li><a href="package-summary.html">Package</a></li>
      +<li>Class</li>
      +<li>Use</li>
      +<li class="nav-bar-cell1-rev">Tree</li>
      +<li><a href="../../../index-all.html">Index</a></li>
      +<li><a href="../../../help-doc.html#tree">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 class="title">Hierarchy For Package waffle.servlet</h1>
      +</div>
      +<span class="package-hierarchy-label">Package Hierarchies:</span>
      +<ul class="horizontal contents-list">
      +<li><a href="../../../overview-tree.html">All Packages</a></li>
      +</ul>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/package-use.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/package-use.html
      new file mode 100644
      index 0000000000..220ada9561
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/package-use.html
      @@ -0,0 +1,61 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>Uses of Package waffle.servlet (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="use: module: waffle.jna.jakarta, package: waffle.servlet">
      +<meta name="generator" content="javadoc/PackageUseWriter">
      +<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../script.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-use-page">
      +<script type="text/javascript">var pathtoroot = "../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../module-summary.html">Module</a></li>
      +<li><a href="package-summary.html">Package</a></li>
      +<li>Class</li>
      +<li class="nav-bar-cell1-rev">Use</li>
      +<li><a href="package-tree.html">Tree</a></li>
      +<li><a href="../../../index-all.html">Index</a></li>
      +<li><a href="../../../help-doc.html#use">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 title="Uses of Package waffle.servlet" class="title">Uses of Package<br>waffle.servlet</h1>
      +</div>
      +No usage of waffle.servlet</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/spi/package-summary.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/spi/package-summary.html
      new file mode 100644
      index 0000000000..62ddfc430e
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/spi/package-summary.html
      @@ -0,0 +1,96 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>waffle.servlet.spi (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="declaration: module: waffle.jna.jakarta, package: waffle.servlet.spi">
      +<meta name="generator" content="javadoc/PackageWriterImpl">
      +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../../script.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-declaration-page">
      +<script type="text/javascript">var pathtoroot = "../../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../../module-summary.html">Module</a></li>
      +<li class="nav-bar-cell1-rev">Package</li>
      +<li>Class</li>
      +<li><a href="package-use.html">Use</a></li>
      +<li><a href="package-tree.html">Tree</a></li>
      +<li><a href="../../../../index-all.html">Index</a></li>
      +<li><a href="../../../../help-doc.html#package">Help</a></li>
      +</ul>
      +<ul class="sub-nav-list-small">
      +<li>
      +<p>Package:</p>
      +<ul>
      +<li>Description</li>
      +<li><a href="#related-package-summary">Related Packages</a></li>
      +<li>Classes and Interfaces</li>
      +</ul>
      +</li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list">
      +<ul class="sub-nav-list">
      +<li>Package:&nbsp;</li>
      +<li>Description&nbsp;|&nbsp;</li>
      +<li><a href="#related-package-summary">Related Packages</a>&nbsp;|&nbsp;</li>
      +<li>Classes and Interfaces</li>
      +</ul>
      +</div>
      +<div class="nav-list-search"><a href="../../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<div class="sub-title"><span class="module-label-in-package">Module</span>&nbsp;<a href="../../../module-summary.html">waffle.jna.jakarta</a></div>
      +<h1 title="Package waffle.servlet.spi" class="title">Package waffle.servlet.spi</h1>
      +</div>
      +<hr>
      +<div class="package-signature">package <span class="element-name">waffle.servlet.spi</span></div>
      +<section class="summary">
      +<ul class="summary-list">
      +<li>
      +<div id="related-package-summary">
      +<div class="caption"><span>Related Packages</span></div>
      +<div class="summary-table two-column-summary">
      +<div class="table-header col-first">Package</div>
      +<div class="table-header col-last">Description</div>
      +<div class="col-first even-row-color"><a href="../package-summary.html">waffle.servlet</a></div>
      +<div class="col-last even-row-color">&nbsp;</div>
      +</div>
      +</div>
      +</li>
      +</ul>
      +</section>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/spi/package-tree.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/spi/package-tree.html
      new file mode 100644
      index 0000000000..a9da59bffc
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/spi/package-tree.html
      @@ -0,0 +1,65 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>waffle.servlet.spi Class Hierarchy (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="tree: module: waffle.jna.jakarta, package: waffle.servlet.spi">
      +<meta name="generator" content="javadoc/PackageTreeWriter">
      +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../../script.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-tree-page">
      +<script type="text/javascript">var pathtoroot = "../../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../../module-summary.html">Module</a></li>
      +<li><a href="package-summary.html">Package</a></li>
      +<li>Class</li>
      +<li>Use</li>
      +<li class="nav-bar-cell1-rev">Tree</li>
      +<li><a href="../../../../index-all.html">Index</a></li>
      +<li><a href="../../../../help-doc.html#tree">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="../../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 class="title">Hierarchy For Package waffle.servlet.spi</h1>
      +</div>
      +<span class="package-hierarchy-label">Package Hierarchies:</span>
      +<ul class="horizontal contents-list">
      +<li><a href="../../../../overview-tree.html">All Packages</a></li>
      +</ul>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/spi/package-use.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/spi/package-use.html
      new file mode 100644
      index 0000000000..feac3f313d
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/servlet/spi/package-use.html
      @@ -0,0 +1,61 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>Uses of Package waffle.servlet.spi (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="use: module: waffle.jna.jakarta, package: waffle.servlet.spi">
      +<meta name="generator" content="javadoc/PackageUseWriter">
      +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../../script.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-use-page">
      +<script type="text/javascript">var pathtoroot = "../../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../../module-summary.html">Module</a></li>
      +<li><a href="package-summary.html">Package</a></li>
      +<li>Class</li>
      +<li class="nav-bar-cell1-rev">Use</li>
      +<li><a href="package-tree.html">Tree</a></li>
      +<li><a href="../../../../index-all.html">Index</a></li>
      +<li><a href="../../../../help-doc.html#use">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="../../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 title="Uses of Package waffle.servlet.spi" class="title">Uses of Package<br>waffle.servlet.spi</h1>
      +</div>
      +No usage of waffle.servlet.spi</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/util/package-summary.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/util/package-summary.html
      new file mode 100644
      index 0000000000..394727dcd4
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/util/package-summary.html
      @@ -0,0 +1,81 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>waffle.util (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="declaration: module: waffle.jna.jakarta, package: waffle.util">
      +<meta name="generator" content="javadoc/PackageWriterImpl">
      +<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../script.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-declaration-page">
      +<script type="text/javascript">var pathtoroot = "../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../module-summary.html">Module</a></li>
      +<li class="nav-bar-cell1-rev">Package</li>
      +<li>Class</li>
      +<li><a href="package-use.html">Use</a></li>
      +<li><a href="package-tree.html">Tree</a></li>
      +<li><a href="../../../index-all.html">Index</a></li>
      +<li><a href="../../../help-doc.html#package">Help</a></li>
      +</ul>
      +<ul class="sub-nav-list-small">
      +<li>
      +<p>Package:</p>
      +<ul>
      +<li>Description</li>
      +<li>Related Packages</li>
      +<li>Classes and Interfaces</li>
      +</ul>
      +</li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list">
      +<ul class="sub-nav-list">
      +<li>Package:&nbsp;</li>
      +<li>Description&nbsp;|&nbsp;</li>
      +<li>Related Packages&nbsp;|&nbsp;</li>
      +<li>Classes and Interfaces</li>
      +</ul>
      +</div>
      +<div class="nav-list-search"><a href="../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<div class="sub-title"><span class="module-label-in-package">Module</span>&nbsp;<a href="../../module-summary.html">waffle.jna.jakarta</a></div>
      +<h1 title="Package waffle.util" class="title">Package waffle.util</h1>
      +</div>
      +<hr>
      +<div class="package-signature">package <span class="element-name">waffle.util</span></div>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/util/package-tree.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/util/package-tree.html
      new file mode 100644
      index 0000000000..eaa87566b1
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/util/package-tree.html
      @@ -0,0 +1,65 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>waffle.util Class Hierarchy (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="tree: module: waffle.jna.jakarta, package: waffle.util">
      +<meta name="generator" content="javadoc/PackageTreeWriter">
      +<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../script.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-tree-page">
      +<script type="text/javascript">var pathtoroot = "../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../module-summary.html">Module</a></li>
      +<li><a href="package-summary.html">Package</a></li>
      +<li>Class</li>
      +<li>Use</li>
      +<li class="nav-bar-cell1-rev">Tree</li>
      +<li><a href="../../../index-all.html">Index</a></li>
      +<li><a href="../../../help-doc.html#tree">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 class="title">Hierarchy For Package waffle.util</h1>
      +</div>
      +<span class="package-hierarchy-label">Package Hierarchies:</span>
      +<ul class="horizontal contents-list">
      +<li><a href="../../../overview-tree.html">All Packages</a></li>
      +</ul>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/util/package-use.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/util/package-use.html
      new file mode 100644
      index 0000000000..c097ef6d3e
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/util/package-use.html
      @@ -0,0 +1,61 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>Uses of Package waffle.util (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="use: module: waffle.jna.jakarta, package: waffle.util">
      +<meta name="generator" content="javadoc/PackageUseWriter">
      +<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../script.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-use-page">
      +<script type="text/javascript">var pathtoroot = "../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../module-summary.html">Module</a></li>
      +<li><a href="package-summary.html">Package</a></li>
      +<li>Class</li>
      +<li class="nav-bar-cell1-rev">Use</li>
      +<li><a href="package-tree.html">Tree</a></li>
      +<li><a href="../../../index-all.html">Index</a></li>
      +<li><a href="../../../help-doc.html#use">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 title="Uses of Package waffle.util" class="title">Uses of Package<br>waffle.util</h1>
      +</div>
      +No usage of waffle.util</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/windows/auth/package-summary.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/windows/auth/package-summary.html
      new file mode 100644
      index 0000000000..cb43fed65f
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/windows/auth/package-summary.html
      @@ -0,0 +1,81 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>waffle.windows.auth (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="declaration: module: waffle.jna.jakarta, package: waffle.windows.auth">
      +<meta name="generator" content="javadoc/PackageWriterImpl">
      +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../../script.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-declaration-page">
      +<script type="text/javascript">var pathtoroot = "../../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../../module-summary.html">Module</a></li>
      +<li class="nav-bar-cell1-rev">Package</li>
      +<li>Class</li>
      +<li><a href="package-use.html">Use</a></li>
      +<li><a href="package-tree.html">Tree</a></li>
      +<li><a href="../../../../index-all.html">Index</a></li>
      +<li><a href="../../../../help-doc.html#package">Help</a></li>
      +</ul>
      +<ul class="sub-nav-list-small">
      +<li>
      +<p>Package:</p>
      +<ul>
      +<li>Description</li>
      +<li>Related Packages</li>
      +<li>Classes and Interfaces</li>
      +</ul>
      +</li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list">
      +<ul class="sub-nav-list">
      +<li>Package:&nbsp;</li>
      +<li>Description&nbsp;|&nbsp;</li>
      +<li>Related Packages&nbsp;|&nbsp;</li>
      +<li>Classes and Interfaces</li>
      +</ul>
      +</div>
      +<div class="nav-list-search"><a href="../../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<div class="sub-title"><span class="module-label-in-package">Module</span>&nbsp;<a href="../../../module-summary.html">waffle.jna.jakarta</a></div>
      +<h1 title="Package waffle.windows.auth" class="title">Package waffle.windows.auth</h1>
      +</div>
      +<hr>
      +<div class="package-signature">package <span class="element-name">waffle.windows.auth</span></div>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/windows/auth/package-tree.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/windows/auth/package-tree.html
      new file mode 100644
      index 0000000000..6052c67c76
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/windows/auth/package-tree.html
      @@ -0,0 +1,65 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>waffle.windows.auth Class Hierarchy (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="tree: module: waffle.jna.jakarta, package: waffle.windows.auth">
      +<meta name="generator" content="javadoc/PackageTreeWriter">
      +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../../script.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-tree-page">
      +<script type="text/javascript">var pathtoroot = "../../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../../module-summary.html">Module</a></li>
      +<li><a href="package-summary.html">Package</a></li>
      +<li>Class</li>
      +<li>Use</li>
      +<li class="nav-bar-cell1-rev">Tree</li>
      +<li><a href="../../../../index-all.html">Index</a></li>
      +<li><a href="../../../../help-doc.html#tree">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="../../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 class="title">Hierarchy For Package waffle.windows.auth</h1>
      +</div>
      +<span class="package-hierarchy-label">Package Hierarchies:</span>
      +<ul class="horizontal contents-list">
      +<li><a href="../../../../overview-tree.html">All Packages</a></li>
      +</ul>
      +</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/windows/auth/package-use.html b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/windows/auth/package-use.html
      new file mode 100644
      index 0000000000..bbdb0586f4
      --- /dev/null
      +++ b/waffle-jna-jakarta/testapidocs/waffle.jna.jakarta/waffle/windows/auth/package-use.html
      @@ -0,0 +1,61 @@
      +<!DOCTYPE HTML>
      +<html lang>
      +<head>
      +<!-- Generated by javadoc (21) -->
      +<title>Uses of Package waffle.windows.auth (waffle-jna-jakarta 3.5.1 Test API)</title>
      +<meta name="viewport" content="width=device-width, initial-scale=1">
      +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      +<meta name="description" content="use: module: waffle.jna.jakarta, package: waffle.windows.auth">
      +<meta name="generator" content="javadoc/PackageUseWriter">
      +<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
      +<link rel="stylesheet" type="text/css" href="../../../../script-dir/jquery-ui.min.css" title="Style">
      +<script type="text/javascript" src="../../../../script.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-3.7.1.min.js"></script>
      +<script type="text/javascript" src="../../../../script-dir/jquery-ui.min.js"></script>
      +</head>
      +<body class="package-use-page">
      +<script type="text/javascript">var pathtoroot = "../../../../";
      +loadScripts(document, 'script');</script>
      +<noscript>
      +<div>JavaScript is disabled on your browser.</div>
      +</noscript>
      +<div class="flex-box">
      +<header role="banner" class="flex-header">
      +<nav role="navigation">
      +<!-- ========= START OF TOP NAVBAR ======= -->
      +<div class="top-nav" id="navbar-top"><button id="navbar-toggle-button" aria-controls="navbar-top" aria-expanded="false" aria-label="Toggle navigation links"><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span><span class="nav-bar-toggle-icon">&nbsp;</span></button>
      +<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
      +<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
      +<li><a href="../../../module-summary.html">Module</a></li>
      +<li><a href="package-summary.html">Package</a></li>
      +<li>Class</li>
      +<li class="nav-bar-cell1-rev">Use</li>
      +<li><a href="package-tree.html">Tree</a></li>
      +<li><a href="../../../../index-all.html">Index</a></li>
      +<li><a href="../../../../help-doc.html#use">Help</a></li>
      +</ul>
      +</div>
      +<div class="sub-nav">
      +<div id="navbar-sub-list"></div>
      +<div class="nav-list-search"><a href="../../../../search.html">SEARCH</a>
      +<input type="text" id="search-input" disabled placeholder="Search">
      +<input type="reset" id="reset-button" disabled value="reset">
      +</div>
      +</div>
      +<!-- ========= END OF TOP NAVBAR ========= -->
      +<span class="skip-nav" id="skip-navbar-top"></span></nav>
      +</header>
      +<div class="flex-content">
      +<main role="main">
      +<div class="header">
      +<h1 title="Uses of Package waffle.windows.auth" class="title">Uses of Package<br>waffle.windows.auth</h1>
      +</div>
      +No usage of waffle.windows.auth</main>
      +<footer role="contentinfo">
      +<hr>
      +<p class="legal-copy"><small>Copyright &#169; 2010&#x2013;2025 <a href="https://github.com/waffle/">com.github.waffle</a>. All rights reserved.</small></p>
      +</footer>
      +</div>
      +</div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/allclasses-frame.html b/waffle-jna-jakarta/xref-test/allclasses-frame.html
      new file mode 100644
      index 0000000000..0fafe6a930
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/allclasses-frame.html
      @@ -0,0 +1,34 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>All Classes</title>
      +        <link rel="stylesheet" type="text/css" href="stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar">All Classes</h1>
      +        <div class="indexContainer">
      +            <ul>
      +                <li><a href="waffle/servlet/CorsAwareNegotiateSecurityFilterTest.html#CorsAwareNegotiateSecurityFilterTest" target="classFrame">CorsAwareNegotiateSecurityFilterTest</a></li>
      +                <li><a href="waffle/util/CorsPreFlightCheckTest.html#CorsPreFlightCheckTest" target="classFrame">CorsPreFlightCheckTest</a></li>
      +                <li><a href="waffle/jaas/GroupPrincipalTest.html#GroupPrincipalTest" target="classFrame">GroupPrincipalTest</a></li>
      +                <li><a href="waffle/servlet/NegotiateSecurityFilterTest.html#NegotiateSecurityFilterTest" target="classFrame">NegotiateSecurityFilterTest</a></li>
      +                <li><a href="waffle/util/NtlmMessageTest.html#NtlmMessageTest" target="classFrame">NtlmMessageTest</a></li>
      +                <li><a href="waffle/windows/auth/PrincipalFormatTest.html#PrincipalFormatTest" target="classFrame">PrincipalFormatTest</a></li>
      +                <li><a href="waffle/jaas/RolePrincipalTest.html#RolePrincipalTest" target="classFrame">RolePrincipalTest</a></li>
      +                <li><a href="waffle/util/SPNegoMessageTest.html#SPNegoMessageTest" target="classFrame">SPNegoMessageTest</a></li>
      +                <li><a href="waffle/servlet/spi/SecurityFilterProviderCollectionTest.html#SecurityFilterProviderCollectionTest" target="classFrame">SecurityFilterProviderCollectionTest</a></li>
      +                <li><a href="waffle/jaas/UserPrincipalTest.html#UserPrincipalTest" target="classFrame">UserPrincipalTest</a></li>
      +                <li><a href="waffle/jaas/UsernamePasswordCallbackHandler.html#UsernamePasswordCallbackHandler" target="classFrame">UsernamePasswordCallbackHandler</a></li>
      +                <li><a href="waffle/util/WaffleInfoTest.html#WaffleInfoTest" target="classFrame">WaffleInfoTest</a></li>
      +                <li><a href="waffle/windows/auth/WindowsAccountTest.html#WindowsAccountTest" target="classFrame">WindowsAccountTest</a></li>
      +                <li><a href="waffle/windows/auth/WindowsCredentialsHandleTest.html#WindowsCredentialsHandleTest" target="classFrame">WindowsCredentialsHandleTest</a></li>
      +                <li><a href="waffle/jaas/WindowsLoginModuleTest.html#WindowsLoginModuleTest" target="classFrame">WindowsLoginModuleTest</a></li>
      +                <li><a href="waffle/servlet/WindowsPrincipalTest.html#WindowsPrincipalTest" target="classFrame">WindowsPrincipalTest</a></li>
      +                <li><a href="waffle/windows/auth/WindowsSecurityContextTest.html#WindowsSecurityContextTest" target="classFrame">WindowsSecurityContextTest</a></li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/index.html b/waffle-jna-jakarta/xref-test/index.html
      new file mode 100644
      index 0000000000..e98dedd347
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/index.html
      @@ -0,0 +1,75 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- this is a JXR report set (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference</title>
      +        <script type="text/javascript">
      +            tmpTargetPage = "" + window.location.search;
      +            if (tmpTargetPage != "" && tmpTargetPage != "undefined")
      +                tmpTargetPage = tmpTargetPage.substring(1);
      +            if (tmpTargetPage.indexOf(":") != -1 || (tmpTargetPage != "" && !validURL(tmpTargetPage)))
      +                tmpTargetPage = "undefined";
      +            targetPage = tmpTargetPage;
      +            function validURL(url) {
      +                try {
      +                    url = decodeURIComponent(url);
      +                }
      +                catch (error) {
      +                    return false;
      +                }
      +                var pos = url.indexOf(".html");
      +                if (pos == -1 || pos != url.length - 5)
      +                    return false;
      +                var allowNumber = false;
      +                var allowSep = false;
      +                var seenDot = false;
      +                for (var i = 0; i < url.length - 5; i++) {
      +                    var ch = url.charAt(i);
      +                    if ('a' <= ch && ch <= 'z' ||
      +                            'A' <= ch && ch <= 'Z' ||
      +                            ch == '$' ||
      +                            ch == '_' ||
      +                            ch.charCodeAt(0) > 127) {
      +                        allowNumber = true;
      +                        allowSep = true;
      +                    } else if ('0' <= ch && ch <= '9'
      +                            || ch == '-') {
      +                        if (!allowNumber)
      +                            return false;
      +                    } else if (ch == '/' || ch == '.') {
      +                        if (!allowSep)
      +                            return false;
      +                        allowNumber = false;
      +                        allowSep = false;
      +                        if (ch == '.')
      +                            seenDot = true;
      +                        if (ch == '/' && seenDot)
      +                            return false;
      +                    } else {
      +                        return false;
      +                    }
      +                }
      +                return true;
      +            }
      +            function loadFrames() {
      +                if (targetPage != "" && targetPage != "undefined")
      +                    top.classFrame.location = top.targetPage;
      +            }
      +        </script>
      +    </head>
      +    <frameset cols="20%,80%" title="Documentation frame" onload="top.loadFrames()">
      +        <frameset rows="30%,70%" title="Left frames" onload="top.loadFrames()">
      +            <frame src="overview-frame.html" name="packageListFrame" title="All Packages"/>
      +            <frame src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)"/>
      +        </frameset>
      +        <frame src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes"/>
      +        <noframes>
      +            <h1>Frame Alert</h1>
      +            <p>
      +                You don't have frames. Go <a href="overview-summary.html">here</a>
      +            </p>
      +        </noframes>
      +    </frameset>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/overview-frame.html b/waffle-jna-jakarta/xref-test/overview-frame.html
      new file mode 100644
      index 0000000000..7652a86523
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/overview-frame.html
      @@ -0,0 +1,36 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference</title>
      +        <link rel="stylesheet" type="text/css" href="stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 title="waffle-jna-jakarta 3.5.1 Reference" class="bar"><strong>waffle-jna-jakarta 3.5.1 Reference</strong></h1>
      +        <div class="indexHeader"><span><a href="allclasses-frame.html" target="packageFrame">All&nbsp;Classes</a></span></div>
      +        <div class="indexContainer">
      +            <h2 title="Packages">Packages</h2>
      +            <ul title="Packages">
      +                <li>
      +                    <a href="waffle/jaas/package-frame.html" target="packageFrame">waffle.jaas</a>
      +                </li>
      +                <li>
      +                    <a href="waffle/servlet/package-frame.html" target="packageFrame">waffle.servlet</a>
      +                </li>
      +                <li>
      +                    <a href="waffle/servlet/spi/package-frame.html" target="packageFrame">waffle.servlet.spi</a>
      +                </li>
      +                <li>
      +                    <a href="waffle/util/package-frame.html" target="packageFrame">waffle.util</a>
      +                </li>
      +                <li>
      +                    <a href="waffle/windows/auth/package-frame.html" target="packageFrame">waffle.windows.auth</a>
      +                </li>
      +            </ul>
      +        </div>
      +        <p>&nbsp;</p>
      +    </body>
      +</html>
      +
      diff --git a/waffle-jna-jakarta/xref-test/overview-summary.html b/waffle-jna-jakarta/xref-test/overview-summary.html
      new file mode 100644
      index 0000000000..bc9fee6f44
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/overview-summary.html
      @@ -0,0 +1,112 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk7) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference</title>
      +        <link rel="stylesheet" type="text/css" href="stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li class="navBarCell1Rev">Overview</li>
      +                <li>Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="overview-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 class="title">waffle-jna-jakarta 3.5.1 Reference</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Packages table, listing packages">
      +                <caption><span>Packages</span><span class="tabEnd">&nbsp;</span></caption>
      +                <thead>
      +                    <tr>
      +                        <th class="colFirst colLast" scope="col">Package</th>
      +                    </tr>
      +                </thead>
      +                <tbody>
      +                    <tr class="altColor">
      +                        <td class="colFirst colLast">
      +                            <a href="waffle/jaas/package-summary.html">waffle.jaas</a>
      +                        </td>
      +                    </tr>
      +                    <tr class="rowColor">
      +                        <td class="colFirst colLast">
      +                            <a href="waffle/servlet/package-summary.html">waffle.servlet</a>
      +                        </td>
      +                    </tr>
      +                    <tr class="altColor">
      +                        <td class="colFirst colLast">
      +                            <a href="waffle/servlet/spi/package-summary.html">waffle.servlet.spi</a>
      +                        </td>
      +                    </tr>
      +                    <tr class="rowColor">
      +                        <td class="colFirst colLast">
      +                            <a href="waffle/util/package-summary.html">waffle.util</a>
      +                        </td>
      +                    </tr>
      +                    <tr class="altColor">
      +                        <td class="colFirst colLast">
      +                            <a href="waffle/windows/auth/package-summary.html">waffle.windows.auth</a>
      +                        </td>
      +                    </tr>
      +                </tbody>
      +            </table>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li class="navBarCell1Rev">Overview</li>
      +                <li>Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="overview-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref-test/stylesheet.css b/waffle-jna-jakarta/xref-test/stylesheet.css
      new file mode 100644
      index 0000000000..84d4b28eda
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/stylesheet.css
      @@ -0,0 +1,626 @@
      +/* Javadoc style sheet */
      +/*
      +Overall document style
      +*/
      +
      +@import url('resources/fonts/dejavu.css');
      +
      +body {
      +    background-color:#ffffff;
      +    color:#353833;
      +    font-family:'DejaVu Sans', Arial, Helvetica, sans-serif;
      +    font-size:14px;
      +    margin:0;
      +}
      +a:link, a:visited {
      +    text-decoration:none;
      +    color:#4A6782;
      +}
      +a:hover, a:focus {
      +    text-decoration:none;
      +    color:#bb7a2a;
      +}
      +a:active {
      +    text-decoration:none;
      +    color:#4A6782;
      +}
      +a[name] {
      +    color:#353833;
      +}
      +a[name]:hover {
      +    text-decoration:none;
      +    color:#353833;
      +}
      +pre {
      +    font-family:'DejaVu Sans Mono', monospace;
      +    font-size:14px;
      +}
      +h1 {
      +    font-size:20px;
      +}
      +h2 {
      +    font-size:18px;
      +}
      +h3 {
      +    font-size:16px;
      +    font-style:italic;
      +}
      +h4 {
      +    font-size:13px;
      +}
      +h5 {
      +    font-size:12px;
      +}
      +h6 {
      +    font-size:11px;
      +}
      +ul {
      +    list-style-type:disc;
      +}
      +code, tt {
      +    font-family:'DejaVu Sans Mono', monospace;
      +    font-size:14px;
      +    padding-top:4px;
      +    margin-top:8px;
      +    line-height:1.4em;
      +}
      +dt code {
      +    font-family:'DejaVu Sans Mono', monospace;
      +    font-size:14px;
      +    padding-top:4px;
      +}
      +table tr td dt code {
      +    font-family:'DejaVu Sans Mono', monospace;
      +    font-size:14px;
      +    vertical-align:top;
      +    padding-top:4px;
      +}
      +sup {
      +    font-size:8px;
      +}
      +/*
      +Document title and Copyright styles
      +*/
      +.clear {
      +    clear:both;
      +    height:0px;
      +    overflow:hidden;
      +}
      +.aboutLanguage {
      +    float:right;
      +    padding:0px 21px;
      +    font-size:11px;
      +    z-index:200;
      +    margin-top:-9px;
      +}
      +.legalCopy {
      +    margin-left:.5em;
      +}
      +.bar a, .bar a:link, .bar a:visited, .bar a:active {
      +    color:#FFFFFF;
      +    text-decoration:none;
      +}
      +.bar a:hover, .bar a:focus {
      +    color:#bb7a2a;
      +}
      +.tab {
      +    background-color:#0066FF;
      +    color:#ffffff;
      +    padding:8px;
      +    width:5em;
      +    font-weight:bold;
      +}
      +/*
      +Navigation bar styles
      +*/
      +.bar {
      +    background-color:#4D7A97;
      +    color:#FFFFFF;
      +    padding:.8em .5em .4em .8em;
      +    height:auto;/*height:1.8em;*/
      +    font-size:11px;
      +    margin:0;
      +}
      +.topNav {
      +    background-color:#4D7A97;
      +    color:#FFFFFF;
      +    float:left;
      +    padding:0;
      +    width:100%;
      +    clear:right;
      +    height:2.8em;
      +    padding-top:10px;
      +    overflow:hidden;
      +    font-size:12px; 
      +}
      +.bottomNav {
      +    margin-top:10px;
      +    background-color:#4D7A97;
      +    color:#FFFFFF;
      +    float:left;
      +    padding:0;
      +    width:100%;
      +    clear:right;
      +    height:2.8em;
      +    padding-top:10px;
      +    overflow:hidden;
      +    font-size:12px;
      +}
      +.subNav {
      +    background-color:#dee3e9;
      +    float:left;
      +    width:100%;
      +    overflow:hidden;
      +    font-size:12px;
      +}
      +.subNav div {
      +    clear:left;
      +    float:left;
      +    padding:0 0 5px 6px;
      +    text-transform:uppercase;
      +}
      +ul.navList, ul.subNavList {
      +    float:left;
      +    margin:0 25px 0 0;
      +    padding:0;
      +}
      +ul.navList li{
      +    list-style:none;
      +    float:left;
      +    padding: 5px 6px;
      +    text-transform:uppercase;
      +}
      +ul.subNavList li{
      +    list-style:none;
      +    float:left;
      +}
      +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited {
      +    color:#FFFFFF;
      +    text-decoration:none;
      +    text-transform:uppercase;
      +}
      +.topNav a:hover, .bottomNav a:hover {
      +    text-decoration:none;
      +    color:#bb7a2a;
      +    text-transform:uppercase;
      +}
      +.navBarCell1Rev {
      +    background-color:#F8981D;
      +    color:#253441;
      +    margin: auto 5px;
      +}
      +.skipNav {
      +    position:absolute;
      +    top:auto;
      +    left:-9999px;
      +    overflow:hidden;
      +}
      +/*
      +Page header and footer styles
      +*/
      +.header, .footer {
      +    clear:both;
      +    margin:0 20px;
      +    padding:5px 0 0 0;
      +}
      +.indexHeader {
      +    margin:10px;
      +    position:relative;
      +}
      +.indexHeader span{
      +    margin-right:15px;
      +}
      +.indexHeader h1 {
      +    font-size:13px;
      +}
      +.title {
      +    color:#2c4557;
      +    margin:10px 0;
      +}
      +.subTitle {
      +    margin:5px 0 0 0;
      +}
      +.header ul {
      +    margin:0 0 15px 0;
      +    padding:0;
      +}
      +.footer ul {
      +    margin:20px 0 5px 0;
      +}
      +.header ul li, .footer ul li {
      +    list-style:none;
      +    font-size:13px;
      +}
      +/*
      +Heading styles
      +*/
      +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
      +    background-color:#dee3e9;
      +    border:1px solid #d0d9e0;
      +    margin:0 0 6px -8px;
      +    padding:7px 5px;
      +}
      +ul.blockList ul.blockList ul.blockList li.blockList h3 {
      +    background-color:#dee3e9;
      +    border:1px solid #d0d9e0;
      +    margin:0 0 6px -8px;
      +    padding:7px 5px;
      +}
      +ul.blockList ul.blockList li.blockList h3 {
      +    padding:0;
      +    margin:15px 0;
      +}
      +ul.blockList li.blockList h2 {
      +    padding:0px 0 20px 0;
      +}
      +/*
      +Page layout container styles
      +*/
      +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer {
      +    clear:both;
      +    padding:10px 20px;
      +    position:relative;
      +}
      +.indexContainer {
      +    margin:10px;
      +    position:relative;
      +    font-size:12px;
      +}
      +.indexContainer h2 {
      +    font-size:13px;
      +    padding:0 0 3px 0;
      +}
      +.indexContainer ul {
      +    margin:0;
      +    padding:0;
      +}
      +.indexContainer ul li {
      +    list-style:none;
      +    padding-top:2px;
      +}
      +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {
      +    font-size:12px;
      +    font-weight:bold;
      +    margin:10px 0 0 0;
      +    color:#4E4E4E;
      +}
      +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd {
      +    margin:5px 0 10px 0px;
      +    font-size:14px;
      +    font-family:'DejaVu Sans Mono',monospace;
      +}
      +.serializedFormContainer dl.nameValue dt {
      +    margin-left:1px;
      +    font-size:1.1em;
      +    display:inline;
      +    font-weight:bold;
      +}
      +.serializedFormContainer dl.nameValue dd {
      +    margin:0 0 0 1px;
      +    font-size:1.1em;
      +    display:inline;
      +}
      +/*
      +List styles
      +*/
      +ul.horizontal li {
      +    display:inline;
      +    font-size:0.9em;
      +}
      +ul.inheritance {
      +    margin:0;
      +    padding:0;
      +}
      +ul.inheritance li {
      +    display:inline;
      +    list-style:none;
      +}
      +ul.inheritance li ul.inheritance {
      +    margin-left:15px;
      +    padding-left:15px;
      +    padding-top:1px;
      +}
      +ul.blockList, ul.blockListLast {
      +    margin:10px 0 10px 0;
      +    padding:0;
      +}
      +ul.blockList li.blockList, ul.blockListLast li.blockList {
      +    list-style:none;
      +    margin-bottom:15px;
      +    line-height:1.4;
      +}
      +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList {
      +    padding:0px 20px 5px 10px;
      +    border:1px solid #ededed; 
      +    background-color:#f8f8f8;
      +}
      +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList {
      +    padding:0 0 5px 8px;
      +    background-color:#ffffff;
      +    border:none;
      +}
      +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList {
      +    margin-left:0;
      +    padding-left:0;
      +    padding-bottom:15px;
      +    border:none;
      +}
      +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {
      +    list-style:none;
      +    border-bottom:none;
      +    padding-bottom:0;
      +}
      +table tr td dl, table tr td dl dt, table tr td dl dd {
      +    margin-top:0;
      +    margin-bottom:1px;
      +}
      +/*
      +Table styles
      +*/
      +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary {
      +    width:100%;
      +    border-left:1px solid #EEE; 
      +    border-right:1px solid #EEE; 
      +    border-bottom:1px solid #EEE; 
      +}
      +.overviewSummary, .memberSummary  {
      +    padding:0px;
      +}
      +.overviewSummary caption, .memberSummary caption, .typeSummary caption,
      +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption {
      +    position:relative;
      +    text-align:left;
      +    background-repeat:no-repeat;
      +    color:#253441;
      +    font-weight:bold;
      +    clear:none;
      +    overflow:hidden;
      +    padding:0px;
      +    padding-top:10px;
      +    padding-left:1px;
      +    margin:0px;
      +    white-space:pre;
      +}
      +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link,
      +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link,
      +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover,
      +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover,
      +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active,
      +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active,
      +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited,
      +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited {
      +    color:#FFFFFF;
      +}
      +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,
      +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span {
      +    white-space:nowrap;
      +    padding-top:5px;
      +    padding-left:12px;
      +    padding-right:12px;
      +    padding-bottom:7px;
      +    display:inline-block;
      +    float:left;
      +    background-color:#F8981D;
      +    border: none;
      +    height:16px;
      +}
      +.memberSummary caption span.activeTableTab span {
      +    white-space:nowrap;
      +    padding-top:5px;
      +    padding-left:12px;
      +    padding-right:12px;
      +    margin-right:3px;
      +    display:inline-block;
      +    float:left;
      +    background-color:#F8981D;
      +    height:16px;
      +}
      +.memberSummary caption span.tableTab span {
      +    white-space:nowrap;
      +    padding-top:5px;
      +    padding-left:12px;
      +    padding-right:12px;
      +    margin-right:3px;
      +    display:inline-block;
      +    float:left;
      +    background-color:#4D7A97;
      +    height:16px;
      +}
      +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab {
      +    padding-top:0px;
      +    padding-left:0px;
      +    padding-right:0px;
      +    background-image:none;
      +    float:none;
      +    display:inline;
      +}
      +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd,
      +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd {
      +    display:none;
      +    width:5px;
      +    position:relative;
      +    float:left;
      +    background-color:#F8981D;
      +}
      +.memberSummary .activeTableTab .tabEnd {
      +    display:none;
      +    width:5px;
      +    margin-right:3px;
      +    position:relative; 
      +    float:left;
      +    background-color:#F8981D;
      +}
      +.memberSummary .tableTab .tabEnd {
      +    display:none;
      +    width:5px;
      +    margin-right:3px;
      +    position:relative;
      +    background-color:#4D7A97;
      +    float:left;
      +
      +}
      +.overviewSummary td, .memberSummary td, .typeSummary td,
      +.useSummary td, .constantsSummary td, .deprecatedSummary td {
      +    text-align:left;
      +    padding:0px 0px 12px 10px;
      +}
      +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th,
      +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{
      +    vertical-align:top;
      +    padding-right:0px;
      +    padding-top:8px;
      +    padding-bottom:3px;
      +}
      +th.colFirst, th.colLast, th.colOne, .constantsSummary th {
      +    background:#dee3e9;
      +    text-align:left;
      +    padding:8px 3px 3px 7px;
      +}
      +td.colFirst, th.colFirst {
      +    white-space:nowrap;
      +    font-size:13px;
      +}
      +td.colLast, th.colLast {
      +    font-size:13px;
      +}
      +td.colOne, th.colOne {
      +    font-size:13px;
      +}
      +.overviewSummary td.colFirst, .overviewSummary th.colFirst,
      +.useSummary td.colFirst, .useSummary th.colFirst,
      +.overviewSummary td.colOne, .overviewSummary th.colOne,
      +.memberSummary td.colFirst, .memberSummary th.colFirst,
      +.memberSummary td.colOne, .memberSummary th.colOne,
      +.typeSummary td.colFirst{
      +    width:25%;
      +    vertical-align:top;
      +}
      +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover {
      +    font-weight:bold;
      +}
      +.tableSubHeadingColor {
      +    background-color:#EEEEFF;
      +}
      +.altColor {
      +    background-color:#FFFFFF;
      +}
      +.rowColor {
      +    background-color:#EEEEEF;
      +}
      +/*
      +Content styles
      +*/
      +.description pre {
      +    margin-top:0;
      +}
      +.deprecatedContent {
      +    margin:0;
      +    padding:10px 0;
      +}
      +.docSummary {
      +    padding:0;
      +}
      +
      +ul.blockList ul.blockList ul.blockList li.blockList h3 {
      +    font-style:normal;
      +}
      +
      +div.block {
      +    font-size:14px;
      +    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
      +}
      +
      +td.colLast div {
      +    padding-top:0px;
      +}
      +
      +
      +td.colLast a {
      +    padding-bottom:3px;
      +}
      +/*
      +Formatting effect styles
      +*/
      +.sourceLineNo {
      +    color:green;
      +    padding:0 30px 0 0;
      +}
      +h1.hidden {
      +    visibility:hidden;
      +    overflow:hidden;
      +    font-size:10px;
      +}
      +.block {
      +    display:block;
      +    margin:3px 10px 2px 0px;
      +    color:#474747;
      +}
      +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink,
      +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel,
      +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink {
      +    font-weight:bold;
      +}
      +.deprecationComment, .emphasizedPhrase, .interfaceName {
      +    font-style:italic;
      +}
      +
      +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase,
      +div.block div.block span.interfaceName {
      +    font-style:normal;
      +}
      +
      +div.contentContainer ul.blockList li.blockList h2{
      +    padding-bottom:0px;
      +}
      +
      +/* JXR style sheet */
      +a.jxr_linenumber:link {
      +    color: #00f;
      +}
      +
      +a.jxr_linenumber:visited {
      +    color: #00a;
      +}
      +
      +a.jxr_linenumber:active, a.jxr_linenumber:hover {
      +    color: #f30 !important;
      +}
      +
      +em.comment {
      +    color: #390;
      +}
      +
      +.string {
      +    color: #009;
      +}
      +
      +#overview {
      +    padding: 2px;
      +    font-size: 90%;
      +    font-family: Helvetica, Arial, sans-serif;
      +}
      +
      +hr {
      +    color: #000;
      +}
      +
      +.jxr_comment
      +{
      +    color: #390;
      +}
      +
      +.jxr_javadoccomment
      +{
      +    color: #A00;
      +}
      +
      +.jxr_string
      +{
      +    color: #009;
      +}
      +
      +.jxr_keyword
      +{
      +    color: #000;
      +}
      +
      diff --git a/waffle-jna-jakarta/xref-test/waffle/jaas/GroupPrincipalTest.html b/waffle-jna-jakarta/xref-test/waffle/jaas/GroupPrincipalTest.html
      new file mode 100644
      index 0000000000..314ce50abb
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/jaas/GroupPrincipalTest.html
      @@ -0,0 +1,120 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>GroupPrincipalTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../testapidocs/waffle/jaas/GroupPrincipalTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.jaas;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.assertj.core.api.Assertions.assertThat;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.io.ByteArrayInputStream;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.io.ByteArrayOutputStream;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.io.InputStream;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> java.io.ObjectInputStream;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> java.io.ObjectOutputStream;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.BeforeEach;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment"> * The Class GroupPrincipalTest.</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <strong class="jxr_keyword">class</strong> <a name="GroupPrincipalTest" href="../../waffle/jaas/GroupPrincipalTest.html#GroupPrincipalTest">GroupPrincipalTest</a> {
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <em class="jxr_javadoccomment">/** The group principal. */</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <strong class="jxr_keyword">private</strong> GroupPrincipal groupPrincipal;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * Equals_other object.</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      @Test
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">void</strong> equals_otherObject() {
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          Assertions.assertNotEquals(<span class="jxr_string">""</span>, <strong class="jxr_keyword">this</strong>.groupPrincipal);
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      }
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     * Equals_same object.</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      @Test
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">void</strong> equals_sameObject() {
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          Assertions.assertEquals(<strong class="jxr_keyword">this</strong>.groupPrincipal, <strong class="jxr_keyword">this</strong>.groupPrincipal);
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      }
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     * Sets the up.</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      @BeforeEach
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      <strong class="jxr_keyword">void</strong> setUp() {
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          <strong class="jxr_keyword">this</strong>.groupPrincipal = <strong class="jxr_keyword">new</strong> GroupPrincipal(<span class="jxr_string">"localhost&#92;&#92;Administrator"</span>);
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      }
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     * Test equals_ symmetric.</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>      @Test
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      <strong class="jxr_keyword">void</strong> testEquals_Symmetric() {
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>          <strong class="jxr_keyword">final</strong> GroupPrincipal x = <strong class="jxr_keyword">new</strong> GroupPrincipal(<span class="jxr_string">"localhost&#92;&#92;Administrator"</span>);
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          <strong class="jxr_keyword">final</strong> GroupPrincipal y = <strong class="jxr_keyword">new</strong> GroupPrincipal(<span class="jxr_string">"localhost&#92;&#92;Administrator"</span>);
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>          Assertions.assertEquals(x, y);
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          Assertions.assertEquals(x.hashCode(), y.hashCode());
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      }
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     * Test is serializable.</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment">     * @throws IOException</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     *             Signals that an I/O exception has occurred.</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  <em class="jxr_javadoccomment">     * @throws ClassNotFoundException</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_javadoccomment">     *             the class not found exception</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      @Test
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>      <strong class="jxr_keyword">void</strong> testIsSerializable() <strong class="jxr_keyword">throws</strong> IOException, ClassNotFoundException {
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>          <em class="jxr_comment">// serialize</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>          <strong class="jxr_keyword">final</strong> ByteArrayOutputStream out = <strong class="jxr_keyword">new</strong> ByteArrayOutputStream();
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>          <strong class="jxr_keyword">try</strong> (ObjectOutputStream oos = <strong class="jxr_keyword">new</strong> ObjectOutputStream(out)) {
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>              oos.writeObject(<strong class="jxr_keyword">this</strong>.groupPrincipal);
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>          }
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>          assertThat(out.toByteArray()).isNotEmpty();
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>          <em class="jxr_comment">// deserialize</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>          <strong class="jxr_keyword">final</strong> InputStream in = <strong class="jxr_keyword">new</strong> ByteArrayInputStream(out.toByteArray());
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>         <strong class="jxr_keyword">final</strong> ObjectInputStream ois = <strong class="jxr_keyword">new</strong> ObjectInputStream(in);
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>         <strong class="jxr_keyword">final</strong> GroupPrincipal copy = (GroupPrincipal) ois.readObject();
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>         <em class="jxr_comment">// test</em>
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>         Assertions.assertEquals(<strong class="jxr_keyword">this</strong>.groupPrincipal, copy);
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>         Assertions.assertEquals(<strong class="jxr_keyword">this</strong>.groupPrincipal.getName(), copy.getName());
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>     }
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a> 
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/jaas/RolePrincipalTest.html b/waffle-jna-jakarta/xref-test/waffle/jaas/RolePrincipalTest.html
      new file mode 100644
      index 0000000000..71e97730aa
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/jaas/RolePrincipalTest.html
      @@ -0,0 +1,120 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>RolePrincipalTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../testapidocs/waffle/jaas/RolePrincipalTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.jaas;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.assertj.core.api.Assertions.assertThat;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.io.ByteArrayInputStream;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.io.ByteArrayOutputStream;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.io.InputStream;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> java.io.ObjectInputStream;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> java.io.ObjectOutputStream;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.BeforeEach;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment"> * The Class RolePrincipalTest.</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <strong class="jxr_keyword">class</strong> <a name="RolePrincipalTest" href="../../waffle/jaas/RolePrincipalTest.html#RolePrincipalTest">RolePrincipalTest</a> {
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <em class="jxr_javadoccomment">/** The role principal. */</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <strong class="jxr_keyword">private</strong> RolePrincipal rolePrincipal;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * Equals_other object.</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      @Test
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">void</strong> equals_otherObject() {
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          Assertions.assertNotEquals(<span class="jxr_string">""</span>, <strong class="jxr_keyword">this</strong>.rolePrincipal);
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      }
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     * Equals_same object.</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      @Test
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">void</strong> equals_sameObject() {
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          Assertions.assertEquals(<strong class="jxr_keyword">this</strong>.rolePrincipal, <strong class="jxr_keyword">this</strong>.rolePrincipal);
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      }
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     * Sets the up.</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      @BeforeEach
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      <strong class="jxr_keyword">void</strong> setUp() {
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          <strong class="jxr_keyword">this</strong>.rolePrincipal = <strong class="jxr_keyword">new</strong> RolePrincipal(<span class="jxr_string">"localhost&#92;&#92;Administrator"</span>);
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      }
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     * Test equals_ symmetric.</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>      @Test
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      <strong class="jxr_keyword">void</strong> testEquals_Symmetric() {
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>          <strong class="jxr_keyword">final</strong> RolePrincipal x = <strong class="jxr_keyword">new</strong> RolePrincipal(<span class="jxr_string">"localhost&#92;&#92;Administrator"</span>);
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          <strong class="jxr_keyword">final</strong> RolePrincipal y = <strong class="jxr_keyword">new</strong> RolePrincipal(<span class="jxr_string">"localhost&#92;&#92;Administrator"</span>);
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>          Assertions.assertEquals(x, y);
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          Assertions.assertEquals(x.hashCode(), y.hashCode());
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      }
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     * Test is serializable.</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment">     * @throws IOException</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     *             Signals that an I/O exception has occurred.</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  <em class="jxr_javadoccomment">     * @throws ClassNotFoundException</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_javadoccomment">     *             the class not found exception</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      @Test
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>      <strong class="jxr_keyword">void</strong> testIsSerializable() <strong class="jxr_keyword">throws</strong> IOException, ClassNotFoundException {
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>          <em class="jxr_comment">// serialize</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>          <strong class="jxr_keyword">final</strong> ByteArrayOutputStream out = <strong class="jxr_keyword">new</strong> ByteArrayOutputStream();
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>          <strong class="jxr_keyword">try</strong> (ObjectOutputStream oos = <strong class="jxr_keyword">new</strong> ObjectOutputStream(out)) {
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>              oos.writeObject(<strong class="jxr_keyword">this</strong>.rolePrincipal);
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>          }
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>          assertThat(out.toByteArray()).isNotEmpty();
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>          <em class="jxr_comment">// deserialize</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>          <strong class="jxr_keyword">final</strong> InputStream in = <strong class="jxr_keyword">new</strong> ByteArrayInputStream(out.toByteArray());
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>         <strong class="jxr_keyword">final</strong> ObjectInputStream ois = <strong class="jxr_keyword">new</strong> ObjectInputStream(in);
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>         <strong class="jxr_keyword">final</strong> RolePrincipal copy = (RolePrincipal) ois.readObject();
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>         <em class="jxr_comment">// test</em>
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>         Assertions.assertEquals(<strong class="jxr_keyword">this</strong>.rolePrincipal, copy);
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>         Assertions.assertEquals(<strong class="jxr_keyword">this</strong>.rolePrincipal.getName(), copy.getName());
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>     }
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a> 
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/jaas/UserPrincipalTest.html b/waffle-jna-jakarta/xref-test/waffle/jaas/UserPrincipalTest.html
      new file mode 100644
      index 0000000000..19cd4a151a
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/jaas/UserPrincipalTest.html
      @@ -0,0 +1,120 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>UserPrincipalTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../testapidocs/waffle/jaas/UserPrincipalTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.jaas;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.assertj.core.api.Assertions.assertThat;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.io.ByteArrayInputStream;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.io.ByteArrayOutputStream;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.io.InputStream;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> java.io.ObjectInputStream;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> java.io.ObjectOutputStream;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.BeforeEach;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment"> * The Class UserPrincipalTest.</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <strong class="jxr_keyword">class</strong> <a name="UserPrincipalTest" href="../../waffle/jaas/UserPrincipalTest.html#UserPrincipalTest">UserPrincipalTest</a> {
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <em class="jxr_javadoccomment">/** The user principal. */</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <strong class="jxr_keyword">private</strong> UserPrincipal userPrincipal;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * Equals_other object.</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      @Test
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">void</strong> equals_otherObject() {
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          Assertions.assertNotEquals(<span class="jxr_string">""</span>, <strong class="jxr_keyword">this</strong>.userPrincipal);
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      }
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     * Equals_same object.</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      @Test
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">void</strong> equals_sameObject() {
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          Assertions.assertEquals(<strong class="jxr_keyword">this</strong>.userPrincipal, <strong class="jxr_keyword">this</strong>.userPrincipal);
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      }
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     * Sets the up.</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      @BeforeEach
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      <strong class="jxr_keyword">void</strong> setUp() {
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          <strong class="jxr_keyword">this</strong>.userPrincipal = <strong class="jxr_keyword">new</strong> UserPrincipal(<span class="jxr_string">"localhost&#92;&#92;Administrator"</span>);
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      }
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     * Test equals_ symmetric.</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>      @Test
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      <strong class="jxr_keyword">void</strong> testEquals_Symmetric() {
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>          <strong class="jxr_keyword">final</strong> UserPrincipal x = <strong class="jxr_keyword">new</strong> UserPrincipal(<span class="jxr_string">"localhost&#92;&#92;Administrator"</span>);
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          <strong class="jxr_keyword">final</strong> UserPrincipal y = <strong class="jxr_keyword">new</strong> UserPrincipal(<span class="jxr_string">"localhost&#92;&#92;Administrator"</span>);
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>          Assertions.assertEquals(x, y);
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          Assertions.assertEquals(x.hashCode(), y.hashCode());
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      }
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     * Test is serializable.</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment">     * @throws IOException</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     *             Signals that an I/O exception has occurred.</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  <em class="jxr_javadoccomment">     * @throws ClassNotFoundException</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_javadoccomment">     *             the class not found exception</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      @Test
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>      <strong class="jxr_keyword">void</strong> testIsSerializable() <strong class="jxr_keyword">throws</strong> IOException, ClassNotFoundException {
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>          <em class="jxr_comment">// serialize</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>          <strong class="jxr_keyword">final</strong> ByteArrayOutputStream out = <strong class="jxr_keyword">new</strong> ByteArrayOutputStream();
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>          <strong class="jxr_keyword">try</strong> (ObjectOutputStream oos = <strong class="jxr_keyword">new</strong> ObjectOutputStream(out)) {
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>              oos.writeObject(<strong class="jxr_keyword">this</strong>.userPrincipal);
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>          }
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>          assertThat(out.toByteArray()).isNotEmpty();
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>          <em class="jxr_comment">// deserialize</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>          <strong class="jxr_keyword">final</strong> InputStream in = <strong class="jxr_keyword">new</strong> ByteArrayInputStream(out.toByteArray());
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>         <strong class="jxr_keyword">final</strong> ObjectInputStream ois = <strong class="jxr_keyword">new</strong> ObjectInputStream(in);
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>         <strong class="jxr_keyword">final</strong> UserPrincipal copy = (UserPrincipal) ois.readObject();
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>         <em class="jxr_comment">// test</em>
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>         Assertions.assertEquals(<strong class="jxr_keyword">this</strong>.userPrincipal, copy);
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>         Assertions.assertEquals(<strong class="jxr_keyword">this</strong>.userPrincipal.getName(), copy.getName());
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>     }
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a> 
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/jaas/UsernamePasswordCallbackHandler.html b/waffle-jna-jakarta/xref-test/waffle/jaas/UsernamePasswordCallbackHandler.html
      new file mode 100644
      index 0000000000..eb1b114199
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/jaas/UsernamePasswordCallbackHandler.html
      @@ -0,0 +1,86 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>UsernamePasswordCallbackHandler xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../testapidocs/waffle/jaas/UsernamePasswordCallbackHandler.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.jaas;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.Callback;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.CallbackHandler;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.NameCallback;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.PasswordCallback;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.UnsupportedCallbackException;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> * The Class UsernamePasswordCallbackHandler.</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="UsernamePasswordCallbackHandler" href="../../waffle/jaas/UsernamePasswordCallbackHandler.html#UsernamePasswordCallbackHandler">UsernamePasswordCallbackHandler</a> <strong class="jxr_keyword">implements</strong> CallbackHandler {
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      <em class="jxr_javadoccomment">/** The username. */</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String username;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <em class="jxr_javadoccomment">/** The password. */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String password;
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * Instantiates a new username password callback handler.</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * @param newUserName</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     *            the new user name</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     * @param newPassword</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     *            the new password</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      <strong class="jxr_keyword">public</strong> <a name="UsernamePasswordCallbackHandler" href="../../waffle/jaas/UsernamePasswordCallbackHandler.html#UsernamePasswordCallbackHandler">UsernamePasswordCallbackHandler</a>(<strong class="jxr_keyword">final</strong> String newUserName, <strong class="jxr_keyword">final</strong> String newPassword) {
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>          <strong class="jxr_keyword">this</strong>.username = newUserName;
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>          <strong class="jxr_keyword">this</strong>.password = newPassword;
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      }
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      @Override
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> handle(<strong class="jxr_keyword">final</strong> Callback[] cb) <strong class="jxr_keyword">throws</strong> IOException, UnsupportedCallbackException {
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> Callback element : cb) {
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>              <strong class="jxr_keyword">if</strong> (element instanceof NameCallback) {
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>                  <strong class="jxr_keyword">final</strong> NameCallback nc = (NameCallback) element;
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>                  nc.setName(<strong class="jxr_keyword">this</strong>.username);
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>              } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (element instanceof PasswordCallback) {
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>                  <strong class="jxr_keyword">final</strong> PasswordCallback pc = (PasswordCallback) element;
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>                  pc.setPassword(<strong class="jxr_keyword">this</strong>.password == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong> : <strong class="jxr_keyword">this</strong>.password.toCharArray());
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>              } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>                  <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> UnsupportedCallbackException(element, <span class="jxr_string">"UsernamePasswordCallbackHandler"</span>);
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>              }
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>          }
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      }
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/jaas/WindowsLoginModuleTest.html b/waffle-jna-jakarta/xref-test/waffle/jaas/WindowsLoginModuleTest.html
      new file mode 100644
      index 0000000000..4890cd70b0
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/jaas/WindowsLoginModuleTest.html
      @@ -0,0 +1,354 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsLoginModuleTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../testapidocs/waffle/jaas/WindowsLoginModuleTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.jaas;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> java.security.Principal;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.util.HashMap;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.util.LinkedHashSet;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.util.Set;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.Subject;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.Callback;
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.CallbackHandler;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.NameCallback;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.UnsupportedCallbackException;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.login.LoginException;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">import</strong> mockit.Expectations;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <strong class="jxr_keyword">import</strong> mockit.Mocked;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.BeforeEach;
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <strong class="jxr_keyword">import</strong> org.powermock.reflect.Whitebox;
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.PrincipalFormat;
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment"> * The Class WindowsLoginModuleTest.</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <strong class="jxr_keyword">class</strong> <a name="WindowsLoginModuleTest" href="../../waffle/jaas/WindowsLoginModuleTest.html#WindowsLoginModuleTest">WindowsLoginModuleTest</a> {
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <em class="jxr_javadoccomment">/** The login module. */</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <strong class="jxr_keyword">private</strong> WindowsLoginModule loginModule;
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      <em class="jxr_javadoccomment">/** The subject. */</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">private</strong> Subject subject;
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <em class="jxr_javadoccomment">/** The callback handler. */</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      @Mocked
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      <strong class="jxr_keyword">private</strong> CallbackHandler callbackHandler;
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <em class="jxr_javadoccomment">/** The options. */</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      <strong class="jxr_keyword">private</strong> Map&lt;String, String&gt; options;
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  <em class="jxr_javadoccomment">     * Check auth.</em>
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      @Test
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      <strong class="jxr_keyword">void</strong> checkAuth() {
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          Assertions.assertNotNull(<strong class="jxr_keyword">this</strong>.loginModule.getAuth());
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          <strong class="jxr_keyword">this</strong>.loginModule.setAuth(<strong class="jxr_keyword">null</strong>);
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          Assertions.assertNull(<strong class="jxr_keyword">this</strong>.loginModule.getAuth());
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>      }
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">     * Check guest login.</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>      @Test
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      <strong class="jxr_keyword">void</strong> checkGuestLogin() {
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>          Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.loginModule.isAllowGuestLogin());
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>          <strong class="jxr_keyword">this</strong>.loginModule.setAllowGuestLogin(false);
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>          Assertions.assertFalse(<strong class="jxr_keyword">this</strong>.loginModule.isAllowGuestLogin());
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>      }
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     * Commit_no principal.</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>      @Test
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>      <strong class="jxr_keyword">void</strong> commit_noPrincipal() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>          Assertions.assertFalse(<strong class="jxr_keyword">this</strong>.loginModule.commit());
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>      }
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment">     * Commit_subject read only.</em>
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>     @Test
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>     <strong class="jxr_keyword">void</strong> commit_subjectReadOnly() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>         <strong class="jxr_keyword">this</strong>.subject.setReadOnly();
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>         Whitebox.setInternalState(<strong class="jxr_keyword">this</strong>.loginModule, <strong class="jxr_keyword">new</strong> LinkedHashSet&lt;Principal&gt;());
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>         Assertions.assertThrows(LoginException.<strong class="jxr_keyword">class</strong>, () -&gt; {
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>             <strong class="jxr_keyword">this</strong>.loginModule.commit();
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>         });
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>     }
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a> 
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a> <em class="jxr_javadoccomment">     * Commit_success.</em>
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>     @Test
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a>     <strong class="jxr_keyword">void</strong> commit_success() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>         Whitebox.setInternalState(<strong class="jxr_keyword">this</strong>.loginModule, <strong class="jxr_keyword">new</strong> LinkedHashSet&lt;Principal&gt;());
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a>         Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.loginModule.commit());
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>     }
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a> 
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a> <em class="jxr_javadoccomment">     * Commit_with debug.</em>
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>     @Test
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>     <strong class="jxr_keyword">void</strong> commit_withDebug() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a>         <strong class="jxr_keyword">this</strong>.options.put(<span class="jxr_string">"debug"</span>, <span class="jxr_string">"true"</span>);
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>         <strong class="jxr_keyword">final</strong> Set&lt;Principal&gt; principals = <strong class="jxr_keyword">new</strong> LinkedHashSet&lt;&gt;();
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a>         principals.add(<strong class="jxr_keyword">new</strong> UserPrincipal(<span class="jxr_string">"FQN"</span>));
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a>         Whitebox.setInternalState(<strong class="jxr_keyword">this</strong>.loginModule, principals);
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a>         Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.loginModule.commit());
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a>     }
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a> 
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a> <em class="jxr_javadoccomment">     * Commit_with Roles.</em>
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a>     @Test
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a>     <strong class="jxr_keyword">void</strong> commit_withRoles() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a>         <strong class="jxr_keyword">final</strong> Set&lt;Principal&gt; principals = <strong class="jxr_keyword">new</strong> LinkedHashSet&lt;&gt;();
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a>         principals.add(<strong class="jxr_keyword">new</strong> UserPrincipal(<span class="jxr_string">"FQN"</span>));
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a>         <strong class="jxr_keyword">final</strong> GroupPrincipal group = <strong class="jxr_keyword">new</strong> GroupPrincipal(<span class="jxr_string">"Roles"</span>);
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a>         <strong class="jxr_keyword">final</strong> RolePrincipal role = <strong class="jxr_keyword">new</strong> RolePrincipal(<span class="jxr_string">"WindowsGroup"</span>);
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>         group.addMember(role);
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a>         principals.add(role);
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a>         principals.add(group);
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a>         Whitebox.setInternalState(<strong class="jxr_keyword">this</strong>.loginModule, principals);
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a>         Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.loginModule.commit());
      +<a class="jxr_linenumber" name="L163" href="#L163">163</a>     }
      +<a class="jxr_linenumber" name="L164" href="#L164">164</a> 
      +<a class="jxr_linenumber" name="L165" href="#L165">165</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L166" href="#L166">166</a> <em class="jxr_javadoccomment">     * Inits the.</em>
      +<a class="jxr_linenumber" name="L167" href="#L167">167</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L168" href="#L168">168</a>     @BeforeEach
      +<a class="jxr_linenumber" name="L169" href="#L169">169</a>     <strong class="jxr_keyword">void</strong> init() {
      +<a class="jxr_linenumber" name="L170" href="#L170">170</a>         <strong class="jxr_keyword">this</strong>.loginModule = <strong class="jxr_keyword">new</strong> WindowsLoginModule();
      +<a class="jxr_linenumber" name="L171" href="#L171">171</a>         <strong class="jxr_keyword">this</strong>.subject = <strong class="jxr_keyword">new</strong> Subject();
      +<a class="jxr_linenumber" name="L172" href="#L172">172</a>         <strong class="jxr_keyword">this</strong>.options = <strong class="jxr_keyword">new</strong> HashMap&lt;&gt;();
      +<a class="jxr_linenumber" name="L173" href="#L173">173</a>     }
      +<a class="jxr_linenumber" name="L174" href="#L174">174</a> 
      +<a class="jxr_linenumber" name="L175" href="#L175">175</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L176" href="#L176">176</a> <em class="jxr_javadoccomment">     * Initialize_with options.</em>
      +<a class="jxr_linenumber" name="L177" href="#L177">177</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L178" href="#L178">178</a>     @Test
      +<a class="jxr_linenumber" name="L179" href="#L179">179</a>     <strong class="jxr_keyword">void</strong> initialize_withOptions() {
      +<a class="jxr_linenumber" name="L180" href="#L180">180</a>         <strong class="jxr_keyword">this</strong>.options.put(<span class="jxr_string">"debug"</span>, <span class="jxr_string">"true"</span>);
      +<a class="jxr_linenumber" name="L181" href="#L181">181</a>         <strong class="jxr_keyword">this</strong>.options.put(<span class="jxr_string">"principalFormat"</span>, <span class="jxr_string">"sid"</span>);
      +<a class="jxr_linenumber" name="L182" href="#L182">182</a>         <strong class="jxr_keyword">this</strong>.options.put(<span class="jxr_string">"roleFormat"</span>, <span class="jxr_string">"none"</span>);
      +<a class="jxr_linenumber" name="L183" href="#L183">183</a>         <strong class="jxr_keyword">this</strong>.options.put(<span class="jxr_string">"junk"</span>, <span class="jxr_string">"junk"</span>);
      +<a class="jxr_linenumber" name="L184" href="#L184">184</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L185" href="#L185">185</a>         Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.loginModule.isDebug());
      +<a class="jxr_linenumber" name="L186" href="#L186">186</a>         Assertions.assertEquals(PrincipalFormat.SID, Whitebox.getInternalState(<strong class="jxr_keyword">this</strong>.loginModule, <span class="jxr_string">"principalFormat"</span>));
      +<a class="jxr_linenumber" name="L187" href="#L187">187</a>         Assertions.assertEquals(PrincipalFormat.NONE, Whitebox.getInternalState(<strong class="jxr_keyword">this</strong>.loginModule, <span class="jxr_string">"roleFormat"</span>));
      +<a class="jxr_linenumber" name="L188" href="#L188">188</a>     }
      +<a class="jxr_linenumber" name="L189" href="#L189">189</a> 
      +<a class="jxr_linenumber" name="L190" href="#L190">190</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L191" href="#L191">191</a> <em class="jxr_javadoccomment">     * Login_invalid guest login.</em>
      +<a class="jxr_linenumber" name="L192" href="#L192">192</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L193" href="#L193">193</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L194" href="#L194">194</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L195" href="#L195">195</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L196" href="#L196">196</a>     @Test
      +<a class="jxr_linenumber" name="L197" href="#L197">197</a>     <strong class="jxr_keyword">void</strong> login_invalidGuestLogin() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L198" href="#L198">198</a>         <strong class="jxr_keyword">this</strong>.callbackHandler = <strong class="jxr_keyword">new</strong> <a name="UsernamePasswordCallbackHandler" href="../../waffle/jaas/UsernamePasswordCallbackHandler.html#UsernamePasswordCallbackHandler">UsernamePasswordCallbackHandler</a>(<span class="jxr_string">"Guest"</span>, <span class="jxr_string">"password"</span>);
      +<a class="jxr_linenumber" name="L199" href="#L199">199</a>         <strong class="jxr_keyword">this</strong>.options.put(<span class="jxr_string">"debug"</span>, <span class="jxr_string">"true"</span>);
      +<a class="jxr_linenumber" name="L200" href="#L200">200</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L201" href="#L201">201</a>         Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.loginModule.isAllowGuestLogin());
      +<a class="jxr_linenumber" name="L202" href="#L202">202</a>         Assertions.assertThrows(LoginException.<strong class="jxr_keyword">class</strong>, () -&gt; {
      +<a class="jxr_linenumber" name="L203" href="#L203">203</a>             <strong class="jxr_keyword">this</strong>.loginModule.login();
      +<a class="jxr_linenumber" name="L204" href="#L204">204</a>         });
      +<a class="jxr_linenumber" name="L205" href="#L205">205</a>     }
      +<a class="jxr_linenumber" name="L206" href="#L206">206</a> 
      +<a class="jxr_linenumber" name="L207" href="#L207">207</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L208" href="#L208">208</a> <em class="jxr_javadoccomment">     * Login_null password.</em>
      +<a class="jxr_linenumber" name="L209" href="#L209">209</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L210" href="#L210">210</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L211" href="#L211">211</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L212" href="#L212">212</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L213" href="#L213">213</a>     @Test
      +<a class="jxr_linenumber" name="L214" href="#L214">214</a>     <strong class="jxr_keyword">void</strong> login_nullPassword() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L215" href="#L215">215</a>         <strong class="jxr_keyword">this</strong>.callbackHandler = <strong class="jxr_keyword">new</strong> <a name="UsernamePasswordCallbackHandler" href="../../waffle/jaas/UsernamePasswordCallbackHandler.html#UsernamePasswordCallbackHandler">UsernamePasswordCallbackHandler</a>(<span class="jxr_string">"Guest"</span>, <strong class="jxr_keyword">null</strong>);
      +<a class="jxr_linenumber" name="L216" href="#L216">216</a>         <strong class="jxr_keyword">this</strong>.options.put(<span class="jxr_string">"debug"</span>, <span class="jxr_string">"true"</span>);
      +<a class="jxr_linenumber" name="L217" href="#L217">217</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L218" href="#L218">218</a>         Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.loginModule.isAllowGuestLogin());
      +<a class="jxr_linenumber" name="L219" href="#L219">219</a>         Assertions.assertThrows(LoginException.<strong class="jxr_keyword">class</strong>, () -&gt; {
      +<a class="jxr_linenumber" name="L220" href="#L220">220</a>             <strong class="jxr_keyword">this</strong>.loginModule.login();
      +<a class="jxr_linenumber" name="L221" href="#L221">221</a>         });
      +<a class="jxr_linenumber" name="L222" href="#L222">222</a>     }
      +<a class="jxr_linenumber" name="L223" href="#L223">223</a> 
      +<a class="jxr_linenumber" name="L224" href="#L224">224</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L225" href="#L225">225</a> <em class="jxr_javadoccomment">     * Login_throw io exception.</em>
      +<a class="jxr_linenumber" name="L226" href="#L226">226</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L227" href="#L227">227</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L228" href="#L228">228</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L229" href="#L229">229</a> <em class="jxr_javadoccomment">     * @throws IOException</em>
      +<a class="jxr_linenumber" name="L230" href="#L230">230</a> <em class="jxr_javadoccomment">     *             Signals that an I/O exception has occurred.</em>
      +<a class="jxr_linenumber" name="L231" href="#L231">231</a> <em class="jxr_javadoccomment">     * @throws UnsupportedCallbackException</em>
      +<a class="jxr_linenumber" name="L232" href="#L232">232</a> <em class="jxr_javadoccomment">     *             the unsupported callback exception</em>
      +<a class="jxr_linenumber" name="L233" href="#L233">233</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L234" href="#L234">234</a>     @Test
      +<a class="jxr_linenumber" name="L235" href="#L235">235</a>     <strong class="jxr_keyword">void</strong> login_throwIOException() <strong class="jxr_keyword">throws</strong> LoginException, IOException, UnsupportedCallbackException {
      +<a class="jxr_linenumber" name="L236" href="#L236">236</a>         <strong class="jxr_keyword">this</strong>.options.put(<span class="jxr_string">"debug"</span>, <span class="jxr_string">"true"</span>);
      +<a class="jxr_linenumber" name="L237" href="#L237">237</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L238" href="#L238">238</a>         Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.loginModule.isAllowGuestLogin());
      +<a class="jxr_linenumber" name="L239" href="#L239">239</a>         Assertions.assertNotNull(<strong class="jxr_keyword">new</strong> Expectations() {
      +<a class="jxr_linenumber" name="L240" href="#L240">240</a>             {
      +<a class="jxr_linenumber" name="L241" href="#L241">241</a>                 WindowsLoginModuleTest.<strong class="jxr_keyword">this</strong>.callbackHandler.handle(<strong class="jxr_keyword">this</strong>.withInstanceOf(Callback[].<strong class="jxr_keyword">class</strong>));
      +<a class="jxr_linenumber" name="L242" href="#L242">242</a>                 <strong class="jxr_keyword">this</strong>.result = <strong class="jxr_keyword">new</strong> IOException();
      +<a class="jxr_linenumber" name="L243" href="#L243">243</a>             }
      +<a class="jxr_linenumber" name="L244" href="#L244">244</a>         });
      +<a class="jxr_linenumber" name="L245" href="#L245">245</a>         Assertions.assertThrows(LoginException.<strong class="jxr_keyword">class</strong>, () -&gt; {
      +<a class="jxr_linenumber" name="L246" href="#L246">246</a>             <strong class="jxr_keyword">this</strong>.loginModule.login();
      +<a class="jxr_linenumber" name="L247" href="#L247">247</a>         });
      +<a class="jxr_linenumber" name="L248" href="#L248">248</a>     }
      +<a class="jxr_linenumber" name="L249" href="#L249">249</a> 
      +<a class="jxr_linenumber" name="L250" href="#L250">250</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L251" href="#L251">251</a> <em class="jxr_javadoccomment">     * Login_throw unsupported callback exception.</em>
      +<a class="jxr_linenumber" name="L252" href="#L252">252</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L253" href="#L253">253</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L254" href="#L254">254</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L255" href="#L255">255</a> <em class="jxr_javadoccomment">     * @throws IOException</em>
      +<a class="jxr_linenumber" name="L256" href="#L256">256</a> <em class="jxr_javadoccomment">     *             Signals that an I/O exception has occurred.</em>
      +<a class="jxr_linenumber" name="L257" href="#L257">257</a> <em class="jxr_javadoccomment">     * @throws UnsupportedCallbackException</em>
      +<a class="jxr_linenumber" name="L258" href="#L258">258</a> <em class="jxr_javadoccomment">     *             the unsupported callback exception</em>
      +<a class="jxr_linenumber" name="L259" href="#L259">259</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L260" href="#L260">260</a>     @Test
      +<a class="jxr_linenumber" name="L261" href="#L261">261</a>     <strong class="jxr_keyword">void</strong> login_throwUnsupportedCallbackException() <strong class="jxr_keyword">throws</strong> LoginException, IOException, UnsupportedCallbackException {
      +<a class="jxr_linenumber" name="L262" href="#L262">262</a>         <strong class="jxr_keyword">this</strong>.options.put(<span class="jxr_string">"debug"</span>, <span class="jxr_string">"true"</span>);
      +<a class="jxr_linenumber" name="L263" href="#L263">263</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L264" href="#L264">264</a>         Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.loginModule.isAllowGuestLogin());
      +<a class="jxr_linenumber" name="L265" href="#L265">265</a>         Assertions.assertNotNull(<strong class="jxr_keyword">new</strong> Expectations() {
      +<a class="jxr_linenumber" name="L266" href="#L266">266</a>             {
      +<a class="jxr_linenumber" name="L267" href="#L267">267</a>                 WindowsLoginModuleTest.<strong class="jxr_keyword">this</strong>.callbackHandler.handle(<strong class="jxr_keyword">this</strong>.withInstanceOf(Callback[].<strong class="jxr_keyword">class</strong>));
      +<a class="jxr_linenumber" name="L268" href="#L268">268</a>                 <strong class="jxr_keyword">this</strong>.result = <strong class="jxr_keyword">new</strong> UnsupportedCallbackException(<strong class="jxr_keyword">new</strong> NameCallback(<span class="jxr_string">"Callback Exception"</span>));
      +<a class="jxr_linenumber" name="L269" href="#L269">269</a>             }
      +<a class="jxr_linenumber" name="L270" href="#L270">270</a>         });
      +<a class="jxr_linenumber" name="L271" href="#L271">271</a>         Assertions.assertThrows(LoginException.<strong class="jxr_keyword">class</strong>, () -&gt; {
      +<a class="jxr_linenumber" name="L272" href="#L272">272</a>             <strong class="jxr_keyword">this</strong>.loginModule.login();
      +<a class="jxr_linenumber" name="L273" href="#L273">273</a>         });
      +<a class="jxr_linenumber" name="L274" href="#L274">274</a>     }
      +<a class="jxr_linenumber" name="L275" href="#L275">275</a> 
      +<a class="jxr_linenumber" name="L276" href="#L276">276</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L277" href="#L277">277</a> <em class="jxr_javadoccomment">     * Logon_no callback handler.</em>
      +<a class="jxr_linenumber" name="L278" href="#L278">278</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L279" href="#L279">279</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L280" href="#L280">280</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L281" href="#L281">281</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L282" href="#L282">282</a>     @Test
      +<a class="jxr_linenumber" name="L283" href="#L283">283</a>     <strong class="jxr_keyword">void</strong> logon_noCallbackHandler() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L284" href="#L284">284</a>         Assertions.assertThrows(LoginException.<strong class="jxr_keyword">class</strong>, () -&gt; {
      +<a class="jxr_linenumber" name="L285" href="#L285">285</a>             <strong class="jxr_keyword">this</strong>.loginModule.login();
      +<a class="jxr_linenumber" name="L286" href="#L286">286</a>         });
      +<a class="jxr_linenumber" name="L287" href="#L287">287</a>     }
      +<a class="jxr_linenumber" name="L288" href="#L288">288</a> 
      +<a class="jxr_linenumber" name="L289" href="#L289">289</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L290" href="#L290">290</a> <em class="jxr_javadoccomment">     * Logout_abort no user.</em>
      +<a class="jxr_linenumber" name="L291" href="#L291">291</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L292" href="#L292">292</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L293" href="#L293">293</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L294" href="#L294">294</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L295" href="#L295">295</a>     @Test
      +<a class="jxr_linenumber" name="L296" href="#L296">296</a>     <strong class="jxr_keyword">void</strong> logout_abortNoUser() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L297" href="#L297">297</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L298" href="#L298">298</a>         Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.loginModule.abort());
      +<a class="jxr_linenumber" name="L299" href="#L299">299</a>     }
      +<a class="jxr_linenumber" name="L300" href="#L300">300</a> 
      +<a class="jxr_linenumber" name="L301" href="#L301">301</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L302" href="#L302">302</a> <em class="jxr_javadoccomment">     * Logout_no user.</em>
      +<a class="jxr_linenumber" name="L303" href="#L303">303</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L304" href="#L304">304</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L305" href="#L305">305</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L306" href="#L306">306</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L307" href="#L307">307</a>     @Test
      +<a class="jxr_linenumber" name="L308" href="#L308">308</a>     <strong class="jxr_keyword">void</strong> logout_noUser() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L309" href="#L309">309</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L310" href="#L310">310</a>         Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.loginModule.logout());
      +<a class="jxr_linenumber" name="L311" href="#L311">311</a>     }
      +<a class="jxr_linenumber" name="L312" href="#L312">312</a> 
      +<a class="jxr_linenumber" name="L313" href="#L313">313</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L314" href="#L314">314</a> <em class="jxr_javadoccomment">     * Logout_subject read only.</em>
      +<a class="jxr_linenumber" name="L315" href="#L315">315</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L316" href="#L316">316</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L317" href="#L317">317</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L318" href="#L318">318</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L319" href="#L319">319</a>     @Test
      +<a class="jxr_linenumber" name="L320" href="#L320">320</a>     <strong class="jxr_keyword">void</strong> logout_subjectReadOnly() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L321" href="#L321">321</a>         <strong class="jxr_keyword">this</strong>.subject.setReadOnly();
      +<a class="jxr_linenumber" name="L322" href="#L322">322</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L323" href="#L323">323</a>         Assertions.assertThrows(LoginException.<strong class="jxr_keyword">class</strong>, () -&gt; {
      +<a class="jxr_linenumber" name="L324" href="#L324">324</a>             <strong class="jxr_keyword">this</strong>.loginModule.logout();
      +<a class="jxr_linenumber" name="L325" href="#L325">325</a>         });
      +<a class="jxr_linenumber" name="L326" href="#L326">326</a>     }
      +<a class="jxr_linenumber" name="L327" href="#L327">327</a> 
      +<a class="jxr_linenumber" name="L328" href="#L328">328</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L329" href="#L329">329</a> <em class="jxr_javadoccomment">     * Logout_valid user.</em>
      +<a class="jxr_linenumber" name="L330" href="#L330">330</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L331" href="#L331">331</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L332" href="#L332">332</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L333" href="#L333">333</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L334" href="#L334">334</a>     @Test
      +<a class="jxr_linenumber" name="L335" href="#L335">335</a>     <strong class="jxr_keyword">void</strong> logout_validUser() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L336" href="#L336">336</a>         Whitebox.setInternalState(<strong class="jxr_keyword">this</strong>.loginModule, <span class="jxr_string">"username"</span>, <span class="jxr_string">"waffle-user"</span>);
      +<a class="jxr_linenumber" name="L337" href="#L337">337</a>         <strong class="jxr_keyword">this</strong>.loginModule.initialize(<strong class="jxr_keyword">this</strong>.subject, <strong class="jxr_keyword">this</strong>.callbackHandler, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.options);
      +<a class="jxr_linenumber" name="L338" href="#L338">338</a>         Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.loginModule.logout());
      +<a class="jxr_linenumber" name="L339" href="#L339">339</a>     }
      +<a class="jxr_linenumber" name="L340" href="#L340">340</a> 
      +<a class="jxr_linenumber" name="L341" href="#L341">341</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/jaas/package-frame.html b/waffle-jna-jakarta/xref-test/waffle/jaas/package-frame.html
      new file mode 100644
      index 0000000000..ddde8647c2
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/jaas/package-frame.html
      @@ -0,0 +1,33 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.jaas</title>
      +        <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar"><a href="package-summary.html" target="classFrame">waffle.jaas</a></h1>
      +        <div class="indexContainer">
      +            <h2 title="Classes">Classes</h2>
      +            <ul title="Classes">
      +                <li>
      +                    <a href="GroupPrincipalTest.html#GroupPrincipalTest" target="classFrame">GroupPrincipalTest</a>
      +                </li>
      +                <li>
      +                    <a href="RolePrincipalTest.html#RolePrincipalTest" target="classFrame">RolePrincipalTest</a>
      +                </li>
      +                <li>
      +                    <a href="UserPrincipalTest.html#UserPrincipalTest" target="classFrame">UserPrincipalTest</a>
      +                </li>
      +                <li>
      +                    <a href="UsernamePasswordCallbackHandler.html#UsernamePasswordCallbackHandler" target="classFrame">UsernamePasswordCallbackHandler</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsLoginModuleTest.html#WindowsLoginModuleTest" target="classFrame">WindowsLoginModuleTest</a>
      +                </li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref-test/waffle/jaas/package-summary.html b/waffle-jna-jakarta/xref-test/waffle/jaas/package-summary.html
      new file mode 100644
      index 0000000000..aec641df51
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/jaas/package-summary.html
      @@ -0,0 +1,127 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.jaas</title>
      +        <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="style" />
      +    </head>
      +
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_top">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 title="Package" class="title">Package waffle.jaas</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <ul class="blockList">
      +                <li class="blockList">
      +                    <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
      +                        <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
      +                        <thead>
      +                            <tr>
      +                                <th class="colFirst colLast" scope="col">Class</th>
      +                            </tr>
      +                        </thead>
      +                        <tbody>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="GroupPrincipalTest.html#GroupPrincipalTest" target="classFrame" title="class in waffle.jaas">GroupPrincipalTest</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="RolePrincipalTest.html#RolePrincipalTest" target="classFrame" title="class in waffle.jaas">RolePrincipalTest</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="UserPrincipalTest.html#UserPrincipalTest" target="classFrame" title="class in waffle.jaas">UserPrincipalTest</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="UsernamePasswordCallbackHandler.html#UsernamePasswordCallbackHandler" target="classFrame" title="class in waffle.jaas">UsernamePasswordCallbackHandler</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsLoginModuleTest.html#WindowsLoginModuleTest" target="classFrame" title="class in waffle.jaas">WindowsLoginModuleTest</a>
      +                                </td>
      +                            </tr>
      +                        </tbody>
      +                    </table>
      +                </li>
      +            </ul>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_bottom">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref-test/waffle/servlet/CorsAwareNegotiateSecurityFilterTest.html b/waffle-jna-jakarta/xref-test/waffle/servlet/CorsAwareNegotiateSecurityFilterTest.html
      new file mode 100644
      index 0000000000..5502e0563f
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/servlet/CorsAwareNegotiateSecurityFilterTest.html
      @@ -0,0 +1,114 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>CorsAwareNegotiateSecurityFilterTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../testapidocs/waffle/servlet/CorsAwareNegotiateSecurityFilterTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.FilterChain;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.FilterConfig;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletResponse;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> mockit.Expectations;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> mockit.Mocked;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> mockit.Tested;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">import</strong> mockit.Verifications;
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> waffle.util.CorsPreFlightCheck;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment"> * The Class CorsAwareNegotiateSecurityFilterTest.</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <strong class="jxr_keyword">class</strong> <a name="CorsAwareNegotiateSecurityFilterTest" href="../../waffle/servlet/CorsAwareNegotiateSecurityFilterTest.html#CorsAwareNegotiateSecurityFilterTest">CorsAwareNegotiateSecurityFilterTest</a> {
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/** The cors aware negotiate security filter. */</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      @Tested
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <strong class="jxr_keyword">private</strong> CorsAwareNegotiateSecurityFilter corsAwareNegotiateSecurityFilter;
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <em class="jxr_javadoccomment">/** The preflight request. */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      @Mocked
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">private</strong> HttpServletRequest preflightRequest;
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      <em class="jxr_javadoccomment">/** The preflight response. */</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      @Mocked
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <strong class="jxr_keyword">private</strong> HttpServletResponse preflightResponse;
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      <em class="jxr_javadoccomment">/** The chain. */</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      @Mocked
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">private</strong> FilterChain chain;
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <em class="jxr_javadoccomment">/** The filter config. */</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      @Mocked
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      <strong class="jxr_keyword">private</strong> FilterConfig filterConfig;
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     * Do filter test cors preflight request.</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  <em class="jxr_javadoccomment">     * @throws Exception</em>
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  <em class="jxr_javadoccomment">     *             the exception</em>
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      @Test
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      <strong class="jxr_keyword">void</strong> doFilterTestCorsPreflightRequest() <strong class="jxr_keyword">throws</strong> Exception {
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          <strong class="jxr_keyword">new</strong> Expectations() {
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>              {
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>                  CorsAwareNegotiateSecurityFilterTest.<strong class="jxr_keyword">this</strong>.preflightRequest.getMethod();
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"OPTIONS"</span>;
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>                  CorsAwareNegotiateSecurityFilterTest.<strong class="jxr_keyword">this</strong>.preflightRequest.getHeader(<span class="jxr_string">"Access-Control-Request-Method"</span>);
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"LOGIN"</span>;
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>                  CorsAwareNegotiateSecurityFilterTest.<strong class="jxr_keyword">this</strong>.preflightRequest.getHeader(<span class="jxr_string">"Access-Control-Request-Headers"</span>);
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"X-Request-For"</span>;
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>                  CorsAwareNegotiateSecurityFilterTest.<strong class="jxr_keyword">this</strong>.preflightRequest.getHeader(<span class="jxr_string">"Origin"</span>);
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"https://theorigin.preflight"</span>;
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>              }
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>          };
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>          <strong class="jxr_keyword">this</strong>.corsAwareNegotiateSecurityFilter.doFilter(<strong class="jxr_keyword">this</strong>.preflightRequest, <strong class="jxr_keyword">this</strong>.preflightResponse, <strong class="jxr_keyword">this</strong>.chain);
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>          <strong class="jxr_keyword">new</strong> Verifications() {
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>              {
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>                  CorsPreFlightCheck.isPreflight(CorsAwareNegotiateSecurityFilterTest.<strong class="jxr_keyword">this</strong>.preflightRequest);
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>                  <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>                  CorsAwareNegotiateSecurityFilterTest.<strong class="jxr_keyword">this</strong>.chain.doFilter(
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>                          CorsAwareNegotiateSecurityFilterTest.<strong class="jxr_keyword">this</strong>.preflightRequest,
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>                          CorsAwareNegotiateSecurityFilterTest.<strong class="jxr_keyword">this</strong>.preflightResponse);
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>              }
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>          };
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>      }
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> 
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/servlet/NegotiateSecurityFilterTest.html b/waffle-jna-jakarta/xref-test/waffle/servlet/NegotiateSecurityFilterTest.html
      new file mode 100644
      index 0000000000..f9e5c58592
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/servlet/NegotiateSecurityFilterTest.html
      @@ -0,0 +1,204 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>NegotiateSecurityFilterTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../testapidocs/waffle/servlet/NegotiateSecurityFilterTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2022 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.FilterChain;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.FilterConfig;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletResponse;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.Field;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> java.util.Collections;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> java.util.Enumeration;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> mockit.Expectations;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> mockit.Mocked;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> mockit.Tested;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> mockit.Verifications;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <strong class="jxr_keyword">import</strong> waffle.util.CorsPreFlightCheck;
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment"> * Negotiate Security Filter Test.</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <strong class="jxr_keyword">class</strong> <a name="NegotiateSecurityFilterTest" href="../../waffle/servlet/NegotiateSecurityFilterTest.html#NegotiateSecurityFilterTest">NegotiateSecurityFilterTest</a> {
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <em class="jxr_javadoccomment">/** The negotiate security filter. */</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      @Tested
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <strong class="jxr_keyword">private</strong> NegotiateSecurityFilter negotiateSecurityFilter;
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      <em class="jxr_javadoccomment">/** The init parameter names. */</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Enumeration&lt;String&gt; initParameterNames = Collections.enumeration(<strong class="jxr_keyword">new</strong> java.util.ArrayList&lt;String&gt;() {
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>          <em class="jxr_javadoccomment">/** The Constant serialVersionUID. */</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> serialVersionUID = 1L;
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          {
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>              <strong class="jxr_keyword">this</strong>.add(<span class="jxr_string">"principalFormat"</span>);
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>              <strong class="jxr_keyword">this</strong>.add(<span class="jxr_string">"principalFormat"</span>);
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>              <strong class="jxr_keyword">this</strong>.add(<span class="jxr_string">"roleFormat"</span>);
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>              <strong class="jxr_keyword">this</strong>.add(<span class="jxr_string">"allowGuestLogin"</span>);
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>              <strong class="jxr_keyword">this</strong>.add(<span class="jxr_string">"impersonate"</span>);
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>              <strong class="jxr_keyword">this</strong>.add(<span class="jxr_string">"securityFilterProviders"</span>);
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>              <strong class="jxr_keyword">this</strong>.add(<span class="jxr_string">"excludePatterns"</span>);
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>              <strong class="jxr_keyword">this</strong>.add(<span class="jxr_string">"excludeCorsPreflight"</span>);
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>              <strong class="jxr_keyword">this</strong>.add(<span class="jxr_string">"excludeBearerAuthorization"</span>);
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>          }
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      });
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     * Test cors and bearer authorization I init.</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     * @param filterConfig</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment">     *            the filter config</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">     * @throws Exception</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>  <em class="jxr_javadoccomment">     *             the exception</em>
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      @Test
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>      <strong class="jxr_keyword">void</strong> testCorsAndBearerAuthorizationI_init(@Mocked <strong class="jxr_keyword">final</strong> FilterConfig filterConfig) <strong class="jxr_keyword">throws</strong> Exception {
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>          <strong class="jxr_keyword">this</strong>.getClass().getClassLoader().getResource(<span class="jxr_string">"logback.xml"</span>);
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>          <strong class="jxr_keyword">new</strong> Expectations() {
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>              {
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>                  filterConfig.getInitParameterNames();
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>                  <strong class="jxr_keyword">this</strong>.result = NegotiateSecurityFilterTest.<strong class="jxr_keyword">this</strong>.initParameterNames;
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>                  filterConfig.getInitParameter(<span class="jxr_string">"principalFormat"</span>);
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"fqn"</span>;
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>                  filterConfig.getInitParameter(<span class="jxr_string">"roleFormat"</span>);
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"fqn"</span>;
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>                  filterConfig.getInitParameter(<span class="jxr_string">"allowGuestLogin"</span>);
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"false"</span>;
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>                  filterConfig.getInitParameter(<span class="jxr_string">"impersonate"</span>);
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"true"</span>;
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>                  filterConfig.getInitParameter(<span class="jxr_string">"securityFilterProviders"</span>);
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"waffle.servlet.spi.BasicSecurityFilterProvider\nwaffle.servlet.spi.NegotiateSecurityFilterProvider"</span>;
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>                 filterConfig.getInitParameter(<span class="jxr_string">"excludePatterns"</span>);
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">".*/peter/.*"</span>;
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>                 filterConfig.getInitParameter(<span class="jxr_string">"excludeCorsPreflight"</span>);
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"true"</span>;
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>                 filterConfig.getInitParameter(<span class="jxr_string">"excludeBearerAuthorization"</span>);
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"true"</span>;
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>             }
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>         };
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a> 
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>         <strong class="jxr_keyword">this</strong>.negotiateSecurityFilter.init(filterConfig);
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a> 
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>         <strong class="jxr_keyword">final</strong> Field excludeCorsPreflight = <strong class="jxr_keyword">this</strong>.negotiateSecurityFilter.getClass()
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>                 .getDeclaredField(<span class="jxr_string">"excludeCorsPreflight"</span>);
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>         <strong class="jxr_keyword">final</strong> Field excludeBearerAuthorization = <strong class="jxr_keyword">this</strong>.negotiateSecurityFilter.getClass()
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a>                 .getDeclaredField(<span class="jxr_string">"excludeBearerAuthorization"</span>);
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a>         excludeCorsPreflight.setAccessible(<strong class="jxr_keyword">true</strong>);
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a>         excludeBearerAuthorization.setAccessible(<strong class="jxr_keyword">true</strong>);
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>         Assertions.assertTrue(excludeCorsPreflight.getBoolean(<strong class="jxr_keyword">this</strong>.negotiateSecurityFilter));
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>         Assertions.assertTrue(excludeBearerAuthorization.getBoolean(<strong class="jxr_keyword">this</strong>.negotiateSecurityFilter));
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>         Assertions.assertTrue(<strong class="jxr_keyword">this</strong>.negotiateSecurityFilter.isImpersonate());
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a>         Assertions.assertFalse(<strong class="jxr_keyword">this</strong>.negotiateSecurityFilter.isAllowGuestLogin());
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a> 
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a>         <strong class="jxr_keyword">new</strong> Verifications() {
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>             {
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>                 filterConfig.getInitParameter(<strong class="jxr_keyword">this</strong>.withInstanceOf(String.<strong class="jxr_keyword">class</strong>));
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a>                 <strong class="jxr_keyword">this</strong>.minTimes = 8;
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>             }
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>         };
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a> 
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a>     }
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a> 
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a> <em class="jxr_javadoccomment">     * Test exclude cors and OAUTH bearer authorization do filter.</em>
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a> <em class="jxr_javadoccomment">     * @param request</em>
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a> <em class="jxr_javadoccomment">     *            the request</em>
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a> <em class="jxr_javadoccomment">     * @param response</em>
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a> <em class="jxr_javadoccomment">     *            the response</em>
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a> <em class="jxr_javadoccomment">     * @param chain</em>
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a> <em class="jxr_javadoccomment">     *            the chain</em>
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a> <em class="jxr_javadoccomment">     * @param filterConfig</em>
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a> <em class="jxr_javadoccomment">     *            the filter config</em>
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a> <em class="jxr_javadoccomment">     * @throws Exception</em>
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a> <em class="jxr_javadoccomment">     *             the exception</em>
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a>     @Test
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a>     <strong class="jxr_keyword">void</strong> testExcludeCorsAndOAUTHBearerAuthorization_doFilter(@Mocked <strong class="jxr_keyword">final</strong> HttpServletRequest request,
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a>             @Mocked <strong class="jxr_keyword">final</strong> HttpServletResponse response, @Mocked <strong class="jxr_keyword">final</strong> FilterChain chain,
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a>             @Mocked <strong class="jxr_keyword">final</strong> FilterConfig filterConfig) <strong class="jxr_keyword">throws</strong> Exception {
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a>         <strong class="jxr_keyword">this</strong>.getClass().getClassLoader().getResource(<span class="jxr_string">"logback.xml"</span>);
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a> 
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a>         <strong class="jxr_keyword">new</strong> Expectations() {
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a>             {
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a>                 filterConfig.getInitParameterNames();
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a>                 <strong class="jxr_keyword">this</strong>.result = NegotiateSecurityFilterTest.<strong class="jxr_keyword">this</strong>.initParameterNames;
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a>                 filterConfig.getInitParameter(<span class="jxr_string">"principalFormat"</span>);
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"fqn"</span>;
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a>                 filterConfig.getInitParameter(<span class="jxr_string">"roleFormat"</span>);
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"fqn"</span>;
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a>                 filterConfig.getInitParameter(<span class="jxr_string">"allowGuestLogin"</span>);
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"false"</span>;
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a>                 filterConfig.getInitParameter(<span class="jxr_string">"impersonate"</span>);
      +<a class="jxr_linenumber" name="L163" href="#L163">163</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"false"</span>;
      +<a class="jxr_linenumber" name="L164" href="#L164">164</a>                 filterConfig.getInitParameter(<span class="jxr_string">"securityFilterProviders"</span>);
      +<a class="jxr_linenumber" name="L165" href="#L165">165</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"waffle.servlet.spi.BasicSecurityFilterProvider\nwaffle.servlet.spi.NegotiateSecurityFilterProvider"</span>;
      +<a class="jxr_linenumber" name="L166" href="#L166">166</a>                 filterConfig.getInitParameter(<span class="jxr_string">"excludePatterns"</span>);
      +<a class="jxr_linenumber" name="L167" href="#L167">167</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">".*/peter/.*"</span>;
      +<a class="jxr_linenumber" name="L168" href="#L168">168</a>                 filterConfig.getInitParameter(<span class="jxr_string">"excludeCorsPreflight"</span>);
      +<a class="jxr_linenumber" name="L169" href="#L169">169</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"true"</span>;
      +<a class="jxr_linenumber" name="L170" href="#L170">170</a>                 filterConfig.getInitParameter(<span class="jxr_string">"excludeBearerAuthorization"</span>);
      +<a class="jxr_linenumber" name="L171" href="#L171">171</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"true"</span>;
      +<a class="jxr_linenumber" name="L172" href="#L172">172</a>                 CorsPreFlightCheck.isPreflight(request);
      +<a class="jxr_linenumber" name="L173" href="#L173">173</a>                 <strong class="jxr_keyword">this</strong>.result = <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L174" href="#L174">174</a>                 request.getHeader(<span class="jxr_string">"Authorization"</span>);
      +<a class="jxr_linenumber" name="L175" href="#L175">175</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"Bearer aBase64hash"</span>;
      +<a class="jxr_linenumber" name="L176" href="#L176">176</a>             }
      +<a class="jxr_linenumber" name="L177" href="#L177">177</a>         };
      +<a class="jxr_linenumber" name="L178" href="#L178">178</a> 
      +<a class="jxr_linenumber" name="L179" href="#L179">179</a>         <strong class="jxr_keyword">this</strong>.negotiateSecurityFilter.init(filterConfig);
      +<a class="jxr_linenumber" name="L180" href="#L180">180</a>         <strong class="jxr_keyword">this</strong>.negotiateSecurityFilter.doFilter(request, response, chain);
      +<a class="jxr_linenumber" name="L181" href="#L181">181</a> 
      +<a class="jxr_linenumber" name="L182" href="#L182">182</a>         <strong class="jxr_keyword">new</strong> Verifications() {
      +<a class="jxr_linenumber" name="L183" href="#L183">183</a>             {
      +<a class="jxr_linenumber" name="L184" href="#L184">184</a>                 chain.doFilter(request, response);
      +<a class="jxr_linenumber" name="L185" href="#L185">185</a>                 <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L186" href="#L186">186</a>             }
      +<a class="jxr_linenumber" name="L187" href="#L187">187</a>         };
      +<a class="jxr_linenumber" name="L188" href="#L188">188</a> 
      +<a class="jxr_linenumber" name="L189" href="#L189">189</a>     }
      +<a class="jxr_linenumber" name="L190" href="#L190">190</a> 
      +<a class="jxr_linenumber" name="L191" href="#L191">191</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/servlet/WindowsPrincipalTest.html b/waffle-jna-jakarta/xref-test/waffle/servlet/WindowsPrincipalTest.html
      new file mode 100644
      index 0000000000..516c383677
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/servlet/WindowsPrincipalTest.html
      @@ -0,0 +1,98 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsPrincipalTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../testapidocs/waffle/servlet/WindowsPrincipalTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> mockit.Expectations;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> mockit.Mocked;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAccount;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsIdentity;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> * The Class WindowsPrincipalTest.</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">class</strong> <a name="WindowsPrincipalTest" href="../../waffle/servlet/WindowsPrincipalTest.html#WindowsPrincipalTest">WindowsPrincipalTest</a> {
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <em class="jxr_javadoccomment">/** The Constant TEST_FQN. */</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String TEST_FQN = <span class="jxr_string">"ACME&#92;&#92;john.smith"</span>;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <em class="jxr_javadoccomment">/** The windows identity. */</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      @Mocked
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <strong class="jxr_keyword">private</strong> IWindowsIdentity windowsIdentity;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * Test to string.</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      @Test
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">void</strong> testToString() {
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          Assertions.assertNotNull(<strong class="jxr_keyword">new</strong> Expectations() {
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>              {
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>                  WindowsPrincipalTest.<strong class="jxr_keyword">this</strong>.windowsIdentity.getFqn();
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>                  <strong class="jxr_keyword">this</strong>.result = WindowsPrincipalTest.TEST_FQN;
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>                  WindowsPrincipalTest.<strong class="jxr_keyword">this</strong>.windowsIdentity.getGroups();
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>                  <strong class="jxr_keyword">this</strong>.result = <strong class="jxr_keyword">new</strong> IWindowsAccount[0];
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>              }
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          });
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          <strong class="jxr_keyword">final</strong> WindowsPrincipal principal = <strong class="jxr_keyword">new</strong> WindowsPrincipal(<strong class="jxr_keyword">this</strong>.windowsIdentity);
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          Assertions.assertEquals(WindowsPrincipalTest.TEST_FQN, principal.getName());
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          Assertions.assertEquals(WindowsPrincipalTest.TEST_FQN, principal.toString());
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      }
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     * Test equals and hash code.</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      @Test
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      <strong class="jxr_keyword">void</strong> testEqualsAndHashCode() {
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>          Assertions.assertNotNull(<strong class="jxr_keyword">new</strong> Expectations() {
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>              {
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>                  WindowsPrincipalTest.<strong class="jxr_keyword">this</strong>.windowsIdentity.getFqn();
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>                  <strong class="jxr_keyword">this</strong>.result = WindowsPrincipalTest.TEST_FQN;
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>                  WindowsPrincipalTest.<strong class="jxr_keyword">this</strong>.windowsIdentity.getGroups();
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>                  <strong class="jxr_keyword">this</strong>.result = <strong class="jxr_keyword">new</strong> IWindowsAccount[0];
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>              }
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          });
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>          <strong class="jxr_keyword">final</strong> WindowsPrincipal principal = <strong class="jxr_keyword">new</strong> WindowsPrincipal(<strong class="jxr_keyword">this</strong>.windowsIdentity);
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          <strong class="jxr_keyword">final</strong> WindowsPrincipal principal2 = <strong class="jxr_keyword">new</strong> WindowsPrincipal(<strong class="jxr_keyword">this</strong>.windowsIdentity);
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>          Assertions.assertTrue(principal.equals(principal2) &amp;&amp; principal2.equals(principal));
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>          Assertions.assertEquals(principal.hashCode(), principal2.hashCode());
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>          Assertions.assertEquals(principal.hashCode(), WindowsPrincipalTest.TEST_FQN.hashCode());
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>      }
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/servlet/package-frame.html b/waffle-jna-jakarta/xref-test/waffle/servlet/package-frame.html
      new file mode 100644
      index 0000000000..2a83658cfa
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/servlet/package-frame.html
      @@ -0,0 +1,27 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.servlet</title>
      +        <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar"><a href="package-summary.html" target="classFrame">waffle.servlet</a></h1>
      +        <div class="indexContainer">
      +            <h2 title="Classes">Classes</h2>
      +            <ul title="Classes">
      +                <li>
      +                    <a href="CorsAwareNegotiateSecurityFilterTest.html#CorsAwareNegotiateSecurityFilterTest" target="classFrame">CorsAwareNegotiateSecurityFilterTest</a>
      +                </li>
      +                <li>
      +                    <a href="NegotiateSecurityFilterTest.html#NegotiateSecurityFilterTest" target="classFrame">NegotiateSecurityFilterTest</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsPrincipalTest.html#WindowsPrincipalTest" target="classFrame">WindowsPrincipalTest</a>
      +                </li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref-test/waffle/servlet/package-summary.html b/waffle-jna-jakarta/xref-test/waffle/servlet/package-summary.html
      new file mode 100644
      index 0000000000..954af11247
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/servlet/package-summary.html
      @@ -0,0 +1,117 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.servlet</title>
      +        <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="style" />
      +    </head>
      +
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_top">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 title="Package" class="title">Package waffle.servlet</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <ul class="blockList">
      +                <li class="blockList">
      +                    <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
      +                        <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
      +                        <thead>
      +                            <tr>
      +                                <th class="colFirst colLast" scope="col">Class</th>
      +                            </tr>
      +                        </thead>
      +                        <tbody>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="CorsAwareNegotiateSecurityFilterTest.html#CorsAwareNegotiateSecurityFilterTest" target="classFrame" title="class in waffle.servlet">CorsAwareNegotiateSecurityFilterTest</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="NegotiateSecurityFilterTest.html#NegotiateSecurityFilterTest" target="classFrame" title="class in waffle.servlet">NegotiateSecurityFilterTest</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsPrincipalTest.html#WindowsPrincipalTest" target="classFrame" title="class in waffle.servlet">WindowsPrincipalTest</a>
      +                                </td>
      +                            </tr>
      +                        </tbody>
      +                    </table>
      +                </li>
      +            </ul>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_bottom">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref-test/waffle/servlet/spi/SecurityFilterProviderCollectionTest.html b/waffle-jna-jakarta/xref-test/waffle/servlet/spi/SecurityFilterProviderCollectionTest.html
      new file mode 100644
      index 0000000000..e147b148f4
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/servlet/spi/SecurityFilterProviderCollectionTest.html
      @@ -0,0 +1,92 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>SecurityFilterProviderCollectionTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../testapidocs/waffle/servlet/spi/SecurityFilterProviderCollectionTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet.spi;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.impl.WindowsAuthProviderImpl;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment"> * The Class SecurityFilterProviderCollectionTest.</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">class</strong> <a name="SecurityFilterProviderCollectionTest" href="../../../waffle/servlet/spi/SecurityFilterProviderCollectionTest.html#SecurityFilterProviderCollectionTest">SecurityFilterProviderCollectionTest</a> {
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment">     * Test default collection.</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">     * @throws ClassNotFoundException</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     *             the class not found exception</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      @Test
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <strong class="jxr_keyword">void</strong> testDefaultCollection() <strong class="jxr_keyword">throws</strong> ClassNotFoundException {
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>          <strong class="jxr_keyword">final</strong> SecurityFilterProviderCollection coll = <strong class="jxr_keyword">new</strong> SecurityFilterProviderCollection(
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>                  <strong class="jxr_keyword">new</strong> WindowsAuthProviderImpl());
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>          Assertions.assertEquals(2, coll.size());
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>          Assertions.assertNotNull(coll.getByClassName(NegotiateSecurityFilterProvider.<strong class="jxr_keyword">class</strong>.getName()));
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>          Assertions.assertNotNull(coll.getByClassName(BasicSecurityFilterProvider.<strong class="jxr_keyword">class</strong>.getName()));
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      }
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     * Test get by class name invalid.</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     * @throws ClassNotFoundException</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     *             the class not found exception</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      @Test
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      <strong class="jxr_keyword">void</strong> testGetByClassNameInvalid() <strong class="jxr_keyword">throws</strong> ClassNotFoundException {
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          <strong class="jxr_keyword">final</strong> SecurityFilterProviderCollection coll = <strong class="jxr_keyword">new</strong> SecurityFilterProviderCollection(
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>                  <strong class="jxr_keyword">new</strong> WindowsAuthProviderImpl());
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          Assertions.assertThrows(ClassNotFoundException.<strong class="jxr_keyword">class</strong>, () -&gt; {
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>              coll.getByClassName(<span class="jxr_string">"classDoesNotExist"</span>);
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>          });
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      }
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     * Test is security package supported.</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      @Test
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      <strong class="jxr_keyword">void</strong> testIsSecurityPackageSupported() {
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          <strong class="jxr_keyword">final</strong> SecurityFilterProviderCollection coll = <strong class="jxr_keyword">new</strong> SecurityFilterProviderCollection(
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>                  <strong class="jxr_keyword">new</strong> WindowsAuthProviderImpl());
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          Assertions.assertTrue(coll.isSecurityPackageSupported(<span class="jxr_string">"NTLM"</span>));
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          Assertions.assertTrue(coll.isSecurityPackageSupported(<span class="jxr_string">"Negotiate"</span>));
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          Assertions.assertTrue(coll.isSecurityPackageSupported(<span class="jxr_string">"Basic"</span>));
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>          Assertions.assertFalse(coll.isSecurityPackageSupported(<span class="jxr_string">""</span>));
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          Assertions.assertFalse(coll.isSecurityPackageSupported(<span class="jxr_string">"Invalid"</span>));
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      }
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/servlet/spi/package-frame.html b/waffle-jna-jakarta/xref-test/waffle/servlet/spi/package-frame.html
      new file mode 100644
      index 0000000000..508522c40e
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/servlet/spi/package-frame.html
      @@ -0,0 +1,21 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.servlet.spi</title>
      +        <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar"><a href="package-summary.html" target="classFrame">waffle.servlet.spi</a></h1>
      +        <div class="indexContainer">
      +            <h2 title="Classes">Classes</h2>
      +            <ul title="Classes">
      +                <li>
      +                    <a href="SecurityFilterProviderCollectionTest.html#SecurityFilterProviderCollectionTest" target="classFrame">SecurityFilterProviderCollectionTest</a>
      +                </li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref-test/waffle/servlet/spi/package-summary.html b/waffle-jna-jakarta/xref-test/waffle/servlet/spi/package-summary.html
      new file mode 100644
      index 0000000000..e18a754630
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/servlet/spi/package-summary.html
      @@ -0,0 +1,107 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.servlet.spi</title>
      +        <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="style" />
      +    </head>
      +
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_top">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 title="Package" class="title">Package waffle.servlet.spi</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <ul class="blockList">
      +                <li class="blockList">
      +                    <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
      +                        <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
      +                        <thead>
      +                            <tr>
      +                                <th class="colFirst colLast" scope="col">Class</th>
      +                            </tr>
      +                        </thead>
      +                        <tbody>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="SecurityFilterProviderCollectionTest.html#SecurityFilterProviderCollectionTest" target="classFrame" title="class in waffle.servlet.spi">SecurityFilterProviderCollectionTest</a>
      +                                </td>
      +                            </tr>
      +                        </tbody>
      +                    </table>
      +                </li>
      +            </ul>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_bottom">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref-test/waffle/util/CorsPreFlightCheckTest.html b/waffle-jna-jakarta/xref-test/waffle/util/CorsPreFlightCheckTest.html
      new file mode 100644
      index 0000000000..33a8a7cdfc
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/util/CorsPreFlightCheckTest.html
      @@ -0,0 +1,203 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>CorsPreFlightCheckTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../testapidocs/waffle/util/CorsPreFlightCheckTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> mockit.Expectations;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> mockit.Mocked;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> mockit.Verifications;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> * The Class CorsPreflightCheckTest.</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">class</strong> <a name="CorsPreFlightCheckTest" href="../../waffle/util/CorsPreFlightCheckTest.html#CorsPreFlightCheckTest">CorsPreFlightCheckTest</a> {
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <em class="jxr_javadoccomment">/** The preflight request. */</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      @Mocked
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <strong class="jxr_keyword">private</strong> HttpServletRequest preflightRequest;
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <em class="jxr_javadoccomment">/** The no origin preflight request. */</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      @Mocked
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <strong class="jxr_keyword">private</strong> HttpServletRequest noOriginPreflightRequest;
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      <em class="jxr_javadoccomment">/** The no cors method preflight request. */</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      @Mocked
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <strong class="jxr_keyword">private</strong> HttpServletRequest noCorsMethodPreflightRequest;
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <em class="jxr_javadoccomment">/** The no cors headers preflight header request. */</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      @Mocked
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      <strong class="jxr_keyword">private</strong> HttpServletRequest noCorsHeadersPreflightHeaderRequest;
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     * Test expected cors preflight headers present.</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      @Test
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      <strong class="jxr_keyword">void</strong> testExpectedCorsPreflightHeadersPresent() {
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          <strong class="jxr_keyword">new</strong> Expectations() {
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>              {
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>                  CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.preflightRequest.getMethod();
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"OPTIONS"</span>;
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>                  CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.preflightRequest.getHeader(<span class="jxr_string">"Access-Control-Request-Method"</span>);
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"LOGIN"</span>;
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>                  CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.preflightRequest.getHeader(<span class="jxr_string">"Access-Control-Request-Headers"</span>);
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"X-Request-For"</span>;
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>                  CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.preflightRequest.getHeader(<span class="jxr_string">"Origin"</span>);
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"https://theorigin.localhost"</span>;
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>              }
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          };
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          Assertions.assertTrue(CorsPreFlightCheck.isPreflight(<strong class="jxr_keyword">this</strong>.preflightRequest));
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          <strong class="jxr_keyword">new</strong> Verifications() {
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>              {
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>                  CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.preflightRequest.getMethod();
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>                  <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>                  CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.preflightRequest.getHeader(<span class="jxr_string">"Access-Control-Request-Method"</span>);
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>                  <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>                  CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.preflightRequest.getHeader(<span class="jxr_string">"Access-Control-Request-Headers"</span>);
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>                  <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>                  CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.preflightRequest.getHeader(<span class="jxr_string">"Origin"</span>);
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>                  <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>              }
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>          };
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>      }
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     * Test no cors preflight origin present.</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>      @Test
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>      <strong class="jxr_keyword">void</strong> testNoCorsPreflightOriginPresent() {
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>          <strong class="jxr_keyword">new</strong> Expectations() {
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>              {
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>                  CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noOriginPreflightRequest.getMethod();
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>                  <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"OPTIONS"</span>;
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noOriginPreflightRequest.getHeader(<span class="jxr_string">"Access-Control-Request-Method"</span>);
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"LOGIN"</span>;
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noOriginPreflightRequest.getHeader(<span class="jxr_string">"Access-Control-Request-Headers"</span>);
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"X-Request-For"</span>;
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>                 <em class="jxr_comment">// Origin MUST be present with Method and Headers to be a valid CORS request</em>
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noOriginPreflightRequest.getHeader(<span class="jxr_string">"Origin"</span>);
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>                 <strong class="jxr_keyword">this</strong>.result = <strong class="jxr_keyword">null</strong>;
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>             }
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>         };
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a> 
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>         Assertions.assertFalse(CorsPreFlightCheck.isPreflight(<strong class="jxr_keyword">this</strong>.noOriginPreflightRequest));
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a> 
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>         <strong class="jxr_keyword">new</strong> Verifications() {
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>             {
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noOriginPreflightRequest.getMethod();
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a>                 <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noOriginPreflightRequest.getHeader(<span class="jxr_string">"Access-Control-Request-Method"</span>);
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>                 <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noOriginPreflightRequest.getHeader(<span class="jxr_string">"Access-Control-Request-Headers"</span>);
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>                 <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noOriginPreflightRequest.getHeader(<span class="jxr_string">"Origin"</span>);
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>                 <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a>             }
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>         };
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a> 
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a>     }
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a> 
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a> <em class="jxr_javadoccomment">     * Test cors method preflight headers present.</em>
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a>     @Test
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a>     <strong class="jxr_keyword">void</strong> testCorsMethodPreflightHeadersPresent() {
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a>         <strong class="jxr_keyword">new</strong> Expectations() {
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>             {
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noCorsMethodPreflightRequest.getMethod();
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"OPTIONS"</span>;
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noCorsMethodPreflightRequest.getHeader(<span class="jxr_string">"Access-Control-Request-Method"</span>);
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"LOGIN"</span>;
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>             }
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a>         };
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a> 
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a>         Assertions.assertFalse(CorsPreFlightCheck.isPreflight(<strong class="jxr_keyword">this</strong>.noCorsMethodPreflightRequest));
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a> 
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a>         <strong class="jxr_keyword">new</strong> Verifications() {
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a>             {
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noCorsMethodPreflightRequest.getMethod();
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a>                 <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noCorsMethodPreflightRequest.getHeader(<span class="jxr_string">"Access-Control-Request-Method"</span>);
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a>                 <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a>             }
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a>         };
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a> 
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a>     }
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a> 
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a> <em class="jxr_javadoccomment">     * Test no cors headers preflight header present.</em>
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>     @Test
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a>     <strong class="jxr_keyword">void</strong> testNoCorsHeadersPreflightHeaderPresent() {
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a> 
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a>         <strong class="jxr_keyword">new</strong> Expectations() {
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a>             {
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noCorsHeadersPreflightHeaderRequest.getMethod();
      +<a class="jxr_linenumber" name="L163" href="#L163">163</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"OPTIONS"</span>;
      +<a class="jxr_linenumber" name="L164" href="#L164">164</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noCorsHeadersPreflightHeaderRequest
      +<a class="jxr_linenumber" name="L165" href="#L165">165</a>                         .getHeader(<span class="jxr_string">"Access-Control-Request-Method"</span>);
      +<a class="jxr_linenumber" name="L166" href="#L166">166</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"LOGIN"</span>;
      +<a class="jxr_linenumber" name="L167" href="#L167">167</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noCorsHeadersPreflightHeaderRequest
      +<a class="jxr_linenumber" name="L168" href="#L168">168</a>                         .getHeader(<span class="jxr_string">"Access-Control-Request-Headers"</span>);
      +<a class="jxr_linenumber" name="L169" href="#L169">169</a>                 <strong class="jxr_keyword">this</strong>.result = <strong class="jxr_keyword">null</strong>;
      +<a class="jxr_linenumber" name="L170" href="#L170">170</a>                 <strong class="jxr_keyword">this</strong>.result = <span class="jxr_string">"https://theorigin.localhost"</span>;
      +<a class="jxr_linenumber" name="L171" href="#L171">171</a>             }
      +<a class="jxr_linenumber" name="L172" href="#L172">172</a>         };
      +<a class="jxr_linenumber" name="L173" href="#L173">173</a> 
      +<a class="jxr_linenumber" name="L174" href="#L174">174</a>         Assertions.assertFalse(CorsPreFlightCheck.isPreflight(<strong class="jxr_keyword">this</strong>.noCorsHeadersPreflightHeaderRequest));
      +<a class="jxr_linenumber" name="L175" href="#L175">175</a> 
      +<a class="jxr_linenumber" name="L176" href="#L176">176</a>         <strong class="jxr_keyword">new</strong> Verifications() {
      +<a class="jxr_linenumber" name="L177" href="#L177">177</a>             {
      +<a class="jxr_linenumber" name="L178" href="#L178">178</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noCorsHeadersPreflightHeaderRequest.getMethod();
      +<a class="jxr_linenumber" name="L179" href="#L179">179</a>                 <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L180" href="#L180">180</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noCorsHeadersPreflightHeaderRequest
      +<a class="jxr_linenumber" name="L181" href="#L181">181</a>                         .getHeader(<span class="jxr_string">"Access-Control-Request-Method"</span>);
      +<a class="jxr_linenumber" name="L182" href="#L182">182</a>                 <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L183" href="#L183">183</a>                 CorsPreFlightCheckTest.<strong class="jxr_keyword">this</strong>.noCorsHeadersPreflightHeaderRequest
      +<a class="jxr_linenumber" name="L184" href="#L184">184</a>                         .getHeader(<span class="jxr_string">"Access-Control-Request-Headers"</span>);
      +<a class="jxr_linenumber" name="L185" href="#L185">185</a>                 <strong class="jxr_keyword">this</strong>.times = 1;
      +<a class="jxr_linenumber" name="L186" href="#L186">186</a>             }
      +<a class="jxr_linenumber" name="L187" href="#L187">187</a>         };
      +<a class="jxr_linenumber" name="L188" href="#L188">188</a>     }
      +<a class="jxr_linenumber" name="L189" href="#L189">189</a> 
      +<a class="jxr_linenumber" name="L190" href="#L190">190</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/util/NtlmMessageTest.html b/waffle-jna-jakarta/xref-test/waffle/util/NtlmMessageTest.html
      new file mode 100644
      index 0000000000..f6a25e29df
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/util/NtlmMessageTest.html
      @@ -0,0 +1,78 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>NtlmMessageTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../testapidocs/waffle/util/NtlmMessageTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment"> * The Class NtlmMessageTest.</em>
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">class</strong> <a name="NtlmMessageTest" href="../../waffle/util/NtlmMessageTest.html#NtlmMessageTest">NtlmMessageTest</a> {
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">     * Test is ntlm message.</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      @Test
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <strong class="jxr_keyword">void</strong> testIsNtlmMessage() {
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>          Assertions.assertFalse(NtlmMessage.isNtlmMessage(<strong class="jxr_keyword">null</strong>));
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>          <strong class="jxr_keyword">final</strong> byte[] ntlmSignature = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00 };
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>          Assertions.assertTrue(NtlmMessage.isNtlmMessage(ntlmSignature));
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>          <strong class="jxr_keyword">final</strong> byte[] shortMessage = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50 };
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>          Assertions.assertFalse(NtlmMessage.isNtlmMessage(shortMessage));
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>          <strong class="jxr_keyword">final</strong> byte[] longMessage = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x00 };
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>          Assertions.assertTrue(NtlmMessage.isNtlmMessage(longMessage));
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>          <strong class="jxr_keyword">final</strong> byte[] badMessage = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>          Assertions.assertFalse(NtlmMessage.isNtlmMessage(badMessage));
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      }
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     * Test get ntlm message type.</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      @Test
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      <strong class="jxr_keyword">void</strong> testGetNtlmMessageType() {
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>          <strong class="jxr_keyword">final</strong> byte[] ntlmMessageType1 = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>                  0x02, 0x00, 0x00 };
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>          Assertions.assertEquals(1, NtlmMessage.getMessageType(ntlmMessageType1));
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          <strong class="jxr_keyword">final</strong> byte[] ntlmMessageType2 = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>                  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x23, 0x45, 0x67 };
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          Assertions.assertEquals(2, NtlmMessage.getMessageType(ntlmMessageType2));
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          <strong class="jxr_keyword">final</strong> byte[] ntlmMessageType3 = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00,
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>                  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x23, 0x45, 0x67 };
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>          Assertions.assertEquals(3, NtlmMessage.getMessageType(ntlmMessageType3));
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      }
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/util/SPNegoMessageTest.html b/waffle-jna-jakarta/xref-test/waffle/util/SPNegoMessageTest.html
      new file mode 100644
      index 0000000000..8446ee4b5b
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/util/SPNegoMessageTest.html
      @@ -0,0 +1,87 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>SPNegoMessageTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../testapidocs/waffle/util/SPNegoMessageTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment"> * The Class SPNegoMessageTest.</em>
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">class</strong> <a name="SPNegoMessageTest" href="../../waffle/util/SPNegoMessageTest.html#SPNegoMessageTest">SPNegoMessageTest</a> {
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      <em class="jxr_comment">// Different SPNEGO messages. For details and specification,</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>      <em class="jxr_comment">// see https://msdn.microsoft.com/en-us/library/ms995330.aspx</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      <em class="jxr_javadoccomment">/** The Constant NEG_TOKEN_INIT_OK. */</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> byte[] NEG_TOKEN_INIT_OK = { 0x60, 0x76, 0x06, 0x06, 0x2B, 0x06, 0x01, 0x05, 0x05, 0x02 };
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <em class="jxr_javadoccomment">/** The Constant NEG_TOKEN_INIT_TOO_SHORT. */</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> byte[] NEG_TOKEN_INIT_TOO_SHORT = { 0x60, 0x76, 0x06, 0x06, 0x2B, 0x06, 0x01, 0x05, 0x05 };
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <em class="jxr_javadoccomment">/** The Constant NEG_TOKEN_ARG_OK. */</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> byte[] NEG_TOKEN_ARG_OK = { (byte) 0xA1, 0x33, 0x30, 0x31, 0x0, 0x03, 0x0A, 0x01, 0x01, 0x0,
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>              0x2A, 0x04, 0x28, 0x4E, 0x54, 0x4C, 0x4D, 0x53, 0x53, 0x50, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0, 0x0, 0x08,
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>              0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>              0x01, 0x0, 0x1D, 0x00, 0x00, 0x00, 0x0F };
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <em class="jxr_javadoccomment">/** The Constant NEG_TOKEN_ARG_TOO_SHORT. */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> byte[] NEG_TOKEN_ARG_TOO_SHORT = { (byte) 0xA1, 0x33, 0x30, 0x31, 0x0, 0x03 };
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <em class="jxr_javadoccomment">/** The Constant BAD_MESSAGE. */</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> byte[] BAD_MESSAGE = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     * Test is neg token init.</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      @Test
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">void</strong> testIsNegTokenInit() {
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          Assertions.assertTrue(SPNegoMessage.isNegTokenInit(SPNegoMessageTest.NEG_TOKEN_INIT_OK));
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          Assertions.assertFalse(SPNegoMessage.isNegTokenInit(SPNegoMessageTest.NEG_TOKEN_INIT_TOO_SHORT));
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          Assertions.assertFalse(SPNegoMessage.isNegTokenInit(SPNegoMessageTest.BAD_MESSAGE));
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      }
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     * Test is neg token arg.</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      @Test
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      <strong class="jxr_keyword">void</strong> testIsNegTokenArg() {
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>          Assertions.assertTrue(SPNegoMessage.isNegTokenArg(SPNegoMessageTest.NEG_TOKEN_ARG_OK));
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          Assertions.assertFalse(SPNegoMessage.isNegTokenArg(SPNegoMessageTest.NEG_TOKEN_ARG_TOO_SHORT));
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          Assertions.assertFalse(SPNegoMessage.isNegTokenArg(SPNegoMessageTest.BAD_MESSAGE));
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>      }
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/util/WaffleInfoTest.html b/waffle-jna-jakarta/xref-test/waffle/util/WaffleInfoTest.html
      new file mode 100644
      index 0000000000..0ebff11107
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/util/WaffleInfoTest.html
      @@ -0,0 +1,102 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WaffleInfoTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../testapidocs/waffle/util/WaffleInfoTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2020 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.Platform;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> javax.xml.parsers.ParserConfigurationException;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> org.w3c.dom.Document;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> org.w3c.dom.Element;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">import</strong> org.w3c.dom.Node;
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> org.w3c.dom.NodeList;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAccount;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAuthProvider;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsComputer;
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.impl.WindowsAccountImpl;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.impl.WindowsAuthProviderImpl;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment"> * Build an info document and check that it has the right values.</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <strong class="jxr_keyword">class</strong> <a name="WaffleInfoTest" href="../../waffle/util/WaffleInfoTest.html#WaffleInfoTest">WaffleInfoTest</a> {
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     * Test waffle info.</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     * @throws ParserConfigurationException</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     *             the parser configuration exception</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      @Test
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <strong class="jxr_keyword">void</strong> testWaffleInfo() <strong class="jxr_keyword">throws</strong> ParserConfigurationException {
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>          <strong class="jxr_keyword">final</strong> WaffleInfo helper = <strong class="jxr_keyword">new</strong> WaffleInfo();
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>          <strong class="jxr_keyword">final</strong> Document info = helper.getWaffleInfo();
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          <em class="jxr_comment">// Make sure JNA Version is properly noted</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          Assertions.assertEquals(Platform.<strong class="jxr_keyword">class</strong>.getPackage().getImplementationVersion(),
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>                  info.getDocumentElement().getAttribute(<span class="jxr_string">"jna"</span>));
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>          <em class="jxr_comment">// waffle auth currentUser computer</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>          <strong class="jxr_keyword">final</strong> Node node = info.getDocumentElement().getFirstChild().getFirstChild().getNextSibling();
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          Assertions.assertEquals(<span class="jxr_string">"computer"</span>, node.getNodeName());
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          <strong class="jxr_keyword">final</strong> IWindowsAuthProvider auth = <strong class="jxr_keyword">new</strong> WindowsAuthProviderImpl();
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          <strong class="jxr_keyword">final</strong> IWindowsComputer computer = auth.getCurrentComputer();
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          <strong class="jxr_keyword">final</strong> NodeList nodes = node.getChildNodes();
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          Assertions.assertEquals(computer.getComputerName(), nodes.item(0).getTextContent());
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          Assertions.assertEquals(computer.getMemberOf(), nodes.item(1).getTextContent());
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          Assertions.assertEquals(computer.getJoinStatus(), nodes.item(2).getTextContent());
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>          <em class="jxr_comment">// Add Lookup Info for Various accounts</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          String lookup = WindowsAccountImpl.getCurrentUsername();
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>          <strong class="jxr_keyword">final</strong> IWindowsAccount account = <strong class="jxr_keyword">new</strong> WindowsAccountImpl(lookup);
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          Element elem = helper.getLookupInfo(info, lookup);
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>          Assertions.assertEquals(lookup, elem.getAttribute(<span class="jxr_string">"name"</span>));
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>          Assertions.assertEquals(account.getName(), elem.getFirstChild().getTextContent());
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>          <em class="jxr_comment">// Report an error when unknown name</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>          lookup = <span class="jxr_string">"__UNKNOWN_ACCOUNT_NAME___"</span>;
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>          elem = helper.getLookupInfo(info, lookup);
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>          Assertions.assertEquals(lookup, elem.getAttribute(<span class="jxr_string">"name"</span>));
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>          Assertions.assertEquals(<span class="jxr_string">"exception"</span>, elem.getFirstChild().getNodeName());
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      }
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/util/package-frame.html b/waffle-jna-jakarta/xref-test/waffle/util/package-frame.html
      new file mode 100644
      index 0000000000..772599a4f8
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/util/package-frame.html
      @@ -0,0 +1,30 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.util</title>
      +        <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar"><a href="package-summary.html" target="classFrame">waffle.util</a></h1>
      +        <div class="indexContainer">
      +            <h2 title="Classes">Classes</h2>
      +            <ul title="Classes">
      +                <li>
      +                    <a href="CorsPreFlightCheckTest.html#CorsPreFlightCheckTest" target="classFrame">CorsPreFlightCheckTest</a>
      +                </li>
      +                <li>
      +                    <a href="NtlmMessageTest.html#NtlmMessageTest" target="classFrame">NtlmMessageTest</a>
      +                </li>
      +                <li>
      +                    <a href="SPNegoMessageTest.html#SPNegoMessageTest" target="classFrame">SPNegoMessageTest</a>
      +                </li>
      +                <li>
      +                    <a href="WaffleInfoTest.html#WaffleInfoTest" target="classFrame">WaffleInfoTest</a>
      +                </li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref-test/waffle/util/package-summary.html b/waffle-jna-jakarta/xref-test/waffle/util/package-summary.html
      new file mode 100644
      index 0000000000..42c6a9867b
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/util/package-summary.html
      @@ -0,0 +1,122 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.util</title>
      +        <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="style" />
      +    </head>
      +
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_top">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 title="Package" class="title">Package waffle.util</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <ul class="blockList">
      +                <li class="blockList">
      +                    <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
      +                        <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
      +                        <thead>
      +                            <tr>
      +                                <th class="colFirst colLast" scope="col">Class</th>
      +                            </tr>
      +                        </thead>
      +                        <tbody>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="CorsPreFlightCheckTest.html#CorsPreFlightCheckTest" target="classFrame" title="class in waffle.util">CorsPreFlightCheckTest</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="NtlmMessageTest.html#NtlmMessageTest" target="classFrame" title="class in waffle.util">NtlmMessageTest</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="SPNegoMessageTest.html#SPNegoMessageTest" target="classFrame" title="class in waffle.util">SPNegoMessageTest</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WaffleInfoTest.html#WaffleInfoTest" target="classFrame" title="class in waffle.util">WaffleInfoTest</a>
      +                                </td>
      +                            </tr>
      +                        </tbody>
      +                    </table>
      +                </li>
      +            </ul>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_bottom">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref-test/waffle/windows/auth/PrincipalFormatTest.html b/waffle-jna-jakarta/xref-test/waffle/windows/auth/PrincipalFormatTest.html
      new file mode 100644
      index 0000000000..c243026772
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/windows/auth/PrincipalFormatTest.html
      @@ -0,0 +1,69 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>PrincipalFormatTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../testapidocs/waffle/windows/auth/PrincipalFormatTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment"> * The Class PrincipalFormatTest.</em>
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">class</strong> <a name="PrincipalFormatTest" href="../../../waffle/windows/auth/PrincipalFormatTest.html#PrincipalFormatTest">PrincipalFormatTest</a> {
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">     * Test known.</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      @Test
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <strong class="jxr_keyword">void</strong> testKnown() {
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>          Assertions.assertEquals(PrincipalFormat.FQN, PrincipalFormat.valueOf(<span class="jxr_string">"FQN"</span>));
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>          Assertions.assertEquals(PrincipalFormat.SID, PrincipalFormat.valueOf(<span class="jxr_string">"SID"</span>));
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>          Assertions.assertEquals(PrincipalFormat.BOTH, PrincipalFormat.valueOf(<span class="jxr_string">"BOTH"</span>));
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>          Assertions.assertEquals(PrincipalFormat.NONE, PrincipalFormat.valueOf(<span class="jxr_string">"NONE"</span>));
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>          Assertions.assertEquals(4, PrincipalFormat.values().length);
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      }
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     * Test unknown.</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      @Test
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <strong class="jxr_keyword">void</strong> testUnknown() {
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>          Assertions.assertThrows(RuntimeException.<strong class="jxr_keyword">class</strong>, () -&gt; {
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>              PrincipalFormat.valueOf(<span class="jxr_string">"garbage"</span>);
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>          });
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      }
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/windows/auth/WindowsAccountTest.html b/waffle-jna-jakarta/xref-test/waffle/windows/auth/WindowsAccountTest.html
      new file mode 100644
      index 0000000000..a3cc74d0b0
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/windows/auth/WindowsAccountTest.html
      @@ -0,0 +1,90 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsAccountTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../testapidocs/waffle/windows/auth/WindowsAccountTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.assertj.core.api.Assertions.assertThat;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.util.Locale;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.impl.WindowsAccountImpl;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment"> * The Class WindowsAccountTest.</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">class</strong> <a name="WindowsAccountTest" href="../../../waffle/windows/auth/WindowsAccountTest.html#WindowsAccountTest">WindowsAccountTest</a> {
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <em class="jxr_javadoccomment">/** The Constant LOGGER. */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Logger LOGGER = LoggerFactory.getLogger(WindowsAccountTest.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * Test get current username.</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      @Test
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <strong class="jxr_keyword">void</strong> testGetCurrentUsername() {
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>          <strong class="jxr_keyword">final</strong> String currentUsername = WindowsAccountImpl.getCurrentUsername();
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>          WindowsAccountTest.LOGGER.info(<span class="jxr_string">"Current username: {}"</span>, currentUsername);
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          assertThat(currentUsername).isNotEmpty();
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      }
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     * Test get current account.</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      @Test
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">void</strong> testGetCurrentAccount() {
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          <strong class="jxr_keyword">final</strong> String currentUsername = WindowsAccountImpl.getCurrentUsername();
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          <strong class="jxr_keyword">final</strong> IWindowsAccount account = <strong class="jxr_keyword">new</strong> WindowsAccountImpl(currentUsername);
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          assertThat(account.getName()).isNotEmpty();
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>          WindowsAccountTest.LOGGER.info(<span class="jxr_string">"Name: {}"</span>, account.getName());
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>          assertThat(account.getDomain()).isNotEmpty();
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>          WindowsAccountTest.LOGGER.info(<span class="jxr_string">"Domain: {}"</span>, account.getDomain());
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          assertThat(account.getFqn()).isNotEmpty();
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          WindowsAccountTest.LOGGER.info(<span class="jxr_string">"Fqn: {}"</span>, account.getFqn());
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          assertThat(account.getSidString()).isNotEmpty();
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          WindowsAccountTest.LOGGER.info(<span class="jxr_string">"Sid: {}"</span>, account.getSidString());
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>          <em class="jxr_comment">// To avoid errors with machine naming being all upper-case, use test in this manner</em>
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          Assertions.assertTrue(currentUsername.equalsIgnoreCase(account.getFqn()));
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          Assertions.assertTrue(currentUsername.endsWith(<span class="jxr_string">"&#92;&#92;"</span> + account.getName()));
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          <em class="jxr_comment">// To avoid errors with machine naming being all upper-case, use test in this manner</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          Assertions.assertTrue(currentUsername.toLowerCase(Locale.ENGLISH)
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>                  .startsWith(account.getDomain().toLowerCase(Locale.ENGLISH) + <span class="jxr_string">"&#92;&#92;"</span>));
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>      }
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/windows/auth/WindowsCredentialsHandleTest.html b/waffle-jna-jakarta/xref-test/waffle/windows/auth/WindowsCredentialsHandleTest.html
      new file mode 100644
      index 0000000000..446ed8c359
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/windows/auth/WindowsCredentialsHandleTest.html
      @@ -0,0 +1,59 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsCredentialsHandleTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../testapidocs/waffle/windows/auth/WindowsCredentialsHandleTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.impl.WindowsCredentialsHandleImpl;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment"> * The Class WindowsCredentialsHandleTest.</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">class</strong> <a name="WindowsCredentialsHandleTest" href="../../../waffle/windows/auth/WindowsCredentialsHandleTest.html#WindowsCredentialsHandleTest">WindowsCredentialsHandleTest</a> {
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment">     * Test get current.</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      @Test
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <strong class="jxr_keyword">void</strong> testGetCurrent() {
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>          <strong class="jxr_keyword">final</strong> IWindowsCredentialsHandle handle = WindowsCredentialsHandleImpl.getCurrent(<span class="jxr_string">"Negotiate"</span>);
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>          Assertions.assertNotNull(handle);
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>          handle.initialize();
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>          handle.dispose();
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      }
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/windows/auth/WindowsSecurityContextTest.html b/waffle-jna-jakarta/xref-test/waffle/windows/auth/WindowsSecurityContextTest.html
      new file mode 100644
      index 0000000000..08139a77e3
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/windows/auth/WindowsSecurityContextTest.html
      @@ -0,0 +1,66 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsSecurityContextTest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../testapidocs/waffle/windows/auth/WindowsSecurityContextTest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> <strong class="jxr_keyword">static</strong> org.assertj.core.api.Assertions.assertThat;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Assertions;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> org.junit.jupiter.api.Test;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.impl.WindowsAccountImpl;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.impl.WindowsSecurityContextImpl;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> * The Class WindowsSecurityContextTest.</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">class</strong> <a name="WindowsSecurityContextTest" href="../../../waffle/windows/auth/WindowsSecurityContextTest.html#WindowsSecurityContextTest">WindowsSecurityContextTest</a> {
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     * Test negotiate.</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      @Test
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <strong class="jxr_keyword">void</strong> testNegotiate() {
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>          <strong class="jxr_keyword">final</strong> String securityPackage = <span class="jxr_string">"Negotiate"</span>;
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>          <em class="jxr_comment">// security context</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>          <strong class="jxr_keyword">final</strong> IWindowsSecurityContext ctx = WindowsSecurityContextImpl.getCurrent(securityPackage,
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>                  WindowsAccountImpl.getCurrentUsername());
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>          Assertions.assertTrue(ctx.isContinue());
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>          Assertions.assertEquals(securityPackage, ctx.getSecurityPackage());
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>          assertThat(ctx.getToken()).isNotEmpty();
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>          ctx.dispose();
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      }
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref-test/waffle/windows/auth/package-frame.html b/waffle-jna-jakarta/xref-test/waffle/windows/auth/package-frame.html
      new file mode 100644
      index 0000000000..646cc1705c
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/windows/auth/package-frame.html
      @@ -0,0 +1,30 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.windows.auth</title>
      +        <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar"><a href="package-summary.html" target="classFrame">waffle.windows.auth</a></h1>
      +        <div class="indexContainer">
      +            <h2 title="Classes">Classes</h2>
      +            <ul title="Classes">
      +                <li>
      +                    <a href="PrincipalFormatTest.html#PrincipalFormatTest" target="classFrame">PrincipalFormatTest</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsAccountTest.html#WindowsAccountTest" target="classFrame">WindowsAccountTest</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsCredentialsHandleTest.html#WindowsCredentialsHandleTest" target="classFrame">WindowsCredentialsHandleTest</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsSecurityContextTest.html#WindowsSecurityContextTest" target="classFrame">WindowsSecurityContextTest</a>
      +                </li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref-test/waffle/windows/auth/package-summary.html b/waffle-jna-jakarta/xref-test/waffle/windows/auth/package-summary.html
      new file mode 100644
      index 0000000000..f91eab7fef
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref-test/waffle/windows/auth/package-summary.html
      @@ -0,0 +1,122 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.windows.auth</title>
      +        <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="style" />
      +    </head>
      +
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_top">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 title="Package" class="title">Package waffle.windows.auth</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <ul class="blockList">
      +                <li class="blockList">
      +                    <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
      +                        <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
      +                        <thead>
      +                            <tr>
      +                                <th class="colFirst colLast" scope="col">Class</th>
      +                            </tr>
      +                        </thead>
      +                        <tbody>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="PrincipalFormatTest.html#PrincipalFormatTest" target="classFrame" title="class in waffle.windows.auth">PrincipalFormatTest</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsAccountTest.html#WindowsAccountTest" target="classFrame" title="class in waffle.windows.auth">WindowsAccountTest</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsCredentialsHandleTest.html#WindowsCredentialsHandleTest" target="classFrame" title="class in waffle.windows.auth">WindowsCredentialsHandleTest</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsSecurityContextTest.html#WindowsSecurityContextTest" target="classFrame" title="class in waffle.windows.auth">WindowsSecurityContextTest</a>
      +                                </td>
      +                            </tr>
      +                        </tbody>
      +                    </table>
      +                </li>
      +            </ul>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_bottom">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/allclasses-frame.html b/waffle-jna-jakarta/xref/allclasses-frame.html
      new file mode 100644
      index 0000000000..21a8e95a8d
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/allclasses-frame.html
      @@ -0,0 +1,63 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>All Classes</title>
      +        <link rel="stylesheet" type="text/css" href="stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar">All Classes</h1>
      +        <div class="indexContainer">
      +            <ul>
      +                <li><a href="waffle/util/AuthorizationHeader.html#AuthorizationHeader" target="classFrame">AuthorizationHeader</a></li>
      +                <li><a href="waffle/servlet/AutoDisposableWindowsPrincipal.html#AutoDisposableWindowsPrincipal" target="classFrame">AutoDisposableWindowsPrincipal</a></li>
      +                <li><a href="waffle/servlet/spi/BasicSecurityFilterProvider.html#BasicSecurityFilterProvider" target="classFrame">BasicSecurityFilterProvider</a></li>
      +                <li><a href="waffle/util/cache/Cache.html#Cache" target="classFrame">Cache</a></li>
      +                <li><a href="waffle/util/cache/CacheSupplier.html#CacheSupplier" target="classFrame">CacheSupplier</a></li>
      +                <li><a href="waffle/util/cache/CaffeineCache.html#CaffeineCache" target="classFrame">CaffeineCache</a></li>
      +                <li><a href="waffle/util/cache/CaffeineCacheSupplier.html#CaffeineCacheSupplier" target="classFrame">CaffeineCacheSupplier</a></li>
      +                <li><a href="waffle/servlet/CorsAwareNegotiateSecurityFilter.html#CorsAwareNegotiateSecurityFilter" target="classFrame">CorsAwareNegotiateSecurityFilter</a></li>
      +                <li><a href="waffle/util/CorsPreFlightCheck.html#CorsPreFlightCheck" target="classFrame">CorsPreFlightCheck</a></li>
      +                <li><a href="waffle/jaas/GroupPrincipal.html#GroupPrincipal" target="classFrame">GroupPrincipal</a></li>
      +                <li><a href="waffle/windows/auth/IWindowsAccount.html#IWindowsAccount" target="classFrame">IWindowsAccount</a></li>
      +                <li><a href="waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider" target="classFrame">IWindowsAuthProvider</a></li>
      +                <li><a href="waffle/windows/auth/IWindowsComputer.html#IWindowsComputer" target="classFrame">IWindowsComputer</a></li>
      +                <li><a href="waffle/windows/auth/IWindowsCredentialsHandle.html#IWindowsCredentialsHandle" target="classFrame">IWindowsCredentialsHandle</a></li>
      +                <li><a href="waffle/windows/auth/IWindowsDomain.html#IWindowsDomain" target="classFrame">IWindowsDomain</a></li>
      +                <li><a href="waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity" target="classFrame">IWindowsIdentity</a></li>
      +                <li><a href="waffle/windows/auth/IWindowsImpersonationContext.html#IWindowsImpersonationContext" target="classFrame">IWindowsImpersonationContext</a></li>
      +                <li><a href="waffle/windows/auth/IWindowsSecurityContext.html#IWindowsSecurityContext" target="classFrame">IWindowsSecurityContext</a></li>
      +                <li><a href="waffle/servlet/NegotiateRequestWrapper.html#NegotiateRequestWrapper" target="classFrame">NegotiateRequestWrapper</a></li>
      +                <li><a href="waffle/servlet/NegotiateSecurityFilter.html#NegotiateSecurityFilter" target="classFrame">NegotiateSecurityFilter</a></li>
      +                <li><a href="waffle/servlet/spi/NegotiateSecurityFilterProvider.html#NegotiateSecurityFilterProvider" target="classFrame">NegotiateSecurityFilterProvider</a></li>
      +                <li><a href="waffle/util/NtlmMessage.html#NtlmMessage" target="classFrame">NtlmMessage</a></li>
      +                <li><a href="waffle/util/NtlmServletRequest.html#NtlmServletRequest" target="classFrame">NtlmServletRequest</a></li>
      +                <li><a href="waffle/windows/auth/PrincipalFormat.html#PrincipalFormat" target="classFrame">PrincipalFormat</a></li>
      +                <li><a href="waffle/jaas/RolePrincipal.html#RolePrincipal" target="classFrame">RolePrincipal</a></li>
      +                <li><a href="waffle/util/SPNegoMessage.html#SPNegoMessage" target="classFrame">SPNegoMessage</a></li>
      +                <li><a href="waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider" target="classFrame">SecurityFilterProvider</a></li>
      +                <li><a href="waffle/servlet/spi/SecurityFilterProviderCollection.html#SecurityFilterProviderCollection" target="classFrame">SecurityFilterProviderCollection</a></li>
      +                <li><a href="waffle/jaas/UserPrincipal.html#UserPrincipal" target="classFrame">UserPrincipal</a></li>
      +                <li><a href="waffle/util/WaffleInfo.html#WaffleInfo" target="classFrame">WaffleInfo</a></li>
      +                <li><a href="waffle/servlet/WaffleInfoServlet.html#WaffleInfoServlet" target="classFrame">WaffleInfoServlet</a></li>
      +                <li><a href="waffle/windows/auth/WindowsAccount.html#WindowsAccount" target="classFrame">WindowsAccount</a></li>
      +                <li><a href="waffle/windows/auth/impl/WindowsAccountImpl.html#WindowsAccountImpl" target="classFrame">WindowsAccountImpl</a></li>
      +                <li><a href="waffle/windows/auth/impl/WindowsAuthProviderImpl.html#WindowsAuthProviderImpl" target="classFrame">WindowsAuthProviderImpl</a></li>
      +                <li><a href="waffle/windows/auth/impl/WindowsAuthProviderImpl.html#WindowsAuthProviderImpl.ContinueContext" target="classFrame">WindowsAuthProviderImpl.ContinueContext</a></li>
      +                <li><a href="waffle/windows/auth/impl/WindowsComputerImpl.html#WindowsComputerImpl" target="classFrame">WindowsComputerImpl</a></li>
      +                <li><a href="waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html#WindowsCredentialsHandleImpl" target="classFrame">WindowsCredentialsHandleImpl</a></li>
      +                <li><a href="waffle/windows/auth/impl/WindowsDomainImpl.html#WindowsDomainImpl" target="classFrame">WindowsDomainImpl</a></li>
      +                <li><a href="waffle/windows/auth/impl/WindowsDomainImpl.html#WindowsDomainImpl.TrustDirection" target="classFrame">WindowsDomainImpl.TrustDirection</a></li>
      +                <li><a href="waffle/windows/auth/impl/WindowsDomainImpl.html#WindowsDomainImpl.TrustType" target="classFrame">WindowsDomainImpl.TrustType</a></li>
      +                <li><a href="waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.html#WindowsIdentityImpersonationContextImpl" target="classFrame">WindowsIdentityImpersonationContextImpl</a></li>
      +                <li><a href="waffle/windows/auth/impl/WindowsIdentityImpl.html#WindowsIdentityImpl" target="classFrame">WindowsIdentityImpl</a></li>
      +                <li><a href="waffle/jaas/WindowsLoginModule.html#WindowsLoginModule" target="classFrame">WindowsLoginModule</a></li>
      +                <li><a href="waffle/servlet/WindowsPrincipal.html#WindowsPrincipal" target="classFrame">WindowsPrincipal</a></li>
      +                <li><a href="waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html#WindowsSecurityContextImpersonationContextImpl" target="classFrame">WindowsSecurityContextImpersonationContextImpl</a></li>
      +                <li><a href="waffle/windows/auth/impl/WindowsSecurityContextImpl.html#WindowsSecurityContextImpl" target="classFrame">WindowsSecurityContextImpl</a></li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/index.html b/waffle-jna-jakarta/xref/index.html
      new file mode 100644
      index 0000000000..e98dedd347
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/index.html
      @@ -0,0 +1,75 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- this is a JXR report set (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference</title>
      +        <script type="text/javascript">
      +            tmpTargetPage = "" + window.location.search;
      +            if (tmpTargetPage != "" && tmpTargetPage != "undefined")
      +                tmpTargetPage = tmpTargetPage.substring(1);
      +            if (tmpTargetPage.indexOf(":") != -1 || (tmpTargetPage != "" && !validURL(tmpTargetPage)))
      +                tmpTargetPage = "undefined";
      +            targetPage = tmpTargetPage;
      +            function validURL(url) {
      +                try {
      +                    url = decodeURIComponent(url);
      +                }
      +                catch (error) {
      +                    return false;
      +                }
      +                var pos = url.indexOf(".html");
      +                if (pos == -1 || pos != url.length - 5)
      +                    return false;
      +                var allowNumber = false;
      +                var allowSep = false;
      +                var seenDot = false;
      +                for (var i = 0; i < url.length - 5; i++) {
      +                    var ch = url.charAt(i);
      +                    if ('a' <= ch && ch <= 'z' ||
      +                            'A' <= ch && ch <= 'Z' ||
      +                            ch == '$' ||
      +                            ch == '_' ||
      +                            ch.charCodeAt(0) > 127) {
      +                        allowNumber = true;
      +                        allowSep = true;
      +                    } else if ('0' <= ch && ch <= '9'
      +                            || ch == '-') {
      +                        if (!allowNumber)
      +                            return false;
      +                    } else if (ch == '/' || ch == '.') {
      +                        if (!allowSep)
      +                            return false;
      +                        allowNumber = false;
      +                        allowSep = false;
      +                        if (ch == '.')
      +                            seenDot = true;
      +                        if (ch == '/' && seenDot)
      +                            return false;
      +                    } else {
      +                        return false;
      +                    }
      +                }
      +                return true;
      +            }
      +            function loadFrames() {
      +                if (targetPage != "" && targetPage != "undefined")
      +                    top.classFrame.location = top.targetPage;
      +            }
      +        </script>
      +    </head>
      +    <frameset cols="20%,80%" title="Documentation frame" onload="top.loadFrames()">
      +        <frameset rows="30%,70%" title="Left frames" onload="top.loadFrames()">
      +            <frame src="overview-frame.html" name="packageListFrame" title="All Packages"/>
      +            <frame src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)"/>
      +        </frameset>
      +        <frame src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes"/>
      +        <noframes>
      +            <h1>Frame Alert</h1>
      +            <p>
      +                You don't have frames. Go <a href="overview-summary.html">here</a>
      +            </p>
      +        </noframes>
      +    </frameset>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/overview-frame.html b/waffle-jna-jakarta/xref/overview-frame.html
      new file mode 100644
      index 0000000000..ecaad75870
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/overview-frame.html
      @@ -0,0 +1,42 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference</title>
      +        <link rel="stylesheet" type="text/css" href="stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 title="waffle-jna-jakarta 3.5.1 Reference" class="bar"><strong>waffle-jna-jakarta 3.5.1 Reference</strong></h1>
      +        <div class="indexHeader"><span><a href="allclasses-frame.html" target="packageFrame">All&nbsp;Classes</a></span></div>
      +        <div class="indexContainer">
      +            <h2 title="Packages">Packages</h2>
      +            <ul title="Packages">
      +                <li>
      +                    <a href="waffle/jaas/package-frame.html" target="packageFrame">waffle.jaas</a>
      +                </li>
      +                <li>
      +                    <a href="waffle/servlet/package-frame.html" target="packageFrame">waffle.servlet</a>
      +                </li>
      +                <li>
      +                    <a href="waffle/servlet/spi/package-frame.html" target="packageFrame">waffle.servlet.spi</a>
      +                </li>
      +                <li>
      +                    <a href="waffle/util/package-frame.html" target="packageFrame">waffle.util</a>
      +                </li>
      +                <li>
      +                    <a href="waffle/util/cache/package-frame.html" target="packageFrame">waffle.util.cache</a>
      +                </li>
      +                <li>
      +                    <a href="waffle/windows/auth/package-frame.html" target="packageFrame">waffle.windows.auth</a>
      +                </li>
      +                <li>
      +                    <a href="waffle/windows/auth/impl/package-frame.html" target="packageFrame">waffle.windows.auth.impl</a>
      +                </li>
      +            </ul>
      +        </div>
      +        <p>&nbsp;</p>
      +    </body>
      +</html>
      +
      diff --git a/waffle-jna-jakarta/xref/overview-summary.html b/waffle-jna-jakarta/xref/overview-summary.html
      new file mode 100644
      index 0000000000..1e550fac3d
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/overview-summary.html
      @@ -0,0 +1,122 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk7) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference</title>
      +        <link rel="stylesheet" type="text/css" href="stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li class="navBarCell1Rev">Overview</li>
      +                <li>Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="overview-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 class="title">waffle-jna-jakarta 3.5.1 Reference</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Packages table, listing packages">
      +                <caption><span>Packages</span><span class="tabEnd">&nbsp;</span></caption>
      +                <thead>
      +                    <tr>
      +                        <th class="colFirst colLast" scope="col">Package</th>
      +                    </tr>
      +                </thead>
      +                <tbody>
      +                    <tr class="altColor">
      +                        <td class="colFirst colLast">
      +                            <a href="waffle/jaas/package-summary.html">waffle.jaas</a>
      +                        </td>
      +                    </tr>
      +                    <tr class="rowColor">
      +                        <td class="colFirst colLast">
      +                            <a href="waffle/servlet/package-summary.html">waffle.servlet</a>
      +                        </td>
      +                    </tr>
      +                    <tr class="altColor">
      +                        <td class="colFirst colLast">
      +                            <a href="waffle/servlet/spi/package-summary.html">waffle.servlet.spi</a>
      +                        </td>
      +                    </tr>
      +                    <tr class="rowColor">
      +                        <td class="colFirst colLast">
      +                            <a href="waffle/util/package-summary.html">waffle.util</a>
      +                        </td>
      +                    </tr>
      +                    <tr class="altColor">
      +                        <td class="colFirst colLast">
      +                            <a href="waffle/util/cache/package-summary.html">waffle.util.cache</a>
      +                        </td>
      +                    </tr>
      +                    <tr class="rowColor">
      +                        <td class="colFirst colLast">
      +                            <a href="waffle/windows/auth/package-summary.html">waffle.windows.auth</a>
      +                        </td>
      +                    </tr>
      +                    <tr class="altColor">
      +                        <td class="colFirst colLast">
      +                            <a href="waffle/windows/auth/impl/package-summary.html">waffle.windows.auth.impl</a>
      +                        </td>
      +                    </tr>
      +                </tbody>
      +            </table>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li class="navBarCell1Rev">Overview</li>
      +                <li>Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="overview-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/stylesheet.css b/waffle-jna-jakarta/xref/stylesheet.css
      new file mode 100644
      index 0000000000..84d4b28eda
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/stylesheet.css
      @@ -0,0 +1,626 @@
      +/* Javadoc style sheet */
      +/*
      +Overall document style
      +*/
      +
      +@import url('resources/fonts/dejavu.css');
      +
      +body {
      +    background-color:#ffffff;
      +    color:#353833;
      +    font-family:'DejaVu Sans', Arial, Helvetica, sans-serif;
      +    font-size:14px;
      +    margin:0;
      +}
      +a:link, a:visited {
      +    text-decoration:none;
      +    color:#4A6782;
      +}
      +a:hover, a:focus {
      +    text-decoration:none;
      +    color:#bb7a2a;
      +}
      +a:active {
      +    text-decoration:none;
      +    color:#4A6782;
      +}
      +a[name] {
      +    color:#353833;
      +}
      +a[name]:hover {
      +    text-decoration:none;
      +    color:#353833;
      +}
      +pre {
      +    font-family:'DejaVu Sans Mono', monospace;
      +    font-size:14px;
      +}
      +h1 {
      +    font-size:20px;
      +}
      +h2 {
      +    font-size:18px;
      +}
      +h3 {
      +    font-size:16px;
      +    font-style:italic;
      +}
      +h4 {
      +    font-size:13px;
      +}
      +h5 {
      +    font-size:12px;
      +}
      +h6 {
      +    font-size:11px;
      +}
      +ul {
      +    list-style-type:disc;
      +}
      +code, tt {
      +    font-family:'DejaVu Sans Mono', monospace;
      +    font-size:14px;
      +    padding-top:4px;
      +    margin-top:8px;
      +    line-height:1.4em;
      +}
      +dt code {
      +    font-family:'DejaVu Sans Mono', monospace;
      +    font-size:14px;
      +    padding-top:4px;
      +}
      +table tr td dt code {
      +    font-family:'DejaVu Sans Mono', monospace;
      +    font-size:14px;
      +    vertical-align:top;
      +    padding-top:4px;
      +}
      +sup {
      +    font-size:8px;
      +}
      +/*
      +Document title and Copyright styles
      +*/
      +.clear {
      +    clear:both;
      +    height:0px;
      +    overflow:hidden;
      +}
      +.aboutLanguage {
      +    float:right;
      +    padding:0px 21px;
      +    font-size:11px;
      +    z-index:200;
      +    margin-top:-9px;
      +}
      +.legalCopy {
      +    margin-left:.5em;
      +}
      +.bar a, .bar a:link, .bar a:visited, .bar a:active {
      +    color:#FFFFFF;
      +    text-decoration:none;
      +}
      +.bar a:hover, .bar a:focus {
      +    color:#bb7a2a;
      +}
      +.tab {
      +    background-color:#0066FF;
      +    color:#ffffff;
      +    padding:8px;
      +    width:5em;
      +    font-weight:bold;
      +}
      +/*
      +Navigation bar styles
      +*/
      +.bar {
      +    background-color:#4D7A97;
      +    color:#FFFFFF;
      +    padding:.8em .5em .4em .8em;
      +    height:auto;/*height:1.8em;*/
      +    font-size:11px;
      +    margin:0;
      +}
      +.topNav {
      +    background-color:#4D7A97;
      +    color:#FFFFFF;
      +    float:left;
      +    padding:0;
      +    width:100%;
      +    clear:right;
      +    height:2.8em;
      +    padding-top:10px;
      +    overflow:hidden;
      +    font-size:12px; 
      +}
      +.bottomNav {
      +    margin-top:10px;
      +    background-color:#4D7A97;
      +    color:#FFFFFF;
      +    float:left;
      +    padding:0;
      +    width:100%;
      +    clear:right;
      +    height:2.8em;
      +    padding-top:10px;
      +    overflow:hidden;
      +    font-size:12px;
      +}
      +.subNav {
      +    background-color:#dee3e9;
      +    float:left;
      +    width:100%;
      +    overflow:hidden;
      +    font-size:12px;
      +}
      +.subNav div {
      +    clear:left;
      +    float:left;
      +    padding:0 0 5px 6px;
      +    text-transform:uppercase;
      +}
      +ul.navList, ul.subNavList {
      +    float:left;
      +    margin:0 25px 0 0;
      +    padding:0;
      +}
      +ul.navList li{
      +    list-style:none;
      +    float:left;
      +    padding: 5px 6px;
      +    text-transform:uppercase;
      +}
      +ul.subNavList li{
      +    list-style:none;
      +    float:left;
      +}
      +.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited {
      +    color:#FFFFFF;
      +    text-decoration:none;
      +    text-transform:uppercase;
      +}
      +.topNav a:hover, .bottomNav a:hover {
      +    text-decoration:none;
      +    color:#bb7a2a;
      +    text-transform:uppercase;
      +}
      +.navBarCell1Rev {
      +    background-color:#F8981D;
      +    color:#253441;
      +    margin: auto 5px;
      +}
      +.skipNav {
      +    position:absolute;
      +    top:auto;
      +    left:-9999px;
      +    overflow:hidden;
      +}
      +/*
      +Page header and footer styles
      +*/
      +.header, .footer {
      +    clear:both;
      +    margin:0 20px;
      +    padding:5px 0 0 0;
      +}
      +.indexHeader {
      +    margin:10px;
      +    position:relative;
      +}
      +.indexHeader span{
      +    margin-right:15px;
      +}
      +.indexHeader h1 {
      +    font-size:13px;
      +}
      +.title {
      +    color:#2c4557;
      +    margin:10px 0;
      +}
      +.subTitle {
      +    margin:5px 0 0 0;
      +}
      +.header ul {
      +    margin:0 0 15px 0;
      +    padding:0;
      +}
      +.footer ul {
      +    margin:20px 0 5px 0;
      +}
      +.header ul li, .footer ul li {
      +    list-style:none;
      +    font-size:13px;
      +}
      +/*
      +Heading styles
      +*/
      +div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
      +    background-color:#dee3e9;
      +    border:1px solid #d0d9e0;
      +    margin:0 0 6px -8px;
      +    padding:7px 5px;
      +}
      +ul.blockList ul.blockList ul.blockList li.blockList h3 {
      +    background-color:#dee3e9;
      +    border:1px solid #d0d9e0;
      +    margin:0 0 6px -8px;
      +    padding:7px 5px;
      +}
      +ul.blockList ul.blockList li.blockList h3 {
      +    padding:0;
      +    margin:15px 0;
      +}
      +ul.blockList li.blockList h2 {
      +    padding:0px 0 20px 0;
      +}
      +/*
      +Page layout container styles
      +*/
      +.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer {
      +    clear:both;
      +    padding:10px 20px;
      +    position:relative;
      +}
      +.indexContainer {
      +    margin:10px;
      +    position:relative;
      +    font-size:12px;
      +}
      +.indexContainer h2 {
      +    font-size:13px;
      +    padding:0 0 3px 0;
      +}
      +.indexContainer ul {
      +    margin:0;
      +    padding:0;
      +}
      +.indexContainer ul li {
      +    list-style:none;
      +    padding-top:2px;
      +}
      +.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {
      +    font-size:12px;
      +    font-weight:bold;
      +    margin:10px 0 0 0;
      +    color:#4E4E4E;
      +}
      +.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd {
      +    margin:5px 0 10px 0px;
      +    font-size:14px;
      +    font-family:'DejaVu Sans Mono',monospace;
      +}
      +.serializedFormContainer dl.nameValue dt {
      +    margin-left:1px;
      +    font-size:1.1em;
      +    display:inline;
      +    font-weight:bold;
      +}
      +.serializedFormContainer dl.nameValue dd {
      +    margin:0 0 0 1px;
      +    font-size:1.1em;
      +    display:inline;
      +}
      +/*
      +List styles
      +*/
      +ul.horizontal li {
      +    display:inline;
      +    font-size:0.9em;
      +}
      +ul.inheritance {
      +    margin:0;
      +    padding:0;
      +}
      +ul.inheritance li {
      +    display:inline;
      +    list-style:none;
      +}
      +ul.inheritance li ul.inheritance {
      +    margin-left:15px;
      +    padding-left:15px;
      +    padding-top:1px;
      +}
      +ul.blockList, ul.blockListLast {
      +    margin:10px 0 10px 0;
      +    padding:0;
      +}
      +ul.blockList li.blockList, ul.blockListLast li.blockList {
      +    list-style:none;
      +    margin-bottom:15px;
      +    line-height:1.4;
      +}
      +ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList {
      +    padding:0px 20px 5px 10px;
      +    border:1px solid #ededed; 
      +    background-color:#f8f8f8;
      +}
      +ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList {
      +    padding:0 0 5px 8px;
      +    background-color:#ffffff;
      +    border:none;
      +}
      +ul.blockList ul.blockList ul.blockList ul.blockList li.blockList {
      +    margin-left:0;
      +    padding-left:0;
      +    padding-bottom:15px;
      +    border:none;
      +}
      +ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {
      +    list-style:none;
      +    border-bottom:none;
      +    padding-bottom:0;
      +}
      +table tr td dl, table tr td dl dt, table tr td dl dd {
      +    margin-top:0;
      +    margin-bottom:1px;
      +}
      +/*
      +Table styles
      +*/
      +.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary {
      +    width:100%;
      +    border-left:1px solid #EEE; 
      +    border-right:1px solid #EEE; 
      +    border-bottom:1px solid #EEE; 
      +}
      +.overviewSummary, .memberSummary  {
      +    padding:0px;
      +}
      +.overviewSummary caption, .memberSummary caption, .typeSummary caption,
      +.useSummary caption, .constantsSummary caption, .deprecatedSummary caption {
      +    position:relative;
      +    text-align:left;
      +    background-repeat:no-repeat;
      +    color:#253441;
      +    font-weight:bold;
      +    clear:none;
      +    overflow:hidden;
      +    padding:0px;
      +    padding-top:10px;
      +    padding-left:1px;
      +    margin:0px;
      +    white-space:pre;
      +}
      +.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link,
      +.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link,
      +.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover,
      +.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover,
      +.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active,
      +.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active,
      +.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited,
      +.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited {
      +    color:#FFFFFF;
      +}
      +.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,
      +.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span {
      +    white-space:nowrap;
      +    padding-top:5px;
      +    padding-left:12px;
      +    padding-right:12px;
      +    padding-bottom:7px;
      +    display:inline-block;
      +    float:left;
      +    background-color:#F8981D;
      +    border: none;
      +    height:16px;
      +}
      +.memberSummary caption span.activeTableTab span {
      +    white-space:nowrap;
      +    padding-top:5px;
      +    padding-left:12px;
      +    padding-right:12px;
      +    margin-right:3px;
      +    display:inline-block;
      +    float:left;
      +    background-color:#F8981D;
      +    height:16px;
      +}
      +.memberSummary caption span.tableTab span {
      +    white-space:nowrap;
      +    padding-top:5px;
      +    padding-left:12px;
      +    padding-right:12px;
      +    margin-right:3px;
      +    display:inline-block;
      +    float:left;
      +    background-color:#4D7A97;
      +    height:16px;
      +}
      +.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab {
      +    padding-top:0px;
      +    padding-left:0px;
      +    padding-right:0px;
      +    background-image:none;
      +    float:none;
      +    display:inline;
      +}
      +.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd,
      +.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd {
      +    display:none;
      +    width:5px;
      +    position:relative;
      +    float:left;
      +    background-color:#F8981D;
      +}
      +.memberSummary .activeTableTab .tabEnd {
      +    display:none;
      +    width:5px;
      +    margin-right:3px;
      +    position:relative; 
      +    float:left;
      +    background-color:#F8981D;
      +}
      +.memberSummary .tableTab .tabEnd {
      +    display:none;
      +    width:5px;
      +    margin-right:3px;
      +    position:relative;
      +    background-color:#4D7A97;
      +    float:left;
      +
      +}
      +.overviewSummary td, .memberSummary td, .typeSummary td,
      +.useSummary td, .constantsSummary td, .deprecatedSummary td {
      +    text-align:left;
      +    padding:0px 0px 12px 10px;
      +}
      +th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th,
      +td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{
      +    vertical-align:top;
      +    padding-right:0px;
      +    padding-top:8px;
      +    padding-bottom:3px;
      +}
      +th.colFirst, th.colLast, th.colOne, .constantsSummary th {
      +    background:#dee3e9;
      +    text-align:left;
      +    padding:8px 3px 3px 7px;
      +}
      +td.colFirst, th.colFirst {
      +    white-space:nowrap;
      +    font-size:13px;
      +}
      +td.colLast, th.colLast {
      +    font-size:13px;
      +}
      +td.colOne, th.colOne {
      +    font-size:13px;
      +}
      +.overviewSummary td.colFirst, .overviewSummary th.colFirst,
      +.useSummary td.colFirst, .useSummary th.colFirst,
      +.overviewSummary td.colOne, .overviewSummary th.colOne,
      +.memberSummary td.colFirst, .memberSummary th.colFirst,
      +.memberSummary td.colOne, .memberSummary th.colOne,
      +.typeSummary td.colFirst{
      +    width:25%;
      +    vertical-align:top;
      +}
      +td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover {
      +    font-weight:bold;
      +}
      +.tableSubHeadingColor {
      +    background-color:#EEEEFF;
      +}
      +.altColor {
      +    background-color:#FFFFFF;
      +}
      +.rowColor {
      +    background-color:#EEEEEF;
      +}
      +/*
      +Content styles
      +*/
      +.description pre {
      +    margin-top:0;
      +}
      +.deprecatedContent {
      +    margin:0;
      +    padding:10px 0;
      +}
      +.docSummary {
      +    padding:0;
      +}
      +
      +ul.blockList ul.blockList ul.blockList li.blockList h3 {
      +    font-style:normal;
      +}
      +
      +div.block {
      +    font-size:14px;
      +    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
      +}
      +
      +td.colLast div {
      +    padding-top:0px;
      +}
      +
      +
      +td.colLast a {
      +    padding-bottom:3px;
      +}
      +/*
      +Formatting effect styles
      +*/
      +.sourceLineNo {
      +    color:green;
      +    padding:0 30px 0 0;
      +}
      +h1.hidden {
      +    visibility:hidden;
      +    overflow:hidden;
      +    font-size:10px;
      +}
      +.block {
      +    display:block;
      +    margin:3px 10px 2px 0px;
      +    color:#474747;
      +}
      +.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink,
      +.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel,
      +.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink {
      +    font-weight:bold;
      +}
      +.deprecationComment, .emphasizedPhrase, .interfaceName {
      +    font-style:italic;
      +}
      +
      +div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase,
      +div.block div.block span.interfaceName {
      +    font-style:normal;
      +}
      +
      +div.contentContainer ul.blockList li.blockList h2{
      +    padding-bottom:0px;
      +}
      +
      +/* JXR style sheet */
      +a.jxr_linenumber:link {
      +    color: #00f;
      +}
      +
      +a.jxr_linenumber:visited {
      +    color: #00a;
      +}
      +
      +a.jxr_linenumber:active, a.jxr_linenumber:hover {
      +    color: #f30 !important;
      +}
      +
      +em.comment {
      +    color: #390;
      +}
      +
      +.string {
      +    color: #009;
      +}
      +
      +#overview {
      +    padding: 2px;
      +    font-size: 90%;
      +    font-family: Helvetica, Arial, sans-serif;
      +}
      +
      +hr {
      +    color: #000;
      +}
      +
      +.jxr_comment
      +{
      +    color: #390;
      +}
      +
      +.jxr_javadoccomment
      +{
      +    color: #A00;
      +}
      +
      +.jxr_string
      +{
      +    color: #009;
      +}
      +
      +.jxr_keyword
      +{
      +    color: #000;
      +}
      +
      diff --git a/waffle-jna-jakarta/xref/waffle/jaas/GroupPrincipal.html b/waffle-jna-jakarta/xref/waffle/jaas/GroupPrincipal.html
      new file mode 100644
      index 0000000000..6b9d790456
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/jaas/GroupPrincipal.html
      @@ -0,0 +1,157 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>GroupPrincipal xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/jaas/GroupPrincipal.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.jaas;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> java.security.Principal;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> java.util.Collection;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.util.Collections;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.util.Enumeration;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.util.HashMap;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> * Group principal.</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> *</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> * @deprecated This class is deprecated as hiding a principal inside another principal is not JAAS compliant. Use the</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> *             Principals in the Subject to directly enroll groups or roles by name.</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  @Deprecated
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="GroupPrincipal" href="../../waffle/jaas/GroupPrincipal.html#GroupPrincipal">GroupPrincipal</a> <strong class="jxr_keyword">extends</strong> <a name="UserPrincipal" href="../../waffle/jaas/UserPrincipal.html#UserPrincipal">UserPrincipal</a> {
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <em class="jxr_javadoccomment">/** The Constant serialVersionUID. */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> serialVersionUID = 1L;
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/** The fqn. */</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String fqn;
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      <em class="jxr_javadoccomment">/** A list of fqn members for this group. */</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;Principal, Principal&gt; members;
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     * Instantiates a new group principal.</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     * @param fqn</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     *            the fqn</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      <strong class="jxr_keyword">public</strong> <a name="GroupPrincipal" href="../../waffle/jaas/GroupPrincipal.html#GroupPrincipal">GroupPrincipal</a>(<strong class="jxr_keyword">final</strong> String fqn) {
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          <strong class="jxr_keyword">super</strong>(fqn);
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          <strong class="jxr_keyword">this</strong>.fqn = fqn;
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          <strong class="jxr_keyword">this</strong>.members = <strong class="jxr_keyword">new</strong> HashMap&lt;&gt;();
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      }
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      @Override
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <strong class="jxr_keyword">public</strong> String getName() {
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.fqn;
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      }
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  <em class="jxr_javadoccomment">     * Add user principal to member.</em>
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     * @param user</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     *            principal</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     * @return True if user principal is a member</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> addMember(<strong class="jxr_keyword">final</strong> Principal user) {
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>          <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> isMember = <strong class="jxr_keyword">this</strong>.members.containsKey(user);
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          <strong class="jxr_keyword">if</strong> (!isMember) {
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>              <strong class="jxr_keyword">this</strong>.members.put(user, user);
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>          }
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>          <strong class="jxr_keyword">return</strong> isMember;
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>      }
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     * Is user principal a member of the group.</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_javadoccomment">     * @param user</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     *            principal</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">     * @return True if user principal is a member</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isMember(<strong class="jxr_keyword">final</strong> Principal user) {
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>          <strong class="jxr_keyword">boolean</strong> isMember = <strong class="jxr_keyword">this</strong>.members.containsKey(user);
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>          <strong class="jxr_keyword">if</strong> (!isMember) {
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>              <strong class="jxr_keyword">final</strong> Collection&lt;Principal&gt; values = <strong class="jxr_keyword">this</strong>.members.values();
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>              <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> Principal principal : values) {
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>                  <strong class="jxr_keyword">if</strong> (principal instanceof <a name="GroupPrincipal" href="../../waffle/jaas/GroupPrincipal.html#GroupPrincipal">GroupPrincipal</a>) {
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>                      <strong class="jxr_keyword">final</strong> <a name="GroupPrincipal" href="../../waffle/jaas/GroupPrincipal.html#GroupPrincipal">GroupPrincipal</a> group = (<a name="GroupPrincipal" href="../../waffle/jaas/GroupPrincipal.html#GroupPrincipal">GroupPrincipal</a>) principal;
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>                     isMember = group.isMember(user);
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>                     <strong class="jxr_keyword">if</strong> (isMember) {
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>                         <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>                     }
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>                 }
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>             }
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>         }
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>         <strong class="jxr_keyword">return</strong> isMember;
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>     }
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a> 
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment">     * Member enumeration.</em>
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment">     * @return enumerated members</em>
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a>     <strong class="jxr_keyword">public</strong> Enumeration&lt;Principal&gt; members() {
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a>         <strong class="jxr_keyword">return</strong> Collections.enumeration(<strong class="jxr_keyword">this</strong>.members.values());
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>     }
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a> 
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a> <em class="jxr_javadoccomment">     * Remove user from member.</em>
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment">     * @param user</em>
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment">     *            principal</em>
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a> <em class="jxr_javadoccomment">     * @return True if user principal is removed</em>
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> removeMember(<strong class="jxr_keyword">final</strong> Principal user) {
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>         <strong class="jxr_keyword">final</strong> Object prev = <strong class="jxr_keyword">this</strong>.members.remove(user);
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a>         <strong class="jxr_keyword">return</strong> prev != <strong class="jxr_keyword">null</strong>;
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a>     }
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a> 
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a>     @Override
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>     <strong class="jxr_keyword">public</strong> String toString() {
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>         <strong class="jxr_keyword">final</strong> StringBuilder tmp = <strong class="jxr_keyword">new</strong> StringBuilder(<strong class="jxr_keyword">this</strong>.getName());
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>         tmp.append(<span class="jxr_string">"(members:"</span>);
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> Principal principal : <strong class="jxr_keyword">this</strong>.members.keySet()) {
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a>             tmp.append(principal);
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>             tmp.append(',');
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a>         }
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a>         tmp.setCharAt(tmp.length() - 1, ')');
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a>         <strong class="jxr_keyword">return</strong> tmp.toString();
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a>     }
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a> 
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/jaas/RolePrincipal.html b/waffle-jna-jakarta/xref/waffle/jaas/RolePrincipal.html
      new file mode 100644
      index 0000000000..8131234d30
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/jaas/RolePrincipal.html
      @@ -0,0 +1,105 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>RolePrincipal xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/jaas/RolePrincipal.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.jaas;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> java.io.Serializable;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> java.security.Principal;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment"> * Role principal.</em>
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="RolePrincipal" href="../../waffle/jaas/RolePrincipal.html#RolePrincipal">RolePrincipal</a> <strong class="jxr_keyword">implements</strong> Principal, Serializable {
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      <em class="jxr_javadoccomment">/** The Constant serialVersionUID. */</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> serialVersionUID = 1L;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      <em class="jxr_javadoccomment">/** The fqn. */</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String fqn;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     * A windows principal.</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     * @param newFqn</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     *            Fully qualified name.</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <strong class="jxr_keyword">public</strong> <a name="RolePrincipal" href="../../waffle/jaas/RolePrincipal.html#RolePrincipal">RolePrincipal</a>(<strong class="jxr_keyword">final</strong> String newFqn) {
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>          <strong class="jxr_keyword">this</strong>.fqn = newFqn;
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      }
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     * Role name (Windows Group).</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     * @return the name</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      @Override
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <strong class="jxr_keyword">public</strong> String getName() {
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.fqn;
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      }
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  <em class="jxr_javadoccomment">     * Role Principal Equals for FQN.</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">     * @param o</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     *            Object used for Equality Check.</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     * @return true, if successful</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      @Override
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(<strong class="jxr_keyword">final</strong> Object o) {
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == o) {
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          }
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          <strong class="jxr_keyword">if</strong> (o instanceof <a name="RolePrincipal" href="../../waffle/jaas/RolePrincipal.html#RolePrincipal">RolePrincipal</a>) {
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getName().equals(((<a name="RolePrincipal" href="../../waffle/jaas/RolePrincipal.html#RolePrincipal">RolePrincipal</a>) o).getName());
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          }
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      }
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     * Role Principal HashCode for FQN.</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment">     * @return the int</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      @Override
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getName().hashCode();
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      }
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/jaas/UserPrincipal.html b/waffle-jna-jakarta/xref/waffle/jaas/UserPrincipal.html
      new file mode 100644
      index 0000000000..997ea8024b
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/jaas/UserPrincipal.html
      @@ -0,0 +1,91 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>UserPrincipal xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/jaas/UserPrincipal.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.jaas;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> java.io.Serializable;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> java.security.Principal;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment"> * User Principal.</em>
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="UserPrincipal" href="../../waffle/jaas/UserPrincipal.html#UserPrincipal">UserPrincipal</a> <strong class="jxr_keyword">implements</strong> Principal, Serializable {
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      <em class="jxr_javadoccomment">/** The Constant serialVersionUID. */</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> serialVersionUID = 1L;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      <em class="jxr_javadoccomment">/** The fqn. */</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String fqn;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     * A user principal.</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     * @param newFqn</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     *            Fully qualified username.</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <strong class="jxr_keyword">public</strong> <a name="UserPrincipal" href="../../waffle/jaas/UserPrincipal.html#UserPrincipal">UserPrincipal</a>(<strong class="jxr_keyword">final</strong> String newFqn) {
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>          <strong class="jxr_keyword">this</strong>.fqn = newFqn;
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      }
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     * Fully qualified username.</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     * @return the name</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      @Override
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <strong class="jxr_keyword">public</strong> String getName() {
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.fqn;
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      }
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      @Override
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(<strong class="jxr_keyword">final</strong> Object o) {
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == o) {
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>          }
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          <strong class="jxr_keyword">if</strong> (o instanceof <a name="UserPrincipal" href="../../waffle/jaas/UserPrincipal.html#UserPrincipal">UserPrincipal</a>) {
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getName().equals(((<a name="UserPrincipal" href="../../waffle/jaas/UserPrincipal.html#UserPrincipal">UserPrincipal</a>) o).getName());
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          }
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      }
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>      @Override
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getName().hashCode();
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>      }
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/jaas/WindowsLoginModule.html b/waffle-jna-jakarta/xref/waffle/jaas/WindowsLoginModule.html
      new file mode 100644
      index 0000000000..311a32f7ee
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/jaas/WindowsLoginModule.html
      @@ -0,0 +1,382 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsLoginModule xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/jaas/WindowsLoginModule.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.jaas;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> java.security.Principal;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.util.LinkedHashSet;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.util.List;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.util.Locale;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> java.util.Set;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.Subject;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.Callback;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.CallbackHandler;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.NameCallback;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.PasswordCallback;
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.callback.UnsupportedCallbackException;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.login.LoginException;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.spi.LoginModule;
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAccount;
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAuthProvider;
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsIdentity;
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.PrincipalFormat;
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.impl.WindowsAuthProviderImpl;
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment"> * A Java Security login module for Windows authentication.</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment"> *</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment"> * @see javax.security.auth.spi.LoginModule</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WindowsLoginModule" href="../../waffle/jaas/WindowsLoginModule.html#WindowsLoginModule">WindowsLoginModule</a> <strong class="jxr_keyword">implements</strong> LoginModule {
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      <em class="jxr_javadoccomment">/** The Constant LOGGER. */</em>
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Logger LOGGER = LoggerFactory.getLogger(WindowsLoginModule.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      <em class="jxr_javadoccomment">/** The username. */</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      <strong class="jxr_keyword">private</strong> String username;
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      <em class="jxr_javadoccomment">/** The debug. */</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> debug;
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      <em class="jxr_javadoccomment">/** The subject. */</em>
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      <strong class="jxr_keyword">private</strong> Subject subject;
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      <em class="jxr_javadoccomment">/** The callback handler. */</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>      <strong class="jxr_keyword">private</strong> CallbackHandler callbackHandler;
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      <em class="jxr_javadoccomment">/** The auth. */</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>      <strong class="jxr_keyword">private</strong> <a name="IWindowsAuthProvider" href="../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> auth = <strong class="jxr_keyword">new</strong> <a name="WindowsAuthProviderImpl" href="../../waffle/windows/auth/impl/WindowsAuthProviderImpl.html#WindowsAuthProviderImpl">WindowsAuthProviderImpl</a>();
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      <em class="jxr_javadoccomment">/** The principals. */</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>      <strong class="jxr_keyword">private</strong> Set&lt;Principal&gt; principals;
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>  
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>      <em class="jxr_javadoccomment">/** The principal format. */</em>
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      <strong class="jxr_keyword">private</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> principalFormat = PrincipalFormat.FQN;
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>      <em class="jxr_javadoccomment">/** The role format. */</em>
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>      <strong class="jxr_keyword">private</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> roleFormat = PrincipalFormat.FQN;
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      <em class="jxr_javadoccomment">/** The allow guest login. */</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> allowGuestLogin = <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      @Override
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> initialize(<strong class="jxr_keyword">final</strong> Subject initSubject, <strong class="jxr_keyword">final</strong> CallbackHandler initCallbackHandler,
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>              <strong class="jxr_keyword">final</strong> Map&lt;String, ?&gt; initSharedState, <strong class="jxr_keyword">final</strong> Map&lt;String, ?&gt; initOptions) {
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>          <strong class="jxr_keyword">this</strong>.subject = initSubject;
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>          <strong class="jxr_keyword">this</strong>.callbackHandler = initCallbackHandler;
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>          <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> Map.Entry&lt;String, ?&gt; option : initOptions.entrySet()) {
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>              <strong class="jxr_keyword">if</strong> (<span class="jxr_string">"debug"</span>.equalsIgnoreCase(option.getKey())) {
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>                  <strong class="jxr_keyword">this</strong>.debug = Boolean.parseBoolean((String) option.getValue());
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>             } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (<span class="jxr_string">"principalFormat"</span>.equalsIgnoreCase(option.getKey())) {
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>                 <strong class="jxr_keyword">this</strong>.principalFormat = <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a>
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>                         .valueOf(((String) option.getValue()).toUpperCase(Locale.ENGLISH));
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>             } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (<span class="jxr_string">"roleFormat"</span>.equalsIgnoreCase(option.getKey())) {
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>                 <strong class="jxr_keyword">this</strong>.roleFormat = PrincipalFormat.valueOf(((String) option.getValue()).toUpperCase(Locale.ENGLISH));
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>             }
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>         }
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>     }
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a> 
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment">     * Use Windows SSPI to authenticate a username with a password.</em>
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment">     * @return true, if successful</em>
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>     @Override
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> login() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.callbackHandler == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> LoginException(<span class="jxr_string">"Missing callback to gather information from the user."</span>);
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>         }
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a> 
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>         <strong class="jxr_keyword">final</strong> NameCallback usernameCallback = <strong class="jxr_keyword">new</strong> NameCallback(<span class="jxr_string">"user name: "</span>);
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>         <strong class="jxr_keyword">final</strong> PasswordCallback passwordCallback = <strong class="jxr_keyword">new</strong> PasswordCallback(<span class="jxr_string">"password: "</span>, false);
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a> 
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>         <strong class="jxr_keyword">final</strong> Callback[] callbacks = <strong class="jxr_keyword">new</strong> Callback[2];
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>         callbacks[0] = usernameCallback;
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>         callbacks[1] = passwordCallback;
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a> 
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a>         <strong class="jxr_keyword">final</strong> String userName;
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a>         <strong class="jxr_keyword">final</strong> String password;
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a> 
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>         <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>             <strong class="jxr_keyword">this</strong>.callbackHandler.handle(callbacks);
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>             userName = usernameCallback.getName();
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a>             password = passwordCallback.getPassword() == <strong class="jxr_keyword">null</strong> ? <span class="jxr_string">""</span> : <strong class="jxr_keyword">new</strong> String(passwordCallback.getPassword());
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a>             passwordCallback.clearPassword();
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> IOException e) {
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a>             WindowsLoginModule.LOGGER.trace(<span class="jxr_string">""</span>, e);
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> LoginException(e.toString());
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> UnsupportedCallbackException e) {
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a>             WindowsLoginModule.LOGGER.trace(<span class="jxr_string">""</span>, e);
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> LoginException(<span class="jxr_string">"Callback {} not available to gather authentication information from the user."</span>
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a>                     .replace(<span class="jxr_string">"{}"</span>, e.getCallback().getClass().getName()));
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a>         }
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a> 
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a>         <a name="IWindowsIdentity" href="../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> windowsIdentity;
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a>         <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a>             windowsIdentity = <strong class="jxr_keyword">this</strong>.auth.logonUser(userName, password);
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> Exception e) {
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a>             WindowsLoginModule.LOGGER.trace(<span class="jxr_string">""</span>, e);
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> LoginException(e.getMessage());
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a>         }
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a> 
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a>         <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a>             <em class="jxr_comment">// disable guest login</em>
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>             <strong class="jxr_keyword">if</strong> (!<strong class="jxr_keyword">this</strong>.allowGuestLogin &amp;&amp; windowsIdentity.isGuest()) {
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a>                 WindowsLoginModule.LOGGER.debug(<span class="jxr_string">"guest login disabled: {}"</span>, windowsIdentity.getFqn());
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a>                 <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> LoginException(<span class="jxr_string">"Guest login disabled"</span>);
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a>             }
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a> 
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a>             <strong class="jxr_keyword">this</strong>.principals = <strong class="jxr_keyword">new</strong> LinkedHashSet&lt;&gt;();
      +<a class="jxr_linenumber" name="L163" href="#L163">163</a>             <em class="jxr_comment">// add the main user principal to the subject principals</em>
      +<a class="jxr_linenumber" name="L164" href="#L164">164</a>             <strong class="jxr_keyword">this</strong>.principals.addAll(WindowsLoginModule.getUserPrincipals(windowsIdentity, <strong class="jxr_keyword">this</strong>.principalFormat));
      +<a class="jxr_linenumber" name="L165" href="#L165">165</a>             <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.roleFormat != PrincipalFormat.NONE) {
      +<a class="jxr_linenumber" name="L166" href="#L166">166</a>                 <em class="jxr_comment">// create the group principal and add roles as members of the group</em>
      +<a class="jxr_linenumber" name="L167" href="#L167">167</a>                 <strong class="jxr_keyword">final</strong> <a name="GroupPrincipal" href="../../waffle/jaas/GroupPrincipal.html#GroupPrincipal">GroupPrincipal</a> groupList = <strong class="jxr_keyword">new</strong> <a name="GroupPrincipal" href="../../waffle/jaas/GroupPrincipal.html#GroupPrincipal">GroupPrincipal</a>(<span class="jxr_string">"Roles"</span>);
      +<a class="jxr_linenumber" name="L168" href="#L168">168</a>                 <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> <a name="IWindowsAccount" href="../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a> group : windowsIdentity.getGroups()) {
      +<a class="jxr_linenumber" name="L169" href="#L169">169</a>                     <strong class="jxr_keyword">this</strong>.principals.addAll(WindowsLoginModule.getRolePrincipals(group, <strong class="jxr_keyword">this</strong>.roleFormat));
      +<a class="jxr_linenumber" name="L170" href="#L170">170</a>                     <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> Principal role : WindowsLoginModule.getRolePrincipals(group, <strong class="jxr_keyword">this</strong>.roleFormat)) {
      +<a class="jxr_linenumber" name="L171" href="#L171">171</a>                         WindowsLoginModule.LOGGER.debug(<span class="jxr_string">" group: {}"</span>, role.getName());
      +<a class="jxr_linenumber" name="L172" href="#L172">172</a>                         groupList.addMember(<strong class="jxr_keyword">new</strong> <a name="RolePrincipal" href="../../waffle/jaas/RolePrincipal.html#RolePrincipal">RolePrincipal</a>(role.getName()));
      +<a class="jxr_linenumber" name="L173" href="#L173">173</a>                     }
      +<a class="jxr_linenumber" name="L174" href="#L174">174</a>                 }
      +<a class="jxr_linenumber" name="L175" href="#L175">175</a>                 <em class="jxr_comment">// add the group and roles to the subject principals</em>
      +<a class="jxr_linenumber" name="L176" href="#L176">176</a>                 <strong class="jxr_keyword">this</strong>.principals.add(groupList);
      +<a class="jxr_linenumber" name="L177" href="#L177">177</a>             }
      +<a class="jxr_linenumber" name="L178" href="#L178">178</a> 
      +<a class="jxr_linenumber" name="L179" href="#L179">179</a>             <strong class="jxr_keyword">this</strong>.username = windowsIdentity.getFqn();
      +<a class="jxr_linenumber" name="L180" href="#L180">180</a>             WindowsLoginModule.LOGGER.debug(<span class="jxr_string">"successfully logged in {} ({})"</span>, <strong class="jxr_keyword">this</strong>.username,
      +<a class="jxr_linenumber" name="L181" href="#L181">181</a>                     windowsIdentity.getSidString());
      +<a class="jxr_linenumber" name="L182" href="#L182">182</a>         } <strong class="jxr_keyword">finally</strong> {
      +<a class="jxr_linenumber" name="L183" href="#L183">183</a>             windowsIdentity.dispose();
      +<a class="jxr_linenumber" name="L184" href="#L184">184</a>         }
      +<a class="jxr_linenumber" name="L185" href="#L185">185</a> 
      +<a class="jxr_linenumber" name="L186" href="#L186">186</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L187" href="#L187">187</a>     }
      +<a class="jxr_linenumber" name="L188" href="#L188">188</a> 
      +<a class="jxr_linenumber" name="L189" href="#L189">189</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L190" href="#L190">190</a> <em class="jxr_javadoccomment">     * Abort a login process.</em>
      +<a class="jxr_linenumber" name="L191" href="#L191">191</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L192" href="#L192">192</a> <em class="jxr_javadoccomment">     * @return true, if successful</em>
      +<a class="jxr_linenumber" name="L193" href="#L193">193</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L194" href="#L194">194</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L195" href="#L195">195</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L196" href="#L196">196</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L197" href="#L197">197</a>     @Override
      +<a class="jxr_linenumber" name="L198" href="#L198">198</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> abort() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L199" href="#L199">199</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.logout();
      +<a class="jxr_linenumber" name="L200" href="#L200">200</a>     }
      +<a class="jxr_linenumber" name="L201" href="#L201">201</a> 
      +<a class="jxr_linenumber" name="L202" href="#L202">202</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L203" href="#L203">203</a> <em class="jxr_javadoccomment">     * Commit principals to the subject.</em>
      +<a class="jxr_linenumber" name="L204" href="#L204">204</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L205" href="#L205">205</a> <em class="jxr_javadoccomment">     * @return true, if successful</em>
      +<a class="jxr_linenumber" name="L206" href="#L206">206</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L207" href="#L207">207</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L208" href="#L208">208</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L209" href="#L209">209</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L210" href="#L210">210</a>     @Override
      +<a class="jxr_linenumber" name="L211" href="#L211">211</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> commit() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L212" href="#L212">212</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.principals == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L213" href="#L213">213</a>             <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L214" href="#L214">214</a>         }
      +<a class="jxr_linenumber" name="L215" href="#L215">215</a> 
      +<a class="jxr_linenumber" name="L216" href="#L216">216</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.subject.isReadOnly()) {
      +<a class="jxr_linenumber" name="L217" href="#L217">217</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> LoginException(<span class="jxr_string">"Subject cannot be read-only."</span>);
      +<a class="jxr_linenumber" name="L218" href="#L218">218</a>         }
      +<a class="jxr_linenumber" name="L219" href="#L219">219</a> 
      +<a class="jxr_linenumber" name="L220" href="#L220">220</a>         <strong class="jxr_keyword">final</strong> Set&lt;Principal&gt; principalsSet = <strong class="jxr_keyword">this</strong>.subject.getPrincipals();
      +<a class="jxr_linenumber" name="L221" href="#L221">221</a>         principalsSet.addAll(<strong class="jxr_keyword">this</strong>.principals);
      +<a class="jxr_linenumber" name="L222" href="#L222">222</a> 
      +<a class="jxr_linenumber" name="L223" href="#L223">223</a>         WindowsLoginModule.LOGGER.debug(<span class="jxr_string">"committing {} principals"</span>,
      +<a class="jxr_linenumber" name="L224" href="#L224">224</a>                 Integer.valueOf(<strong class="jxr_keyword">this</strong>.subject.getPrincipals().size()));
      +<a class="jxr_linenumber" name="L225" href="#L225">225</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.debug) {
      +<a class="jxr_linenumber" name="L226" href="#L226">226</a>             <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> Principal principal : principalsSet) {
      +<a class="jxr_linenumber" name="L227" href="#L227">227</a>                 WindowsLoginModule.LOGGER.debug(<span class="jxr_string">" principal: {}"</span>, principal.getName());
      +<a class="jxr_linenumber" name="L228" href="#L228">228</a>             }
      +<a class="jxr_linenumber" name="L229" href="#L229">229</a>         }
      +<a class="jxr_linenumber" name="L230" href="#L230">230</a> 
      +<a class="jxr_linenumber" name="L231" href="#L231">231</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L232" href="#L232">232</a>     }
      +<a class="jxr_linenumber" name="L233" href="#L233">233</a> 
      +<a class="jxr_linenumber" name="L234" href="#L234">234</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L235" href="#L235">235</a> <em class="jxr_javadoccomment">     * Logout a user.</em>
      +<a class="jxr_linenumber" name="L236" href="#L236">236</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L237" href="#L237">237</a> <em class="jxr_javadoccomment">     * @return true, if successful</em>
      +<a class="jxr_linenumber" name="L238" href="#L238">238</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L239" href="#L239">239</a> <em class="jxr_javadoccomment">     * @throws LoginException</em>
      +<a class="jxr_linenumber" name="L240" href="#L240">240</a> <em class="jxr_javadoccomment">     *             the login exception</em>
      +<a class="jxr_linenumber" name="L241" href="#L241">241</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L242" href="#L242">242</a>     @Override
      +<a class="jxr_linenumber" name="L243" href="#L243">243</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> logout() <strong class="jxr_keyword">throws</strong> LoginException {
      +<a class="jxr_linenumber" name="L244" href="#L244">244</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.subject.isReadOnly()) {
      +<a class="jxr_linenumber" name="L245" href="#L245">245</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> LoginException(<span class="jxr_string">"Subject cannot be read-only."</span>);
      +<a class="jxr_linenumber" name="L246" href="#L246">246</a>         }
      +<a class="jxr_linenumber" name="L247" href="#L247">247</a> 
      +<a class="jxr_linenumber" name="L248" href="#L248">248</a>         <strong class="jxr_keyword">this</strong>.subject.getPrincipals().clear();
      +<a class="jxr_linenumber" name="L249" href="#L249">249</a> 
      +<a class="jxr_linenumber" name="L250" href="#L250">250</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.username != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L251" href="#L251">251</a>             WindowsLoginModule.LOGGER.debug(<span class="jxr_string">"logging out {}"</span>, <strong class="jxr_keyword">this</strong>.username);
      +<a class="jxr_linenumber" name="L252" href="#L252">252</a>         }
      +<a class="jxr_linenumber" name="L253" href="#L253">253</a> 
      +<a class="jxr_linenumber" name="L254" href="#L254">254</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L255" href="#L255">255</a>     }
      +<a class="jxr_linenumber" name="L256" href="#L256">256</a> 
      +<a class="jxr_linenumber" name="L257" href="#L257">257</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L258" href="#L258">258</a> <em class="jxr_javadoccomment">     * True if Debug is enabled.</em>
      +<a class="jxr_linenumber" name="L259" href="#L259">259</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L260" href="#L260">260</a> <em class="jxr_javadoccomment">     * @return True or false.</em>
      +<a class="jxr_linenumber" name="L261" href="#L261">261</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L262" href="#L262">262</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isDebug() {
      +<a class="jxr_linenumber" name="L263" href="#L263">263</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.debug;
      +<a class="jxr_linenumber" name="L264" href="#L264">264</a>     }
      +<a class="jxr_linenumber" name="L265" href="#L265">265</a> 
      +<a class="jxr_linenumber" name="L266" href="#L266">266</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L267" href="#L267">267</a> <em class="jxr_javadoccomment">     * Windows auth provider.</em>
      +<a class="jxr_linenumber" name="L268" href="#L268">268</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L269" href="#L269">269</a> <em class="jxr_javadoccomment">     * @return IWindowsAuthProvider.</em>
      +<a class="jxr_linenumber" name="L270" href="#L270">270</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L271" href="#L271">271</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsAuthProvider" href="../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> getAuth() {
      +<a class="jxr_linenumber" name="L272" href="#L272">272</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.auth;
      +<a class="jxr_linenumber" name="L273" href="#L273">273</a>     }
      +<a class="jxr_linenumber" name="L274" href="#L274">274</a> 
      +<a class="jxr_linenumber" name="L275" href="#L275">275</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L276" href="#L276">276</a> <em class="jxr_javadoccomment">     * Set Windows auth provider.</em>
      +<a class="jxr_linenumber" name="L277" href="#L277">277</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L278" href="#L278">278</a> <em class="jxr_javadoccomment">     * @param provider</em>
      +<a class="jxr_linenumber" name="L279" href="#L279">279</a> <em class="jxr_javadoccomment">     *            Class implements IWindowsAuthProvider.</em>
      +<a class="jxr_linenumber" name="L280" href="#L280">280</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L281" href="#L281">281</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setAuth(<strong class="jxr_keyword">final</strong> <a name="IWindowsAuthProvider" href="../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> provider) {
      +<a class="jxr_linenumber" name="L282" href="#L282">282</a>         <strong class="jxr_keyword">this</strong>.auth = provider;
      +<a class="jxr_linenumber" name="L283" href="#L283">283</a>     }
      +<a class="jxr_linenumber" name="L284" href="#L284">284</a> 
      +<a class="jxr_linenumber" name="L285" href="#L285">285</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L286" href="#L286">286</a> <em class="jxr_javadoccomment">     * Returns a list of user principal objects.</em>
      +<a class="jxr_linenumber" name="L287" href="#L287">287</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L288" href="#L288">288</a> <em class="jxr_javadoccomment">     * @param windowsIdentity</em>
      +<a class="jxr_linenumber" name="L289" href="#L289">289</a> <em class="jxr_javadoccomment">     *            Windows identity.</em>
      +<a class="jxr_linenumber" name="L290" href="#L290">290</a> <em class="jxr_javadoccomment">     * @param principalFormat</em>
      +<a class="jxr_linenumber" name="L291" href="#L291">291</a> <em class="jxr_javadoccomment">     *            Principal format.</em>
      +<a class="jxr_linenumber" name="L292" href="#L292">292</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L293" href="#L293">293</a> <em class="jxr_javadoccomment">     * @return A list of user principal objects.</em>
      +<a class="jxr_linenumber" name="L294" href="#L294">294</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L295" href="#L295">295</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> List&lt;Principal&gt; getUserPrincipals(<strong class="jxr_keyword">final</strong> <a name="IWindowsIdentity" href="../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> windowsIdentity,
      +<a class="jxr_linenumber" name="L296" href="#L296">296</a>             <strong class="jxr_keyword">final</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> principalFormat) {
      +<a class="jxr_linenumber" name="L297" href="#L297">297</a> 
      +<a class="jxr_linenumber" name="L298" href="#L298">298</a>         <strong class="jxr_keyword">final</strong> List&lt;Principal&gt; principalsList = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
      +<a class="jxr_linenumber" name="L299" href="#L299">299</a>         <strong class="jxr_keyword">switch</strong> (principalFormat) {
      +<a class="jxr_linenumber" name="L300" href="#L300">300</a>             <strong class="jxr_keyword">case</strong> FQN:
      +<a class="jxr_linenumber" name="L301" href="#L301">301</a>                 principalsList.add(<strong class="jxr_keyword">new</strong> <a name="UserPrincipal" href="../../waffle/jaas/UserPrincipal.html#UserPrincipal">UserPrincipal</a>(windowsIdentity.getFqn()));
      +<a class="jxr_linenumber" name="L302" href="#L302">302</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L303" href="#L303">303</a>             <strong class="jxr_keyword">case</strong> SID:
      +<a class="jxr_linenumber" name="L304" href="#L304">304</a>                 principalsList.add(<strong class="jxr_keyword">new</strong> <a name="UserPrincipal" href="../../waffle/jaas/UserPrincipal.html#UserPrincipal">UserPrincipal</a>(windowsIdentity.getSidString()));
      +<a class="jxr_linenumber" name="L305" href="#L305">305</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L306" href="#L306">306</a>             <strong class="jxr_keyword">case</strong> BOTH:
      +<a class="jxr_linenumber" name="L307" href="#L307">307</a>                 principalsList.add(<strong class="jxr_keyword">new</strong> <a name="UserPrincipal" href="../../waffle/jaas/UserPrincipal.html#UserPrincipal">UserPrincipal</a>(windowsIdentity.getFqn()));
      +<a class="jxr_linenumber" name="L308" href="#L308">308</a>                 principalsList.add(<strong class="jxr_keyword">new</strong> <a name="UserPrincipal" href="../../waffle/jaas/UserPrincipal.html#UserPrincipal">UserPrincipal</a>(windowsIdentity.getSidString()));
      +<a class="jxr_linenumber" name="L309" href="#L309">309</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L310" href="#L310">310</a>             <strong class="jxr_keyword">case</strong> NONE:
      +<a class="jxr_linenumber" name="L311" href="#L311">311</a>             <strong class="jxr_keyword">default</strong>:
      +<a class="jxr_linenumber" name="L312" href="#L312">312</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L313" href="#L313">313</a>         }
      +<a class="jxr_linenumber" name="L314" href="#L314">314</a>         <strong class="jxr_keyword">return</strong> principalsList;
      +<a class="jxr_linenumber" name="L315" href="#L315">315</a>     }
      +<a class="jxr_linenumber" name="L316" href="#L316">316</a> 
      +<a class="jxr_linenumber" name="L317" href="#L317">317</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L318" href="#L318">318</a> <em class="jxr_javadoccomment">     * Returns a list of role principal objects.</em>
      +<a class="jxr_linenumber" name="L319" href="#L319">319</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L320" href="#L320">320</a> <em class="jxr_javadoccomment">     * @param group</em>
      +<a class="jxr_linenumber" name="L321" href="#L321">321</a> <em class="jxr_javadoccomment">     *            Windows group.</em>
      +<a class="jxr_linenumber" name="L322" href="#L322">322</a> <em class="jxr_javadoccomment">     * @param principalFormat</em>
      +<a class="jxr_linenumber" name="L323" href="#L323">323</a> <em class="jxr_javadoccomment">     *            Principal format.</em>
      +<a class="jxr_linenumber" name="L324" href="#L324">324</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L325" href="#L325">325</a> <em class="jxr_javadoccomment">     * @return List of role principal objects.</em>
      +<a class="jxr_linenumber" name="L326" href="#L326">326</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L327" href="#L327">327</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> List&lt;Principal&gt; getRolePrincipals(<strong class="jxr_keyword">final</strong> <a name="IWindowsAccount" href="../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a> group,
      +<a class="jxr_linenumber" name="L328" href="#L328">328</a>             <strong class="jxr_keyword">final</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> principalFormat) {
      +<a class="jxr_linenumber" name="L329" href="#L329">329</a> 
      +<a class="jxr_linenumber" name="L330" href="#L330">330</a>         <strong class="jxr_keyword">final</strong> List&lt;Principal&gt; principalsList = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
      +<a class="jxr_linenumber" name="L331" href="#L331">331</a>         <strong class="jxr_keyword">switch</strong> (principalFormat) {
      +<a class="jxr_linenumber" name="L332" href="#L332">332</a>             <strong class="jxr_keyword">case</strong> FQN:
      +<a class="jxr_linenumber" name="L333" href="#L333">333</a>                 principalsList.add(<strong class="jxr_keyword">new</strong> <a name="RolePrincipal" href="../../waffle/jaas/RolePrincipal.html#RolePrincipal">RolePrincipal</a>(group.getFqn()));
      +<a class="jxr_linenumber" name="L334" href="#L334">334</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L335" href="#L335">335</a>             <strong class="jxr_keyword">case</strong> SID:
      +<a class="jxr_linenumber" name="L336" href="#L336">336</a>                 principalsList.add(<strong class="jxr_keyword">new</strong> <a name="RolePrincipal" href="../../waffle/jaas/RolePrincipal.html#RolePrincipal">RolePrincipal</a>(group.getSidString()));
      +<a class="jxr_linenumber" name="L337" href="#L337">337</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L338" href="#L338">338</a>             <strong class="jxr_keyword">case</strong> BOTH:
      +<a class="jxr_linenumber" name="L339" href="#L339">339</a>                 principalsList.add(<strong class="jxr_keyword">new</strong> <a name="RolePrincipal" href="../../waffle/jaas/RolePrincipal.html#RolePrincipal">RolePrincipal</a>(group.getFqn()));
      +<a class="jxr_linenumber" name="L340" href="#L340">340</a>                 principalsList.add(<strong class="jxr_keyword">new</strong> <a name="RolePrincipal" href="../../waffle/jaas/RolePrincipal.html#RolePrincipal">RolePrincipal</a>(group.getSidString()));
      +<a class="jxr_linenumber" name="L341" href="#L341">341</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L342" href="#L342">342</a>             <strong class="jxr_keyword">case</strong> NONE:
      +<a class="jxr_linenumber" name="L343" href="#L343">343</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L344" href="#L344">344</a>             <strong class="jxr_keyword">default</strong>:
      +<a class="jxr_linenumber" name="L345" href="#L345">345</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L346" href="#L346">346</a>         }
      +<a class="jxr_linenumber" name="L347" href="#L347">347</a>         <strong class="jxr_keyword">return</strong> principalsList;
      +<a class="jxr_linenumber" name="L348" href="#L348">348</a>     }
      +<a class="jxr_linenumber" name="L349" href="#L349">349</a> 
      +<a class="jxr_linenumber" name="L350" href="#L350">350</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L351" href="#L351">351</a> <em class="jxr_javadoccomment">     * True if Guest login permitted.</em>
      +<a class="jxr_linenumber" name="L352" href="#L352">352</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L353" href="#L353">353</a> <em class="jxr_javadoccomment">     * @return True if Guest login permitted, false otherwise.</em>
      +<a class="jxr_linenumber" name="L354" href="#L354">354</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L355" href="#L355">355</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isAllowGuestLogin() {
      +<a class="jxr_linenumber" name="L356" href="#L356">356</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.allowGuestLogin;
      +<a class="jxr_linenumber" name="L357" href="#L357">357</a>     }
      +<a class="jxr_linenumber" name="L358" href="#L358">358</a> 
      +<a class="jxr_linenumber" name="L359" href="#L359">359</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L360" href="#L360">360</a> <em class="jxr_javadoccomment">     * Set whether Guest login is permitted. Default is true, if the Guest account is enabled, an invalid</em>
      +<a class="jxr_linenumber" name="L361" href="#L361">361</a> <em class="jxr_javadoccomment">     * username/password results in a Guest login.</em>
      +<a class="jxr_linenumber" name="L362" href="#L362">362</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L363" href="#L363">363</a> <em class="jxr_javadoccomment">     * @param value</em>
      +<a class="jxr_linenumber" name="L364" href="#L364">364</a> <em class="jxr_javadoccomment">     *            True or false.</em>
      +<a class="jxr_linenumber" name="L365" href="#L365">365</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L366" href="#L366">366</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setAllowGuestLogin(<strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> value) {
      +<a class="jxr_linenumber" name="L367" href="#L367">367</a>         <strong class="jxr_keyword">this</strong>.allowGuestLogin = value;
      +<a class="jxr_linenumber" name="L368" href="#L368">368</a>     }
      +<a class="jxr_linenumber" name="L369" href="#L369">369</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/jaas/package-frame.html b/waffle-jna-jakarta/xref/waffle/jaas/package-frame.html
      new file mode 100644
      index 0000000000..07c7d4fc40
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/jaas/package-frame.html
      @@ -0,0 +1,30 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.jaas</title>
      +        <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar"><a href="package-summary.html" target="classFrame">waffle.jaas</a></h1>
      +        <div class="indexContainer">
      +            <h2 title="Classes">Classes</h2>
      +            <ul title="Classes">
      +                <li>
      +                    <a href="GroupPrincipal.html#GroupPrincipal" target="classFrame">GroupPrincipal</a>
      +                </li>
      +                <li>
      +                    <a href="RolePrincipal.html#RolePrincipal" target="classFrame">RolePrincipal</a>
      +                </li>
      +                <li>
      +                    <a href="UserPrincipal.html#UserPrincipal" target="classFrame">UserPrincipal</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsLoginModule.html#WindowsLoginModule" target="classFrame">WindowsLoginModule</a>
      +                </li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/jaas/package-summary.html b/waffle-jna-jakarta/xref/waffle/jaas/package-summary.html
      new file mode 100644
      index 0000000000..1d772f9b23
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/jaas/package-summary.html
      @@ -0,0 +1,122 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.jaas</title>
      +        <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="style" />
      +    </head>
      +
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_top">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 title="Package" class="title">Package waffle.jaas</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <ul class="blockList">
      +                <li class="blockList">
      +                    <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
      +                        <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
      +                        <thead>
      +                            <tr>
      +                                <th class="colFirst colLast" scope="col">Class</th>
      +                            </tr>
      +                        </thead>
      +                        <tbody>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="GroupPrincipal.html#GroupPrincipal" target="classFrame" title="class in waffle.jaas">GroupPrincipal</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="RolePrincipal.html#RolePrincipal" target="classFrame" title="class in waffle.jaas">RolePrincipal</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="UserPrincipal.html#UserPrincipal" target="classFrame" title="class in waffle.jaas">UserPrincipal</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsLoginModule.html#WindowsLoginModule" target="classFrame" title="class in waffle.jaas">WindowsLoginModule</a>
      +                                </td>
      +                            </tr>
      +                        </tbody>
      +                    </table>
      +                </li>
      +            </ul>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_bottom">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/AutoDisposableWindowsPrincipal.html b/waffle-jna-jakarta/xref/waffle/servlet/AutoDisposableWindowsPrincipal.html
      new file mode 100644
      index 0000000000..60e14ab012
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/AutoDisposableWindowsPrincipal.html
      @@ -0,0 +1,90 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>AutoDisposableWindowsPrincipal xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/servlet/AutoDisposableWindowsPrincipal.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2020 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpSessionBindingEvent;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpSessionBindingListener;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsIdentity;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.PrincipalFormat;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment"> * The Class AutoDisposableWindowsPrincipal.</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="AutoDisposableWindowsPrincipal" href="../../waffle/servlet/AutoDisposableWindowsPrincipal.html#AutoDisposableWindowsPrincipal">AutoDisposableWindowsPrincipal</a> <strong class="jxr_keyword">extends</strong> <a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a> <strong class="jxr_keyword">implements</strong> HttpSessionBindingListener {
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      <em class="jxr_javadoccomment">/** The Constant serialVersionUID. */</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> serialVersionUID = 1L;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     * Instantiates a new auto disposable windows principal.</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     * @param windowsIdentity</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     *            the windows identity</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <strong class="jxr_keyword">public</strong> <a name="AutoDisposableWindowsPrincipal" href="../../waffle/servlet/AutoDisposableWindowsPrincipal.html#AutoDisposableWindowsPrincipal">AutoDisposableWindowsPrincipal</a>(<strong class="jxr_keyword">final</strong> <a name="IWindowsIdentity" href="../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> windowsIdentity) {
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>          <strong class="jxr_keyword">super</strong>(windowsIdentity);
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      }
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     * Instantiates a new auto disposable windows principal.</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     * @param windowsIdentity</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     *            the windows identity</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     * @param principalFormat</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     *            the principal format</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     * @param roleFormat</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     *            the role format</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      <strong class="jxr_keyword">public</strong> <a name="AutoDisposableWindowsPrincipal" href="../../waffle/servlet/AutoDisposableWindowsPrincipal.html#AutoDisposableWindowsPrincipal">AutoDisposableWindowsPrincipal</a>(<strong class="jxr_keyword">final</strong> <a name="IWindowsIdentity" href="../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> windowsIdentity, <strong class="jxr_keyword">final</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> principalFormat,
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>              <strong class="jxr_keyword">final</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> roleFormat) {
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          <strong class="jxr_keyword">super</strong>(windowsIdentity, principalFormat, roleFormat);
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      }
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      @Override
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> valueBound(<strong class="jxr_keyword">final</strong> HttpSessionBindingEvent evt) {
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          <em class="jxr_comment">// Do nothing</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      }
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      @Override
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> valueUnbound(<strong class="jxr_keyword">final</strong> HttpSessionBindingEvent evt) {
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.getIdentity() != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>              <strong class="jxr_keyword">this</strong>.getIdentity().dispose();
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          }
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      }
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html b/waffle-jna-jakarta/xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html
      new file mode 100644
      index 0000000000..020a4f53e1
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/CorsAwareNegotiateSecurityFilter.html
      @@ -0,0 +1,111 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>CorsAwareNegotiateSecurityFilter xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/servlet/CorsAwareNegotiateSecurityFilter.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2020 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.Filter;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.FilterChain;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.FilterConfig;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.ServletException;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.ServletRequest;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.ServletResponse;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <strong class="jxr_keyword">import</strong> waffle.util.AuthorizationHeader;
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">import</strong> waffle.util.CorsPreFlightCheck;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment"> * The Class CorsAwareNegotiateSecurityFilter.</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="CorsAwareNegotiateSecurityFilter" href="../../waffle/servlet/CorsAwareNegotiateSecurityFilter.html#CorsAwareNegotiateSecurityFilter">CorsAwareNegotiateSecurityFilter</a> <strong class="jxr_keyword">extends</strong> <a name="NegotiateSecurityFilter" href="../../waffle/servlet/NegotiateSecurityFilter.html#NegotiateSecurityFilter">NegotiateSecurityFilter</a> <strong class="jxr_keyword">implements</strong> Filter {
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <em class="jxr_javadoccomment">/** The Constant LOGGER. */</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Logger LOGGER = LoggerFactory.getLogger(CorsAwareNegotiateSecurityFilter.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     * Instantiates a new negotiate security filter.</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      <strong class="jxr_keyword">public</strong> <a name="CorsAwareNegotiateSecurityFilter" href="../../waffle/servlet/CorsAwareNegotiateSecurityFilter.html#CorsAwareNegotiateSecurityFilter">CorsAwareNegotiateSecurityFilter</a>() {
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>          CorsAwareNegotiateSecurityFilter.LOGGER.info(<span class="jxr_string">"[waffle.servlet.CorsAwareNegotiateSecurityFilter] loaded"</span>);
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      }
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      @Override
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> init(<strong class="jxr_keyword">final</strong> FilterConfig filterConfig) <strong class="jxr_keyword">throws</strong> ServletException {
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          CorsAwareNegotiateSecurityFilter.LOGGER.info(<span class="jxr_string">"[waffle.servlet.CorsAwareNegotiateSecurityFilter] Starting"</span>);
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          <strong class="jxr_keyword">super</strong>.init(filterConfig);
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          CorsAwareNegotiateSecurityFilter.LOGGER.info(<span class="jxr_string">"[waffle.servlet.CorsAwareNegotiateSecurityFilter] Started"</span>);
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      }
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      @Override
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> doFilter(<strong class="jxr_keyword">final</strong> ServletRequest request, <strong class="jxr_keyword">final</strong> ServletResponse response, <strong class="jxr_keyword">final</strong> FilterChain chain)
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>              <strong class="jxr_keyword">throws</strong> IOException, ServletException {
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          CorsAwareNegotiateSecurityFilter.LOGGER.info(<span class="jxr_string">"[waffle.servlet.CorsAwareNegotiateSecurityFilter] Filtering"</span>);
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>          <strong class="jxr_keyword">final</strong> HttpServletRequest httpServletRequest = (HttpServletRequest) request;
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          <strong class="jxr_keyword">final</strong> <a name="AuthorizationHeader" href="../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a> authorizationHeader = <strong class="jxr_keyword">new</strong> <a name="AuthorizationHeader" href="../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a>(httpServletRequest);
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          <strong class="jxr_keyword">if</strong> (CorsPreFlightCheck.isPreflight(httpServletRequest)) {
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>              CorsAwareNegotiateSecurityFilter.LOGGER.info(
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>                      <span class="jxr_string">"[waffle.servlet.CorsAwareNegotiateSecurityFilter] Request is CORS preflight; continue filter chain"</span>);
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>              chain.doFilter(request, response);
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (authorizationHeader.isBearerAuthorizationHeader()) {
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>              CorsAwareNegotiateSecurityFilter.LOGGER
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>                      .info(<span class="jxr_string">"[waffle.servlet.CorsAwareNegotiateSecurityFilter] Request is Bearer, continue filter chain"</span>);
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>              chain.doFilter(request, response);
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>          } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>              CorsAwareNegotiateSecurityFilter.LOGGER
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>                      .info(<span class="jxr_string">"[waffle.servlet.CorsAwareNegotiateSecurityFilter] Request is Not CORS preflight"</span>);
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>              <strong class="jxr_keyword">super</strong>.doFilter(request, response, chain);
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>              CorsAwareNegotiateSecurityFilter.LOGGER
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>                      .info(<span class="jxr_string">"[waffle.servlet.CorsAwareNegotiateSecurityFilter] Authentication Completed"</span>);
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>          }
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      }
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>      @Override
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> destroy() {
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>          <strong class="jxr_keyword">super</strong>.destroy();
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>          CorsAwareNegotiateSecurityFilter.LOGGER.info(<span class="jxr_string">"[waffle.servlet.CorsAwareNegotiateSecurityFilter] unloaded"</span>);
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>      }
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>  
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/NegotiateRequestWrapper.html b/waffle-jna-jakarta/xref/waffle/servlet/NegotiateRequestWrapper.html
      new file mode 100644
      index 0000000000..1c970c8001
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/NegotiateRequestWrapper.html
      @@ -0,0 +1,107 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>NegotiateRequestWrapper xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/servlet/NegotiateRequestWrapper.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequestWrapper;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.security.Principal;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment"> * Negotiate Request wrapper.</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="NegotiateRequestWrapper" href="../../waffle/servlet/NegotiateRequestWrapper.html#NegotiateRequestWrapper">NegotiateRequestWrapper</a> <strong class="jxr_keyword">extends</strong> HttpServletRequestWrapper {
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      <em class="jxr_javadoccomment">/** The principal. */</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a> principal;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     * Instantiates a new negotiate request wrapper.</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     * @param newRequest</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     *            the new request</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     * @param newPrincipal</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     *            the new principal</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <strong class="jxr_keyword">public</strong> <a name="NegotiateRequestWrapper" href="../../waffle/servlet/NegotiateRequestWrapper.html#NegotiateRequestWrapper">NegotiateRequestWrapper</a>(<strong class="jxr_keyword">final</strong> HttpServletRequest newRequest, <strong class="jxr_keyword">final</strong> <a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a> newPrincipal) {
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>          <strong class="jxr_keyword">super</strong>(newRequest);
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>          <strong class="jxr_keyword">this</strong>.principal = newPrincipal;
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      }
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     * User principal.</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     * @return the user principal</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      @Override
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      <strong class="jxr_keyword">public</strong> Principal getUserPrincipal() {
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.principal;
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      }
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">     * Authentication type.</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     * @return the auth type</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      @Override
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      <strong class="jxr_keyword">public</strong> String getAuthType() {
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          <strong class="jxr_keyword">return</strong> <span class="jxr_string">"NEGOTIATE"</span>;
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      }
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     * Remote username.</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     * @return the remote user</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>      @Override
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      <strong class="jxr_keyword">public</strong> String getRemoteUser() {
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.principal.getName();
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      }
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     * Returns true if the user is in a given role.</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment">     * @param role</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     *            the role</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_javadoccomment">     * @return true, if is user in role</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      @Override
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isUserInRole(<strong class="jxr_keyword">final</strong> String role) {
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.principal.hasRole(role);
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>      }
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/NegotiateSecurityFilter.html b/waffle-jna-jakarta/xref/waffle/servlet/NegotiateSecurityFilter.html
      new file mode 100644
      index 0000000000..60b6f3552f
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/NegotiateSecurityFilter.html
      @@ -0,0 +1,570 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>NegotiateSecurityFilter xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/servlet/NegotiateSecurityFilter.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.Filter;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.FilterChain;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.FilterConfig;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.ServletException;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.ServletRequest;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.ServletResponse;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletResponse;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpSession;
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.InvocationTargetException;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> java.security.Principal;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <strong class="jxr_keyword">import</strong> java.util.Collections;
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">import</strong> java.util.HashMap;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <strong class="jxr_keyword">import</strong> java.util.List;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <strong class="jxr_keyword">import</strong> java.util.Locale;
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <strong class="jxr_keyword">import</strong> javax.security.auth.Subject;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <strong class="jxr_keyword">import</strong> waffle.servlet.spi.SecurityFilterProvider;
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <strong class="jxr_keyword">import</strong> waffle.servlet.spi.SecurityFilterProviderCollection;
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <strong class="jxr_keyword">import</strong> waffle.util.AuthorizationHeader;
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <strong class="jxr_keyword">import</strong> waffle.util.CorsPreFlightCheck;
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAuthProvider;
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsIdentity;
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsImpersonationContext;
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.PrincipalFormat;
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.impl.WindowsAuthProviderImpl;
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  <em class="jxr_javadoccomment"> * A Negotiate (NTLM/Kerberos) Security Filter.</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="NegotiateSecurityFilter" href="../../waffle/servlet/NegotiateSecurityFilter.html#NegotiateSecurityFilter">NegotiateSecurityFilter</a> <strong class="jxr_keyword">implements</strong> Filter {
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <em class="jxr_javadoccomment">/** The Constant LOGGER. */</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Logger LOGGER = LoggerFactory.getLogger(NegotiateSecurityFilter.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      <em class="jxr_javadoccomment">/** The Constant PRINCIPALSESSIONKEY. */</em>
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String PRINCIPALSESSIONKEY = NegotiateSecurityFilter.<strong class="jxr_keyword">class</strong>.getName() + <span class="jxr_string">".PRINCIPAL"</span>;
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      <em class="jxr_javadoccomment">/** The windows flag. */</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> Boolean windows;
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>      <em class="jxr_javadoccomment">/** The principal format. */</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      <strong class="jxr_keyword">private</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> principalFormat = PrincipalFormat.FQN;
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>      <em class="jxr_javadoccomment">/** The role format. */</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      <strong class="jxr_keyword">private</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> roleFormat = PrincipalFormat.FQN;
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      <em class="jxr_javadoccomment">/** The providers. */</em>
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>      <strong class="jxr_keyword">private</strong> <a name="SecurityFilterProviderCollection" href="../../waffle/servlet/spi/SecurityFilterProviderCollection.html#SecurityFilterProviderCollection">SecurityFilterProviderCollection</a> providers;
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>      <em class="jxr_javadoccomment">/** The auth. */</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>      <strong class="jxr_keyword">private</strong> <a name="IWindowsAuthProvider" href="../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> auth;
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>      <em class="jxr_javadoccomment">/** The exclusion filter. */</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      <strong class="jxr_keyword">private</strong> String[] excludePatterns;
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>      <em class="jxr_javadoccomment">/** The allow guest login. */</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> allowGuestLogin = <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>      <em class="jxr_javadoccomment">/** The impersonate. */</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> impersonate;
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>      <em class="jxr_javadoccomment">/** The exclusion bearer authorization. */</em>
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> excludeBearerAuthorization;
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>  
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>      <em class="jxr_javadoccomment">/** The exclusions cors pre flight. */</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> excludeCorsPreflight;
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> 
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>     <em class="jxr_javadoccomment">/** The disable SSO. */</em>
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> disableSSO;
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a> 
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment">     * Instantiates a new negotiate security filter.</em>
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>     <strong class="jxr_keyword">public</strong> <a name="NegotiateSecurityFilter" href="../../waffle/servlet/NegotiateSecurityFilter.html#NegotiateSecurityFilter">NegotiateSecurityFilter</a>() {
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>         NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"[waffle.servlet.NegotiateSecurityFilter] loaded"</span>);
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>     }
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a> 
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>     @Override
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> destroy() {
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>         NegotiateSecurityFilter.LOGGER.info(<span class="jxr_string">"[waffle.servlet.NegotiateSecurityFilter] stopped"</span>);
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a>     }
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> 
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a>     @Override
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> doFilter(<strong class="jxr_keyword">final</strong> ServletRequest sreq, <strong class="jxr_keyword">final</strong> ServletResponse sres, <strong class="jxr_keyword">final</strong> FilterChain chain)
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>             <strong class="jxr_keyword">throws</strong> IOException, ServletException {
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a> 
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a>         <strong class="jxr_keyword">final</strong> HttpServletRequest request = (HttpServletRequest) sreq;
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>         <strong class="jxr_keyword">final</strong> HttpServletResponse response = (HttpServletResponse) sres;
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a> 
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>         NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"{} {}, contentlength: {}"</span>, request.getMethod(), request.getRequestURI(),
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>                 Integer.valueOf(request.getContentLength()));
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a> 
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>         <em class="jxr_comment">// If we are not in a windows environment, resume filter chain</em>
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>         <strong class="jxr_keyword">if</strong> (!NegotiateSecurityFilter.isWindows()) {
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>             NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"Running in a non windows environment, SSO skipped"</span>);
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a>             chain.doFilter(request, response);
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a>             <strong class="jxr_keyword">return</strong>;
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a>         }
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a> 
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>         <em class="jxr_comment">// If sso is disabled, resume filter chain</em>
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.disableSSO) {
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>             NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"SSO is disabled, resuming filter chain"</span>);
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a>             chain.doFilter(request, response);
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a>             <strong class="jxr_keyword">return</strong>;
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>         }
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a> 
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a>         <em class="jxr_comment">// If excluded URL, resume the filter chain</em>
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a>         <strong class="jxr_keyword">if</strong> (request.getRequestURL() != <strong class="jxr_keyword">null</strong> &amp;&amp; <strong class="jxr_keyword">this</strong>.excludePatterns != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a>             <strong class="jxr_keyword">final</strong> String url = request.getRequestURL().toString();
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a>             <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> String pattern : <strong class="jxr_keyword">this</strong>.excludePatterns) {
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a>                 <strong class="jxr_keyword">if</strong> (url.matches(pattern)) {
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a>                     NegotiateSecurityFilter.LOGGER.info(<span class="jxr_string">"Pattern :{} excluded URL:{}"</span>, url, pattern);
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a>                     chain.doFilter(sreq, sres);
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a>                     <strong class="jxr_keyword">return</strong>;
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a>                 }
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a>             }
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a>         }
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a> 
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a>         <em class="jxr_comment">// If exclude cores pre-flight and is pre flight, resume the filter chain</em>
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.excludeCorsPreflight &amp;&amp; CorsPreFlightCheck.isPreflight(request)) {
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a>             NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"[waffle.servlet.NegotiateSecurityFilter] CORS preflight"</span>);
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a>             chain.doFilter(sreq, sres);
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a>             <strong class="jxr_keyword">return</strong>;
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>         }
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a> 
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a>         <strong class="jxr_keyword">final</strong> <a name="AuthorizationHeader" href="../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a> authorizationHeader = <strong class="jxr_keyword">new</strong> <a name="AuthorizationHeader" href="../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a>(request);
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a> 
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a>         <em class="jxr_comment">// If exclude bearer authorization and is bearer authorization, result the filter chain</em>
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.excludeBearerAuthorization &amp;&amp; authorizationHeader.isBearerAuthorizationHeader()) {
      +<a class="jxr_linenumber" name="L163" href="#L163">163</a>             NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"[waffle.servlet.NegotiateSecurityFilter] Authorization: Bearer"</span>);
      +<a class="jxr_linenumber" name="L164" href="#L164">164</a>             chain.doFilter(sreq, sres);
      +<a class="jxr_linenumber" name="L165" href="#L165">165</a>             <strong class="jxr_keyword">return</strong>;
      +<a class="jxr_linenumber" name="L166" href="#L166">166</a>         }
      +<a class="jxr_linenumber" name="L167" href="#L167">167</a> 
      +<a class="jxr_linenumber" name="L168" href="#L168">168</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.doFilterPrincipal(request, response, chain)) {
      +<a class="jxr_linenumber" name="L169" href="#L169">169</a>             <em class="jxr_comment">// previously authenticated user</em>
      +<a class="jxr_linenumber" name="L170" href="#L170">170</a>             <strong class="jxr_keyword">return</strong>;
      +<a class="jxr_linenumber" name="L171" href="#L171">171</a>         }
      +<a class="jxr_linenumber" name="L172" href="#L172">172</a> 
      +<a class="jxr_linenumber" name="L173" href="#L173">173</a>         <em class="jxr_comment">// authenticate user</em>
      +<a class="jxr_linenumber" name="L174" href="#L174">174</a>         <strong class="jxr_keyword">if</strong> (!authorizationHeader.isNull()) {
      +<a class="jxr_linenumber" name="L175" href="#L175">175</a> 
      +<a class="jxr_linenumber" name="L176" href="#L176">176</a>             <em class="jxr_comment">// log the user in using the token</em>
      +<a class="jxr_linenumber" name="L177" href="#L177">177</a>             <a name="IWindowsIdentity" href="../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> windowsIdentity;
      +<a class="jxr_linenumber" name="L178" href="#L178">178</a>             <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L179" href="#L179">179</a>                 windowsIdentity = <strong class="jxr_keyword">this</strong>.providers.doFilter(request, response);
      +<a class="jxr_linenumber" name="L180" href="#L180">180</a>                 <strong class="jxr_keyword">if</strong> (windowsIdentity == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L181" href="#L181">181</a>                     <strong class="jxr_keyword">return</strong>;
      +<a class="jxr_linenumber" name="L182" href="#L182">182</a>                 }
      +<a class="jxr_linenumber" name="L183" href="#L183">183</a>             } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> IOException e) {
      +<a class="jxr_linenumber" name="L184" href="#L184">184</a>                 NegotiateSecurityFilter.LOGGER.warn(<span class="jxr_string">"error logging in user: {}"</span>, e.getMessage());
      +<a class="jxr_linenumber" name="L185" href="#L185">185</a>                 NegotiateSecurityFilter.LOGGER.trace(<span class="jxr_string">""</span>, e);
      +<a class="jxr_linenumber" name="L186" href="#L186">186</a>                 <strong class="jxr_keyword">this</strong>.sendUnauthorized(response, <strong class="jxr_keyword">true</strong>);
      +<a class="jxr_linenumber" name="L187" href="#L187">187</a>                 <strong class="jxr_keyword">return</strong>;
      +<a class="jxr_linenumber" name="L188" href="#L188">188</a>             }
      +<a class="jxr_linenumber" name="L189" href="#L189">189</a> 
      +<a class="jxr_linenumber" name="L190" href="#L190">190</a>             <a name="IWindowsImpersonationContext" href="../../waffle/windows/auth/IWindowsImpersonationContext.html#IWindowsImpersonationContext">IWindowsImpersonationContext</a> ctx = <strong class="jxr_keyword">null</strong>;
      +<a class="jxr_linenumber" name="L191" href="#L191">191</a>             <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L192" href="#L192">192</a>                 <strong class="jxr_keyword">if</strong> (!<strong class="jxr_keyword">this</strong>.allowGuestLogin &amp;&amp; windowsIdentity.isGuest()) {
      +<a class="jxr_linenumber" name="L193" href="#L193">193</a>                     NegotiateSecurityFilter.LOGGER.warn(<span class="jxr_string">"guest login disabled: {}"</span>, windowsIdentity.getFqn());
      +<a class="jxr_linenumber" name="L194" href="#L194">194</a>                     <strong class="jxr_keyword">this</strong>.sendUnauthorized(response, <strong class="jxr_keyword">true</strong>);
      +<a class="jxr_linenumber" name="L195" href="#L195">195</a>                     <strong class="jxr_keyword">return</strong>;
      +<a class="jxr_linenumber" name="L196" href="#L196">196</a>                 }
      +<a class="jxr_linenumber" name="L197" href="#L197">197</a> 
      +<a class="jxr_linenumber" name="L198" href="#L198">198</a>                 NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"logged in user: {} ({})"</span>, windowsIdentity.getFqn(),
      +<a class="jxr_linenumber" name="L199" href="#L199">199</a>                         windowsIdentity.getSidString());
      +<a class="jxr_linenumber" name="L200" href="#L200">200</a> 
      +<a class="jxr_linenumber" name="L201" href="#L201">201</a>                 <strong class="jxr_keyword">final</strong> HttpSession session = request.getSession(<strong class="jxr_keyword">true</strong>);
      +<a class="jxr_linenumber" name="L202" href="#L202">202</a>                 <strong class="jxr_keyword">if</strong> (session == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L203" href="#L203">203</a>                     <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServletException(<span class="jxr_string">"Expected HttpSession"</span>);
      +<a class="jxr_linenumber" name="L204" href="#L204">204</a>                 }
      +<a class="jxr_linenumber" name="L205" href="#L205">205</a> 
      +<a class="jxr_linenumber" name="L206" href="#L206">206</a>                 Subject subject = (Subject) session.getAttribute(<span class="jxr_string">"javax.security.auth.subject"</span>);
      +<a class="jxr_linenumber" name="L207" href="#L207">207</a>                 <strong class="jxr_keyword">if</strong> (subject == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L208" href="#L208">208</a>                     subject = <strong class="jxr_keyword">new</strong> Subject();
      +<a class="jxr_linenumber" name="L209" href="#L209">209</a>                 }
      +<a class="jxr_linenumber" name="L210" href="#L210">210</a> 
      +<a class="jxr_linenumber" name="L211" href="#L211">211</a>                 <a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a> windowsPrincipal;
      +<a class="jxr_linenumber" name="L212" href="#L212">212</a>                 <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.impersonate) {
      +<a class="jxr_linenumber" name="L213" href="#L213">213</a>                     windowsPrincipal = <strong class="jxr_keyword">new</strong> <a name="AutoDisposableWindowsPrincipal" href="../../waffle/servlet/AutoDisposableWindowsPrincipal.html#AutoDisposableWindowsPrincipal">AutoDisposableWindowsPrincipal</a>(windowsIdentity, <strong class="jxr_keyword">this</strong>.principalFormat,
      +<a class="jxr_linenumber" name="L214" href="#L214">214</a>                             <strong class="jxr_keyword">this</strong>.roleFormat);
      +<a class="jxr_linenumber" name="L215" href="#L215">215</a>                 } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L216" href="#L216">216</a>                     windowsPrincipal = <strong class="jxr_keyword">new</strong> <a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a>(windowsIdentity, <strong class="jxr_keyword">this</strong>.principalFormat, <strong class="jxr_keyword">this</strong>.roleFormat);
      +<a class="jxr_linenumber" name="L217" href="#L217">217</a>                 }
      +<a class="jxr_linenumber" name="L218" href="#L218">218</a> 
      +<a class="jxr_linenumber" name="L219" href="#L219">219</a>                 NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"roles: {}"</span>, windowsPrincipal.getRolesString());
      +<a class="jxr_linenumber" name="L220" href="#L220">220</a>                 subject.getPrincipals().add(windowsPrincipal);
      +<a class="jxr_linenumber" name="L221" href="#L221">221</a>                 request.getSession(false).setAttribute(<span class="jxr_string">"javax.security.auth.subject"</span>, subject);
      +<a class="jxr_linenumber" name="L222" href="#L222">222</a> 
      +<a class="jxr_linenumber" name="L223" href="#L223">223</a>                 NegotiateSecurityFilter.LOGGER.info(<span class="jxr_string">"successfully logged in user: {}"</span>, windowsIdentity.getFqn());
      +<a class="jxr_linenumber" name="L224" href="#L224">224</a> 
      +<a class="jxr_linenumber" name="L225" href="#L225">225</a>                 request.getSession(false).setAttribute(NegotiateSecurityFilter.PRINCIPALSESSIONKEY, windowsPrincipal);
      +<a class="jxr_linenumber" name="L226" href="#L226">226</a> 
      +<a class="jxr_linenumber" name="L227" href="#L227">227</a>                 <strong class="jxr_keyword">final</strong> <a name="NegotiateRequestWrapper" href="../../waffle/servlet/NegotiateRequestWrapper.html#NegotiateRequestWrapper">NegotiateRequestWrapper</a> requestWrapper = <strong class="jxr_keyword">new</strong> <a name="NegotiateRequestWrapper" href="../../waffle/servlet/NegotiateRequestWrapper.html#NegotiateRequestWrapper">NegotiateRequestWrapper</a>(request, windowsPrincipal);
      +<a class="jxr_linenumber" name="L228" href="#L228">228</a> 
      +<a class="jxr_linenumber" name="L229" href="#L229">229</a>                 <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.impersonate) {
      +<a class="jxr_linenumber" name="L230" href="#L230">230</a>                     NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"impersonating user"</span>);
      +<a class="jxr_linenumber" name="L231" href="#L231">231</a>                     ctx = windowsIdentity.impersonate();
      +<a class="jxr_linenumber" name="L232" href="#L232">232</a>                 }
      +<a class="jxr_linenumber" name="L233" href="#L233">233</a> 
      +<a class="jxr_linenumber" name="L234" href="#L234">234</a>                 chain.doFilter(requestWrapper, response);
      +<a class="jxr_linenumber" name="L235" href="#L235">235</a>             } <strong class="jxr_keyword">finally</strong> {
      +<a class="jxr_linenumber" name="L236" href="#L236">236</a>                 <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.impersonate &amp;&amp; ctx != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L237" href="#L237">237</a>                     NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"terminating impersonation"</span>);
      +<a class="jxr_linenumber" name="L238" href="#L238">238</a>                     ctx.revertToSelf();
      +<a class="jxr_linenumber" name="L239" href="#L239">239</a>                 } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L240" href="#L240">240</a>                     windowsIdentity.dispose();
      +<a class="jxr_linenumber" name="L241" href="#L241">241</a>                 }
      +<a class="jxr_linenumber" name="L242" href="#L242">242</a>             }
      +<a class="jxr_linenumber" name="L243" href="#L243">243</a> 
      +<a class="jxr_linenumber" name="L244" href="#L244">244</a>             <strong class="jxr_keyword">return</strong>;
      +<a class="jxr_linenumber" name="L245" href="#L245">245</a>         }
      +<a class="jxr_linenumber" name="L246" href="#L246">246</a> 
      +<a class="jxr_linenumber" name="L247" href="#L247">247</a>         NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"authorization required"</span>);
      +<a class="jxr_linenumber" name="L248" href="#L248">248</a>         <strong class="jxr_keyword">this</strong>.sendUnauthorized(response, false);
      +<a class="jxr_linenumber" name="L249" href="#L249">249</a>     }
      +<a class="jxr_linenumber" name="L250" href="#L250">250</a> 
      +<a class="jxr_linenumber" name="L251" href="#L251">251</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L252" href="#L252">252</a> <em class="jxr_javadoccomment">     * Filter for a previously logged on user.</em>
      +<a class="jxr_linenumber" name="L253" href="#L253">253</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L254" href="#L254">254</a> <em class="jxr_javadoccomment">     * @param request</em>
      +<a class="jxr_linenumber" name="L255" href="#L255">255</a> <em class="jxr_javadoccomment">     *            HTTP request.</em>
      +<a class="jxr_linenumber" name="L256" href="#L256">256</a> <em class="jxr_javadoccomment">     * @param response</em>
      +<a class="jxr_linenumber" name="L257" href="#L257">257</a> <em class="jxr_javadoccomment">     *            HTTP response.</em>
      +<a class="jxr_linenumber" name="L258" href="#L258">258</a> <em class="jxr_javadoccomment">     * @param chain</em>
      +<a class="jxr_linenumber" name="L259" href="#L259">259</a> <em class="jxr_javadoccomment">     *            Filter chain.</em>
      +<a class="jxr_linenumber" name="L260" href="#L260">260</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L261" href="#L261">261</a> <em class="jxr_javadoccomment">     * @return True if a user already authenticated.</em>
      +<a class="jxr_linenumber" name="L262" href="#L262">262</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L263" href="#L263">263</a> <em class="jxr_javadoccomment">     * @throws IOException</em>
      +<a class="jxr_linenumber" name="L264" href="#L264">264</a> <em class="jxr_javadoccomment">     *             Signals that an I/O exception has occurred.</em>
      +<a class="jxr_linenumber" name="L265" href="#L265">265</a> <em class="jxr_javadoccomment">     * @throws ServletException</em>
      +<a class="jxr_linenumber" name="L266" href="#L266">266</a> <em class="jxr_javadoccomment">     *             the servlet exception</em>
      +<a class="jxr_linenumber" name="L267" href="#L267">267</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L268" href="#L268">268</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> doFilterPrincipal(<strong class="jxr_keyword">final</strong> HttpServletRequest request, <strong class="jxr_keyword">final</strong> HttpServletResponse response,
      +<a class="jxr_linenumber" name="L269" href="#L269">269</a>             <strong class="jxr_keyword">final</strong> FilterChain chain) <strong class="jxr_keyword">throws</strong> IOException, ServletException {
      +<a class="jxr_linenumber" name="L270" href="#L270">270</a>         Principal principal = request.getUserPrincipal();
      +<a class="jxr_linenumber" name="L271" href="#L271">271</a>         <strong class="jxr_keyword">if</strong> (principal == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L272" href="#L272">272</a>             <strong class="jxr_keyword">final</strong> HttpSession session = request.getSession(false);
      +<a class="jxr_linenumber" name="L273" href="#L273">273</a>             <strong class="jxr_keyword">if</strong> (session != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L274" href="#L274">274</a>                 principal = (Principal) session.getAttribute(NegotiateSecurityFilter.PRINCIPALSESSIONKEY);
      +<a class="jxr_linenumber" name="L275" href="#L275">275</a>             }
      +<a class="jxr_linenumber" name="L276" href="#L276">276</a>         }
      +<a class="jxr_linenumber" name="L277" href="#L277">277</a> 
      +<a class="jxr_linenumber" name="L278" href="#L278">278</a>         <strong class="jxr_keyword">if</strong> (principal == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L279" href="#L279">279</a>             <em class="jxr_comment">// no principal in this request</em>
      +<a class="jxr_linenumber" name="L280" href="#L280">280</a>             <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L281" href="#L281">281</a>         }
      +<a class="jxr_linenumber" name="L282" href="#L282">282</a> 
      +<a class="jxr_linenumber" name="L283" href="#L283">283</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.providers.isPrincipalException(request)) {
      +<a class="jxr_linenumber" name="L284" href="#L284">284</a>             <em class="jxr_comment">// the providers signal to authenticate despite an existing principal, eg. NTLM post</em>
      +<a class="jxr_linenumber" name="L285" href="#L285">285</a>             <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L286" href="#L286">286</a>         }
      +<a class="jxr_linenumber" name="L287" href="#L287">287</a> 
      +<a class="jxr_linenumber" name="L288" href="#L288">288</a>         <em class="jxr_comment">// user already authenticated</em>
      +<a class="jxr_linenumber" name="L289" href="#L289">289</a>         <strong class="jxr_keyword">if</strong> (principal instanceof <a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a>) {
      +<a class="jxr_linenumber" name="L290" href="#L290">290</a>             NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"previously authenticated Windows user: {}"</span>, principal.getName());
      +<a class="jxr_linenumber" name="L291" href="#L291">291</a>             <strong class="jxr_keyword">final</strong> <a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a> windowsPrincipal = (<a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a>) principal;
      +<a class="jxr_linenumber" name="L292" href="#L292">292</a> 
      +<a class="jxr_linenumber" name="L293" href="#L293">293</a>             <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.impersonate &amp;&amp; windowsPrincipal.getIdentity() == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L294" href="#L294">294</a>                 <em class="jxr_comment">// This can happen when the session has been serialized then de-serialized</em>
      +<a class="jxr_linenumber" name="L295" href="#L295">295</a>                 <em class="jxr_comment">// and because the IWindowsIdentity field is transient. In this case re-ask an</em>
      +<a class="jxr_linenumber" name="L296" href="#L296">296</a>                 <em class="jxr_comment">// authentication to get a new identity.</em>
      +<a class="jxr_linenumber" name="L297" href="#L297">297</a>                 <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L298" href="#L298">298</a>             }
      +<a class="jxr_linenumber" name="L299" href="#L299">299</a> 
      +<a class="jxr_linenumber" name="L300" href="#L300">300</a>             <strong class="jxr_keyword">final</strong> <a name="NegotiateRequestWrapper" href="../../waffle/servlet/NegotiateRequestWrapper.html#NegotiateRequestWrapper">NegotiateRequestWrapper</a> requestWrapper = <strong class="jxr_keyword">new</strong> <a name="NegotiateRequestWrapper" href="../../waffle/servlet/NegotiateRequestWrapper.html#NegotiateRequestWrapper">NegotiateRequestWrapper</a>(request, windowsPrincipal);
      +<a class="jxr_linenumber" name="L301" href="#L301">301</a> 
      +<a class="jxr_linenumber" name="L302" href="#L302">302</a>             <a name="IWindowsImpersonationContext" href="../../waffle/windows/auth/IWindowsImpersonationContext.html#IWindowsImpersonationContext">IWindowsImpersonationContext</a> ctx = <strong class="jxr_keyword">null</strong>;
      +<a class="jxr_linenumber" name="L303" href="#L303">303</a>             <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.impersonate) {
      +<a class="jxr_linenumber" name="L304" href="#L304">304</a>                 NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"re-impersonating user"</span>);
      +<a class="jxr_linenumber" name="L305" href="#L305">305</a>                 ctx = windowsPrincipal.getIdentity().impersonate();
      +<a class="jxr_linenumber" name="L306" href="#L306">306</a>             }
      +<a class="jxr_linenumber" name="L307" href="#L307">307</a>             <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L308" href="#L308">308</a>                 chain.doFilter(requestWrapper, response);
      +<a class="jxr_linenumber" name="L309" href="#L309">309</a>             } <strong class="jxr_keyword">finally</strong> {
      +<a class="jxr_linenumber" name="L310" href="#L310">310</a>                 <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.impersonate &amp;&amp; ctx != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L311" href="#L311">311</a>                     NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"terminating impersonation"</span>);
      +<a class="jxr_linenumber" name="L312" href="#L312">312</a>                     ctx.revertToSelf();
      +<a class="jxr_linenumber" name="L313" href="#L313">313</a>                 }
      +<a class="jxr_linenumber" name="L314" href="#L314">314</a>             }
      +<a class="jxr_linenumber" name="L315" href="#L315">315</a>         } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L316" href="#L316">316</a>             NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"previously authenticated user: {}"</span>, principal.getName());
      +<a class="jxr_linenumber" name="L317" href="#L317">317</a>             chain.doFilter(request, response);
      +<a class="jxr_linenumber" name="L318" href="#L318">318</a>         }
      +<a class="jxr_linenumber" name="L319" href="#L319">319</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L320" href="#L320">320</a>     }
      +<a class="jxr_linenumber" name="L321" href="#L321">321</a> 
      +<a class="jxr_linenumber" name="L322" href="#L322">322</a>     @Override
      +<a class="jxr_linenumber" name="L323" href="#L323">323</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> init(<strong class="jxr_keyword">final</strong> FilterConfig filterConfig) <strong class="jxr_keyword">throws</strong> ServletException {
      +<a class="jxr_linenumber" name="L324" href="#L324">324</a>         <strong class="jxr_keyword">final</strong> Map&lt;String, String&gt; implParameters = <strong class="jxr_keyword">new</strong> HashMap&lt;&gt;();
      +<a class="jxr_linenumber" name="L325" href="#L325">325</a> 
      +<a class="jxr_linenumber" name="L326" href="#L326">326</a>         NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"[waffle.servlet.NegotiateSecurityFilter] starting"</span>);
      +<a class="jxr_linenumber" name="L327" href="#L327">327</a> 
      +<a class="jxr_linenumber" name="L328" href="#L328">328</a>         String authProvider = <strong class="jxr_keyword">null</strong>;
      +<a class="jxr_linenumber" name="L329" href="#L329">329</a>         String[] providerNames = <strong class="jxr_keyword">null</strong>;
      +<a class="jxr_linenumber" name="L330" href="#L330">330</a>         <strong class="jxr_keyword">if</strong> (filterConfig != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L331" href="#L331">331</a>             <strong class="jxr_keyword">final</strong> List&lt;String&gt; parameterNames = Collections.list(filterConfig.getInitParameterNames());
      +<a class="jxr_linenumber" name="L332" href="#L332">332</a>             NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"[waffle.servlet.NegotiateSecurityFilter] processing filterConfig"</span>);
      +<a class="jxr_linenumber" name="L333" href="#L333">333</a>             <strong class="jxr_keyword">for</strong> (String parameterName : parameterNames) {
      +<a class="jxr_linenumber" name="L334" href="#L334">334</a>                 <strong class="jxr_keyword">final</strong> String parameterValue = filterConfig.getInitParameter(parameterName);
      +<a class="jxr_linenumber" name="L335" href="#L335">335</a>                 NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"Init Param: '{}={}'"</span>, parameterName, parameterValue);
      +<a class="jxr_linenumber" name="L336" href="#L336">336</a>                 <strong class="jxr_keyword">switch</strong> (parameterName) {
      +<a class="jxr_linenumber" name="L337" href="#L337">337</a>                     <strong class="jxr_keyword">case</strong> <span class="jxr_string">"principalFormat"</span>:
      +<a class="jxr_linenumber" name="L338" href="#L338">338</a>                         <strong class="jxr_keyword">this</strong>.principalFormat = PrincipalFormat.valueOf(parameterValue.toUpperCase(Locale.ENGLISH));
      +<a class="jxr_linenumber" name="L339" href="#L339">339</a>                         <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L340" href="#L340">340</a>                     <strong class="jxr_keyword">case</strong> <span class="jxr_string">"roleFormat"</span>:
      +<a class="jxr_linenumber" name="L341" href="#L341">341</a>                         <strong class="jxr_keyword">this</strong>.roleFormat = PrincipalFormat.valueOf(parameterValue.toUpperCase(Locale.ENGLISH));
      +<a class="jxr_linenumber" name="L342" href="#L342">342</a>                         <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L343" href="#L343">343</a>                     <strong class="jxr_keyword">case</strong> <span class="jxr_string">"allowGuestLogin"</span>:
      +<a class="jxr_linenumber" name="L344" href="#L344">344</a>                         <strong class="jxr_keyword">this</strong>.allowGuestLogin = Boolean.parseBoolean(parameterValue);
      +<a class="jxr_linenumber" name="L345" href="#L345">345</a>                         <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L346" href="#L346">346</a>                     <strong class="jxr_keyword">case</strong> <span class="jxr_string">"impersonate"</span>:
      +<a class="jxr_linenumber" name="L347" href="#L347">347</a>                         <strong class="jxr_keyword">this</strong>.impersonate = Boolean.parseBoolean(parameterValue);
      +<a class="jxr_linenumber" name="L348" href="#L348">348</a>                         <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L349" href="#L349">349</a>                     <strong class="jxr_keyword">case</strong> <span class="jxr_string">"securityFilterProviders"</span>:
      +<a class="jxr_linenumber" name="L350" href="#L350">350</a>                         providerNames = parameterValue.split(<span class="jxr_string">"&#92;&#92;s+"</span>, -1);
      +<a class="jxr_linenumber" name="L351" href="#L351">351</a>                         <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L352" href="#L352">352</a>                     <strong class="jxr_keyword">case</strong> <span class="jxr_string">"authProvider"</span>:
      +<a class="jxr_linenumber" name="L353" href="#L353">353</a>                         authProvider = parameterValue;
      +<a class="jxr_linenumber" name="L354" href="#L354">354</a>                         <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L355" href="#L355">355</a>                     <strong class="jxr_keyword">case</strong> <span class="jxr_string">"excludePatterns"</span>:
      +<a class="jxr_linenumber" name="L356" href="#L356">356</a>                         <strong class="jxr_keyword">this</strong>.excludePatterns = parameterValue.split(<span class="jxr_string">"&#92;&#92;s+"</span>, -1);
      +<a class="jxr_linenumber" name="L357" href="#L357">357</a>                         <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L358" href="#L358">358</a>                     <strong class="jxr_keyword">case</strong> <span class="jxr_string">"excludeCorsPreflight"</span>:
      +<a class="jxr_linenumber" name="L359" href="#L359">359</a>                         <strong class="jxr_keyword">this</strong>.excludeCorsPreflight = Boolean.parseBoolean(parameterValue);
      +<a class="jxr_linenumber" name="L360" href="#L360">360</a>                         <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L361" href="#L361">361</a>                     <strong class="jxr_keyword">case</strong> <span class="jxr_string">"excludeBearerAuthorization"</span>:
      +<a class="jxr_linenumber" name="L362" href="#L362">362</a>                         <strong class="jxr_keyword">this</strong>.excludeBearerAuthorization = Boolean.parseBoolean(parameterValue);
      +<a class="jxr_linenumber" name="L363" href="#L363">363</a>                         <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L364" href="#L364">364</a>                     <strong class="jxr_keyword">case</strong> <span class="jxr_string">"disableSSO"</span>:
      +<a class="jxr_linenumber" name="L365" href="#L365">365</a>                         <strong class="jxr_keyword">this</strong>.disableSSO = Boolean.parseBoolean(parameterValue);
      +<a class="jxr_linenumber" name="L366" href="#L366">366</a>                         <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L367" href="#L367">367</a>                     <strong class="jxr_keyword">default</strong>:
      +<a class="jxr_linenumber" name="L368" href="#L368">368</a>                         implParameters.put(parameterName, parameterValue);
      +<a class="jxr_linenumber" name="L369" href="#L369">369</a>                         <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L370" href="#L370">370</a>                 }
      +<a class="jxr_linenumber" name="L371" href="#L371">371</a>             }
      +<a class="jxr_linenumber" name="L372" href="#L372">372</a>         }
      +<a class="jxr_linenumber" name="L373" href="#L373">373</a> 
      +<a class="jxr_linenumber" name="L374" href="#L374">374</a>         NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"[waffle.servlet.NegotiateSecurityFilter] authProvider"</span>);
      +<a class="jxr_linenumber" name="L375" href="#L375">375</a>         <strong class="jxr_keyword">if</strong> (authProvider != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L376" href="#L376">376</a>             <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L377" href="#L377">377</a>                 <strong class="jxr_keyword">this</strong>.auth = Class.forName(authProvider).asSubclass(IWindowsAuthProvider.<strong class="jxr_keyword">class</strong>).getConstructor()
      +<a class="jxr_linenumber" name="L378" href="#L378">378</a>                         .newInstance();
      +<a class="jxr_linenumber" name="L379" href="#L379">379</a>             } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> ClassNotFoundException | IllegalArgumentException | SecurityException
      +<a class="jxr_linenumber" name="L380" href="#L380">380</a>                     | InstantiationException | IllegalAccessException | InvocationTargetException
      +<a class="jxr_linenumber" name="L381" href="#L381">381</a>                     | NoSuchMethodException e) {
      +<a class="jxr_linenumber" name="L382" href="#L382">382</a>                 <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServletException(e);
      +<a class="jxr_linenumber" name="L383" href="#L383">383</a>             }
      +<a class="jxr_linenumber" name="L384" href="#L384">384</a>         }
      +<a class="jxr_linenumber" name="L385" href="#L385">385</a> 
      +<a class="jxr_linenumber" name="L386" href="#L386">386</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.auth == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L387" href="#L387">387</a>             <strong class="jxr_keyword">this</strong>.auth = <strong class="jxr_keyword">new</strong> <a name="WindowsAuthProviderImpl" href="../../waffle/windows/auth/impl/WindowsAuthProviderImpl.html#WindowsAuthProviderImpl">WindowsAuthProviderImpl</a>();
      +<a class="jxr_linenumber" name="L388" href="#L388">388</a>         }
      +<a class="jxr_linenumber" name="L389" href="#L389">389</a> 
      +<a class="jxr_linenumber" name="L390" href="#L390">390</a>         <strong class="jxr_keyword">if</strong> (providerNames != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L391" href="#L391">391</a>             <strong class="jxr_keyword">this</strong>.providers = <strong class="jxr_keyword">new</strong> <a name="SecurityFilterProviderCollection" href="../../waffle/servlet/spi/SecurityFilterProviderCollection.html#SecurityFilterProviderCollection">SecurityFilterProviderCollection</a>(providerNames, <strong class="jxr_keyword">this</strong>.auth);
      +<a class="jxr_linenumber" name="L392" href="#L392">392</a>         }
      +<a class="jxr_linenumber" name="L393" href="#L393">393</a> 
      +<a class="jxr_linenumber" name="L394" href="#L394">394</a>         <em class="jxr_comment">// create default providers if none specified</em>
      +<a class="jxr_linenumber" name="L395" href="#L395">395</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.providers == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L396" href="#L396">396</a>             NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"initializing default security filter providers"</span>);
      +<a class="jxr_linenumber" name="L397" href="#L397">397</a>             <strong class="jxr_keyword">this</strong>.providers = <strong class="jxr_keyword">new</strong> <a name="SecurityFilterProviderCollection" href="../../waffle/servlet/spi/SecurityFilterProviderCollection.html#SecurityFilterProviderCollection">SecurityFilterProviderCollection</a>(<strong class="jxr_keyword">this</strong>.auth);
      +<a class="jxr_linenumber" name="L398" href="#L398">398</a>         }
      +<a class="jxr_linenumber" name="L399" href="#L399">399</a> 
      +<a class="jxr_linenumber" name="L400" href="#L400">400</a>         <em class="jxr_comment">// apply provider implementation parameters</em>
      +<a class="jxr_linenumber" name="L401" href="#L401">401</a>         NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"[waffle.servlet.NegotiateSecurityFilter] load provider parameters"</span>);
      +<a class="jxr_linenumber" name="L402" href="#L402">402</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> Map.Entry&lt;String, String&gt; implParameter : implParameters.entrySet()) {
      +<a class="jxr_linenumber" name="L403" href="#L403">403</a>             <strong class="jxr_keyword">final</strong> String[] classAndParameter = implParameter.getKey().split(<span class="jxr_string">"/"</span>, 2);
      +<a class="jxr_linenumber" name="L404" href="#L404">404</a>             <strong class="jxr_keyword">if</strong> (classAndParameter.length == 2) {
      +<a class="jxr_linenumber" name="L405" href="#L405">405</a>                 <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L406" href="#L406">406</a> 
      +<a class="jxr_linenumber" name="L407" href="#L407">407</a>                     NegotiateSecurityFilter.LOGGER.debug(<span class="jxr_string">"setting {}, {}={}"</span>, classAndParameter[0],
      +<a class="jxr_linenumber" name="L408" href="#L408">408</a>                             classAndParameter[1], implParameter.getValue());
      +<a class="jxr_linenumber" name="L409" href="#L409">409</a> 
      +<a class="jxr_linenumber" name="L410" href="#L410">410</a>                     <strong class="jxr_keyword">final</strong> <a name="SecurityFilterProvider" href="../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> provider = <strong class="jxr_keyword">this</strong>.providers.getByClassName(classAndParameter[0]);
      +<a class="jxr_linenumber" name="L411" href="#L411">411</a>                     provider.initParameter(classAndParameter[1], implParameter.getValue());
      +<a class="jxr_linenumber" name="L412" href="#L412">412</a> 
      +<a class="jxr_linenumber" name="L413" href="#L413">413</a>                 } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> ClassNotFoundException e) {
      +<a class="jxr_linenumber" name="L414" href="#L414">414</a>                     NegotiateSecurityFilter.LOGGER.error(<span class="jxr_string">"invalid class: {} in {}"</span>, classAndParameter[0],
      +<a class="jxr_linenumber" name="L415" href="#L415">415</a>                             implParameter.getKey());
      +<a class="jxr_linenumber" name="L416" href="#L416">416</a>                     <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServletException(e);
      +<a class="jxr_linenumber" name="L417" href="#L417">417</a>                 } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> Exception e) {
      +<a class="jxr_linenumber" name="L418" href="#L418">418</a>                     NegotiateSecurityFilter.LOGGER.error(<span class="jxr_string">"Error setting {} in {}"</span>, classAndParameter[0],
      +<a class="jxr_linenumber" name="L419" href="#L419">419</a>                             classAndParameter[1]);
      +<a class="jxr_linenumber" name="L420" href="#L420">420</a>                     <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServletException(e);
      +<a class="jxr_linenumber" name="L421" href="#L421">421</a>                 }
      +<a class="jxr_linenumber" name="L422" href="#L422">422</a>             } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L423" href="#L423">423</a>                 NegotiateSecurityFilter.LOGGER.error(<span class="jxr_string">"Invalid parameter: {}"</span>, implParameter.getKey());
      +<a class="jxr_linenumber" name="L424" href="#L424">424</a>                 <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ServletException(<span class="jxr_string">"Invalid parameter: "</span> + implParameter.getKey());
      +<a class="jxr_linenumber" name="L425" href="#L425">425</a>             }
      +<a class="jxr_linenumber" name="L426" href="#L426">426</a>         }
      +<a class="jxr_linenumber" name="L427" href="#L427">427</a> 
      +<a class="jxr_linenumber" name="L428" href="#L428">428</a>         NegotiateSecurityFilter.LOGGER.info(<span class="jxr_string">"[waffle.servlet.NegotiateSecurityFilter] started"</span>);
      +<a class="jxr_linenumber" name="L429" href="#L429">429</a>     }
      +<a class="jxr_linenumber" name="L430" href="#L430">430</a> 
      +<a class="jxr_linenumber" name="L431" href="#L431">431</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L432" href="#L432">432</a> <em class="jxr_javadoccomment">     * Set the principal format.</em>
      +<a class="jxr_linenumber" name="L433" href="#L433">433</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L434" href="#L434">434</a> <em class="jxr_javadoccomment">     * @param format</em>
      +<a class="jxr_linenumber" name="L435" href="#L435">435</a> <em class="jxr_javadoccomment">     *            Principal format.</em>
      +<a class="jxr_linenumber" name="L436" href="#L436">436</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L437" href="#L437">437</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setPrincipalFormat(<strong class="jxr_keyword">final</strong> String format) {
      +<a class="jxr_linenumber" name="L438" href="#L438">438</a>         <strong class="jxr_keyword">this</strong>.principalFormat = PrincipalFormat.valueOf(format.toUpperCase(Locale.ENGLISH));
      +<a class="jxr_linenumber" name="L439" href="#L439">439</a>         NegotiateSecurityFilter.LOGGER.info(<span class="jxr_string">"principal format: {}"</span>, <strong class="jxr_keyword">this</strong>.principalFormat);
      +<a class="jxr_linenumber" name="L440" href="#L440">440</a>     }
      +<a class="jxr_linenumber" name="L441" href="#L441">441</a> 
      +<a class="jxr_linenumber" name="L442" href="#L442">442</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L443" href="#L443">443</a> <em class="jxr_javadoccomment">     * Principal format.</em>
      +<a class="jxr_linenumber" name="L444" href="#L444">444</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L445" href="#L445">445</a> <em class="jxr_javadoccomment">     * @return Principal format.</em>
      +<a class="jxr_linenumber" name="L446" href="#L446">446</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L447" href="#L447">447</a>     <strong class="jxr_keyword">public</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> getPrincipalFormat() {
      +<a class="jxr_linenumber" name="L448" href="#L448">448</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.principalFormat;
      +<a class="jxr_linenumber" name="L449" href="#L449">449</a>     }
      +<a class="jxr_linenumber" name="L450" href="#L450">450</a> 
      +<a class="jxr_linenumber" name="L451" href="#L451">451</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L452" href="#L452">452</a> <em class="jxr_javadoccomment">     * Set the principal format.</em>
      +<a class="jxr_linenumber" name="L453" href="#L453">453</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L454" href="#L454">454</a> <em class="jxr_javadoccomment">     * @param format</em>
      +<a class="jxr_linenumber" name="L455" href="#L455">455</a> <em class="jxr_javadoccomment">     *            Role format.</em>
      +<a class="jxr_linenumber" name="L456" href="#L456">456</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L457" href="#L457">457</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setRoleFormat(<strong class="jxr_keyword">final</strong> String format) {
      +<a class="jxr_linenumber" name="L458" href="#L458">458</a>         <strong class="jxr_keyword">this</strong>.roleFormat = PrincipalFormat.valueOf(format.toUpperCase(Locale.ENGLISH));
      +<a class="jxr_linenumber" name="L459" href="#L459">459</a>         NegotiateSecurityFilter.LOGGER.info(<span class="jxr_string">"role format: {}"</span>, <strong class="jxr_keyword">this</strong>.roleFormat);
      +<a class="jxr_linenumber" name="L460" href="#L460">460</a>     }
      +<a class="jxr_linenumber" name="L461" href="#L461">461</a> 
      +<a class="jxr_linenumber" name="L462" href="#L462">462</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L463" href="#L463">463</a> <em class="jxr_javadoccomment">     * Principal format.</em>
      +<a class="jxr_linenumber" name="L464" href="#L464">464</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L465" href="#L465">465</a> <em class="jxr_javadoccomment">     * @return Role format.</em>
      +<a class="jxr_linenumber" name="L466" href="#L466">466</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L467" href="#L467">467</a>     <strong class="jxr_keyword">public</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> getRoleFormat() {
      +<a class="jxr_linenumber" name="L468" href="#L468">468</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.roleFormat;
      +<a class="jxr_linenumber" name="L469" href="#L469">469</a>     }
      +<a class="jxr_linenumber" name="L470" href="#L470">470</a> 
      +<a class="jxr_linenumber" name="L471" href="#L471">471</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L472" href="#L472">472</a> <em class="jxr_javadoccomment">     * Send a 401 Unauthorized along with protocol authentication headers.</em>
      +<a class="jxr_linenumber" name="L473" href="#L473">473</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L474" href="#L474">474</a> <em class="jxr_javadoccomment">     * @param response</em>
      +<a class="jxr_linenumber" name="L475" href="#L475">475</a> <em class="jxr_javadoccomment">     *            HTTP Response</em>
      +<a class="jxr_linenumber" name="L476" href="#L476">476</a> <em class="jxr_javadoccomment">     * @param close</em>
      +<a class="jxr_linenumber" name="L477" href="#L477">477</a> <em class="jxr_javadoccomment">     *            Close connection.</em>
      +<a class="jxr_linenumber" name="L478" href="#L478">478</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L479" href="#L479">479</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">void</strong> sendUnauthorized(<strong class="jxr_keyword">final</strong> HttpServletResponse response, <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> close) {
      +<a class="jxr_linenumber" name="L480" href="#L480">480</a>         <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L481" href="#L481">481</a>             <strong class="jxr_keyword">this</strong>.providers.sendUnauthorized(response);
      +<a class="jxr_linenumber" name="L482" href="#L482">482</a>             <strong class="jxr_keyword">if</strong> (close) {
      +<a class="jxr_linenumber" name="L483" href="#L483">483</a>                 response.setHeader(<span class="jxr_string">"Connection"</span>, <span class="jxr_string">"close"</span>);
      +<a class="jxr_linenumber" name="L484" href="#L484">484</a>             } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L485" href="#L485">485</a>                 response.setHeader(<span class="jxr_string">"Connection"</span>, <span class="jxr_string">"keep-alive"</span>);
      +<a class="jxr_linenumber" name="L486" href="#L486">486</a>             }
      +<a class="jxr_linenumber" name="L487" href="#L487">487</a>             response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
      +<a class="jxr_linenumber" name="L488" href="#L488">488</a>             response.flushBuffer();
      +<a class="jxr_linenumber" name="L489" href="#L489">489</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> IOException e) {
      +<a class="jxr_linenumber" name="L490" href="#L490">490</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(e);
      +<a class="jxr_linenumber" name="L491" href="#L491">491</a>         }
      +<a class="jxr_linenumber" name="L492" href="#L492">492</a>     }
      +<a class="jxr_linenumber" name="L493" href="#L493">493</a> 
      +<a class="jxr_linenumber" name="L494" href="#L494">494</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L495" href="#L495">495</a> <em class="jxr_javadoccomment">     * Windows auth provider.</em>
      +<a class="jxr_linenumber" name="L496" href="#L496">496</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L497" href="#L497">497</a> <em class="jxr_javadoccomment">     * @return IWindowsAuthProvider.</em>
      +<a class="jxr_linenumber" name="L498" href="#L498">498</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L499" href="#L499">499</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsAuthProvider" href="../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> getAuth() {
      +<a class="jxr_linenumber" name="L500" href="#L500">500</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.auth;
      +<a class="jxr_linenumber" name="L501" href="#L501">501</a>     }
      +<a class="jxr_linenumber" name="L502" href="#L502">502</a> 
      +<a class="jxr_linenumber" name="L503" href="#L503">503</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L504" href="#L504">504</a> <em class="jxr_javadoccomment">     * Set Windows auth provider.</em>
      +<a class="jxr_linenumber" name="L505" href="#L505">505</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L506" href="#L506">506</a> <em class="jxr_javadoccomment">     * @param provider</em>
      +<a class="jxr_linenumber" name="L507" href="#L507">507</a> <em class="jxr_javadoccomment">     *            Class implements IWindowsAuthProvider.</em>
      +<a class="jxr_linenumber" name="L508" href="#L508">508</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L509" href="#L509">509</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setAuth(<strong class="jxr_keyword">final</strong> <a name="IWindowsAuthProvider" href="../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> provider) {
      +<a class="jxr_linenumber" name="L510" href="#L510">510</a>         <strong class="jxr_keyword">this</strong>.auth = provider;
      +<a class="jxr_linenumber" name="L511" href="#L511">511</a>     }
      +<a class="jxr_linenumber" name="L512" href="#L512">512</a> 
      +<a class="jxr_linenumber" name="L513" href="#L513">513</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L514" href="#L514">514</a> <em class="jxr_javadoccomment">     * True if guest login is allowed.</em>
      +<a class="jxr_linenumber" name="L515" href="#L515">515</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L516" href="#L516">516</a> <em class="jxr_javadoccomment">     * @return True if guest login is allowed, false otherwise.</em>
      +<a class="jxr_linenumber" name="L517" href="#L517">517</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L518" href="#L518">518</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isAllowGuestLogin() {
      +<a class="jxr_linenumber" name="L519" href="#L519">519</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.allowGuestLogin;
      +<a class="jxr_linenumber" name="L520" href="#L520">520</a>     }
      +<a class="jxr_linenumber" name="L521" href="#L521">521</a> 
      +<a class="jxr_linenumber" name="L522" href="#L522">522</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L523" href="#L523">523</a> <em class="jxr_javadoccomment">     * Enable/Disable impersonation.</em>
      +<a class="jxr_linenumber" name="L524" href="#L524">524</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L525" href="#L525">525</a> <em class="jxr_javadoccomment">     * @param value</em>
      +<a class="jxr_linenumber" name="L526" href="#L526">526</a> <em class="jxr_javadoccomment">     *            true to enable impersonation, false otherwise</em>
      +<a class="jxr_linenumber" name="L527" href="#L527">527</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L528" href="#L528">528</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setImpersonate(<strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> value) {
      +<a class="jxr_linenumber" name="L529" href="#L529">529</a>         <strong class="jxr_keyword">this</strong>.impersonate = value;
      +<a class="jxr_linenumber" name="L530" href="#L530">530</a>     }
      +<a class="jxr_linenumber" name="L531" href="#L531">531</a> 
      +<a class="jxr_linenumber" name="L532" href="#L532">532</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L533" href="#L533">533</a> <em class="jxr_javadoccomment">     * Checks if is impersonate.</em>
      +<a class="jxr_linenumber" name="L534" href="#L534">534</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L535" href="#L535">535</a> <em class="jxr_javadoccomment">     * @return true if impersonation is enabled, false otherwise</em>
      +<a class="jxr_linenumber" name="L536" href="#L536">536</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L537" href="#L537">537</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isImpersonate() {
      +<a class="jxr_linenumber" name="L538" href="#L538">538</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.impersonate;
      +<a class="jxr_linenumber" name="L539" href="#L539">539</a>     }
      +<a class="jxr_linenumber" name="L540" href="#L540">540</a> 
      +<a class="jxr_linenumber" name="L541" href="#L541">541</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L542" href="#L542">542</a> <em class="jxr_javadoccomment">     * Security filter providers.</em>
      +<a class="jxr_linenumber" name="L543" href="#L543">543</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L544" href="#L544">544</a> <em class="jxr_javadoccomment">     * @return A collection of security filter providers.</em>
      +<a class="jxr_linenumber" name="L545" href="#L545">545</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L546" href="#L546">546</a>     <strong class="jxr_keyword">public</strong> <a name="SecurityFilterProviderCollection" href="../../waffle/servlet/spi/SecurityFilterProviderCollection.html#SecurityFilterProviderCollection">SecurityFilterProviderCollection</a> getProviders() {
      +<a class="jxr_linenumber" name="L547" href="#L547">547</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.providers;
      +<a class="jxr_linenumber" name="L548" href="#L548">548</a>     }
      +<a class="jxr_linenumber" name="L549" href="#L549">549</a> 
      +<a class="jxr_linenumber" name="L550" href="#L550">550</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isWindows() {
      +<a class="jxr_linenumber" name="L551" href="#L551">551</a>         <strong class="jxr_keyword">if</strong> (NegotiateSecurityFilter.windows == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L552" href="#L552">552</a>             NegotiateSecurityFilter.windows = System.getProperty(<span class="jxr_string">"os.name"</span>).toLowerCase(Locale.ENGLISH).contains(<span class="jxr_string">"win"</span>);
      +<a class="jxr_linenumber" name="L553" href="#L553">553</a>         }
      +<a class="jxr_linenumber" name="L554" href="#L554">554</a>         <strong class="jxr_keyword">return</strong> NegotiateSecurityFilter.windows.booleanValue();
      +<a class="jxr_linenumber" name="L555" href="#L555">555</a>     }
      +<a class="jxr_linenumber" name="L556" href="#L556">556</a> 
      +<a class="jxr_linenumber" name="L557" href="#L557">557</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/WaffleInfoServlet.html b/waffle-jna-jakarta/xref/waffle/servlet/WaffleInfoServlet.html
      new file mode 100644
      index 0000000000..ff14bc9ca0
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/WaffleInfoServlet.html
      @@ -0,0 +1,175 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WaffleInfoServlet xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/servlet/WaffleInfoServlet.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2022 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServlet;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletResponse;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.security.Principal;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> java.util.Collections;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> java.util.List;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> javax.xml.XMLConstants;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> javax.xml.parsers.ParserConfigurationException;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> javax.xml.transform.OutputKeys;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> javax.xml.transform.Transformer;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <strong class="jxr_keyword">import</strong> javax.xml.transform.TransformerException;
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">import</strong> javax.xml.transform.TransformerFactory;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <strong class="jxr_keyword">import</strong> javax.xml.transform.dom.DOMSource;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <strong class="jxr_keyword">import</strong> javax.xml.transform.stream.StreamResult;
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <strong class="jxr_keyword">import</strong> org.w3c.dom.Document;
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <strong class="jxr_keyword">import</strong> org.w3c.dom.Element;
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <strong class="jxr_keyword">import</strong> waffle.util.WaffleInfo;
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment"> * A servlet that returns WaffleInfo as XML.</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WaffleInfoServlet" href="../../waffle/servlet/WaffleInfoServlet.html#WaffleInfoServlet">WaffleInfoServlet</a> <strong class="jxr_keyword">extends</strong> HttpServlet {
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <em class="jxr_javadoccomment">/** The Constant serialVersionUID. */</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> serialVersionUID = 1L;
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <em class="jxr_javadoccomment">/** The Constant Logger. */</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Logger logger = LoggerFactory.getLogger(WaffleInfoServlet.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      @Override
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> doGet(<strong class="jxr_keyword">final</strong> HttpServletRequest request, <strong class="jxr_keyword">final</strong> HttpServletResponse response) {
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>          <strong class="jxr_keyword">this</strong>.getWaffleInfoResponse(request, response);
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      }
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      @Override
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> doPost(<strong class="jxr_keyword">final</strong> HttpServletRequest request, <strong class="jxr_keyword">final</strong> HttpServletResponse response) {
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          <strong class="jxr_keyword">this</strong>.getWaffleInfoResponse(request, response);
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      }
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     * Gets the waffle info response.</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     * @param request</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     *            the request</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment">     * @param response</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  <em class="jxr_javadoccomment">     *            the response</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> getWaffleInfoResponse(<strong class="jxr_keyword">final</strong> HttpServletRequest request, <strong class="jxr_keyword">final</strong> HttpServletResponse response) {
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>          <strong class="jxr_keyword">final</strong> <a name="WaffleInfo" href="../../waffle/util/WaffleInfo.html#WaffleInfo">WaffleInfo</a> info = <strong class="jxr_keyword">new</strong> <a name="WaffleInfo" href="../../waffle/util/WaffleInfo.html#WaffleInfo">WaffleInfo</a>();
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>          <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>              <strong class="jxr_keyword">final</strong> Document doc = info.getWaffleInfo();
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>              <strong class="jxr_keyword">final</strong> Element root = doc.getDocumentElement();
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>              <em class="jxr_comment">// Add the Request Information Here</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>              <strong class="jxr_keyword">final</strong> Element http = <strong class="jxr_keyword">this</strong>.getRequestInfo(doc, request);
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>              root.insertBefore(http, root.getFirstChild());
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>              <em class="jxr_comment">// Lookup Accounts By Name</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>              <strong class="jxr_keyword">final</strong> String[] lookup = request.getParameterValues(<span class="jxr_string">"lookup"</span>);
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>              <strong class="jxr_keyword">if</strong> (lookup != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>                  <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> String name : lookup) {
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>                      root.appendChild(info.getLookupInfo(doc, name));
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>                  }
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>              }
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>  
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>              <em class="jxr_comment">// Write the XML Response</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>              <strong class="jxr_keyword">final</strong> TransformerFactory transfac = TransformerFactory.newInstance();
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>             transfac.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, <span class="jxr_string">""</span>);
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>             transfac.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, <span class="jxr_string">""</span>);
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a> 
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>             <strong class="jxr_keyword">final</strong> Transformer trans = transfac.newTransformer();
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>             trans.setOutputProperty(OutputKeys.INDENT, <span class="jxr_string">"yes"</span>);
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a> 
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>             <strong class="jxr_keyword">final</strong> StreamResult result = <strong class="jxr_keyword">new</strong> StreamResult(response.getWriter());
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>             <strong class="jxr_keyword">final</strong> DOMSource source = <strong class="jxr_keyword">new</strong> DOMSource(doc);
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>             trans.transform(source, result);
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>             response.setContentType(<span class="jxr_string">"application/xml"</span>);
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> ParserConfigurationException | TransformerException | IOException e) {
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>             WaffleInfoServlet.logger.error(<span class="jxr_string">""</span>, e);
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"See logs for underlying error condition"</span>);
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>         }
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a>     }
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> 
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a> <em class="jxr_javadoccomment">     * Gets the request info.</em>
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_javadoccomment">     * @param doc</em>
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a> <em class="jxr_javadoccomment">     *            the doc</em>
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a> <em class="jxr_javadoccomment">     * @param request</em>
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment">     *            the request</em>
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment">     * @return the request info</em>
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>     <strong class="jxr_keyword">private</strong> Element getRequestInfo(<strong class="jxr_keyword">final</strong> Document doc, <strong class="jxr_keyword">final</strong> HttpServletRequest request) {
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>         <strong class="jxr_keyword">final</strong> Element node = doc.createElement(<span class="jxr_string">"request"</span>);
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a> 
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a>         Element value = doc.createElement(<span class="jxr_string">"AuthType"</span>);
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a>         value.setTextContent(request.getAuthType());
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a>         node.appendChild(value);
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a> 
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>         <strong class="jxr_keyword">final</strong> Principal p = request.getUserPrincipal();
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>         <strong class="jxr_keyword">if</strong> (p != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>             <strong class="jxr_keyword">final</strong> Element child = doc.createElement(<span class="jxr_string">"principal"</span>);
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a>             child.setAttribute(<span class="jxr_string">"class"</span>, p.getClass().getName());
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a> 
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>             value = doc.createElement(<span class="jxr_string">"name"</span>);
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a>             value.setTextContent(p.getName());
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a>             child.appendChild(value);
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a> 
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a>             value = doc.createElement(<span class="jxr_string">"string"</span>);
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a>             value.setTextContent(p.toString());
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a>             child.appendChild(value);
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a> 
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a>             node.appendChild(child);
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a>         }
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a> 
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a>         <strong class="jxr_keyword">final</strong> List&lt;String&gt; headers = Collections.list(request.getHeaderNames());
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a>         <strong class="jxr_keyword">if</strong> (!headers.isEmpty()) {
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a>             <strong class="jxr_keyword">final</strong> Element child = doc.createElement(<span class="jxr_string">"headers"</span>);
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a>             <strong class="jxr_keyword">for</strong> (String header : headers) {
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a>                 value = doc.createElement(header);
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a>                 value.setTextContent(request.getHeader(header));
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a>                 child.appendChild(value);
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a>             }
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>             node.appendChild(child);
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a>         }
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a>         <strong class="jxr_keyword">return</strong> node;
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a>     }
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a> 
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/WindowsPrincipal.html b/waffle-jna-jakarta/xref/waffle/servlet/WindowsPrincipal.html
      new file mode 100644
      index 0000000000..4d1acf84b8
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/WindowsPrincipal.html
      @@ -0,0 +1,296 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsPrincipal xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/servlet/WindowsPrincipal.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> java.io.Serializable;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> java.security.Principal;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.util.HashMap;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.util.List;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.util.Map;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAccount;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsIdentity;
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.PrincipalFormat;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.WindowsAccount;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment"> * A Windows Principal.</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a> <strong class="jxr_keyword">implements</strong> Principal, Serializable {
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <em class="jxr_javadoccomment">/** The Constant serialVersionUID. */</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> serialVersionUID = 1L;
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <em class="jxr_javadoccomment">/** The fqn. */</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String fqn;
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <em class="jxr_javadoccomment">/** The sid. */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> byte[] sid;
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <em class="jxr_javadoccomment">/** The sid string. */</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String sidString;
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <em class="jxr_javadoccomment">/** The roles. */</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List&lt;String&gt; roles;
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      <em class="jxr_javadoccomment">/** The identity. */</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">transient</strong> <a name="IWindowsIdentity" href="../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> identity;
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <em class="jxr_javadoccomment">/** The groups. */</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Map&lt;String, WindowsAccount&gt; groups;
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     * A windows principal.</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     * @param windowsIdentity</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  <em class="jxr_javadoccomment">     *            Windows identity.</em>
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a>(<strong class="jxr_keyword">final</strong> <a name="IWindowsIdentity" href="../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> windowsIdentity) {
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          <strong class="jxr_keyword">this</strong>(windowsIdentity, PrincipalFormat.FQN, PrincipalFormat.FQN);
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      }
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     * A windows principal.</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment">     * @param windowsIdentity</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  <em class="jxr_javadoccomment">     *            Windows identity.</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">     * @param principalFormat</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>  <em class="jxr_javadoccomment">     *            Principal format.</em>
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  <em class="jxr_javadoccomment">     * @param roleFormat</em>
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  <em class="jxr_javadoccomment">     *            Role format.</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a>(<strong class="jxr_keyword">final</strong> <a name="IWindowsIdentity" href="../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> windowsIdentity, <strong class="jxr_keyword">final</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> principalFormat,
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>              <strong class="jxr_keyword">final</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> roleFormat) {
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>          <strong class="jxr_keyword">this</strong>.identity = windowsIdentity;
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>          <strong class="jxr_keyword">this</strong>.fqn = windowsIdentity.getFqn();
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>          <strong class="jxr_keyword">this</strong>.sid = windowsIdentity.getSid();
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>          <strong class="jxr_keyword">this</strong>.sidString = windowsIdentity.getSidString();
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>          <strong class="jxr_keyword">this</strong>.groups = WindowsPrincipal.getGroups(windowsIdentity.getGroups());
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>          <strong class="jxr_keyword">this</strong>.roles = WindowsPrincipal.getRoles(windowsIdentity, principalFormat, roleFormat);
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>      }
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>  <em class="jxr_javadoccomment">     * Gets the roles.</em>
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>  <em class="jxr_javadoccomment">     * @param windowsIdentity</em>
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  <em class="jxr_javadoccomment">     *            the windows identity</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>  <em class="jxr_javadoccomment">     * @param principalFormat</em>
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment">     *            the principal format</em>
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment">     * @param roleFormat</em>
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment">     *            the role format</em>
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment">     * @return the roles</em>
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> List&lt;String&gt; getRoles(<strong class="jxr_keyword">final</strong> <a name="IWindowsIdentity" href="../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> windowsIdentity, <strong class="jxr_keyword">final</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> principalFormat,
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>             <strong class="jxr_keyword">final</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> roleFormat) {
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>         <strong class="jxr_keyword">final</strong> List&lt;String&gt; roles = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>         roles.addAll(WindowsPrincipal.getPrincipalNames(windowsIdentity, principalFormat));
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> <a name="IWindowsAccount" href="../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a> group : windowsIdentity.getGroups()) {
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>             roles.addAll(WindowsPrincipal.getRoleNames(group, roleFormat));
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>         }
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>         <strong class="jxr_keyword">return</strong> roles;
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a>     }
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> 
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a> <em class="jxr_javadoccomment">     * Gets the groups.</em>
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_javadoccomment">     * @param groups</em>
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a> <em class="jxr_javadoccomment">     *            the groups</em>
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment">     * @return the groups</em>
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> Map&lt;String, WindowsAccount&gt; getGroups(<strong class="jxr_keyword">final</strong> <a name="IWindowsAccount" href="../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a>[] groups) {
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a>         <strong class="jxr_keyword">final</strong> Map&lt;String, WindowsAccount&gt; groupMap = <strong class="jxr_keyword">new</strong> HashMap&lt;&gt;();
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> <a name="IWindowsAccount" href="../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a> group : groups) {
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>             groupMap.put(group.getFqn(), <strong class="jxr_keyword">new</strong> <a name="WindowsAccount" href="../../waffle/windows/auth/WindowsAccount.html#WindowsAccount">WindowsAccount</a>(group));
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>         }
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a>         <strong class="jxr_keyword">return</strong> groupMap;
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a>     }
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a> 
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a> <em class="jxr_javadoccomment">     * Byte representation of the SID.</em>
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a> <em class="jxr_javadoccomment">     * @return Array of bytes.</em>
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a>     <strong class="jxr_keyword">public</strong> byte[] getSid() {
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.sid.clone();
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a>     }
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a> 
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a> <em class="jxr_javadoccomment">     * String representation of the SID.</em>
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a> <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a>     <strong class="jxr_keyword">public</strong> String getSidString() {
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.sidString;
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a>     }
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a> 
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a> <em class="jxr_javadoccomment">     * Windows groups that the user is a member of.</em>
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a> <em class="jxr_javadoccomment">     * @return A map of group names to groups.</em>
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a>     <strong class="jxr_keyword">public</strong> Map&lt;String, WindowsAccount&gt; getGroups() {
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.groups;
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>     }
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a> 
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a> <em class="jxr_javadoccomment">     * Returns a list of role principal objects.</em>
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a> <em class="jxr_javadoccomment">     * @param group</em>
      +<a class="jxr_linenumber" name="L163" href="#L163">163</a> <em class="jxr_javadoccomment">     *            Windows group.</em>
      +<a class="jxr_linenumber" name="L164" href="#L164">164</a> <em class="jxr_javadoccomment">     * @param principalFormat</em>
      +<a class="jxr_linenumber" name="L165" href="#L165">165</a> <em class="jxr_javadoccomment">     *            Principal format.</em>
      +<a class="jxr_linenumber" name="L166" href="#L166">166</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L167" href="#L167">167</a> <em class="jxr_javadoccomment">     * @return List of role principal objects.</em>
      +<a class="jxr_linenumber" name="L168" href="#L168">168</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L169" href="#L169">169</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> List&lt;String&gt; getRoleNames(<strong class="jxr_keyword">final</strong> <a name="IWindowsAccount" href="../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a> group, <strong class="jxr_keyword">final</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> principalFormat) {
      +<a class="jxr_linenumber" name="L170" href="#L170">170</a>         <strong class="jxr_keyword">final</strong> List&lt;String&gt; principals = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
      +<a class="jxr_linenumber" name="L171" href="#L171">171</a>         <strong class="jxr_keyword">switch</strong> (principalFormat) {
      +<a class="jxr_linenumber" name="L172" href="#L172">172</a>             <strong class="jxr_keyword">case</strong> FQN:
      +<a class="jxr_linenumber" name="L173" href="#L173">173</a>                 principals.add(group.getFqn());
      +<a class="jxr_linenumber" name="L174" href="#L174">174</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L175" href="#L175">175</a>             <strong class="jxr_keyword">case</strong> SID:
      +<a class="jxr_linenumber" name="L176" href="#L176">176</a>                 principals.add(group.getSidString());
      +<a class="jxr_linenumber" name="L177" href="#L177">177</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L178" href="#L178">178</a>             <strong class="jxr_keyword">case</strong> BOTH:
      +<a class="jxr_linenumber" name="L179" href="#L179">179</a>                 principals.add(group.getFqn());
      +<a class="jxr_linenumber" name="L180" href="#L180">180</a>                 principals.add(group.getSidString());
      +<a class="jxr_linenumber" name="L181" href="#L181">181</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L182" href="#L182">182</a>             <strong class="jxr_keyword">case</strong> NONE:
      +<a class="jxr_linenumber" name="L183" href="#L183">183</a>             <strong class="jxr_keyword">default</strong>:
      +<a class="jxr_linenumber" name="L184" href="#L184">184</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L185" href="#L185">185</a>         }
      +<a class="jxr_linenumber" name="L186" href="#L186">186</a>         <strong class="jxr_keyword">return</strong> principals;
      +<a class="jxr_linenumber" name="L187" href="#L187">187</a>     }
      +<a class="jxr_linenumber" name="L188" href="#L188">188</a> 
      +<a class="jxr_linenumber" name="L189" href="#L189">189</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L190" href="#L190">190</a> <em class="jxr_javadoccomment">     * Returns a list of user principal objects.</em>
      +<a class="jxr_linenumber" name="L191" href="#L191">191</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L192" href="#L192">192</a> <em class="jxr_javadoccomment">     * @param windowsIdentity</em>
      +<a class="jxr_linenumber" name="L193" href="#L193">193</a> <em class="jxr_javadoccomment">     *            Windows identity.</em>
      +<a class="jxr_linenumber" name="L194" href="#L194">194</a> <em class="jxr_javadoccomment">     * @param principalFormat</em>
      +<a class="jxr_linenumber" name="L195" href="#L195">195</a> <em class="jxr_javadoccomment">     *            Principal format.</em>
      +<a class="jxr_linenumber" name="L196" href="#L196">196</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L197" href="#L197">197</a> <em class="jxr_javadoccomment">     * @return A list of user principal objects.</em>
      +<a class="jxr_linenumber" name="L198" href="#L198">198</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L199" href="#L199">199</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> List&lt;String&gt; getPrincipalNames(<strong class="jxr_keyword">final</strong> <a name="IWindowsIdentity" href="../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> windowsIdentity,
      +<a class="jxr_linenumber" name="L200" href="#L200">200</a>             <strong class="jxr_keyword">final</strong> <a name="PrincipalFormat" href="../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> principalFormat) {
      +<a class="jxr_linenumber" name="L201" href="#L201">201</a>         <strong class="jxr_keyword">final</strong> List&lt;String&gt; principals = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
      +<a class="jxr_linenumber" name="L202" href="#L202">202</a>         <strong class="jxr_keyword">switch</strong> (principalFormat) {
      +<a class="jxr_linenumber" name="L203" href="#L203">203</a>             <strong class="jxr_keyword">case</strong> FQN:
      +<a class="jxr_linenumber" name="L204" href="#L204">204</a>                 principals.add(windowsIdentity.getFqn());
      +<a class="jxr_linenumber" name="L205" href="#L205">205</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L206" href="#L206">206</a>             <strong class="jxr_keyword">case</strong> SID:
      +<a class="jxr_linenumber" name="L207" href="#L207">207</a>                 principals.add(windowsIdentity.getSidString());
      +<a class="jxr_linenumber" name="L208" href="#L208">208</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L209" href="#L209">209</a>             <strong class="jxr_keyword">case</strong> BOTH:
      +<a class="jxr_linenumber" name="L210" href="#L210">210</a>                 principals.add(windowsIdentity.getFqn());
      +<a class="jxr_linenumber" name="L211" href="#L211">211</a>                 principals.add(windowsIdentity.getSidString());
      +<a class="jxr_linenumber" name="L212" href="#L212">212</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L213" href="#L213">213</a>             <strong class="jxr_keyword">case</strong> NONE:
      +<a class="jxr_linenumber" name="L214" href="#L214">214</a>             <strong class="jxr_keyword">default</strong>:
      +<a class="jxr_linenumber" name="L215" href="#L215">215</a>                 <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L216" href="#L216">216</a>         }
      +<a class="jxr_linenumber" name="L217" href="#L217">217</a>         <strong class="jxr_keyword">return</strong> principals;
      +<a class="jxr_linenumber" name="L218" href="#L218">218</a>     }
      +<a class="jxr_linenumber" name="L219" href="#L219">219</a> 
      +<a class="jxr_linenumber" name="L220" href="#L220">220</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L221" href="#L221">221</a> <em class="jxr_javadoccomment">     * Get an array of roles as a string.</em>
      +<a class="jxr_linenumber" name="L222" href="#L222">222</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L223" href="#L223">223</a> <em class="jxr_javadoccomment">     * @return Role1, Role2, ...</em>
      +<a class="jxr_linenumber" name="L224" href="#L224">224</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L225" href="#L225">225</a>     <strong class="jxr_keyword">public</strong> String getRolesString() {
      +<a class="jxr_linenumber" name="L226" href="#L226">226</a>         <strong class="jxr_keyword">return</strong> String.join(<span class="jxr_string">", "</span>, <strong class="jxr_keyword">this</strong>.roles);
      +<a class="jxr_linenumber" name="L227" href="#L227">227</a>     }
      +<a class="jxr_linenumber" name="L228" href="#L228">228</a> 
      +<a class="jxr_linenumber" name="L229" href="#L229">229</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L230" href="#L230">230</a> <em class="jxr_javadoccomment">     * Checks whether the principal has a given role.</em>
      +<a class="jxr_linenumber" name="L231" href="#L231">231</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L232" href="#L232">232</a> <em class="jxr_javadoccomment">     * @param role</em>
      +<a class="jxr_linenumber" name="L233" href="#L233">233</a> <em class="jxr_javadoccomment">     *            Role name.</em>
      +<a class="jxr_linenumber" name="L234" href="#L234">234</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L235" href="#L235">235</a> <em class="jxr_javadoccomment">     * @return True if the principal has a role, false otherwise.</em>
      +<a class="jxr_linenumber" name="L236" href="#L236">236</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L237" href="#L237">237</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> hasRole(<strong class="jxr_keyword">final</strong> String role) {
      +<a class="jxr_linenumber" name="L238" href="#L238">238</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.roles.contains(role);
      +<a class="jxr_linenumber" name="L239" href="#L239">239</a>     }
      +<a class="jxr_linenumber" name="L240" href="#L240">240</a> 
      +<a class="jxr_linenumber" name="L241" href="#L241">241</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L242" href="#L242">242</a> <em class="jxr_javadoccomment">     * Fully qualified name.</em>
      +<a class="jxr_linenumber" name="L243" href="#L243">243</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L244" href="#L244">244</a> <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L245" href="#L245">245</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L246" href="#L246">246</a>     @Override
      +<a class="jxr_linenumber" name="L247" href="#L247">247</a>     <strong class="jxr_keyword">public</strong> String getName() {
      +<a class="jxr_linenumber" name="L248" href="#L248">248</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.fqn;
      +<a class="jxr_linenumber" name="L249" href="#L249">249</a>     }
      +<a class="jxr_linenumber" name="L250" href="#L250">250</a> 
      +<a class="jxr_linenumber" name="L251" href="#L251">251</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L252" href="#L252">252</a> <em class="jxr_javadoccomment">     * Underlying identity.</em>
      +<a class="jxr_linenumber" name="L253" href="#L253">253</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L254" href="#L254">254</a> <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L255" href="#L255">255</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L256" href="#L256">256</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsIdentity" href="../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> getIdentity() {
      +<a class="jxr_linenumber" name="L257" href="#L257">257</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.identity;
      +<a class="jxr_linenumber" name="L258" href="#L258">258</a>     }
      +<a class="jxr_linenumber" name="L259" href="#L259">259</a> 
      +<a class="jxr_linenumber" name="L260" href="#L260">260</a>     @Override
      +<a class="jxr_linenumber" name="L261" href="#L261">261</a>     <strong class="jxr_keyword">public</strong> String toString() {
      +<a class="jxr_linenumber" name="L262" href="#L262">262</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getName();
      +<a class="jxr_linenumber" name="L263" href="#L263">263</a>     }
      +<a class="jxr_linenumber" name="L264" href="#L264">264</a> 
      +<a class="jxr_linenumber" name="L265" href="#L265">265</a>     @Override
      +<a class="jxr_linenumber" name="L266" href="#L266">266</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(<strong class="jxr_keyword">final</strong> Object o) {
      +<a class="jxr_linenumber" name="L267" href="#L267">267</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == o) {
      +<a class="jxr_linenumber" name="L268" href="#L268">268</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L269" href="#L269">269</a>         }
      +<a class="jxr_linenumber" name="L270" href="#L270">270</a> 
      +<a class="jxr_linenumber" name="L271" href="#L271">271</a>         <strong class="jxr_keyword">if</strong> (o instanceof <a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a>) {
      +<a class="jxr_linenumber" name="L272" href="#L272">272</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getName().equals(((<a name="WindowsPrincipal" href="../../waffle/servlet/WindowsPrincipal.html#WindowsPrincipal">WindowsPrincipal</a>) o).getName());
      +<a class="jxr_linenumber" name="L273" href="#L273">273</a>         }
      +<a class="jxr_linenumber" name="L274" href="#L274">274</a> 
      +<a class="jxr_linenumber" name="L275" href="#L275">275</a>         <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L276" href="#L276">276</a>     }
      +<a class="jxr_linenumber" name="L277" href="#L277">277</a> 
      +<a class="jxr_linenumber" name="L278" href="#L278">278</a>     @Override
      +<a class="jxr_linenumber" name="L279" href="#L279">279</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
      +<a class="jxr_linenumber" name="L280" href="#L280">280</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getName().hashCode();
      +<a class="jxr_linenumber" name="L281" href="#L281">281</a>     }
      +<a class="jxr_linenumber" name="L282" href="#L282">282</a> 
      +<a class="jxr_linenumber" name="L283" href="#L283">283</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/package-frame.html b/waffle-jna-jakarta/xref/waffle/servlet/package-frame.html
      new file mode 100644
      index 0000000000..88666cf70f
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/package-frame.html
      @@ -0,0 +1,36 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.servlet</title>
      +        <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar"><a href="package-summary.html" target="classFrame">waffle.servlet</a></h1>
      +        <div class="indexContainer">
      +            <h2 title="Classes">Classes</h2>
      +            <ul title="Classes">
      +                <li>
      +                    <a href="AutoDisposableWindowsPrincipal.html#AutoDisposableWindowsPrincipal" target="classFrame">AutoDisposableWindowsPrincipal</a>
      +                </li>
      +                <li>
      +                    <a href="CorsAwareNegotiateSecurityFilter.html#CorsAwareNegotiateSecurityFilter" target="classFrame">CorsAwareNegotiateSecurityFilter</a>
      +                </li>
      +                <li>
      +                    <a href="NegotiateRequestWrapper.html#NegotiateRequestWrapper" target="classFrame">NegotiateRequestWrapper</a>
      +                </li>
      +                <li>
      +                    <a href="NegotiateSecurityFilter.html#NegotiateSecurityFilter" target="classFrame">NegotiateSecurityFilter</a>
      +                </li>
      +                <li>
      +                    <a href="WaffleInfoServlet.html#WaffleInfoServlet" target="classFrame">WaffleInfoServlet</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsPrincipal.html#WindowsPrincipal" target="classFrame">WindowsPrincipal</a>
      +                </li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/package-summary.html b/waffle-jna-jakarta/xref/waffle/servlet/package-summary.html
      new file mode 100644
      index 0000000000..64def21e07
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/package-summary.html
      @@ -0,0 +1,132 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.servlet</title>
      +        <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="style" />
      +    </head>
      +
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_top">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 title="Package" class="title">Package waffle.servlet</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <ul class="blockList">
      +                <li class="blockList">
      +                    <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
      +                        <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
      +                        <thead>
      +                            <tr>
      +                                <th class="colFirst colLast" scope="col">Class</th>
      +                            </tr>
      +                        </thead>
      +                        <tbody>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="AutoDisposableWindowsPrincipal.html#AutoDisposableWindowsPrincipal" target="classFrame" title="class in waffle.servlet">AutoDisposableWindowsPrincipal</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="CorsAwareNegotiateSecurityFilter.html#CorsAwareNegotiateSecurityFilter" target="classFrame" title="class in waffle.servlet">CorsAwareNegotiateSecurityFilter</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="NegotiateRequestWrapper.html#NegotiateRequestWrapper" target="classFrame" title="class in waffle.servlet">NegotiateRequestWrapper</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="NegotiateSecurityFilter.html#NegotiateSecurityFilter" target="classFrame" title="class in waffle.servlet">NegotiateSecurityFilter</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WaffleInfoServlet.html#WaffleInfoServlet" target="classFrame" title="class in waffle.servlet">WaffleInfoServlet</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsPrincipal.html#WindowsPrincipal" target="classFrame" title="class in waffle.servlet">WindowsPrincipal</a>
      +                                </td>
      +                            </tr>
      +                        </tbody>
      +                    </table>
      +                </li>
      +            </ul>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_bottom">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/spi/BasicSecurityFilterProvider.html b/waffle-jna-jakarta/xref/waffle/servlet/spi/BasicSecurityFilterProvider.html
      new file mode 100644
      index 0000000000..c26854fbe9
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/spi/BasicSecurityFilterProvider.html
      @@ -0,0 +1,141 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>BasicSecurityFilterProvider xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/servlet/spi/BasicSecurityFilterProvider.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet.spi;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletResponse;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.nio.charset.StandardCharsets;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.security.InvalidParameterException;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> waffle.util.AuthorizationHeader;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAuthProvider;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsIdentity;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment"> * A Basic authentication security filter provider. <a href="https://tools.ietf.org/html/rfc2617" target="alexandria_uri">https://tools.ietf.org/html/rfc2617</a></em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="BasicSecurityFilterProvider" href="../../../waffle/servlet/spi/BasicSecurityFilterProvider.html#BasicSecurityFilterProvider">BasicSecurityFilterProvider</a> <strong class="jxr_keyword">implements</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> {
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/** The Constant LOGGER. */</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Logger LOGGER = LoggerFactory.getLogger(BasicSecurityFilterProvider.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      <em class="jxr_javadoccomment">/** The realm. */</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <strong class="jxr_keyword">private</strong> String realm = <span class="jxr_string">"BasicSecurityFilterProvider"</span>;
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <em class="jxr_javadoccomment">/** The auth. */</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a name="IWindowsAuthProvider" href="../../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> auth;
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     * Instantiates a new basic security filter provider.</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     * @param newAuthProvider</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     *            the new auth provider</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      <strong class="jxr_keyword">public</strong> <a name="BasicSecurityFilterProvider" href="../../../waffle/servlet/spi/BasicSecurityFilterProvider.html#BasicSecurityFilterProvider">BasicSecurityFilterProvider</a>(<strong class="jxr_keyword">final</strong> <a name="IWindowsAuthProvider" href="../../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> newAuthProvider) {
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          <strong class="jxr_keyword">this</strong>.auth = newAuthProvider;
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      }
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      @Override
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <strong class="jxr_keyword">public</strong> <a name="IWindowsIdentity" href="../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> doFilter(<strong class="jxr_keyword">final</strong> HttpServletRequest request, <strong class="jxr_keyword">final</strong> HttpServletResponse response)
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>              <strong class="jxr_keyword">throws</strong> IOException {
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          <strong class="jxr_keyword">final</strong> <a name="AuthorizationHeader" href="../../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a> authorizationHeader = <strong class="jxr_keyword">new</strong> <a name="AuthorizationHeader" href="../../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a>(request);
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          <strong class="jxr_keyword">final</strong> String usernamePassword = <strong class="jxr_keyword">new</strong> String(authorizationHeader.getTokenBytes(), StandardCharsets.UTF_8);
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>          <strong class="jxr_keyword">final</strong> String[] usernamePasswordArray = usernamePassword.split(<span class="jxr_string">":"</span>, 2);
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          <strong class="jxr_keyword">if</strong> (usernamePasswordArray.length != 2) {
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"Invalid username:password in Authorization header."</span>);
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          }
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          BasicSecurityFilterProvider.LOGGER.debug(<span class="jxr_string">"logging in user: {}"</span>, usernamePasswordArray[0]);
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.auth.logonUser(usernamePasswordArray[0], usernamePasswordArray[1]);
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>      }
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      @Override
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isPrincipalException(<strong class="jxr_keyword">final</strong> HttpServletRequest request) {
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>          <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>      }
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>      @Override
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isSecurityPackageSupported(<strong class="jxr_keyword">final</strong> String securityPackage) {
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>          <strong class="jxr_keyword">return</strong> <span class="jxr_string">"Basic"</span>.equalsIgnoreCase(securityPackage);
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>      }
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      @Override
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> sendUnauthorized(<strong class="jxr_keyword">final</strong> HttpServletResponse response) {
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>          response.addHeader(<span class="jxr_string">"WWW-Authenticate"</span>, <span class="jxr_string">"Basic realm=\&quot;"</span> + <strong class="jxr_keyword">this</strong>.realm + <span class="jxr_string">"\&quot;"</span>);
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>      }
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment">     * Protection space.</em>
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  <em class="jxr_javadoccomment">     * @return Name of the protection space.</em>
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>      <strong class="jxr_keyword">public</strong> String getRealm() {
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.realm;
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>     }
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a> 
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment">     * Set the protection space.</em>
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment">     * @param value</em>
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment">     *            Protection space name.</em>
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setRealm(<strong class="jxr_keyword">final</strong> String value) {
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>         <strong class="jxr_keyword">this</strong>.realm = value;
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>     }
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a> 
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment">     * Init configuration parameters.</em>
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment">     * @param parameterName</em>
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a> <em class="jxr_javadoccomment">     *            the parameter name</em>
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a> <em class="jxr_javadoccomment">     * @param parameterValue</em>
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a> <em class="jxr_javadoccomment">     *            the parameter value</em>
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a>     @Override
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> initParameter(<strong class="jxr_keyword">final</strong> String parameterName, <strong class="jxr_keyword">final</strong> String parameterValue) {
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a>         <strong class="jxr_keyword">if</strong> (<span class="jxr_string">"realm"</span>.equals(parameterName)) {
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>             <strong class="jxr_keyword">this</strong>.setRealm(parameterValue);
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>         } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> InvalidParameterException(parameterName);
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>         }
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>     }
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html b/waffle-jna-jakarta/xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html
      new file mode 100644
      index 0000000000..02c8d2578a
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/spi/NegotiateSecurityFilterProvider.html
      @@ -0,0 +1,206 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>NegotiateSecurityFilterProvider xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/servlet/spi/NegotiateSecurityFilterProvider.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet.spi;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletResponse;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.security.InvalidParameterException;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> java.util.Base64;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> java.util.List;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> waffle.util.AuthorizationHeader;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <strong class="jxr_keyword">import</strong> waffle.util.NtlmServletRequest;
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAuthProvider;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsIdentity;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsSecurityContext;
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment"> * A negotiate security filter provider.</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="NegotiateSecurityFilterProvider" href="../../../waffle/servlet/spi/NegotiateSecurityFilterProvider.html#NegotiateSecurityFilterProvider">NegotiateSecurityFilterProvider</a> <strong class="jxr_keyword">implements</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> {
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <em class="jxr_javadoccomment">/** The Constant LOGGER. */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Logger LOGGER = LoggerFactory.getLogger(NegotiateSecurityFilterProvider.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <em class="jxr_javadoccomment">/** The Constant WWW_AUTHENTICATE. */</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String WWW_AUTHENTICATE = <span class="jxr_string">"WWW-Authenticate"</span>;
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <em class="jxr_javadoccomment">/** The Constant PROTOCOLS. */</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String PROTOCOLS = <span class="jxr_string">"protocols"</span>;
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      <em class="jxr_javadoccomment">/** The Constant NEGOTIATE. */</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String NEGOTIATE = <span class="jxr_string">"Negotiate"</span>;
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <em class="jxr_javadoccomment">/** The Constant NTLM. */</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String NTLM = <span class="jxr_string">"NTLM"</span>;
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      <em class="jxr_javadoccomment">/** The protocols. */</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <strong class="jxr_keyword">private</strong> List&lt;String&gt; protocolsList = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      <em class="jxr_javadoccomment">/** The auth. */</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <a name="IWindowsAuthProvider" href="../../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> auth;
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  <em class="jxr_javadoccomment">     * Instantiates a new negotiate security filter provider.</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     * @param newAuthProvider</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     *            the new auth provider</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>      <strong class="jxr_keyword">public</strong> <a name="NegotiateSecurityFilterProvider" href="../../../waffle/servlet/spi/NegotiateSecurityFilterProvider.html#NegotiateSecurityFilterProvider">NegotiateSecurityFilterProvider</a>(<strong class="jxr_keyword">final</strong> <a name="IWindowsAuthProvider" href="../../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> newAuthProvider) {
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>          <strong class="jxr_keyword">this</strong>.auth = newAuthProvider;
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>          <strong class="jxr_keyword">this</strong>.protocolsList.add(NegotiateSecurityFilterProvider.NEGOTIATE);
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          <strong class="jxr_keyword">this</strong>.protocolsList.add(NegotiateSecurityFilterProvider.NTLM);
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      }
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     * Gets the protocols.</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment">     * @return the protocols</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      <strong class="jxr_keyword">public</strong> List&lt;String&gt; getProtocols() {
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.protocolsList;
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>      }
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     * Sets the protocols.</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment">     * @param values</em>
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>  <em class="jxr_javadoccomment">     *            the new protocols</em>
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setProtocols(<strong class="jxr_keyword">final</strong> List&lt;String&gt; values) {
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>          <strong class="jxr_keyword">this</strong>.protocolsList = values;
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>      }
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> 
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>     @Override
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> sendUnauthorized(<strong class="jxr_keyword">final</strong> HttpServletResponse response) {
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> String protocol : <strong class="jxr_keyword">this</strong>.protocolsList) {
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>             response.addHeader(NegotiateSecurityFilterProvider.WWW_AUTHENTICATE, protocol);
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>         }
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>     }
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a> 
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>     @Override
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isPrincipalException(<strong class="jxr_keyword">final</strong> HttpServletRequest request) {
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>         <strong class="jxr_keyword">final</strong> <a name="AuthorizationHeader" href="../../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a> authorizationHeader = <strong class="jxr_keyword">new</strong> <a name="AuthorizationHeader" href="../../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a>(request);
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>         <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> ntlmPost = authorizationHeader.isNtlmType1PostAuthorizationHeader();
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>         NegotiateSecurityFilterProvider.LOGGER.debug(<span class="jxr_string">"authorization: {}, ntlm post: {}"</span>, authorizationHeader,
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>                 Boolean.valueOf(ntlmPost));
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a>         <strong class="jxr_keyword">return</strong> ntlmPost;
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a>     }
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a> 
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>     @Override
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsIdentity" href="../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> doFilter(<strong class="jxr_keyword">final</strong> HttpServletRequest request, <strong class="jxr_keyword">final</strong> HttpServletResponse response)
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>             <strong class="jxr_keyword">throws</strong> IOException {
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a> 
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>         <strong class="jxr_keyword">final</strong> <a name="AuthorizationHeader" href="../../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a> authorizationHeader = <strong class="jxr_keyword">new</strong> <a name="AuthorizationHeader" href="../../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a>(request);
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a>         <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> ntlmPost = authorizationHeader.isNtlmType1PostAuthorizationHeader();
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a> 
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>         <em class="jxr_comment">// maintain a connection-based session for NTLM tokens</em>
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a>         <strong class="jxr_keyword">final</strong> String connectionId = NtlmServletRequest.getConnectionId(request);
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>         <strong class="jxr_keyword">final</strong> String securityPackage = authorizationHeader.getSecurityPackage();
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>         NegotiateSecurityFilterProvider.LOGGER.debug(<span class="jxr_string">"security package: {}, connection id: {}"</span>, securityPackage,
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>                 connectionId);
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a> 
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a>         <strong class="jxr_keyword">if</strong> (ntlmPost) {
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a>             <em class="jxr_comment">// type 2 NTLM authentication message received</em>
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a>             <strong class="jxr_keyword">this</strong>.auth.resetSecurityToken(connectionId);
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>         }
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a> 
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>         <strong class="jxr_keyword">final</strong> byte[] tokenBuffer = authorizationHeader.getTokenBytes();
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a>         NegotiateSecurityFilterProvider.LOGGER.debug(<span class="jxr_string">"token buffer: {} byte(s)"</span>, Integer.valueOf(tokenBuffer.length));
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a>         <strong class="jxr_keyword">final</strong> <a name="IWindowsSecurityContext" href="../../../waffle/windows/auth/IWindowsSecurityContext.html#IWindowsSecurityContext">IWindowsSecurityContext</a> securityContext = <strong class="jxr_keyword">this</strong>.auth.acceptSecurityToken(connectionId, tokenBuffer,
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>                 securityPackage);
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a> 
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a>         <strong class="jxr_keyword">final</strong> byte[] continueTokenBytes = securityContext.getToken();
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a>         <strong class="jxr_keyword">if</strong> (continueTokenBytes != <strong class="jxr_keyword">null</strong> &amp;&amp; continueTokenBytes.length &gt; 0) {
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a>             <strong class="jxr_keyword">final</strong> String continueToken = Base64.getEncoder().encodeToString(continueTokenBytes);
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a>             NegotiateSecurityFilterProvider.LOGGER.debug(<span class="jxr_string">"continue token: {}"</span>, continueToken);
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a>             response.addHeader(NegotiateSecurityFilterProvider.WWW_AUTHENTICATE, securityPackage + <span class="jxr_string">" "</span> + continueToken);
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a>         }
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a> 
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a>         NegotiateSecurityFilterProvider.LOGGER.debug(<span class="jxr_string">"continue required: {}"</span>,
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a>                 Boolean.valueOf(securityContext.isContinue()));
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a>         <strong class="jxr_keyword">if</strong> (securityContext.isContinue()) {
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a>             response.setHeader(<span class="jxr_string">"Connection"</span>, <span class="jxr_string">"keep-alive"</span>);
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a>             response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a>             response.flushBuffer();
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a>         }
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a> 
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a>         <strong class="jxr_keyword">final</strong> <a name="IWindowsIdentity" href="../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> identity = securityContext.getIdentity();
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>         securityContext.dispose();
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a>         <strong class="jxr_keyword">return</strong> identity;
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a>     }
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a> 
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a>     @Override
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isSecurityPackageSupported(<strong class="jxr_keyword">final</strong> String securityPackage) {
      +<a class="jxr_linenumber" name="L163" href="#L163">163</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> String protocol : <strong class="jxr_keyword">this</strong>.protocolsList) {
      +<a class="jxr_linenumber" name="L164" href="#L164">164</a>             <strong class="jxr_keyword">if</strong> (protocol.equalsIgnoreCase(securityPackage)) {
      +<a class="jxr_linenumber" name="L165" href="#L165">165</a>                 <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L166" href="#L166">166</a>             }
      +<a class="jxr_linenumber" name="L167" href="#L167">167</a>         }
      +<a class="jxr_linenumber" name="L168" href="#L168">168</a>         <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L169" href="#L169">169</a>     }
      +<a class="jxr_linenumber" name="L170" href="#L170">170</a> 
      +<a class="jxr_linenumber" name="L171" href="#L171">171</a>     @Override
      +<a class="jxr_linenumber" name="L172" href="#L172">172</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> initParameter(<strong class="jxr_keyword">final</strong> String parameterName, <strong class="jxr_keyword">final</strong> String parameterValue) {
      +<a class="jxr_linenumber" name="L173" href="#L173">173</a>         <strong class="jxr_keyword">if</strong> (NegotiateSecurityFilterProvider.PROTOCOLS.equals(parameterName)) {
      +<a class="jxr_linenumber" name="L174" href="#L174">174</a>             <strong class="jxr_keyword">this</strong>.protocolsList = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
      +<a class="jxr_linenumber" name="L175" href="#L175">175</a>             <strong class="jxr_keyword">final</strong> String[] protocolNames = parameterValue.split(<span class="jxr_string">"&#92;&#92;s+"</span>, -1);
      +<a class="jxr_linenumber" name="L176" href="#L176">176</a>             <strong class="jxr_keyword">for</strong> (String protocolName : protocolNames) {
      +<a class="jxr_linenumber" name="L177" href="#L177">177</a>                 protocolName = protocolName.trim();
      +<a class="jxr_linenumber" name="L178" href="#L178">178</a>                 <strong class="jxr_keyword">if</strong> (protocolName.length() &gt; 0) {
      +<a class="jxr_linenumber" name="L179" href="#L179">179</a>                     NegotiateSecurityFilterProvider.LOGGER.debug(<span class="jxr_string">"init protocol: {}"</span>, protocolName);
      +<a class="jxr_linenumber" name="L180" href="#L180">180</a>                     <strong class="jxr_keyword">if</strong> (NegotiateSecurityFilterProvider.NEGOTIATE.equals(protocolName)
      +<a class="jxr_linenumber" name="L181" href="#L181">181</a>                             || NegotiateSecurityFilterProvider.NTLM.equals(protocolName)) {
      +<a class="jxr_linenumber" name="L182" href="#L182">182</a>                         <strong class="jxr_keyword">this</strong>.protocolsList.add(protocolName);
      +<a class="jxr_linenumber" name="L183" href="#L183">183</a>                     } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L184" href="#L184">184</a>                         NegotiateSecurityFilterProvider.LOGGER.error(<span class="jxr_string">"unsupported protocol: {}"</span>, protocolName);
      +<a class="jxr_linenumber" name="L185" href="#L185">185</a>                         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"Unsupported protocol: "</span> + protocolName);
      +<a class="jxr_linenumber" name="L186" href="#L186">186</a>                     }
      +<a class="jxr_linenumber" name="L187" href="#L187">187</a>                 }
      +<a class="jxr_linenumber" name="L188" href="#L188">188</a>             }
      +<a class="jxr_linenumber" name="L189" href="#L189">189</a>         } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L190" href="#L190">190</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> InvalidParameterException(parameterName);
      +<a class="jxr_linenumber" name="L191" href="#L191">191</a>         }
      +<a class="jxr_linenumber" name="L192" href="#L192">192</a>     }
      +<a class="jxr_linenumber" name="L193" href="#L193">193</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/spi/SecurityFilterProvider.html b/waffle-jna-jakarta/xref/waffle/servlet/spi/SecurityFilterProvider.html
      new file mode 100644
      index 0000000000..d28d7aa5a5
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/spi/SecurityFilterProvider.html
      @@ -0,0 +1,104 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>SecurityFilterProvider xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/servlet/spi/SecurityFilterProvider.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet.spi;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletResponse;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsIdentity;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> * A security filter provider.</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> {
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">     * Add authentication method headers.</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     * @param response</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     *            Http Response.</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <strong class="jxr_keyword">void</strong> sendUnauthorized(HttpServletResponse response);
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     * Returns true if despite having a principal authentication needs to happen.</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     * @param request</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     *            Http Request.</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     * @return True if authentication is required.</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      <strong class="jxr_keyword">boolean</strong> isPrincipalException(HttpServletRequest request);
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     * Execute filter.</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">     * @param request</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">     *            Http Servlet Request.</em>
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  <em class="jxr_javadoccomment">     * @param response</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <em class="jxr_javadoccomment">     *            Http Servlet Response.</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     * @return A Windows identity in case authentication completed or NULL if not. Thrown exceptions should be caught</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     *         and processed as 401 Access Denied.</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     * @throws IOException</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  <em class="jxr_javadoccomment">     *             on doFilter.</em>
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      <a name="IWindowsIdentity" href="../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> doFilter(HttpServletRequest request, HttpServletResponse response) <strong class="jxr_keyword">throws</strong> IOException;
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     * Tests whether a specific security package is supported.</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     * @param securityPackage</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     *            Security package.</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  <em class="jxr_javadoccomment">     * @return True if the security package is supported, false otherwise.</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      <strong class="jxr_keyword">boolean</strong> isSecurityPackageSupported(String securityPackage);
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     * Init a parameter.</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment">     * @param parameterName</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     *            Parameter name.</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  <em class="jxr_javadoccomment">     * @param parameterValue</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_javadoccomment">     *            Parameter value.</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      <strong class="jxr_keyword">void</strong> initParameter(String parameterName, String parameterValue);
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/spi/SecurityFilterProviderCollection.html b/waffle-jna-jakarta/xref/waffle/servlet/spi/SecurityFilterProviderCollection.html
      new file mode 100644
      index 0000000000..1eb85a6c31
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/spi/SecurityFilterProviderCollection.html
      @@ -0,0 +1,235 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>SecurityFilterProviderCollection xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/servlet/spi/SecurityFilterProviderCollection.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.servlet.spi;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Win32Exception;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletResponse;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.Constructor;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> java.lang.reflect.InvocationTargetException;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> java.util.List;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">import</strong> waffle.util.AuthorizationHeader;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAuthProvider;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsIdentity;
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment"> * A collection of security filter providers.</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="SecurityFilterProviderCollection" href="../../../waffle/servlet/spi/SecurityFilterProviderCollection.html#SecurityFilterProviderCollection">SecurityFilterProviderCollection</a> {
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <em class="jxr_javadoccomment">/** The Constant LOGGER. */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Logger LOGGER = LoggerFactory.getLogger(SecurityFilterProviderCollection.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <em class="jxr_javadoccomment">/** The providers. */</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> List&lt;SecurityFilterProvider&gt; providers = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     * Instantiates a new security filter provider collection.</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     * @param providerArray</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">     *            the provider array</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <strong class="jxr_keyword">public</strong> <a name="SecurityFilterProviderCollection" href="../../../waffle/servlet/spi/SecurityFilterProviderCollection.html#SecurityFilterProviderCollection">SecurityFilterProviderCollection</a>(<strong class="jxr_keyword">final</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a>[] providerArray) {
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> provider : providerArray) {
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>              SecurityFilterProviderCollection.LOGGER.info(<span class="jxr_string">"using '{}'"</span>, provider.getClass().getName());
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>              <strong class="jxr_keyword">this</strong>.providers.add(provider);
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>          }
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      }
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  <em class="jxr_javadoccomment">     * Instantiates a new security filter provider collection.</em>
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  <em class="jxr_javadoccomment">     * @param providerNames</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     *            the provider names</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     * @param auth</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     *            the auth</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>      @SuppressWarnings(<span class="jxr_string">"unchecked"</span>)
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>      <strong class="jxr_keyword">public</strong> <a name="SecurityFilterProviderCollection" href="../../../waffle/servlet/spi/SecurityFilterProviderCollection.html#SecurityFilterProviderCollection">SecurityFilterProviderCollection</a>(<strong class="jxr_keyword">final</strong> String[] providerNames, <strong class="jxr_keyword">final</strong> <a name="IWindowsAuthProvider" href="../../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> auth) {
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>          Class&lt;SecurityFilterProvider&gt; providerClass;
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          Constructor&lt;SecurityFilterProvider&gt; providerConstructor;
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>          <strong class="jxr_keyword">for</strong> (String providerName : providerNames) {
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>              providerName = providerName.trim();
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>              SecurityFilterProviderCollection.LOGGER.info(<span class="jxr_string">"loading '{}'"</span>, providerName);
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>              <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>                  providerClass = (Class&lt;SecurityFilterProvider&gt;) Class.forName(providerName);
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>                  providerConstructor = providerClass.getConstructor(IWindowsAuthProvider.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>                  <strong class="jxr_keyword">final</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> provider = providerConstructor.newInstance(auth);
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>                  <strong class="jxr_keyword">this</strong>.providers.add(provider);
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>              } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> ClassNotFoundException e) {
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>                  <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(e);
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>              } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> SecurityException | NoSuchMethodException | IllegalArgumentException | InstantiationException
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>                      | IllegalAccessException | InvocationTargetException e) {
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>                  SecurityFilterProviderCollection.LOGGER.error(<span class="jxr_string">"error loading '{}': {}"</span>, providerName, e.getMessage());
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>                  SecurityFilterProviderCollection.LOGGER.trace(<span class="jxr_string">""</span>, e);
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>              }
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>          }
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>      }
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>  
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>  <em class="jxr_javadoccomment">     * Instantiates a new security filter provider collection.</em>
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment">     * @param auth</em>
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment">     *            the auth</em>
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>     <strong class="jxr_keyword">public</strong> <a name="SecurityFilterProviderCollection" href="../../../waffle/servlet/spi/SecurityFilterProviderCollection.html#SecurityFilterProviderCollection">SecurityFilterProviderCollection</a>(<strong class="jxr_keyword">final</strong> <a name="IWindowsAuthProvider" href="../../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> auth) {
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>         <strong class="jxr_keyword">this</strong>.providers.add(<strong class="jxr_keyword">new</strong> <a name="NegotiateSecurityFilterProvider" href="../../../waffle/servlet/spi/NegotiateSecurityFilterProvider.html#NegotiateSecurityFilterProvider">NegotiateSecurityFilterProvider</a>(auth));
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>         <strong class="jxr_keyword">this</strong>.providers.add(<strong class="jxr_keyword">new</strong> <a name="BasicSecurityFilterProvider" href="../../../waffle/servlet/spi/BasicSecurityFilterProvider.html#BasicSecurityFilterProvider">BasicSecurityFilterProvider</a>(auth));
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>     }
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a> 
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment">     * Tests whether a specific security package is supported by any of the underlying providers.</em>
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment">     * @param securityPackage</em>
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment">     *            Security package.</em>
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment">     * @return True if the security package is supported, false otherwise.</em>
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isSecurityPackageSupported(<strong class="jxr_keyword">final</strong> String securityPackage) {
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.get(securityPackage) != <strong class="jxr_keyword">null</strong>;
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>     }
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a> 
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment">     * Gets the.</em>
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment">     * @param securityPackage</em>
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a> <em class="jxr_javadoccomment">     *            the security package</em>
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a> <em class="jxr_javadoccomment">     * @return the security filter provider</em>
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a>     <strong class="jxr_keyword">private</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> get(<strong class="jxr_keyword">final</strong> String securityPackage) {
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> provider : <strong class="jxr_keyword">this</strong>.providers) {
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a>             <strong class="jxr_keyword">if</strong> (provider.isSecurityPackageSupported(securityPackage)) {
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a>                 <strong class="jxr_keyword">return</strong> provider;
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>             }
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>         }
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a>     }
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a> 
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a> <em class="jxr_javadoccomment">     * Filter.</em>
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a> <em class="jxr_javadoccomment">     * @param request</em>
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a> <em class="jxr_javadoccomment">     *            Http Request</em>
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a> <em class="jxr_javadoccomment">     * @param response</em>
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a> <em class="jxr_javadoccomment">     *            Http Response</em>
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a> <em class="jxr_javadoccomment">     * @return Windows Identity or NULL.</em>
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a> <em class="jxr_javadoccomment">     * @throws IOException</em>
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a> <em class="jxr_javadoccomment">     *             on doFilter.</em>
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsIdentity" href="../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> doFilter(<strong class="jxr_keyword">final</strong> HttpServletRequest request, <strong class="jxr_keyword">final</strong> HttpServletResponse response)
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a>             <strong class="jxr_keyword">throws</strong> IOException {
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a>         <strong class="jxr_keyword">final</strong> <a name="AuthorizationHeader" href="../../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a> authorizationHeader = <strong class="jxr_keyword">new</strong> <a name="AuthorizationHeader" href="../../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a>(request);
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a>         <strong class="jxr_keyword">final</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> provider = <strong class="jxr_keyword">this</strong>.get(authorizationHeader.getSecurityPackage());
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a>         <strong class="jxr_keyword">if</strong> (provider == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"Unsupported security package: "</span> + authorizationHeader.getSecurityPackage());
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>         }
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a>         <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a>             <strong class="jxr_keyword">return</strong> provider.doFilter(request, response);
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> Win32Exception e) {
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(e);
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a>         }
      +<a class="jxr_linenumber" name="L163" href="#L163">163</a>     }
      +<a class="jxr_linenumber" name="L164" href="#L164">164</a> 
      +<a class="jxr_linenumber" name="L165" href="#L165">165</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L166" href="#L166">166</a> <em class="jxr_javadoccomment">     * Returns true if authentication still needs to happen despite an existing principal.</em>
      +<a class="jxr_linenumber" name="L167" href="#L167">167</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L168" href="#L168">168</a> <em class="jxr_javadoccomment">     * @param request</em>
      +<a class="jxr_linenumber" name="L169" href="#L169">169</a> <em class="jxr_javadoccomment">     *            Http Request</em>
      +<a class="jxr_linenumber" name="L170" href="#L170">170</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L171" href="#L171">171</a> <em class="jxr_javadoccomment">     * @return True if authentication is required.</em>
      +<a class="jxr_linenumber" name="L172" href="#L172">172</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L173" href="#L173">173</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isPrincipalException(<strong class="jxr_keyword">final</strong> HttpServletRequest request) {
      +<a class="jxr_linenumber" name="L174" href="#L174">174</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> provider : <strong class="jxr_keyword">this</strong>.providers) {
      +<a class="jxr_linenumber" name="L175" href="#L175">175</a>             <strong class="jxr_keyword">if</strong> (provider.isPrincipalException(request)) {
      +<a class="jxr_linenumber" name="L176" href="#L176">176</a>                 <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L177" href="#L177">177</a>             }
      +<a class="jxr_linenumber" name="L178" href="#L178">178</a>         }
      +<a class="jxr_linenumber" name="L179" href="#L179">179</a>         <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L180" href="#L180">180</a>     }
      +<a class="jxr_linenumber" name="L181" href="#L181">181</a> 
      +<a class="jxr_linenumber" name="L182" href="#L182">182</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L183" href="#L183">183</a> <em class="jxr_javadoccomment">     * Send authorization headers.</em>
      +<a class="jxr_linenumber" name="L184" href="#L184">184</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L185" href="#L185">185</a> <em class="jxr_javadoccomment">     * @param response</em>
      +<a class="jxr_linenumber" name="L186" href="#L186">186</a> <em class="jxr_javadoccomment">     *            Http Response</em>
      +<a class="jxr_linenumber" name="L187" href="#L187">187</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L188" href="#L188">188</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> sendUnauthorized(<strong class="jxr_keyword">final</strong> HttpServletResponse response) {
      +<a class="jxr_linenumber" name="L189" href="#L189">189</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> provider : <strong class="jxr_keyword">this</strong>.providers) {
      +<a class="jxr_linenumber" name="L190" href="#L190">190</a>             provider.sendUnauthorized(response);
      +<a class="jxr_linenumber" name="L191" href="#L191">191</a>         }
      +<a class="jxr_linenumber" name="L192" href="#L192">192</a>     }
      +<a class="jxr_linenumber" name="L193" href="#L193">193</a> 
      +<a class="jxr_linenumber" name="L194" href="#L194">194</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L195" href="#L195">195</a> <em class="jxr_javadoccomment">     * Number of providers.</em>
      +<a class="jxr_linenumber" name="L196" href="#L196">196</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L197" href="#L197">197</a> <em class="jxr_javadoccomment">     * @return Number of providers.</em>
      +<a class="jxr_linenumber" name="L198" href="#L198">198</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L199" href="#L199">199</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> size() {
      +<a class="jxr_linenumber" name="L200" href="#L200">200</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.providers.size();
      +<a class="jxr_linenumber" name="L201" href="#L201">201</a>     }
      +<a class="jxr_linenumber" name="L202" href="#L202">202</a> 
      +<a class="jxr_linenumber" name="L203" href="#L203">203</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L204" href="#L204">204</a> <em class="jxr_javadoccomment">     * Get a security provider by class name.</em>
      +<a class="jxr_linenumber" name="L205" href="#L205">205</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L206" href="#L206">206</a> <em class="jxr_javadoccomment">     * @param name</em>
      +<a class="jxr_linenumber" name="L207" href="#L207">207</a> <em class="jxr_javadoccomment">     *            Class name.</em>
      +<a class="jxr_linenumber" name="L208" href="#L208">208</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L209" href="#L209">209</a> <em class="jxr_javadoccomment">     * @return A security provider instance.</em>
      +<a class="jxr_linenumber" name="L210" href="#L210">210</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L211" href="#L211">211</a> <em class="jxr_javadoccomment">     * @throws ClassNotFoundException</em>
      +<a class="jxr_linenumber" name="L212" href="#L212">212</a> <em class="jxr_javadoccomment">     *             when class not found.</em>
      +<a class="jxr_linenumber" name="L213" href="#L213">213</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L214" href="#L214">214</a>     <strong class="jxr_keyword">public</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> getByClassName(<strong class="jxr_keyword">final</strong> String name) <strong class="jxr_keyword">throws</strong> ClassNotFoundException {
      +<a class="jxr_linenumber" name="L215" href="#L215">215</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> <a name="SecurityFilterProvider" href="../../../waffle/servlet/spi/SecurityFilterProvider.html#SecurityFilterProvider">SecurityFilterProvider</a> provider : <strong class="jxr_keyword">this</strong>.providers) {
      +<a class="jxr_linenumber" name="L216" href="#L216">216</a>             <strong class="jxr_keyword">if</strong> (provider.getClass().getName().equals(name)) {
      +<a class="jxr_linenumber" name="L217" href="#L217">217</a>                 <strong class="jxr_keyword">return</strong> provider;
      +<a class="jxr_linenumber" name="L218" href="#L218">218</a>             }
      +<a class="jxr_linenumber" name="L219" href="#L219">219</a>         }
      +<a class="jxr_linenumber" name="L220" href="#L220">220</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> ClassNotFoundException(name);
      +<a class="jxr_linenumber" name="L221" href="#L221">221</a>     }
      +<a class="jxr_linenumber" name="L222" href="#L222">222</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/spi/package-frame.html b/waffle-jna-jakarta/xref/waffle/servlet/spi/package-frame.html
      new file mode 100644
      index 0000000000..10dcaa1de0
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/spi/package-frame.html
      @@ -0,0 +1,30 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.servlet.spi</title>
      +        <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar"><a href="package-summary.html" target="classFrame">waffle.servlet.spi</a></h1>
      +        <div class="indexContainer">
      +            <h2 title="Classes">Classes</h2>
      +            <ul title="Classes">
      +                <li>
      +                    <a href="BasicSecurityFilterProvider.html#BasicSecurityFilterProvider" target="classFrame">BasicSecurityFilterProvider</a>
      +                </li>
      +                <li>
      +                    <a href="NegotiateSecurityFilterProvider.html#NegotiateSecurityFilterProvider" target="classFrame">NegotiateSecurityFilterProvider</a>
      +                </li>
      +                <li>
      +                    <a href="SecurityFilterProvider.html#SecurityFilterProvider" target="classFrame">SecurityFilterProvider</a>
      +                </li>
      +                <li>
      +                    <a href="SecurityFilterProviderCollection.html#SecurityFilterProviderCollection" target="classFrame">SecurityFilterProviderCollection</a>
      +                </li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/servlet/spi/package-summary.html b/waffle-jna-jakarta/xref/waffle/servlet/spi/package-summary.html
      new file mode 100644
      index 0000000000..0e7f29e0ad
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/servlet/spi/package-summary.html
      @@ -0,0 +1,122 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.servlet.spi</title>
      +        <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="style" />
      +    </head>
      +
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_top">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 title="Package" class="title">Package waffle.servlet.spi</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <ul class="blockList">
      +                <li class="blockList">
      +                    <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
      +                        <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
      +                        <thead>
      +                            <tr>
      +                                <th class="colFirst colLast" scope="col">Class</th>
      +                            </tr>
      +                        </thead>
      +                        <tbody>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="BasicSecurityFilterProvider.html#BasicSecurityFilterProvider" target="classFrame" title="class in waffle.servlet.spi">BasicSecurityFilterProvider</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="NegotiateSecurityFilterProvider.html#NegotiateSecurityFilterProvider" target="classFrame" title="class in waffle.servlet.spi">NegotiateSecurityFilterProvider</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="SecurityFilterProvider.html#SecurityFilterProvider" target="classFrame" title="class in waffle.servlet.spi">SecurityFilterProvider</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="SecurityFilterProviderCollection.html#SecurityFilterProviderCollection" target="classFrame" title="class in waffle.servlet.spi">SecurityFilterProviderCollection</a>
      +                                </td>
      +                            </tr>
      +                        </tbody>
      +                    </table>
      +                </li>
      +            </ul>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_bottom">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/util/AuthorizationHeader.html b/waffle-jna-jakarta/xref/waffle/util/AuthorizationHeader.html
      new file mode 100644
      index 0000000000..8efc89bc2f
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/AuthorizationHeader.html
      @@ -0,0 +1,206 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>AuthorizationHeader xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/util/AuthorizationHeader.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.util.Base64;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.util.Locale;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> * Authorization header.</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="AuthorizationHeader" href="../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a> {
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      <em class="jxr_javadoccomment">/** The logger. */</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Logger LOGGER = LoggerFactory.getLogger(AuthorizationHeader.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <em class="jxr_javadoccomment">/** The request. */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> HttpServletRequest request;
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * Instantiates a new authorization header.</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * @param httpServletRequest</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     *            the http servlet request</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">public</strong> <a name="AuthorizationHeader" href="../../waffle/util/AuthorizationHeader.html#AuthorizationHeader">AuthorizationHeader</a>(<strong class="jxr_keyword">final</strong> HttpServletRequest httpServletRequest) {
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          <strong class="jxr_keyword">this</strong>.request = httpServletRequest;
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      }
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     * Gets the header.</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     * @return the header</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      <strong class="jxr_keyword">public</strong> String getHeader() {
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.request.getHeader(<span class="jxr_string">"Authorization"</span>);
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      }
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     * Checks if is null.</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     * @return true, if is null</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isNull() {
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getHeader() == <strong class="jxr_keyword">null</strong> || <strong class="jxr_keyword">this</strong>.getHeader().length() == 0;
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      }
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     * Returns a supported security package string.</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     * &lt;pre&gt;</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment">     * Authorization: NTLM the_token</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  <em class="jxr_javadoccomment">     * Authorization: Negotiate the_token</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">     * Authorization: Bearer the_token</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>  <em class="jxr_javadoccomment">     * &lt;/pre&gt;</em>
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  <em class="jxr_javadoccomment">     * @return AuthenticationScheme as SecurityPackage e.g. Negotiate, NTLM, Bearer.</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>      <strong class="jxr_keyword">public</strong> String getSecurityPackage() {
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>          <strong class="jxr_keyword">final</strong> String header = <strong class="jxr_keyword">this</strong>.getHeader();
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>          <strong class="jxr_keyword">if</strong> (header == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"Missing Authorization: header"</span>);
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>          }
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>          <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> space = header.indexOf(' ');
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>          <strong class="jxr_keyword">if</strong> (space &gt; 0) {
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>              <strong class="jxr_keyword">return</strong> header.substring(0, space);
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>          }
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>  
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>          <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"Invalid Authorization header: "</span> + header);
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>      }
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>      @Override
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>     <strong class="jxr_keyword">public</strong> String toString() {
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.isNull() ? <span class="jxr_string">"&lt;none&gt;"</span> : <strong class="jxr_keyword">this</strong>.getHeader();
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>     }
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a> 
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment">     * Gets the token.</em>
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment">     * @return the token</em>
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>     <strong class="jxr_keyword">public</strong> String getToken() {
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getHeader().substring(<strong class="jxr_keyword">this</strong>.getSecurityPackage().length() + 1);
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>     }
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a> 
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment">     * Gets the token bytes.</em>
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a> <em class="jxr_javadoccomment">     * @return the token bytes</em>
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>     <strong class="jxr_keyword">public</strong> byte[] getTokenBytes() {
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>         <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a>             <strong class="jxr_keyword">return</strong> Base64.getDecoder().decode(<strong class="jxr_keyword">this</strong>.getToken());
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> IllegalArgumentException e) {
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a>             AuthorizationHeader.LOGGER.debug(<span class="jxr_string">""</span>, e);
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"Invalid authorization header."</span>);
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>         }
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a>     }
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a> 
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a> <em class="jxr_javadoccomment">     * Checks if is ntlm type1 message.</em>
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a> <em class="jxr_javadoccomment">     * @return true, if is ntlm type1 message</em>
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isNtlmType1Message() {
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.isNull()) {
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>             <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>         }
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a> 
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a>         <strong class="jxr_keyword">final</strong> byte[] tokenBytes = <strong class="jxr_keyword">this</strong>.getTokenBytes();
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>         <strong class="jxr_keyword">if</strong> (!NtlmMessage.isNtlmMessage(tokenBytes)) {
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a>             <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a>         }
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a> 
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a>         <strong class="jxr_keyword">return</strong> 1 == NtlmMessage.getMessageType(tokenBytes);
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a>     }
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a> 
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a> <em class="jxr_javadoccomment">     * Checks if is SP nego message.</em>
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a> <em class="jxr_javadoccomment">     * @return true, if is SP nego message that contains NegTokenInit</em>
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isSPNegTokenInitMessage() {
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a> 
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.isNull()) {
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a>             <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a>         }
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a> 
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a>         <strong class="jxr_keyword">final</strong> byte[] tokenBytes = <strong class="jxr_keyword">this</strong>.getTokenBytes();
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>         <strong class="jxr_keyword">return</strong> SPNegoMessage.isNegTokenInit(tokenBytes);
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a>     }
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a> 
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a> <em class="jxr_javadoccomment">     * When using NTLM authentication and the browser is making a POST request, it preemptively sends a Type 2</em>
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a> <em class="jxr_javadoccomment">     * authentication message (without the POSTed data). The server responds with a 401, and the browser sends a Type 3</em>
      +<a class="jxr_linenumber" name="L163" href="#L163">163</a> <em class="jxr_javadoccomment">     * request with the POSTed data. This is to avoid the situation where user's credentials might be potentially</em>
      +<a class="jxr_linenumber" name="L164" href="#L164">164</a> <em class="jxr_javadoccomment">     * invalid, and all this data is being POSTed across the wire.</em>
      +<a class="jxr_linenumber" name="L165" href="#L165">165</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L166" href="#L166">166</a> <em class="jxr_javadoccomment">     * @return True if request is an NTLM POST, PUT, or DELETE with an Authorization header and no data.</em>
      +<a class="jxr_linenumber" name="L167" href="#L167">167</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L168" href="#L168">168</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isNtlmType1PostAuthorizationHeader() {
      +<a class="jxr_linenumber" name="L169" href="#L169">169</a>         <strong class="jxr_keyword">if</strong> (!<span class="jxr_string">"POST"</span>.equals(<strong class="jxr_keyword">this</strong>.request.getMethod()) &amp;&amp; !<span class="jxr_string">"PUT"</span>.equals(<strong class="jxr_keyword">this</strong>.request.getMethod())
      +<a class="jxr_linenumber" name="L170" href="#L170">170</a>                 &amp;&amp; !<span class="jxr_string">"DELETE"</span>.equals(<strong class="jxr_keyword">this</strong>.request.getMethod())) {
      +<a class="jxr_linenumber" name="L171" href="#L171">171</a>             <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L172" href="#L172">172</a>         }
      +<a class="jxr_linenumber" name="L173" href="#L173">173</a> 
      +<a class="jxr_linenumber" name="L174" href="#L174">174</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.request.getContentLength() != 0) {
      +<a class="jxr_linenumber" name="L175" href="#L175">175</a>             <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L176" href="#L176">176</a>         }
      +<a class="jxr_linenumber" name="L177" href="#L177">177</a> 
      +<a class="jxr_linenumber" name="L178" href="#L178">178</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.isNtlmType1Message() || <strong class="jxr_keyword">this</strong>.isSPNegTokenInitMessage();
      +<a class="jxr_linenumber" name="L179" href="#L179">179</a>     }
      +<a class="jxr_linenumber" name="L180" href="#L180">180</a> 
      +<a class="jxr_linenumber" name="L181" href="#L181">181</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L182" href="#L182">182</a> <em class="jxr_javadoccomment">     * Is Bearer Authorization Header will return true if 'BEARER' exists.</em>
      +<a class="jxr_linenumber" name="L183" href="#L183">183</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L184" href="#L184">184</a> <em class="jxr_javadoccomment">     * @return True if header contains 'BEARER' header.</em>
      +<a class="jxr_linenumber" name="L185" href="#L185">185</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L186" href="#L186">186</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isBearerAuthorizationHeader() {
      +<a class="jxr_linenumber" name="L187" href="#L187">187</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.isNull()) {
      +<a class="jxr_linenumber" name="L188" href="#L188">188</a>             <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L189" href="#L189">189</a>         }
      +<a class="jxr_linenumber" name="L190" href="#L190">190</a> 
      +<a class="jxr_linenumber" name="L191" href="#L191">191</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getSecurityPackage().toUpperCase(Locale.ENGLISH).equalsIgnoreCase(<span class="jxr_string">"BEARER"</span>);
      +<a class="jxr_linenumber" name="L192" href="#L192">192</a>     }
      +<a class="jxr_linenumber" name="L193" href="#L193">193</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/util/CorsPreFlightCheck.html b/waffle-jna-jakarta/xref/waffle/util/CorsPreFlightCheck.html
      new file mode 100644
      index 0000000000..a9f7af93d6
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/CorsPreFlightCheck.html
      @@ -0,0 +1,120 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>CorsPreFlightCheck xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/util/CorsPreFlightCheck.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> java.util.Arrays;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.util.List;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> * The Class CorsPrefFlightCheck.</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a name="CorsPreFlightCheck" href="../../waffle/util/CorsPreFlightCheck.html#CorsPreFlightCheck">CorsPreFlightCheck</a> {
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <em class="jxr_javadoccomment">/** The logger. */</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Logger LOGGER = LoggerFactory.getLogger(CorsPreFlightCheck.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <em class="jxr_javadoccomment">/** The Constant preflightAttributeValue. */</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> String PRE_FLIGHT_ATTRIBUTE_VALUE = <span class="jxr_string">"PRE_FLIGHT"</span>;
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <em class="jxr_javadoccomment">/** The Constant CORS_PRE_FLIGHT_HEADERS. */</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> List&lt;String&gt; CORS_PRE_FLIGHT_HEADERS = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>              Arrays.asList(<span class="jxr_string">"Access-Control-Request-Method"</span>, <span class="jxr_string">"Access-Control-Request-Headers"</span>, <span class="jxr_string">"Origin"</span>));
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     * Prevent Instantiation.</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      <strong class="jxr_keyword">private</strong> <a name="CorsPreFlightCheck" href="../../waffle/util/CorsPreFlightCheck.html#CorsPreFlightCheck">CorsPreFlightCheck</a>() {
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>          <em class="jxr_comment">// Do Nothing</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      }
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     * Checks if is preflight.</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">     * @param request</em>
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  <em class="jxr_javadoccomment">     *            the request</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">     * @return true, if is preflight</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isPreflight(<strong class="jxr_keyword">final</strong> HttpServletRequest request) {
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          <strong class="jxr_keyword">final</strong> String corsRequestType = (String) request.getAttribute(<span class="jxr_string">"cors.request.type"</span>);
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          CorsPreFlightCheck.LOGGER
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>                  .debug(<span class="jxr_string">"[waffle.util.CorsPreflightCheck] Request is CORS preflight; continue filter chain"</span>);
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          <em class="jxr_comment">// Method MUST be an OPTIONS Method to be a preflight Request</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          <strong class="jxr_keyword">final</strong> String method = request.getMethod();
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          <strong class="jxr_keyword">if</strong> (method == <strong class="jxr_keyword">null</strong> || !method.equalsIgnoreCase(<span class="jxr_string">"OPTIONS"</span>)) {
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>              <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>          }
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>          CorsPreFlightCheck.LOGGER.debug(<span class="jxr_string">"[waffle.util.CorsPreflightCheck] check for PRE_FLIGHT Attribute"</span>);
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>          <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  <em class="jxr_comment">         * Support Apache CorsFilter which would already add the Attribute cors.request.type with a value "PRE_FLIGHT"</em>
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  <em class="jxr_comment">         */</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>          <strong class="jxr_keyword">if</strong> (corsRequestType != <strong class="jxr_keyword">null</strong>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>                  &amp;&amp; corsRequestType.equalsIgnoreCase(CorsPreFlightCheck.PRE_FLIGHT_ATTRIBUTE_VALUE)) {
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>          } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>              <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_comment">             * it is OPTIONS and it is not an CorsFilter PRE_FLIGHT request make sure that the request contains all of</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_comment">             * the CORS preflight Headers</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_comment">             */</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>              CorsPreFlightCheck.LOGGER.debug(<span class="jxr_string">"[waffle.util.CorsPreflightCheck] check headers"</span>);
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>              <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> String header : CorsPreFlightCheck.CORS_PRE_FLIGHT_HEADERS) {
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>                  <strong class="jxr_keyword">final</strong> String headerValue = request.getHeader(header);
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>                  CorsPreFlightCheck.LOGGER.debug(<span class="jxr_string">"[waffle.util.CorsPreflightCheck] {}"</span>, header);
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>                  <strong class="jxr_keyword">if</strong> (headerValue == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>                      <em class="jxr_comment">/* one of the CORS pre-flight headers is missing */</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>                      <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>                 }
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>             }
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>             CorsPreFlightCheck.LOGGER.debug(<span class="jxr_string">"[waffle.util.CorsPreflightCheck] is preflight"</span>);
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a> 
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>         }
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>     }
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/util/NtlmMessage.html b/waffle-jna-jakarta/xref/waffle/util/NtlmMessage.html
      new file mode 100644
      index 0000000000..1b9cf2fa97
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/NtlmMessage.html
      @@ -0,0 +1,88 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>NtlmMessage xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/util/NtlmMessage.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment"> * Rudimentary NTLM message utility.</em>
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a name="NtlmMessage" href="../../waffle/util/NtlmMessage.html#NtlmMessage">NtlmMessage</a> {
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      <em class="jxr_comment">// NTLM messages start with 0x4e544c4d53535000, NTLMSSP signature</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>      <em class="jxr_javadoccomment">/** The Constant NTLM_SSP_SIGNATURE. */</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> byte[] NTLM_SSP_SIGNATURE = { 0x4e, 0x54, 0x4c, 0x4d, 0x53, 0x53, 0x50, 0x00 };
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment">     * Checks if is ntlm message.</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment">     * @param message</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">     *            the message</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     * @return true, if is ntlm message</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isNtlmMessage(<strong class="jxr_keyword">final</strong> byte[] message) {
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>          <strong class="jxr_keyword">if</strong> (message == <strong class="jxr_keyword">null</strong> || message.length &lt; NtlmMessage.NTLM_SSP_SIGNATURE.length) {
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>              <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>          }
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>          <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; NtlmMessage.NTLM_SSP_SIGNATURE.length; i++) {
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>              <strong class="jxr_keyword">if</strong> (NtlmMessage.NTLM_SSP_SIGNATURE[i] != message[i]) {
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>                  <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>              }
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          }
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      }
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     * Get NTLM message type.</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">     * @param message</em>
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  <em class="jxr_javadoccomment">     *            Assuming a valid NTLM message.</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">     * @return Message type.</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> getMessageType(<strong class="jxr_keyword">final</strong> byte[] message) {
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          <strong class="jxr_keyword">return</strong> message[NtlmMessage.NTLM_SSP_SIGNATURE.length];
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      }
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  <em class="jxr_javadoccomment">     * Instantiates a new ntlm message.</em>
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      <strong class="jxr_keyword">private</strong> <a name="NtlmMessage" href="../../waffle/util/NtlmMessage.html#NtlmMessage">NtlmMessage</a>() {
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          <em class="jxr_comment">// Prevent Instantiation of object</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>      }
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/util/NtlmServletRequest.html b/waffle-jna-jakarta/xref/waffle/util/NtlmServletRequest.html
      new file mode 100644
      index 0000000000..1ebcaa435d
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/NtlmServletRequest.html
      @@ -0,0 +1,78 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>NtlmServletRequest xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/util/NtlmServletRequest.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> jakarta.servlet.http.HttpServletRequest;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <em class="jxr_javadoccomment"> * The Class NtlmServletRequest.</em>
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a name="NtlmServletRequest" href="../../waffle/util/NtlmServletRequest.html#NtlmServletRequest">NtlmServletRequest</a> {
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">     * Instantiates a new ntlm servlet request.</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      <strong class="jxr_keyword">private</strong> <a name="NtlmServletRequest" href="../../waffle/util/NtlmServletRequest.html#NtlmServletRequest">NtlmServletRequest</a>() {
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>          <em class="jxr_comment">// Prevent Instantiation of object</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      }
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     * Returns a unique connection id for a given servlet request.</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     * @param request</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     *            Servlet request.</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String getConnectionId(<strong class="jxr_keyword">final</strong> HttpServletRequest request) {
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>          <strong class="jxr_keyword">final</strong> String remoteHost = NtlmServletRequest.getRemoteHost(request);
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>          <strong class="jxr_keyword">return</strong> String.join(<span class="jxr_string">":"</span>, remoteHost == <strong class="jxr_keyword">null</strong> ? <span class="jxr_string">""</span> : remoteHost, String.valueOf(request.getRemotePort()));
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      }
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     * Gets the remote host.</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     * @param request</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     *            the request</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">     * @return the remote host</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> String getRemoteHost(<strong class="jxr_keyword">final</strong> HttpServletRequest request) {
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          <strong class="jxr_keyword">return</strong> request.getRemoteHost() == <strong class="jxr_keyword">null</strong> ? request.getRemoteAddr() : request.getRemoteHost();
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      }
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/util/SPNegoMessage.html b/waffle-jna-jakarta/xref/waffle/util/SPNegoMessage.html
      new file mode 100644
      index 0000000000..01fb428eda
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/SPNegoMessage.html
      @@ -0,0 +1,149 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>SPNegoMessage xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/util/SPNegoMessage.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment"> * Rudimentary NTLM message utility.</em>
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">class</strong> <a name="SPNegoMessage" href="../../waffle/util/SPNegoMessage.html#SPNegoMessage">SPNegoMessage</a> {
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      <em class="jxr_comment">// Check for NegTokenInit. It has always a special oid ("spnegoOid"),</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>      <em class="jxr_comment">// which makes it rather easy to detect.</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>      <em class="jxr_javadoccomment">/** The Constant SPENGO_OID. */</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> byte[] SPENGO_OID = { 0x06, 0x06, 0x2b, 0x06, 0x01, 0x05, 0x05, 0x02 };
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      <em class="jxr_comment">// Check if this message is SPNEGO authentication token. There</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      <em class="jxr_comment">// are two token types, NegTokenInit and NegTokenArg.</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <em class="jxr_comment">// For details and specification, see</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      <em class="jxr_comment">// https://msdn.microsoft.com/en-us/library/ms995330.aspx</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     * Checks if is neg token init.</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     * @param message</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     *            the message</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     * @return true, if is neg token init</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isNegTokenInit(<strong class="jxr_keyword">final</strong> byte[] message) {
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>          <em class="jxr_comment">// Message should always contains at least some kind of</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          <em class="jxr_comment">// id byte and length. If it is too short, it</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>          <em class="jxr_comment">// cannot be a SPNEGO message.</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>          <strong class="jxr_keyword">if</strong> (message == <strong class="jxr_keyword">null</strong> || message.length &lt; 2) {
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>              <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>          }
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          <em class="jxr_comment">// First byte should always be 0x60 (Application Constructed Object)</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          <strong class="jxr_keyword">if</strong> (message[0] != 0x60) {
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>              <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          }
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>          <em class="jxr_comment">// Next byte(s) contain token length, figure out</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>          <em class="jxr_comment">// how many bytes are used for length data</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>          <strong class="jxr_keyword">int</strong> lenBytes = 1;
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          <strong class="jxr_keyword">if</strong> ((message[1] &amp; 0x80) != 0) {
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>              lenBytes = 1 + (message[1] &amp; 0x7f);
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          }
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>          <strong class="jxr_keyword">if</strong> (message.length &lt; SPNegoMessage.SPENGO_OID.length + 1 + lenBytes) {
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>              <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          }
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          <em class="jxr_comment">// Now check for SPNEGO OID, which should start just after length data.</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; SPNegoMessage.SPENGO_OID.length; i++) {
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>              <strong class="jxr_keyword">if</strong> (SPNegoMessage.SPENGO_OID[i] != message[i + 1 + lenBytes]) {
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>                  <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>              }
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          }
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>  
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      }
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>      <em class="jxr_comment">// Check for NegTokenArg. It doesn't have oid similar to NegTokenInit.</em>
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>      <em class="jxr_comment">// Instead id has one-byte id (0xa1). Obviously this is not</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>      <em class="jxr_comment">// a great way to detect the message, so we check encoded</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      <em class="jxr_comment">// message length against number of received message bytes.</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     * Checks if is neg token arg.</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">     * @param message</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     *            the message</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment">     * @return true, if is neg token arg</em>
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> isNegTokenArg(<strong class="jxr_keyword">final</strong> byte[] message) {
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>  
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>          <em class="jxr_comment">// Message should always contains at least some kind of</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>          <em class="jxr_comment">// id byte and length. If it is too short, it</em>
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>         <em class="jxr_comment">// cannot be a SPNEGO message.</em>
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>         <strong class="jxr_keyword">if</strong> (message == <strong class="jxr_keyword">null</strong> || message.length &lt; 2) {
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>             <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>         }
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a> 
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>         <em class="jxr_comment">// Check if this is NegTokenArg packet, it's id is 0xa1</em>
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>         <strong class="jxr_keyword">if</strong> ((message[0] &amp; 0xff) != 0xa1) {
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>             <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>         }
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a> 
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>         <strong class="jxr_keyword">int</strong> lenBytes;
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>         <strong class="jxr_keyword">int</strong> len;
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a> 
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>         <em class="jxr_comment">// Get length of message for additional check.</em>
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a>         <strong class="jxr_keyword">if</strong> ((message[1] &amp; 0x80) == 0) {
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a>             len = message[1];
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a>         } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>             lenBytes = message[1] &amp; 0x7f;
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>             len = 0;
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>             <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> i = 2;
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a>             <strong class="jxr_keyword">while</strong> (lenBytes &gt; 0) {
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>                 len = len &lt;&lt; 8;
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a>                 len |= message[i] &amp; 0xff;
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>                 --lenBytes;
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>             }
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a>         }
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a> 
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>         <strong class="jxr_keyword">return</strong> len + 2 == message.length;
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>     }
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a> 
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a> <em class="jxr_javadoccomment">     * Instantiates a new SP nego message.</em>
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>     <strong class="jxr_keyword">private</strong> <a name="SPNegoMessage" href="../../waffle/util/SPNegoMessage.html#SPNegoMessage">SPNegoMessage</a>() {
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>         <em class="jxr_comment">// Prevent Instantiation of object</em>
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>     }
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/util/WaffleInfo.html b/waffle-jna-jakarta/xref/waffle/util/WaffleInfo.html
      new file mode 100644
      index 0000000000..bcc544a790
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/WaffleInfo.html
      @@ -0,0 +1,383 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WaffleInfo xref</title>
      +<link type="text/css" rel="stylesheet" href="../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../apidocs/waffle/util/WaffleInfo.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2022 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.Platform;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.WindowUtils;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.LMJoin;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Netapi32Util;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Win32Exception;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> java.awt.Desktop;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> java.io.File;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">import</strong> java.io.IOException;
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> java.io.StringWriter;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> java.nio.charset.StandardCharsets;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> java.nio.file.Files;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> java.nio.file.StandardOpenOption;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">import</strong> java.util.Arrays;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <strong class="jxr_keyword">import</strong> java.util.List;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <strong class="jxr_keyword">import</strong> javax.xml.XMLConstants;
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <strong class="jxr_keyword">import</strong> javax.xml.parsers.DocumentBuilderFactory;
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <strong class="jxr_keyword">import</strong> javax.xml.parsers.ParserConfigurationException;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <strong class="jxr_keyword">import</strong> javax.xml.transform.OutputKeys;
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <strong class="jxr_keyword">import</strong> javax.xml.transform.Transformer;
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <strong class="jxr_keyword">import</strong> javax.xml.transform.TransformerException;
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <strong class="jxr_keyword">import</strong> javax.xml.transform.TransformerFactory;
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <strong class="jxr_keyword">import</strong> javax.xml.transform.dom.DOMSource;
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <strong class="jxr_keyword">import</strong> javax.xml.transform.stream.StreamResult;
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <strong class="jxr_keyword">import</strong> org.w3c.dom.Document;
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <strong class="jxr_keyword">import</strong> org.w3c.dom.Element;
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAccount;
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAuthProvider;
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsComputer;
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsDomain;
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.impl.WindowsAccountImpl;
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.impl.WindowsAuthProviderImpl;
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment"> * A Utility class to read system info to help troubleshoot WAFFLE system configuration.</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment"> *</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  <em class="jxr_javadoccomment"> * &lt;pre&gt;</em>
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  <em class="jxr_javadoccomment"> * This utility class collects system information and returns it as an XML document.</em>
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  <em class="jxr_javadoccomment"> * &lt;/pre&gt;</em>
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  <em class="jxr_javadoccomment"> *</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment"> * From the command line, you can write the info to stdout using:</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment"> *</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment"> * &lt;pre&gt;</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment"> * &lt;code&gt;</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment"> *   java -cp "jna.jar;waffle-core.jar;waffle-api.jar;jna-platform.jar;guava-21.0.jar" waffle.util.WaffleInfo</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment"> * &lt;/code&gt;</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  <em class="jxr_javadoccomment"> * &lt;/pre&gt;</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment"> *</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>  <em class="jxr_javadoccomment"> * To show this information in a browser, run:</em>
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  <em class="jxr_javadoccomment"> *</em>
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  <em class="jxr_javadoccomment"> * &lt;pre&gt;</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment"> * &lt;code&gt;</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment"> *   java -cp "..." waffle.util.WaffleInfo -show</em>
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment"> * &lt;/code&gt;</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment"> * &lt;/pre&gt;</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  <em class="jxr_javadoccomment"> *</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_javadoccomment"> * To lookup account names and return any listed info, run:</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment"> *</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment"> * &lt;pre&gt;</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment"> * &lt;code&gt;</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment"> *   java -cp "..." waffle.util.WaffleInfo -lookup AccountName</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment"> * &lt;/code&gt;</em>
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment"> * &lt;/pre&gt;</em>
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WaffleInfo" href="../../waffle/util/WaffleInfo.html#WaffleInfo">WaffleInfo</a> {
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>  
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>      <em class="jxr_javadoccomment">/** The Constant LOGGER. */</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> Logger LOGGER = LoggerFactory.getLogger(WaffleInfo.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> 
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment">     * Get a Document with basic system information.</em>
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment">     * &lt;p&gt;</em>
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment">     * This uses the builtin jakarta.xml package even though the API is quite verbose</em>
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment">     * @return Document with waffle info.</em>
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a> <em class="jxr_javadoccomment">     * @throws ParserConfigurationException</em>
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a> <em class="jxr_javadoccomment">     *             when getting new document builder.</em>
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>     <strong class="jxr_keyword">public</strong> Document getWaffleInfo() <strong class="jxr_keyword">throws</strong> ParserConfigurationException {
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>         <strong class="jxr_keyword">final</strong> DocumentBuilderFactory df = DocumentBuilderFactory.newInstance();
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>         df.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, <span class="jxr_string">""</span>);
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a>         df.setAttribute(XMLConstants.ACCESS_EXTERNAL_SCHEMA, <span class="jxr_string">""</span>);
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a>         df.setExpandEntityReferences(false);
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a> 
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>         <strong class="jxr_keyword">final</strong> Document doc = df.newDocumentBuilder().newDocument();
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a> 
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>         <em class="jxr_comment">// create the root element and add it to the document</em>
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a>         <strong class="jxr_keyword">final</strong> Element root = doc.createElement(<span class="jxr_string">"waffle"</span>);
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a> 
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a>         <em class="jxr_comment">// Add Version Information as attributes</em>
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>         String version = WaffleInfo.<strong class="jxr_keyword">class</strong>.getPackage().getImplementationVersion();
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>         <strong class="jxr_keyword">if</strong> (version != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a>             root.setAttribute(<span class="jxr_string">"version"</span>, version);
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>         }
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>         version = Platform.<strong class="jxr_keyword">class</strong>.getPackage().getImplementationVersion();
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>         <strong class="jxr_keyword">if</strong> (version != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a>             root.setAttribute(<span class="jxr_string">"jna"</span>, version);
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a>         }
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a>         version = WindowUtils.<strong class="jxr_keyword">class</strong>.getPackage().getImplementationVersion();
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a>         <strong class="jxr_keyword">if</strong> (version != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>             root.setAttribute(<span class="jxr_string">"jna-platform"</span>, version);
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>         }
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a> 
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a>         doc.appendChild(root);
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a>         root.appendChild(<strong class="jxr_keyword">this</strong>.getAuthProviderInfo(doc));
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a> 
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a>         <strong class="jxr_keyword">return</strong> doc;
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a>     }
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a> 
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a> <em class="jxr_javadoccomment">     * Gets the auth provider info.</em>
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a> <em class="jxr_javadoccomment">     * @param doc</em>
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a> <em class="jxr_javadoccomment">     *            the doc</em>
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a> <em class="jxr_javadoccomment">     * @return the auth provider info</em>
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a>     <strong class="jxr_keyword">protected</strong> Element getAuthProviderInfo(<strong class="jxr_keyword">final</strong> Document doc) {
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a>         <strong class="jxr_keyword">final</strong> <a name="IWindowsAuthProvider" href="../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> auth = <strong class="jxr_keyword">new</strong> <a name="WindowsAuthProviderImpl" href="../../waffle/windows/auth/impl/WindowsAuthProviderImpl.html#WindowsAuthProviderImpl">WindowsAuthProviderImpl</a>();
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a> 
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a>         <strong class="jxr_keyword">final</strong> Element node = doc.createElement(<span class="jxr_string">"auth"</span>);
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a>         node.setAttribute(<span class="jxr_string">"class"</span>, auth.getClass().getName());
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a> 
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a>         <em class="jxr_comment">// Current User</em>
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>         Element child = doc.createElement(<span class="jxr_string">"currentUser"</span>);
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a>         node.appendChild(child);
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a> 
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a>         <strong class="jxr_keyword">final</strong> String currentUsername = WindowsAccountImpl.getCurrentUsername();
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a>         <strong class="jxr_keyword">this</strong>.addAccountInfo(doc, child, <strong class="jxr_keyword">new</strong> <a name="WindowsAccountImpl" href="../../waffle/windows/auth/impl/WindowsAccountImpl.html#WindowsAccountImpl">WindowsAccountImpl</a>(currentUsername));
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a> 
      +<a class="jxr_linenumber" name="L163" href="#L163">163</a>         <em class="jxr_comment">// Computer</em>
      +<a class="jxr_linenumber" name="L164" href="#L164">164</a>         child = doc.createElement(<span class="jxr_string">"computer"</span>);
      +<a class="jxr_linenumber" name="L165" href="#L165">165</a>         node.appendChild(child);
      +<a class="jxr_linenumber" name="L166" href="#L166">166</a> 
      +<a class="jxr_linenumber" name="L167" href="#L167">167</a>         <strong class="jxr_keyword">final</strong> <a name="IWindowsComputer" href="../../waffle/windows/auth/IWindowsComputer.html#IWindowsComputer">IWindowsComputer</a> c = auth.getCurrentComputer();
      +<a class="jxr_linenumber" name="L168" href="#L168">168</a>         Element value = doc.createElement(<span class="jxr_string">"computerName"</span>);
      +<a class="jxr_linenumber" name="L169" href="#L169">169</a>         value.setTextContent(c.getComputerName());
      +<a class="jxr_linenumber" name="L170" href="#L170">170</a>         child.appendChild(value);
      +<a class="jxr_linenumber" name="L171" href="#L171">171</a> 
      +<a class="jxr_linenumber" name="L172" href="#L172">172</a>         value = doc.createElement(<span class="jxr_string">"memberOf"</span>);
      +<a class="jxr_linenumber" name="L173" href="#L173">173</a>         value.setTextContent(c.getMemberOf());
      +<a class="jxr_linenumber" name="L174" href="#L174">174</a>         child.appendChild(value);
      +<a class="jxr_linenumber" name="L175" href="#L175">175</a> 
      +<a class="jxr_linenumber" name="L176" href="#L176">176</a>         value = doc.createElement(<span class="jxr_string">"joinStatus"</span>);
      +<a class="jxr_linenumber" name="L177" href="#L177">177</a>         value.setTextContent(c.getJoinStatus());
      +<a class="jxr_linenumber" name="L178" href="#L178">178</a>         child.appendChild(value);
      +<a class="jxr_linenumber" name="L179" href="#L179">179</a> 
      +<a class="jxr_linenumber" name="L180" href="#L180">180</a>         value = doc.createElement(<span class="jxr_string">"groups"</span>);
      +<a class="jxr_linenumber" name="L181" href="#L181">181</a>         Element g;
      +<a class="jxr_linenumber" name="L182" href="#L182">182</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> String s : c.getGroups()) {
      +<a class="jxr_linenumber" name="L183" href="#L183">183</a>             g = doc.createElement(<span class="jxr_string">"group"</span>);
      +<a class="jxr_linenumber" name="L184" href="#L184">184</a>             g.setTextContent(s);
      +<a class="jxr_linenumber" name="L185" href="#L185">185</a>             value.appendChild(g);
      +<a class="jxr_linenumber" name="L186" href="#L186">186</a>         }
      +<a class="jxr_linenumber" name="L187" href="#L187">187</a>         child.appendChild(value);
      +<a class="jxr_linenumber" name="L188" href="#L188">188</a> 
      +<a class="jxr_linenumber" name="L189" href="#L189">189</a>         <em class="jxr_comment">// Only Show Domains if we are in a Domain</em>
      +<a class="jxr_linenumber" name="L190" href="#L190">190</a>         <strong class="jxr_keyword">if</strong> (Netapi32Util.getJoinStatus() == LMJoin.NETSETUP_JOIN_STATUS.NetSetupDomainName) {
      +<a class="jxr_linenumber" name="L191" href="#L191">191</a>             child = doc.createElement(<span class="jxr_string">"domains"</span>);
      +<a class="jxr_linenumber" name="L192" href="#L192">192</a>             node.appendChild(child);
      +<a class="jxr_linenumber" name="L193" href="#L193">193</a> 
      +<a class="jxr_linenumber" name="L194" href="#L194">194</a>             Element d;
      +<a class="jxr_linenumber" name="L195" href="#L195">195</a>             <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> <a name="IWindowsDomain" href="../../waffle/windows/auth/IWindowsDomain.html#IWindowsDomain">IWindowsDomain</a> domain : auth.getDomains()) {
      +<a class="jxr_linenumber" name="L196" href="#L196">196</a>                 d = doc.createElement(<span class="jxr_string">"domain"</span>);
      +<a class="jxr_linenumber" name="L197" href="#L197">197</a>                 node.appendChild(d);
      +<a class="jxr_linenumber" name="L198" href="#L198">198</a> 
      +<a class="jxr_linenumber" name="L199" href="#L199">199</a>                 value = doc.createElement(<span class="jxr_string">"FQN"</span>);
      +<a class="jxr_linenumber" name="L200" href="#L200">200</a>                 value.setTextContent(domain.getFqn());
      +<a class="jxr_linenumber" name="L201" href="#L201">201</a>                 child.appendChild(value);
      +<a class="jxr_linenumber" name="L202" href="#L202">202</a> 
      +<a class="jxr_linenumber" name="L203" href="#L203">203</a>                 value = doc.createElement(<span class="jxr_string">"TrustTypeString"</span>);
      +<a class="jxr_linenumber" name="L204" href="#L204">204</a>                 value.setTextContent(domain.getTrustTypeString());
      +<a class="jxr_linenumber" name="L205" href="#L205">205</a>                 child.appendChild(value);
      +<a class="jxr_linenumber" name="L206" href="#L206">206</a> 
      +<a class="jxr_linenumber" name="L207" href="#L207">207</a>                 value = doc.createElement(<span class="jxr_string">"TrustDirectionString"</span>);
      +<a class="jxr_linenumber" name="L208" href="#L208">208</a>                 value.setTextContent(domain.getTrustDirectionString());
      +<a class="jxr_linenumber" name="L209" href="#L209">209</a>                 child.appendChild(value);
      +<a class="jxr_linenumber" name="L210" href="#L210">210</a>             }
      +<a class="jxr_linenumber" name="L211" href="#L211">211</a>         }
      +<a class="jxr_linenumber" name="L212" href="#L212">212</a>         <strong class="jxr_keyword">return</strong> node;
      +<a class="jxr_linenumber" name="L213" href="#L213">213</a>     }
      +<a class="jxr_linenumber" name="L214" href="#L214">214</a> 
      +<a class="jxr_linenumber" name="L215" href="#L215">215</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L216" href="#L216">216</a> <em class="jxr_javadoccomment">     * Adds the account info.</em>
      +<a class="jxr_linenumber" name="L217" href="#L217">217</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L218" href="#L218">218</a> <em class="jxr_javadoccomment">     * @param doc</em>
      +<a class="jxr_linenumber" name="L219" href="#L219">219</a> <em class="jxr_javadoccomment">     *            the doc</em>
      +<a class="jxr_linenumber" name="L220" href="#L220">220</a> <em class="jxr_javadoccomment">     * @param node</em>
      +<a class="jxr_linenumber" name="L221" href="#L221">221</a> <em class="jxr_javadoccomment">     *            the node</em>
      +<a class="jxr_linenumber" name="L222" href="#L222">222</a> <em class="jxr_javadoccomment">     * @param account</em>
      +<a class="jxr_linenumber" name="L223" href="#L223">223</a> <em class="jxr_javadoccomment">     *            the account</em>
      +<a class="jxr_linenumber" name="L224" href="#L224">224</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L225" href="#L225">225</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">void</strong> addAccountInfo(<strong class="jxr_keyword">final</strong> Document doc, <strong class="jxr_keyword">final</strong> Element node, <strong class="jxr_keyword">final</strong> <a name="IWindowsAccount" href="../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a> account) {
      +<a class="jxr_linenumber" name="L226" href="#L226">226</a>         Element value = doc.createElement(<span class="jxr_string">"Name"</span>);
      +<a class="jxr_linenumber" name="L227" href="#L227">227</a>         value.setTextContent(account.getName());
      +<a class="jxr_linenumber" name="L228" href="#L228">228</a>         node.appendChild(value);
      +<a class="jxr_linenumber" name="L229" href="#L229">229</a> 
      +<a class="jxr_linenumber" name="L230" href="#L230">230</a>         value = doc.createElement(<span class="jxr_string">"FQN"</span>);
      +<a class="jxr_linenumber" name="L231" href="#L231">231</a>         value.setTextContent(account.getFqn());
      +<a class="jxr_linenumber" name="L232" href="#L232">232</a>         node.appendChild(value);
      +<a class="jxr_linenumber" name="L233" href="#L233">233</a> 
      +<a class="jxr_linenumber" name="L234" href="#L234">234</a>         value = doc.createElement(<span class="jxr_string">"Domain"</span>);
      +<a class="jxr_linenumber" name="L235" href="#L235">235</a>         value.setTextContent(account.getDomain());
      +<a class="jxr_linenumber" name="L236" href="#L236">236</a>         node.appendChild(value);
      +<a class="jxr_linenumber" name="L237" href="#L237">237</a> 
      +<a class="jxr_linenumber" name="L238" href="#L238">238</a>         value = doc.createElement(<span class="jxr_string">"SID"</span>);
      +<a class="jxr_linenumber" name="L239" href="#L239">239</a>         value.setTextContent(account.getSidString());
      +<a class="jxr_linenumber" name="L240" href="#L240">240</a>         node.appendChild(value);
      +<a class="jxr_linenumber" name="L241" href="#L241">241</a>     }
      +<a class="jxr_linenumber" name="L242" href="#L242">242</a> 
      +<a class="jxr_linenumber" name="L243" href="#L243">243</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L244" href="#L244">244</a> <em class="jxr_javadoccomment">     * Gets the lookup info.</em>
      +<a class="jxr_linenumber" name="L245" href="#L245">245</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L246" href="#L246">246</a> <em class="jxr_javadoccomment">     * @param doc</em>
      +<a class="jxr_linenumber" name="L247" href="#L247">247</a> <em class="jxr_javadoccomment">     *            the doc</em>
      +<a class="jxr_linenumber" name="L248" href="#L248">248</a> <em class="jxr_javadoccomment">     * @param lookup</em>
      +<a class="jxr_linenumber" name="L249" href="#L249">249</a> <em class="jxr_javadoccomment">     *            the lookup</em>
      +<a class="jxr_linenumber" name="L250" href="#L250">250</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L251" href="#L251">251</a> <em class="jxr_javadoccomment">     * @return the lookup info</em>
      +<a class="jxr_linenumber" name="L252" href="#L252">252</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L253" href="#L253">253</a>     <strong class="jxr_keyword">public</strong> Element getLookupInfo(<strong class="jxr_keyword">final</strong> Document doc, <strong class="jxr_keyword">final</strong> String lookup) {
      +<a class="jxr_linenumber" name="L254" href="#L254">254</a>         <strong class="jxr_keyword">final</strong> <a name="IWindowsAuthProvider" href="../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> auth = <strong class="jxr_keyword">new</strong> <a name="WindowsAuthProviderImpl" href="../../waffle/windows/auth/impl/WindowsAuthProviderImpl.html#WindowsAuthProviderImpl">WindowsAuthProviderImpl</a>();
      +<a class="jxr_linenumber" name="L255" href="#L255">255</a>         <strong class="jxr_keyword">final</strong> Element node = doc.createElement(<span class="jxr_string">"lookup"</span>);
      +<a class="jxr_linenumber" name="L256" href="#L256">256</a>         node.setAttribute(<span class="jxr_string">"name"</span>, lookup);
      +<a class="jxr_linenumber" name="L257" href="#L257">257</a>         <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L258" href="#L258">258</a>             <strong class="jxr_keyword">this</strong>.addAccountInfo(doc, node, auth.lookupAccount(lookup));
      +<a class="jxr_linenumber" name="L259" href="#L259">259</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> Win32Exception e) {
      +<a class="jxr_linenumber" name="L260" href="#L260">260</a>             node.appendChild(WaffleInfo.getException(doc, e));
      +<a class="jxr_linenumber" name="L261" href="#L261">261</a>         }
      +<a class="jxr_linenumber" name="L262" href="#L262">262</a>         <strong class="jxr_keyword">return</strong> node;
      +<a class="jxr_linenumber" name="L263" href="#L263">263</a>     }
      +<a class="jxr_linenumber" name="L264" href="#L264">264</a> 
      +<a class="jxr_linenumber" name="L265" href="#L265">265</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L266" href="#L266">266</a> <em class="jxr_javadoccomment">     * Gets the exception.</em>
      +<a class="jxr_linenumber" name="L267" href="#L267">267</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L268" href="#L268">268</a> <em class="jxr_javadoccomment">     * @param doc</em>
      +<a class="jxr_linenumber" name="L269" href="#L269">269</a> <em class="jxr_javadoccomment">     *            the doc</em>
      +<a class="jxr_linenumber" name="L270" href="#L270">270</a> <em class="jxr_javadoccomment">     * @param t</em>
      +<a class="jxr_linenumber" name="L271" href="#L271">271</a> <em class="jxr_javadoccomment">     *            the t</em>
      +<a class="jxr_linenumber" name="L272" href="#L272">272</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L273" href="#L273">273</a> <em class="jxr_javadoccomment">     * @return the exception</em>
      +<a class="jxr_linenumber" name="L274" href="#L274">274</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L275" href="#L275">275</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> Element getException(<strong class="jxr_keyword">final</strong> Document doc, <strong class="jxr_keyword">final</strong> Exception t) {
      +<a class="jxr_linenumber" name="L276" href="#L276">276</a>         <strong class="jxr_keyword">final</strong> Element node = doc.createElement(<span class="jxr_string">"exception"</span>);
      +<a class="jxr_linenumber" name="L277" href="#L277">277</a>         node.setAttribute(<span class="jxr_string">"class"</span>, t.getClass().getName());
      +<a class="jxr_linenumber" name="L278" href="#L278">278</a> 
      +<a class="jxr_linenumber" name="L279" href="#L279">279</a>         Element value = doc.createElement(<span class="jxr_string">"message"</span>);
      +<a class="jxr_linenumber" name="L280" href="#L280">280</a>         <strong class="jxr_keyword">if</strong> (t.getMessage() != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L281" href="#L281">281</a>             value.setTextContent(t.getMessage());
      +<a class="jxr_linenumber" name="L282" href="#L282">282</a>             node.appendChild(value);
      +<a class="jxr_linenumber" name="L283" href="#L283">283</a>         }
      +<a class="jxr_linenumber" name="L284" href="#L284">284</a> 
      +<a class="jxr_linenumber" name="L285" href="#L285">285</a>         value = doc.createElement(<span class="jxr_string">"trace"</span>);
      +<a class="jxr_linenumber" name="L286" href="#L286">286</a>         value.setTextContent(Arrays.toString(t.getStackTrace()));
      +<a class="jxr_linenumber" name="L287" href="#L287">287</a>         node.appendChild(value);
      +<a class="jxr_linenumber" name="L288" href="#L288">288</a>         <strong class="jxr_keyword">return</strong> node;
      +<a class="jxr_linenumber" name="L289" href="#L289">289</a>     }
      +<a class="jxr_linenumber" name="L290" href="#L290">290</a> 
      +<a class="jxr_linenumber" name="L291" href="#L291">291</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L292" href="#L292">292</a> <em class="jxr_javadoccomment">     * To pretty xml.</em>
      +<a class="jxr_linenumber" name="L293" href="#L293">293</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L294" href="#L294">294</a> <em class="jxr_javadoccomment">     * @param doc</em>
      +<a class="jxr_linenumber" name="L295" href="#L295">295</a> <em class="jxr_javadoccomment">     *            the doc</em>
      +<a class="jxr_linenumber" name="L296" href="#L296">296</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L297" href="#L297">297</a> <em class="jxr_javadoccomment">     * @return the string</em>
      +<a class="jxr_linenumber" name="L298" href="#L298">298</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L299" href="#L299">299</a> <em class="jxr_javadoccomment">     * @throws TransformerException</em>
      +<a class="jxr_linenumber" name="L300" href="#L300">300</a> <em class="jxr_javadoccomment">     *             the transformer exception</em>
      +<a class="jxr_linenumber" name="L301" href="#L301">301</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L302" href="#L302">302</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String toPrettyXML(<strong class="jxr_keyword">final</strong> Document doc) <strong class="jxr_keyword">throws</strong> TransformerException {
      +<a class="jxr_linenumber" name="L303" href="#L303">303</a>         <em class="jxr_comment">// set up a transformer</em>
      +<a class="jxr_linenumber" name="L304" href="#L304">304</a>         <strong class="jxr_keyword">final</strong> TransformerFactory transfac = TransformerFactory.newInstance();
      +<a class="jxr_linenumber" name="L305" href="#L305">305</a>         transfac.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, <span class="jxr_string">""</span>);
      +<a class="jxr_linenumber" name="L306" href="#L306">306</a>         transfac.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, <span class="jxr_string">""</span>);
      +<a class="jxr_linenumber" name="L307" href="#L307">307</a> 
      +<a class="jxr_linenumber" name="L308" href="#L308">308</a>         <strong class="jxr_keyword">final</strong> Transformer trans = transfac.newTransformer();
      +<a class="jxr_linenumber" name="L309" href="#L309">309</a>         trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, <span class="jxr_string">"yes"</span>);
      +<a class="jxr_linenumber" name="L310" href="#L310">310</a>         trans.setOutputProperty(OutputKeys.INDENT, <span class="jxr_string">"yes"</span>);
      +<a class="jxr_linenumber" name="L311" href="#L311">311</a> 
      +<a class="jxr_linenumber" name="L312" href="#L312">312</a>         <em class="jxr_comment">// create string from xml tree</em>
      +<a class="jxr_linenumber" name="L313" href="#L313">313</a>         <strong class="jxr_keyword">final</strong> StringWriter sw = <strong class="jxr_keyword">new</strong> StringWriter();
      +<a class="jxr_linenumber" name="L314" href="#L314">314</a>         <strong class="jxr_keyword">final</strong> StreamResult result = <strong class="jxr_keyword">new</strong> StreamResult(sw);
      +<a class="jxr_linenumber" name="L315" href="#L315">315</a>         <strong class="jxr_keyword">final</strong> DOMSource source = <strong class="jxr_keyword">new</strong> DOMSource(doc);
      +<a class="jxr_linenumber" name="L316" href="#L316">316</a>         trans.transform(source, result);
      +<a class="jxr_linenumber" name="L317" href="#L317">317</a>         <strong class="jxr_keyword">return</strong> sw.toString();
      +<a class="jxr_linenumber" name="L318" href="#L318">318</a>     }
      +<a class="jxr_linenumber" name="L319" href="#L319">319</a> 
      +<a class="jxr_linenumber" name="L320" href="#L320">320</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L321" href="#L321">321</a> <em class="jxr_javadoccomment">     * Print system information.</em>
      +<a class="jxr_linenumber" name="L322" href="#L322">322</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L323" href="#L323">323</a> <em class="jxr_javadoccomment">     * @param args</em>
      +<a class="jxr_linenumber" name="L324" href="#L324">324</a> <em class="jxr_javadoccomment">     *            variable arguments to pass to main. Valid values are "-show" and "-lookup".</em>
      +<a class="jxr_linenumber" name="L325" href="#L325">325</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L326" href="#L326">326</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">void</strong> main(<strong class="jxr_keyword">final</strong> String[] args) {
      +<a class="jxr_linenumber" name="L327" href="#L327">327</a>         <strong class="jxr_keyword">boolean</strong> show = false;
      +<a class="jxr_linenumber" name="L328" href="#L328">328</a>         <strong class="jxr_keyword">final</strong> List&lt;String&gt; lookup = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
      +<a class="jxr_linenumber" name="L329" href="#L329">329</a>         <strong class="jxr_keyword">if</strong> (args != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L330" href="#L330">330</a>             String arg;
      +<a class="jxr_linenumber" name="L331" href="#L331">331</a>             <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">int</strong> i = 0; i &lt; args.length; i++) {
      +<a class="jxr_linenumber" name="L332" href="#L332">332</a>                 arg = args[i];
      +<a class="jxr_linenumber" name="L333" href="#L333">333</a>                 <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">null</strong> != arg) {
      +<a class="jxr_linenumber" name="L334" href="#L334">334</a>                     <strong class="jxr_keyword">switch</strong> (arg) {
      +<a class="jxr_linenumber" name="L335" href="#L335">335</a>                         <strong class="jxr_keyword">case</strong> <span class="jxr_string">"-show"</span>:
      +<a class="jxr_linenumber" name="L336" href="#L336">336</a>                             show = <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L337" href="#L337">337</a>                             <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L338" href="#L338">338</a>                         <strong class="jxr_keyword">case</strong> <span class="jxr_string">"-lookup"</span>:
      +<a class="jxr_linenumber" name="L339" href="#L339">339</a>                             lookup.add(args[++i]);
      +<a class="jxr_linenumber" name="L340" href="#L340">340</a>                             <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L341" href="#L341">341</a>                         <strong class="jxr_keyword">default</strong>:
      +<a class="jxr_linenumber" name="L342" href="#L342">342</a>                             WaffleInfo.LOGGER.error(<span class="jxr_string">"Unknown Argument: {}"</span>, arg);
      +<a class="jxr_linenumber" name="L343" href="#L343">343</a>                             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"Unknown Argument: "</span> + arg);
      +<a class="jxr_linenumber" name="L344" href="#L344">344</a>                     }
      +<a class="jxr_linenumber" name="L345" href="#L345">345</a>                 }
      +<a class="jxr_linenumber" name="L346" href="#L346">346</a>             }
      +<a class="jxr_linenumber" name="L347" href="#L347">347</a>         }
      +<a class="jxr_linenumber" name="L348" href="#L348">348</a> 
      +<a class="jxr_linenumber" name="L349" href="#L349">349</a>         <strong class="jxr_keyword">final</strong> <a name="WaffleInfo" href="../../waffle/util/WaffleInfo.html#WaffleInfo">WaffleInfo</a> helper = <strong class="jxr_keyword">new</strong> <a name="WaffleInfo" href="../../waffle/util/WaffleInfo.html#WaffleInfo">WaffleInfo</a>();
      +<a class="jxr_linenumber" name="L350" href="#L350">350</a>         <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L351" href="#L351">351</a>             <strong class="jxr_keyword">final</strong> Document info = helper.getWaffleInfo();
      +<a class="jxr_linenumber" name="L352" href="#L352">352</a>             <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> String name : lookup) {
      +<a class="jxr_linenumber" name="L353" href="#L353">353</a>                 info.getDocumentElement().appendChild(helper.getLookupInfo(info, name));
      +<a class="jxr_linenumber" name="L354" href="#L354">354</a>             }
      +<a class="jxr_linenumber" name="L355" href="#L355">355</a> 
      +<a class="jxr_linenumber" name="L356" href="#L356">356</a>             <strong class="jxr_keyword">final</strong> String xml = WaffleInfo.toPrettyXML(info);
      +<a class="jxr_linenumber" name="L357" href="#L357">357</a>             <strong class="jxr_keyword">final</strong> File f;
      +<a class="jxr_linenumber" name="L358" href="#L358">358</a>             <strong class="jxr_keyword">if</strong> (show) {
      +<a class="jxr_linenumber" name="L359" href="#L359">359</a>                 f = Files.createTempFile(<span class="jxr_string">"waffle-info-"</span>, <span class="jxr_string">".xml"</span>).toFile();
      +<a class="jxr_linenumber" name="L360" href="#L360">360</a>                 Files.write(f.toPath(), xml.getBytes(StandardCharsets.UTF_8), StandardOpenOption.APPEND);
      +<a class="jxr_linenumber" name="L361" href="#L361">361</a>                 Desktop.getDesktop().open(f);
      +<a class="jxr_linenumber" name="L362" href="#L362">362</a>             } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L363" href="#L363">363</a>                 WaffleInfo.LOGGER.info(xml);
      +<a class="jxr_linenumber" name="L364" href="#L364">364</a>             }
      +<a class="jxr_linenumber" name="L365" href="#L365">365</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> IOException | TransformerException | ParserConfigurationException e) {
      +<a class="jxr_linenumber" name="L366" href="#L366">366</a>             WaffleInfo.LOGGER.error(e.getMessage());
      +<a class="jxr_linenumber" name="L367" href="#L367">367</a>             WaffleInfo.LOGGER.trace(<span class="jxr_string">""</span>, e);
      +<a class="jxr_linenumber" name="L368" href="#L368">368</a>         }
      +<a class="jxr_linenumber" name="L369" href="#L369">369</a>     }
      +<a class="jxr_linenumber" name="L370" href="#L370">370</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/util/cache/Cache.html b/waffle-jna-jakarta/xref/waffle/util/cache/Cache.html
      new file mode 100644
      index 0000000000..3a5615e7a5
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/cache/Cache.html
      @@ -0,0 +1,142 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>Cache xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/util/cache/Cache.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util.cache;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> java.util.NoSuchElementException;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> java.util.ServiceLoader;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> org.slf4j.Logger;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> org.slf4j.LoggerFactory;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment"> * A semi-persistent mapping from keys to values.</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> *</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> * @param &lt;K&gt;</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> *            the type of keys maintained by this cache</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> * @param &lt;V&gt;</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment"> *            the type of mapped values</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment"> *</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment"> * @see &lt;a href="<a href="https://github.com/Waffle/waffle/blob/master/Docs/CustomCache.md" target="alexandria_uri">https://github.com/Waffle/waffle/blob/master/Docs/CustomCache.md</a>"&gt;Can I provide a custom cache</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment"> *      implementation?&lt;/a&gt;</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> Cache&lt;K, V&gt; {
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * Creates a new cache with the specified timeout.</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     * &lt;p&gt;</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * The cache implementation is obtained using {@link ServiceLoader}. To create your own implementation, implement</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     * {@link CacheSupplier} and register it using the {@code /META-INF/services/waffle.util.cache.CacheSupplier} file</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     * on your classpath.</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     * @param timeout</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     *            timeout in seconds</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     * @param &lt;K&gt;</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     *            the type of keys maintained by this cache</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     * @param &lt;V&gt;</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     *            the type of mapped values</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">     * @return a new cache</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  <em class="jxr_javadoccomment">     * @throws NoSuchElementException</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <em class="jxr_javadoccomment">     *             if no cache can be instantiated, use {@link Exception#getSuppressed()} to obtain details.</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      <strong class="jxr_keyword">static</strong> &lt;K, V&gt; Cache&lt;K, V&gt; newCache(<strong class="jxr_keyword">int</strong> timeout) <strong class="jxr_keyword">throws</strong> NoSuchElementException {
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>          <strong class="jxr_keyword">final</strong> NoSuchElementException exception = <strong class="jxr_keyword">new</strong> NoSuchElementException();
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          <strong class="jxr_keyword">boolean</strong> cacheSupplierFound = false;
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          <strong class="jxr_keyword">for</strong> (<a name="CacheSupplier" href="../../../waffle/util/cache/CacheSupplier.html#CacheSupplier">CacheSupplier</a> cacheSupplier : ServiceLoader.load(CacheSupplier.<strong class="jxr_keyword">class</strong>)) {
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>              cacheSupplierFound = <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>              <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>                  <strong class="jxr_keyword">return</strong> cacheSupplier.newCache(timeout);
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>              } <strong class="jxr_keyword">catch</strong> (Exception e) {
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>                  exception.addSuppressed(e);
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>              }
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          }
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>          <strong class="jxr_keyword">if</strong> (!cacheSupplierFound) {
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>              Logger logger = LoggerFactory.getLogger(Cache.<strong class="jxr_keyword">class</strong>);
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>              logger.error(
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>                      <span class="jxr_string">"No CacheSupplier implementation found by ServiceLoader. Please see https://github.com/Waffle/waffle/blob/master/Docs/faq/CustomCache.md for possible solutions. Falling back to default CaffeineCache implementation."</span>,
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>                      exception);
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>              <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> CaffeineCache&lt;&gt;(timeout);
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>          }
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>          <strong class="jxr_keyword">throw</strong> exception;
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>      }
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_javadoccomment">     * Fetches the key from the cache</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">     * @param key</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">     *            the key</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">     * @return the corresponding value</em>
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>  <em class="jxr_javadoccomment">     * @see java.util.Map#get</em>
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>      V get(K key);
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment">     * Stores a binding for the key and the value in the cache</em>
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a> <em class="jxr_javadoccomment">     * @param key</em>
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a> <em class="jxr_javadoccomment">     *            the key</em>
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a> <em class="jxr_javadoccomment">     * @param value</em>
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment">     *            the value</em>
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment">     * @see java.util.Map#put</em>
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>     <strong class="jxr_keyword">void</strong> put(K key, V value);
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a> 
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment">     * Removes the binding for the key from the cache</em>
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment">     * @param key</em>
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment">     *            the key</em>
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a> <em class="jxr_javadoccomment">     * @see java.util.Map#remove(Object)</em>
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>     <strong class="jxr_keyword">void</strong> remove(K key);
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a> 
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment">     * Returns the number of bindings in this cache</em>
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment">     * @return the size</em>
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a> <em class="jxr_javadoccomment">     * @see java.util.Map#size</em>
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>     <strong class="jxr_keyword">int</strong> size();
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/util/cache/CacheSupplier.html b/waffle-jna-jakarta/xref/waffle/util/cache/CacheSupplier.html
      new file mode 100644
      index 0000000000..466f5d83fa
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/cache/CacheSupplier.html
      @@ -0,0 +1,57 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>CacheSupplier xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/util/cache/CacheSupplier.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util.cache;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment"> * Service interface to instantiate a new {@link Cache}.</em>
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a name="CacheSupplier" href="../../../waffle/util/cache/CacheSupplier.html#CacheSupplier">CacheSupplier</a> {
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">     * Creates a new cache with the specified timeout</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">     * @param timeout</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">     *            timeout in seconds</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment">     * @param &lt;K&gt;</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment">     *            the type of keys maintained by this cache</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment">     * @param &lt;V&gt;</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">     *            the type of mapped values</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     * @return a new cache</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      &lt;K, V&gt; Cache&lt;K, V&gt; newCache(<strong class="jxr_keyword">long</strong> timeout);
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/util/cache/CaffeineCache.html b/waffle-jna-jakarta/xref/waffle/util/cache/CaffeineCache.html
      new file mode 100644
      index 0000000000..5caf7be8df
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/cache/CaffeineCache.html
      @@ -0,0 +1,87 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>CaffeineCache xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/util/cache/CaffeineCache.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util.cache;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.github.benmanes.caffeine.cache.Caffeine;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> java.time.Duration;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> org.checkerframework.checker.index.qual.NonNegative;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment"> * A {@link Cache} based on {@link com.github.benmanes.caffeine.cache.Cache}.</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> *</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> * @param &lt;K&gt;</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> *            the type of keys maintained by this cache</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> * @param &lt;V&gt;</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment"> *            the type of mapped values</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> CaffeineCache&lt;K, V&gt; <strong class="jxr_keyword">implements</strong> Cache&lt;K, V&gt; {
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <em class="jxr_javadoccomment">/** The cache store. */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> com.github.benmanes.caffeine.cache.Cache&lt;K, V&gt; cache;
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * Instantiate new caffeine cache with timeout.</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * @param timeout</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     *            Specified timeout in seconds for cache.</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">public</strong> <a name="CaffeineCache" href="../../../waffle/util/cache/CaffeineCache.html#CaffeineCache">CaffeineCache</a>(@NonNegative <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> timeout) {
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          cache = Caffeine.newBuilder().expireAfterWrite(Duration.ofSeconds(timeout)).build();
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      }
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      @Override
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <strong class="jxr_keyword">public</strong> V get(<strong class="jxr_keyword">final</strong> K key) {
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>          <strong class="jxr_keyword">return</strong> cache.asMap().get(key);
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      }
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      @Override
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> put(<strong class="jxr_keyword">final</strong> K key, <strong class="jxr_keyword">final</strong> V value) {
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          cache.put(key, value);
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      }
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      @Override
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> remove(<strong class="jxr_keyword">final</strong> K key) {
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          cache.asMap().remove(key);
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      }
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      @Override
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> size() {
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          <strong class="jxr_keyword">return</strong> cache.asMap().size();
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>      }
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/util/cache/CaffeineCacheSupplier.html b/waffle-jna-jakarta/xref/waffle/util/cache/CaffeineCacheSupplier.html
      new file mode 100644
      index 0000000000..899f4b8436
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/cache/CaffeineCacheSupplier.html
      @@ -0,0 +1,48 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>CaffeineCacheSupplier xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/util/cache/CaffeineCacheSupplier.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.util.cache;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment"> * A {@link CacheSupplier} supplying {@link CaffeineCache}.</em>
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="CaffeineCacheSupplier" href="../../../waffle/util/cache/CaffeineCacheSupplier.html#CaffeineCacheSupplier">CaffeineCacheSupplier</a> <strong class="jxr_keyword">implements</strong> <a name="CacheSupplier" href="../../../waffle/util/cache/CacheSupplier.html#CacheSupplier">CacheSupplier</a> {
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      @Override
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>      <strong class="jxr_keyword">public</strong> &lt;K, V&gt; Cache&lt;K, V&gt; newCache(<strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> timeout) {
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> CaffeineCache&lt;&gt;(timeout);
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      }
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/util/cache/package-frame.html b/waffle-jna-jakarta/xref/waffle/util/cache/package-frame.html
      new file mode 100644
      index 0000000000..09b6938c9f
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/cache/package-frame.html
      @@ -0,0 +1,30 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.util.cache</title>
      +        <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar"><a href="package-summary.html" target="classFrame">waffle.util.cache</a></h1>
      +        <div class="indexContainer">
      +            <h2 title="Classes">Classes</h2>
      +            <ul title="Classes">
      +                <li>
      +                    <a href="Cache.html#Cache" target="classFrame">Cache</a>
      +                </li>
      +                <li>
      +                    <a href="CacheSupplier.html#CacheSupplier" target="classFrame">CacheSupplier</a>
      +                </li>
      +                <li>
      +                    <a href="CaffeineCache.html#CaffeineCache" target="classFrame">CaffeineCache</a>
      +                </li>
      +                <li>
      +                    <a href="CaffeineCacheSupplier.html#CaffeineCacheSupplier" target="classFrame">CaffeineCacheSupplier</a>
      +                </li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/util/cache/package-summary.html b/waffle-jna-jakarta/xref/waffle/util/cache/package-summary.html
      new file mode 100644
      index 0000000000..facb3b5467
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/cache/package-summary.html
      @@ -0,0 +1,122 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.util.cache</title>
      +        <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="style" />
      +    </head>
      +
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_top">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 title="Package" class="title">Package waffle.util.cache</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <ul class="blockList">
      +                <li class="blockList">
      +                    <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
      +                        <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
      +                        <thead>
      +                            <tr>
      +                                <th class="colFirst colLast" scope="col">Class</th>
      +                            </tr>
      +                        </thead>
      +                        <tbody>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="Cache.html#Cache" target="classFrame" title="class in waffle.util.cache">Cache</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="CacheSupplier.html#CacheSupplier" target="classFrame" title="class in waffle.util.cache">CacheSupplier</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="CaffeineCache.html#CaffeineCache" target="classFrame" title="class in waffle.util.cache">CaffeineCache</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="CaffeineCacheSupplier.html#CaffeineCacheSupplier" target="classFrame" title="class in waffle.util.cache">CaffeineCacheSupplier</a>
      +                                </td>
      +                            </tr>
      +                        </tbody>
      +                    </table>
      +                </li>
      +            </ul>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_bottom">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/util/package-frame.html b/waffle-jna-jakarta/xref/waffle/util/package-frame.html
      new file mode 100644
      index 0000000000..8d48ece376
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/package-frame.html
      @@ -0,0 +1,36 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.util</title>
      +        <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar"><a href="package-summary.html" target="classFrame">waffle.util</a></h1>
      +        <div class="indexContainer">
      +            <h2 title="Classes">Classes</h2>
      +            <ul title="Classes">
      +                <li>
      +                    <a href="AuthorizationHeader.html#AuthorizationHeader" target="classFrame">AuthorizationHeader</a>
      +                </li>
      +                <li>
      +                    <a href="CorsPreFlightCheck.html#CorsPreFlightCheck" target="classFrame">CorsPreFlightCheck</a>
      +                </li>
      +                <li>
      +                    <a href="NtlmMessage.html#NtlmMessage" target="classFrame">NtlmMessage</a>
      +                </li>
      +                <li>
      +                    <a href="NtlmServletRequest.html#NtlmServletRequest" target="classFrame">NtlmServletRequest</a>
      +                </li>
      +                <li>
      +                    <a href="SPNegoMessage.html#SPNegoMessage" target="classFrame">SPNegoMessage</a>
      +                </li>
      +                <li>
      +                    <a href="WaffleInfo.html#WaffleInfo" target="classFrame">WaffleInfo</a>
      +                </li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/util/package-summary.html b/waffle-jna-jakarta/xref/waffle/util/package-summary.html
      new file mode 100644
      index 0000000000..fef94f6d50
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/util/package-summary.html
      @@ -0,0 +1,132 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.util</title>
      +        <link rel="stylesheet" type="text/css" href="../../stylesheet.css" title="style" />
      +    </head>
      +
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_top">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 title="Package" class="title">Package waffle.util</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <ul class="blockList">
      +                <li class="blockList">
      +                    <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
      +                        <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
      +                        <thead>
      +                            <tr>
      +                                <th class="colFirst colLast" scope="col">Class</th>
      +                            </tr>
      +                        </thead>
      +                        <tbody>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="AuthorizationHeader.html#AuthorizationHeader" target="classFrame" title="class in waffle.util">AuthorizationHeader</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="CorsPreFlightCheck.html#CorsPreFlightCheck" target="classFrame" title="class in waffle.util">CorsPreFlightCheck</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="NtlmMessage.html#NtlmMessage" target="classFrame" title="class in waffle.util">NtlmMessage</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="NtlmServletRequest.html#NtlmServletRequest" target="classFrame" title="class in waffle.util">NtlmServletRequest</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="SPNegoMessage.html#SPNegoMessage" target="classFrame" title="class in waffle.util">SPNegoMessage</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WaffleInfo.html#WaffleInfo" target="classFrame" title="class in waffle.util">WaffleInfo</a>
      +                                </td>
      +                            </tr>
      +                        </tbody>
      +                    </table>
      +                </li>
      +            </ul>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_bottom">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsAccount.html b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsAccount.html
      new file mode 100644
      index 0000000000..2b9b77af62
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsAccount.html
      @@ -0,0 +1,71 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>IWindowsAccount xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/windows/auth/IWindowsAccount.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment"> * Windows account.</em>
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a name="IWindowsAccount" href="../../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a> {
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">     * Security identifier.</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">     * @return String in the S- format.</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      String getSidString();
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">     * Fully qualified username.</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      String getFqn();
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * User name.</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      String getName();
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     * Domain name.</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      String getDomain();
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsAuthProvider.html b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsAuthProvider.html
      new file mode 100644
      index 0000000000..757175593e
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsAuthProvider.html
      @@ -0,0 +1,149 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>IWindowsAuthProvider xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/windows/auth/IWindowsAuthProvider.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment"> * Implements Windows authentication functions.</em>
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a name="IWindowsAuthProvider" href="../../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> {
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">     * The LogonUser function attempts to log a user on to the local computer using a network logon type and the default</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">     * authentication provider.</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">     * @param username</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment">     *            A string that specifies the name of the user in the UPN format.</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment">     * @param password</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment">     *            A string that specifies the plaintext password for the user account specified by username.</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     * @return Windows identity.</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <a name="IWindowsIdentity" href="../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> logonUser(String username, String password);
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     * The LogonDomainUser function attempts to log a user on to the local computer using a network logon type and the</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * default authentication provider.</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * @param username</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     *            A string that specifies the name of the user. This is the name of the user account to log on to. If</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     *            you use the user principal name (UPN) format, user@DNS_domain_name, the domain parameter must be NULL.</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     * @param domain</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     *            A string that specifies the name of the domain or server whose account database contains the username</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     *            account. If this parameter is NULL, the user name must be specified in UPN format. If this parameter</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     *            is ".", the function validates the account by using only the local account database.</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     * @param password</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     *            A string that specifies the plaintext password for the user account specified by username.</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     * @return Windows identity.</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      <a name="IWindowsIdentity" href="../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> logonDomainUser(String username, String domain, String password);
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">     * The LogonDomainUserEx function attempts to log a user on to the local computer. The local computer is the</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     * computer from which LogonUser was called. You cannot use LogonUser to log on to a remote computer. You specify</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     * the user with a user name and domain and authenticate the user with a plaintext password.</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     * @param username</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  <em class="jxr_javadoccomment">     *            A string that specifies the name of the user. This is the name of the user account to log on to. If</em>
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  <em class="jxr_javadoccomment">     *            you use the user principal name (UPN) format, user@DNS_domain_name, the domain parameter must be NULL.</em>
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  <em class="jxr_javadoccomment">     * @param domain</em>
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  <em class="jxr_javadoccomment">     *            A string that specifies the name of the domain or server whose account database contains the username</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     *            account. If this parameter is NULL, the user name must be specified in UPN format. If this parameter</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     *            is ".", the function validates the account by using only the local account database.</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     * @param password</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     *            A string that specifies the plaintext password for the user account specified by username.</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     * @param logonType</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment">     *            The type of logon operation to perform.</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  <em class="jxr_javadoccomment">     * @param logonProvider</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">     *            Specifies the logon provider.</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  <em class="jxr_javadoccomment">     * @return Windows identity.</em>
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>      <a name="IWindowsIdentity" href="../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> logonDomainUserEx(String username, String domain, String password, <strong class="jxr_keyword">int</strong> logonType,
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>              <strong class="jxr_keyword">int</strong> logonProvider);
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  <em class="jxr_javadoccomment">     * Retrieve a security identifier (SID) for the account and the name of the domain or local computer on which the</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  <em class="jxr_javadoccomment">     * account was found.</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">     * @param username</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">     *            Fully qualified or partial username.</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">     * @return Windows account.</em>
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>      <a name="IWindowsAccount" href="../../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a> lookupAccount(String username);
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  <em class="jxr_javadoccomment">     * Retrieve the current computer information.</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment">     * @return Current computer information.</em>
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>     <a name="IWindowsComputer" href="../../../waffle/windows/auth/IWindowsComputer.html#IWindowsComputer">IWindowsComputer</a> getCurrentComputer();
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a> 
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a> <em class="jxr_javadoccomment">     * Retrieve a list of domains (Active Directory) on the local server.</em>
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a> <em class="jxr_javadoccomment">     * @return A list of domains.</em>
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>     <a name="IWindowsDomain" href="../../../waffle/windows/auth/IWindowsDomain.html#IWindowsDomain">IWindowsDomain</a>[] getDomains();
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a> 
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a> <em class="jxr_javadoccomment">     * Attempts to validate the user using an SSPI token. This token is generated by the client via the</em>
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment">     * InitializeSecurityContext(package) method described in</em>
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment">     * <a href="https://msdn.microsoft.com/en-us/library/aa375509(VS.85).aspx" target="alexandria_uri">https://msdn.microsoft.com/en-us/library/aa375509(VS.85).aspx</a></em>
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a> <em class="jxr_javadoccomment">     * @param connectionId</em>
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a> <em class="jxr_javadoccomment">     *            A unique connection id.</em>
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a> <em class="jxr_javadoccomment">     * @param token</em>
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a> <em class="jxr_javadoccomment">     *            The security token generated by the client wishing to logon.</em>
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a> <em class="jxr_javadoccomment">     * @param securityPackage</em>
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a> <em class="jxr_javadoccomment">     *            The name of the security package to use. Can be any security package supported by both the client and</em>
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a> <em class="jxr_javadoccomment">     *            the server. This is usually set to "Negotiate" which will use SPNEGO to determine which security</em>
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a> <em class="jxr_javadoccomment">     *            package to use. Other common values are "Kerberos" and "NTLM".</em>
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a> <em class="jxr_javadoccomment">     * @return Windows account.</em>
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>     <a name="IWindowsSecurityContext" href="../../../waffle/windows/auth/IWindowsSecurityContext.html#IWindowsSecurityContext">IWindowsSecurityContext</a> acceptSecurityToken(String connectionId, byte[] token, String securityPackage);
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a> 
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a> <em class="jxr_javadoccomment">     * Reset a previously saved continuation security token for a given connection id.</em>
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a> <em class="jxr_javadoccomment">     * @param connectionId</em>
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a> <em class="jxr_javadoccomment">     *            Connection id.</em>
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>     <strong class="jxr_keyword">void</strong> resetSecurityToken(String connectionId);
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsComputer.html b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsComputer.html
      new file mode 100644
      index 0000000000..7b6794a01a
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsComputer.html
      @@ -0,0 +1,71 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>IWindowsComputer xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/windows/auth/IWindowsComputer.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment"> * A Windows Computer.</em>
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a name="IWindowsComputer" href="../../../waffle/windows/auth/IWindowsComputer.html#IWindowsComputer">IWindowsComputer</a> {
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">     * Computer name.</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      String getComputerName();
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">     * Member of (domain).</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      String getMemberOf();
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * Join status.</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      String getJoinStatus();
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     * Groups.</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     * @return Array of group names.</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      String[] getGroups();
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsCredentialsHandle.html b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsCredentialsHandle.html
      new file mode 100644
      index 0000000000..9a23167e41
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsCredentialsHandle.html
      @@ -0,0 +1,61 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>IWindowsCredentialsHandle xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/windows/auth/IWindowsCredentialsHandle.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi.CredHandle;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <em class="jxr_javadoccomment"> * Windows credentials handle.</em>
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a name="IWindowsCredentialsHandle" href="../../../waffle/windows/auth/IWindowsCredentialsHandle.html#IWindowsCredentialsHandle">IWindowsCredentialsHandle</a> {
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">     * Initialize.</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>      <strong class="jxr_keyword">void</strong> initialize();
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment">     * Dispose.</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <strong class="jxr_keyword">void</strong> dispose();
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     * Return a security handle.</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     * @return CredHandle.</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      CredHandle getHandle();
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsDomain.html b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsDomain.html
      new file mode 100644
      index 0000000000..0080ca6607
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsDomain.html
      @@ -0,0 +1,64 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>IWindowsDomain xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/windows/auth/IWindowsDomain.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment"> * A Windows Domain.</em>
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a name="IWindowsDomain" href="../../../waffle/windows/auth/IWindowsDomain.html#IWindowsDomain">IWindowsDomain</a> {
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">     * Fully qualified domain name.</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      String getFqn();
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">     * Trust direction.</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      String getTrustDirectionString();
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * Trust type.</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      String getTrustTypeString();
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsIdentity.html b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsIdentity.html
      new file mode 100644
      index 0000000000..131ffac3dc
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsIdentity.html
      @@ -0,0 +1,90 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>IWindowsIdentity xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/windows/auth/IWindowsIdentity.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment"> * A Windows Identity.</em>
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a name="IWindowsIdentity" href="../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> {
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">     * Sid.</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      String getSidString();
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">     * Sid.</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     * @return Array of bytes.</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      byte[] getSid();
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     * Fully qualified name.</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      String getFqn();
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     * Group memberships.</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     * @return Array of accounts.</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      <a name="IWindowsAccount" href="../../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a>[] getGroups();
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">     * Impersonate a logged on user.</em>
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <em class="jxr_javadoccomment">     * @return An impersonation context.</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      <a name="IWindowsImpersonationContext" href="../../../waffle/windows/auth/IWindowsImpersonationContext.html#IWindowsImpersonationContext">IWindowsImpersonationContext</a> impersonate();
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     * Dispose of the Windows identity.</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      <strong class="jxr_keyword">void</strong> dispose();
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>  
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     * Returns true if the identity represents a Guest account.</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     * @return True if the identity represents a Guest account, false otherwise.</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>      <strong class="jxr_keyword">boolean</strong> isGuest();
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsImpersonationContext.html b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsImpersonationContext.html
      new file mode 100644
      index 0000000000..607612bc28
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsImpersonationContext.html
      @@ -0,0 +1,48 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>IWindowsImpersonationContext xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/windows/auth/IWindowsImpersonationContext.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment"> * A Windows impersonation context.</em>
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a name="IWindowsImpersonationContext" href="../../../waffle/windows/auth/IWindowsImpersonationContext.html#IWindowsImpersonationContext">IWindowsImpersonationContext</a> {
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment">     * Terminate the impersonation of a client application.</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      <strong class="jxr_keyword">void</strong> revertToSelf();
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsSecurityContext.html b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsSecurityContext.html
      new file mode 100644
      index 0000000000..8c5980f70a
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/IWindowsSecurityContext.html
      @@ -0,0 +1,113 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>IWindowsSecurityContext xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/windows/auth/IWindowsSecurityContext.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi.CtxtHandle;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi.SecBufferDesc;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment"> * A Windows security context.</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">interface</strong> <a name="IWindowsSecurityContext" href="../../../waffle/windows/auth/IWindowsSecurityContext.html#IWindowsSecurityContext">IWindowsSecurityContext</a> {
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment">     * Security package name.</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      String getSecurityPackage();
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     * Principal name.</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      String getPrincipalName();
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     * Token.</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     * @return Array of bytes.</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      byte[] getToken();
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     * True if protocol requires continuation.</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">     * @return True or false.</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <strong class="jxr_keyword">boolean</strong> isContinue();
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     * Windows Identity.</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     * @return Windows Identity.</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      <a name="IWindowsIdentity" href="../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> getIdentity();
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  <em class="jxr_javadoccomment">     * Context handle.</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     * @return Handle.</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      Sspi.CtxtHandle getHandle();
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  <em class="jxr_javadoccomment">     * Initialize the security context, continuing from a previous one.</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>  <em class="jxr_javadoccomment">     * @param continueCtx</em>
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  <em class="jxr_javadoccomment">     *            Continue context.</em>
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  <em class="jxr_javadoccomment">     * @param continueToken</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     *            Continue token.</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment">     * @param targetName</em>
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment">     *            The target of the context. The string contents are security-package specific.</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      <strong class="jxr_keyword">void</strong> initialize(<strong class="jxr_keyword">final</strong> CtxtHandle continueCtx, <strong class="jxr_keyword">final</strong> SecBufferDesc continueToken, <strong class="jxr_keyword">final</strong> String targetName);
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">     * Impersonate this security context.</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     * @return A Windows Impersonation Context.</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>      <a name="IWindowsImpersonationContext" href="../../../waffle/windows/auth/IWindowsImpersonationContext.html#IWindowsImpersonationContext">IWindowsImpersonationContext</a> impersonate();
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>  
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>  <em class="jxr_javadoccomment">     * Disposes of the context.</em>
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>      <strong class="jxr_keyword">void</strong> dispose();
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/PrincipalFormat.html b/waffle-jna-jakarta/xref/waffle/windows/auth/PrincipalFormat.html
      new file mode 100644
      index 0000000000..2b0ae1d07f
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/PrincipalFormat.html
      @@ -0,0 +1,55 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>PrincipalFormat xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/windows/auth/PrincipalFormat.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <em class="jxr_javadoccomment"> * The Enum PrincipalFormat.</em>
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">public</strong> enum <a name="PrincipalFormat" href="../../../waffle/windows/auth/PrincipalFormat.html#PrincipalFormat">PrincipalFormat</a> {
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>      <em class="jxr_javadoccomment">/** The fqn. */</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>      FQN,
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      <em class="jxr_javadoccomment">/** The sid. */</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>      SID,
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      <em class="jxr_javadoccomment">/** The both. */</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      BOTH,
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <em class="jxr_javadoccomment">/** The none. */</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      NONE;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/WindowsAccount.html b/waffle-jna-jakarta/xref/waffle/windows/auth/WindowsAccount.html
      new file mode 100644
      index 0000000000..ef2f140fcb
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/WindowsAccount.html
      @@ -0,0 +1,128 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsAccount xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../apidocs/waffle/windows/auth/WindowsAccount.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> java.io.Serializable;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <em class="jxr_javadoccomment"> * A flattened Windows Account used in a Windows principal.</em>
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WindowsAccount" href="../../../waffle/windows/auth/WindowsAccount.html#WindowsAccount">WindowsAccount</a> <strong class="jxr_keyword">implements</strong> Serializable {
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>      <em class="jxr_javadoccomment">/** The Constant serialVersionUID. */</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> serialVersionUID = 1L;
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>      <em class="jxr_javadoccomment">/** The sid string. */</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String sidString;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      <em class="jxr_javadoccomment">/** The fqn. */</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String fqn;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <em class="jxr_javadoccomment">/** The name. */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String name;
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <em class="jxr_javadoccomment">/** The domain. */</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String domain;
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     * Instantiates a new windows account.</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     * @param account</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     *            the account</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsAccount" href="../../../waffle/windows/auth/WindowsAccount.html#WindowsAccount">WindowsAccount</a>(<strong class="jxr_keyword">final</strong> <a name="IWindowsAccount" href="../../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a> account) {
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>          <strong class="jxr_keyword">this</strong>.sidString = account.getSidString();
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>          <strong class="jxr_keyword">this</strong>.fqn = account.getFqn();
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>          <strong class="jxr_keyword">this</strong>.name = account.getName();
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          <strong class="jxr_keyword">this</strong>.domain = account.getDomain();
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      }
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <em class="jxr_javadoccomment">     * Gets the sid string.</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     * @return the sid string</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>      <strong class="jxr_keyword">public</strong> String getSidString() {
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.sidString;
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      }
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  <em class="jxr_javadoccomment">     * Gets the fqn.</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     * @return the fqn</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      <strong class="jxr_keyword">public</strong> String getFqn() {
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.fqn;
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>      }
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>  <em class="jxr_javadoccomment">     * Gets the name.</em>
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  <em class="jxr_javadoccomment">     * @return the name</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>      <strong class="jxr_keyword">public</strong> String getName() {
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.name;
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>      }
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     * Gets the domain.</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">     * @return the domain</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>      <strong class="jxr_keyword">public</strong> String getDomain() {
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.domain;
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>      }
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>      @Override
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(<strong class="jxr_keyword">final</strong> Object o) {
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>  
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == o) {
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>         }
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a> 
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>         <strong class="jxr_keyword">if</strong> (!(o instanceof <a name="WindowsAccount" href="../../../waffle/windows/auth/WindowsAccount.html#WindowsAccount">WindowsAccount</a>)) {
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>             <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>         }
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a> 
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>         <strong class="jxr_keyword">return</strong> ((<a name="WindowsAccount" href="../../../waffle/windows/auth/WindowsAccount.html#WindowsAccount">WindowsAccount</a>) o).getSidString().equals(<strong class="jxr_keyword">this</strong>.getSidString());
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>     }
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a> 
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>     @Override
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getSidString().hashCode();
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a>     }
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsAccountImpl.html b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsAccountImpl.html
      new file mode 100644
      index 0000000000..60f3a5d48f
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsAccountImpl.html
      @@ -0,0 +1,125 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsAccountImpl xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../../apidocs/waffle/windows/auth/impl/WindowsAccountImpl.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth.impl;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Advapi32Util;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Advapi32Util.Account;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Secur32.EXTENDED_NAME_FORMAT;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Secur32Util;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAccount;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> * Windows Account.</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WindowsAccountImpl" href="../../../../waffle/windows/auth/impl/WindowsAccountImpl.html#WindowsAccountImpl">WindowsAccountImpl</a> <strong class="jxr_keyword">implements</strong> <a name="IWindowsAccount" href="../../../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a> {
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <em class="jxr_javadoccomment">/** The account. */</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Account account;
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     * Windows Account.</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     * @param newAccount</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     *            Account.</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsAccountImpl" href="../../../../waffle/windows/auth/impl/WindowsAccountImpl.html#WindowsAccountImpl">WindowsAccountImpl</a>(<strong class="jxr_keyword">final</strong> Account newAccount) {
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>          <strong class="jxr_keyword">this</strong>.account = newAccount;
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      }
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <em class="jxr_javadoccomment">     * Windows Account.</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     * @param userName</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     *            Fully qualified username.</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsAccountImpl" href="../../../../waffle/windows/auth/impl/WindowsAccountImpl.html#WindowsAccountImpl">WindowsAccountImpl</a>(<strong class="jxr_keyword">final</strong> String userName) {
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          <strong class="jxr_keyword">this</strong>(userName, <strong class="jxr_keyword">null</strong>);
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      }
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <em class="jxr_javadoccomment">     * Windows Account.</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     * @param accountName</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     *            Username, without a domain or machine.</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     * @param systemName</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     *            Machine name.</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsAccountImpl" href="../../../../waffle/windows/auth/impl/WindowsAccountImpl.html#WindowsAccountImpl">WindowsAccountImpl</a>(<strong class="jxr_keyword">final</strong> String accountName, <strong class="jxr_keyword">final</strong> String systemName) {
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>          <strong class="jxr_keyword">this</strong>(Advapi32Util.getAccountByName(systemName, accountName));
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>      }
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     * Get the SAM-compatible username of the currently logged-on user.</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> String getCurrentUsername() {
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          <strong class="jxr_keyword">return</strong> Secur32Util.getUserNameEx(EXTENDED_NAME_FORMAT.NameSamCompatible);
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      }
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     * Account domain.</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      @Override
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      <strong class="jxr_keyword">public</strong> String getDomain() {
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.account.domain;
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      }
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>      @Override
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>      <strong class="jxr_keyword">public</strong> String getFqn() {
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.account.fqn;
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>      }
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  <em class="jxr_javadoccomment">     * Account name.</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment">     * @return String.</em>
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>     @Override
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>     <strong class="jxr_keyword">public</strong> String getName() {
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.account.name;
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>     }
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a> 
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>     @Override
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>     <strong class="jxr_keyword">public</strong> String getSidString() {
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.account.sidString;
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>     }
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a> 
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsAuthProviderImpl.html b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsAuthProviderImpl.html
      new file mode 100644
      index 0000000000..d73af2c553
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsAuthProviderImpl.html
      @@ -0,0 +1,259 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsAuthProviderImpl xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../../apidocs/waffle/windows/auth/impl/WindowsAuthProviderImpl.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth.impl;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Advapi32;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Kernel32;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Netapi32Util;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Netapi32Util.DomainTrust;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Secur32;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi.CtxtHandle;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.SspiUtil.ManagedSecBufferDesc;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Win32Exception;
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.WinBase;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.WinError;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.WinNT.HANDLEByReference;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.ptr.IntByReference;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <strong class="jxr_keyword">import</strong> java.net.InetAddress;
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <strong class="jxr_keyword">import</strong> java.net.UnknownHostException;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <strong class="jxr_keyword">import</strong> java.util.List;
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <strong class="jxr_keyword">import</strong> waffle.util.cache.Cache;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAccount;
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAuthProvider;
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsComputer;
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsCredentialsHandle;
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsDomain;
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsIdentity;
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsSecurityContext;
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>  
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment"> * Windows Auth Provider.</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WindowsAuthProviderImpl" href="../../../../waffle/windows/auth/impl/WindowsAuthProviderImpl.html#WindowsAuthProviderImpl">WindowsAuthProviderImpl</a> <strong class="jxr_keyword">implements</strong> <a name="IWindowsAuthProvider" href="../../../../waffle/windows/auth/IWindowsAuthProvider.html#IWindowsAuthProvider">IWindowsAuthProvider</a> {
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <em class="jxr_javadoccomment">/** The Continue Context Timeout. */</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> CONTINUE_CONTEXT_TIMEOUT = 30;
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  <em class="jxr_javadoccomment">     * The Class ContinueContext.</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">class</strong> ContinueContext {
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          <em class="jxr_javadoccomment">/** The continue handle. */</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          <strong class="jxr_keyword">private</strong> CtxtHandle continueHandle;
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          <em class="jxr_javadoccomment">/** The server credential. */</em>
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>          <strong class="jxr_keyword">private</strong> <a name="IWindowsCredentialsHandle" href="../../../../waffle/windows/auth/IWindowsCredentialsHandle.html#IWindowsCredentialsHandle">IWindowsCredentialsHandle</a> serverCredential;
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">         * Instantiates a new continue context.</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">         *</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">         * @param handle</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">         *            the handle</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment">         * @param windowsCredential</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  <em class="jxr_javadoccomment">         *            the windows credential</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">         */</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>          ContinueContext(<strong class="jxr_keyword">final</strong> CtxtHandle handle, <strong class="jxr_keyword">final</strong> <a name="IWindowsCredentialsHandle" href="../../../../waffle/windows/auth/IWindowsCredentialsHandle.html#IWindowsCredentialsHandle">IWindowsCredentialsHandle</a> windowsCredential) {
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>              <strong class="jxr_keyword">this</strong>.continueHandle = handle;
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>              <strong class="jxr_keyword">this</strong>.serverCredential = windowsCredential;
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>          }
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>      }
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>  
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>      <em class="jxr_javadoccomment">/** The continue contexts. */</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Cache&lt;String, ContinueContext&gt; continueContexts;
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">     * Instantiates a new windows auth provider impl.</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsAuthProviderImpl" href="../../../../waffle/windows/auth/impl/WindowsAuthProviderImpl.html#WindowsAuthProviderImpl">WindowsAuthProviderImpl</a>() {
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>          <strong class="jxr_keyword">this</strong>(WindowsAuthProviderImpl.CONTINUE_CONTEXT_TIMEOUT);
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>      }
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>  
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>  <em class="jxr_javadoccomment">     * A Windows authentication provider.</em>
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>  <em class="jxr_javadoccomment">     * @param continueContextsTimeout</em>
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment">     *            Timeout for security contexts in seconds.</em>
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>     <strong class="jxr_keyword">public</strong> <a name="WindowsAuthProviderImpl" href="../../../../waffle/windows/auth/impl/WindowsAuthProviderImpl.html#WindowsAuthProviderImpl">WindowsAuthProviderImpl</a>(<strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> continueContextsTimeout) {
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>         <strong class="jxr_keyword">this</strong>.continueContexts = Cache.newCache(continueContextsTimeout);
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>     }
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a> 
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>     @Override
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsSecurityContext" href="../../../../waffle/windows/auth/IWindowsSecurityContext.html#IWindowsSecurityContext">IWindowsSecurityContext</a> acceptSecurityToken(<strong class="jxr_keyword">final</strong> String connectionId, <strong class="jxr_keyword">final</strong> byte[] token,
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>             <strong class="jxr_keyword">final</strong> String securityPackage) {
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a> 
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>         <strong class="jxr_keyword">if</strong> (token == <strong class="jxr_keyword">null</strong> || token.length == 0) {
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>             <strong class="jxr_keyword">this</strong>.resetSecurityToken(connectionId);
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> Win32Exception(WinError.SEC_E_INVALID_TOKEN);
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>         }
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a> 
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a>         CtxtHandle continueHandle = <strong class="jxr_keyword">null</strong>;
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a>         <a name="IWindowsCredentialsHandle" href="../../../../waffle/windows/auth/IWindowsCredentialsHandle.html#IWindowsCredentialsHandle">IWindowsCredentialsHandle</a> serverCredential;
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>         ContinueContext continueContext = <strong class="jxr_keyword">this</strong>.continueContexts.get(connectionId);
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>         <strong class="jxr_keyword">if</strong> (continueContext != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>             continueHandle = continueContext.continueHandle;
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a>             serverCredential = continueContext.serverCredential;
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>         } <strong class="jxr_keyword">else</strong> {
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a>             serverCredential = <strong class="jxr_keyword">new</strong> <a name="WindowsCredentialsHandleImpl" href="../../../../waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html#WindowsCredentialsHandleImpl">WindowsCredentialsHandleImpl</a>(<strong class="jxr_keyword">null</strong>, Sspi.SECPKG_CRED_INBOUND, securityPackage);
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>             serverCredential.initialize();
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>         }
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a> 
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>         <a name="WindowsSecurityContextImpl" href="../../../../waffle/windows/auth/impl/WindowsSecurityContextImpl.html#WindowsSecurityContextImpl">WindowsSecurityContextImpl</a> sc;
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a> 
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>         <strong class="jxr_keyword">int</strong> rc;
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a>         <strong class="jxr_keyword">int</strong> tokenSize = Sspi.MAX_TOKEN_SIZE;
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a> 
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a>         <strong class="jxr_keyword">do</strong> {
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a>             <strong class="jxr_keyword">final</strong> ManagedSecBufferDesc pbServerToken = <strong class="jxr_keyword">new</strong> ManagedSecBufferDesc(Sspi.SECBUFFER_TOKEN, tokenSize);
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>             <strong class="jxr_keyword">final</strong> ManagedSecBufferDesc pbClientToken = <strong class="jxr_keyword">new</strong> ManagedSecBufferDesc(Sspi.SECBUFFER_TOKEN, token);
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>             <strong class="jxr_keyword">final</strong> IntByReference pfClientContextAttr = <strong class="jxr_keyword">new</strong> IntByReference();
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a> 
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a>             <strong class="jxr_keyword">final</strong> CtxtHandle phNewServerContext = <strong class="jxr_keyword">new</strong> CtxtHandle();
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a>             rc = Secur32.INSTANCE.AcceptSecurityContext(serverCredential.getHandle(), continueHandle, pbClientToken,
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>                     Sspi.ISC_REQ_CONNECTION, Sspi.SECURITY_NATIVE_DREP, phNewServerContext, pbServerToken,
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a>                     pfClientContextAttr, <strong class="jxr_keyword">null</strong>);
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a> 
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a>             sc = <strong class="jxr_keyword">new</strong> <a name="WindowsSecurityContextImpl" href="../../../../waffle/windows/auth/impl/WindowsSecurityContextImpl.html#WindowsSecurityContextImpl">WindowsSecurityContextImpl</a>();
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a>             sc.setCredentialsHandle(serverCredential);
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a>             sc.setSecurityPackage(securityPackage);
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a>             sc.setSecurityContext(phNewServerContext);
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a> 
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a>             <strong class="jxr_keyword">switch</strong> (rc) {
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a>                 <strong class="jxr_keyword">case</strong> WinError.SEC_E_BUFFER_TOO_SMALL:
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a>                     tokenSize += Sspi.MAX_TOKEN_SIZE;
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a>                     sc.dispose();
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a>                     WindowsSecurityContextImpl.dispose(continueHandle);
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a>                     <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a>                 <strong class="jxr_keyword">case</strong> WinError.SEC_E_OK:
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a>                     <em class="jxr_comment">// the security context received from the client was accepted</em>
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a>                     <strong class="jxr_keyword">this</strong>.resetSecurityToken(connectionId);
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a>                     <em class="jxr_comment">// if an output token was generated by the function, it must be sent to the client process</em>
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a>                     <strong class="jxr_keyword">if</strong> (pbServerToken.pBuffers != <strong class="jxr_keyword">null</strong> &amp;&amp; pbServerToken.cBuffers == 1
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>                             &amp;&amp; pbServerToken.getBuffer(0).cbBuffer &gt; 0) {
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a>                         sc.setToken(pbServerToken.getBuffer(0).getBytes() == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">new</strong> byte[0]
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a>                                 : pbServerToken.getBuffer(0).getBytes().clone());
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a>                     }
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a>                     sc.setContinue(false);
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a>                     <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L163" href="#L163">163</a>                 <strong class="jxr_keyword">case</strong> WinError.SEC_I_CONTINUE_NEEDED:
      +<a class="jxr_linenumber" name="L164" href="#L164">164</a>                     <em class="jxr_comment">// the server must send the output token to the client and wait for a returned token</em>
      +<a class="jxr_linenumber" name="L165" href="#L165">165</a>                     continueContext = <strong class="jxr_keyword">new</strong> ContinueContext(phNewServerContext, serverCredential);
      +<a class="jxr_linenumber" name="L166" href="#L166">166</a>                     <strong class="jxr_keyword">this</strong>.continueContexts.put(connectionId, continueContext);
      +<a class="jxr_linenumber" name="L167" href="#L167">167</a>                     sc.setToken(pbServerToken.getBuffer(0).getBytes() == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">new</strong> byte[0]
      +<a class="jxr_linenumber" name="L168" href="#L168">168</a>                             : pbServerToken.getBuffer(0).getBytes().clone());
      +<a class="jxr_linenumber" name="L169" href="#L169">169</a>                     sc.setContinue(<strong class="jxr_keyword">true</strong>);
      +<a class="jxr_linenumber" name="L170" href="#L170">170</a>                     <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L171" href="#L171">171</a>                 <strong class="jxr_keyword">default</strong>:
      +<a class="jxr_linenumber" name="L172" href="#L172">172</a>                     sc.dispose();
      +<a class="jxr_linenumber" name="L173" href="#L173">173</a>                     WindowsSecurityContextImpl.dispose(continueHandle);
      +<a class="jxr_linenumber" name="L174" href="#L174">174</a>                     <strong class="jxr_keyword">this</strong>.resetSecurityToken(connectionId);
      +<a class="jxr_linenumber" name="L175" href="#L175">175</a>                     <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> Win32Exception(rc);
      +<a class="jxr_linenumber" name="L176" href="#L176">176</a>             }
      +<a class="jxr_linenumber" name="L177" href="#L177">177</a>         } <strong class="jxr_keyword">while</strong> (rc == WinError.SEC_E_BUFFER_TOO_SMALL);
      +<a class="jxr_linenumber" name="L178" href="#L178">178</a> 
      +<a class="jxr_linenumber" name="L179" href="#L179">179</a>         <strong class="jxr_keyword">return</strong> sc;
      +<a class="jxr_linenumber" name="L180" href="#L180">180</a>     }
      +<a class="jxr_linenumber" name="L181" href="#L181">181</a> 
      +<a class="jxr_linenumber" name="L182" href="#L182">182</a>     @Override
      +<a class="jxr_linenumber" name="L183" href="#L183">183</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsComputer" href="../../../../waffle/windows/auth/IWindowsComputer.html#IWindowsComputer">IWindowsComputer</a> getCurrentComputer() {
      +<a class="jxr_linenumber" name="L184" href="#L184">184</a>         <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L185" href="#L185">185</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a name="WindowsComputerImpl" href="../../../../waffle/windows/auth/impl/WindowsComputerImpl.html#WindowsComputerImpl">WindowsComputerImpl</a>(InetAddress.getLocalHost().getHostName());
      +<a class="jxr_linenumber" name="L186" href="#L186">186</a>         } <strong class="jxr_keyword">catch</strong> (<strong class="jxr_keyword">final</strong> UnknownHostException e) {
      +<a class="jxr_linenumber" name="L187" href="#L187">187</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(e);
      +<a class="jxr_linenumber" name="L188" href="#L188">188</a>         }
      +<a class="jxr_linenumber" name="L189" href="#L189">189</a>     }
      +<a class="jxr_linenumber" name="L190" href="#L190">190</a> 
      +<a class="jxr_linenumber" name="L191" href="#L191">191</a>     @Override
      +<a class="jxr_linenumber" name="L192" href="#L192">192</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsDomain" href="../../../../waffle/windows/auth/IWindowsDomain.html#IWindowsDomain">IWindowsDomain</a>[] getDomains() {
      +<a class="jxr_linenumber" name="L193" href="#L193">193</a>         <strong class="jxr_keyword">final</strong> List&lt;IWindowsDomain&gt; domains = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
      +<a class="jxr_linenumber" name="L194" href="#L194">194</a>         <strong class="jxr_keyword">final</strong> DomainTrust[] trusts = Netapi32Util.getDomainTrusts();
      +<a class="jxr_linenumber" name="L195" href="#L195">195</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> DomainTrust trust : trusts) {
      +<a class="jxr_linenumber" name="L196" href="#L196">196</a>             domains.add(<strong class="jxr_keyword">new</strong> <a name="WindowsDomainImpl" href="../../../../waffle/windows/auth/impl/WindowsDomainImpl.html#WindowsDomainImpl">WindowsDomainImpl</a>(trust));
      +<a class="jxr_linenumber" name="L197" href="#L197">197</a>         }
      +<a class="jxr_linenumber" name="L198" href="#L198">198</a>         <strong class="jxr_keyword">return</strong> domains.toArray(<strong class="jxr_keyword">new</strong> <a name="IWindowsDomain" href="../../../../waffle/windows/auth/IWindowsDomain.html#IWindowsDomain">IWindowsDomain</a>[0]);
      +<a class="jxr_linenumber" name="L199" href="#L199">199</a>     }
      +<a class="jxr_linenumber" name="L200" href="#L200">200</a> 
      +<a class="jxr_linenumber" name="L201" href="#L201">201</a>     @Override
      +<a class="jxr_linenumber" name="L202" href="#L202">202</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsIdentity" href="../../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> logonDomainUser(<strong class="jxr_keyword">final</strong> String username, <strong class="jxr_keyword">final</strong> String domain, <strong class="jxr_keyword">final</strong> String password) {
      +<a class="jxr_linenumber" name="L203" href="#L203">203</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.logonDomainUserEx(username, domain, password, WinBase.LOGON32_LOGON_NETWORK,
      +<a class="jxr_linenumber" name="L204" href="#L204">204</a>                 WinBase.LOGON32_PROVIDER_DEFAULT);
      +<a class="jxr_linenumber" name="L205" href="#L205">205</a>     }
      +<a class="jxr_linenumber" name="L206" href="#L206">206</a> 
      +<a class="jxr_linenumber" name="L207" href="#L207">207</a>     @Override
      +<a class="jxr_linenumber" name="L208" href="#L208">208</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsIdentity" href="../../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> logonDomainUserEx(<strong class="jxr_keyword">final</strong> String username, <strong class="jxr_keyword">final</strong> String domain, <strong class="jxr_keyword">final</strong> String password,
      +<a class="jxr_linenumber" name="L209" href="#L209">209</a>             <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> logonType, <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> logonProvider) {
      +<a class="jxr_linenumber" name="L210" href="#L210">210</a>         <strong class="jxr_keyword">final</strong> HANDLEByReference phUser = <strong class="jxr_keyword">new</strong> HANDLEByReference();
      +<a class="jxr_linenumber" name="L211" href="#L211">211</a>         <strong class="jxr_keyword">if</strong> (!Advapi32.INSTANCE.LogonUser(username, domain, password, logonType, logonProvider, phUser)) {
      +<a class="jxr_linenumber" name="L212" href="#L212">212</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> Win32Exception(Kernel32.INSTANCE.GetLastError());
      +<a class="jxr_linenumber" name="L213" href="#L213">213</a>         }
      +<a class="jxr_linenumber" name="L214" href="#L214">214</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a name="WindowsIdentityImpl" href="../../../../waffle/windows/auth/impl/WindowsIdentityImpl.html#WindowsIdentityImpl">WindowsIdentityImpl</a>(phUser.getValue());
      +<a class="jxr_linenumber" name="L215" href="#L215">215</a>     }
      +<a class="jxr_linenumber" name="L216" href="#L216">216</a> 
      +<a class="jxr_linenumber" name="L217" href="#L217">217</a>     @Override
      +<a class="jxr_linenumber" name="L218" href="#L218">218</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsIdentity" href="../../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> logonUser(<strong class="jxr_keyword">final</strong> String username, <strong class="jxr_keyword">final</strong> String password) {
      +<a class="jxr_linenumber" name="L219" href="#L219">219</a>         <em class="jxr_comment">// username@domain UPN format is natively supported by the</em>
      +<a class="jxr_linenumber" name="L220" href="#L220">220</a>         <em class="jxr_comment">// Windows LogonUser API process domain&#92;&#92;username format</em>
      +<a class="jxr_linenumber" name="L221" href="#L221">221</a>         <strong class="jxr_keyword">final</strong> String[] userNameDomain = username.split(<span class="jxr_string">"&#92;&#92;&#92;&#92;"</span>, 2);
      +<a class="jxr_linenumber" name="L222" href="#L222">222</a>         <strong class="jxr_keyword">if</strong> (userNameDomain.length == 2) {
      +<a class="jxr_linenumber" name="L223" href="#L223">223</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.logonDomainUser(userNameDomain[1], userNameDomain[0], password);
      +<a class="jxr_linenumber" name="L224" href="#L224">224</a>         }
      +<a class="jxr_linenumber" name="L225" href="#L225">225</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.logonDomainUser(username, <strong class="jxr_keyword">null</strong>, password);
      +<a class="jxr_linenumber" name="L226" href="#L226">226</a>     }
      +<a class="jxr_linenumber" name="L227" href="#L227">227</a> 
      +<a class="jxr_linenumber" name="L228" href="#L228">228</a>     @Override
      +<a class="jxr_linenumber" name="L229" href="#L229">229</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsAccount" href="../../../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a> lookupAccount(<strong class="jxr_keyword">final</strong> String username) {
      +<a class="jxr_linenumber" name="L230" href="#L230">230</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a name="WindowsAccountImpl" href="../../../../waffle/windows/auth/impl/WindowsAccountImpl.html#WindowsAccountImpl">WindowsAccountImpl</a>(username);
      +<a class="jxr_linenumber" name="L231" href="#L231">231</a>     }
      +<a class="jxr_linenumber" name="L232" href="#L232">232</a> 
      +<a class="jxr_linenumber" name="L233" href="#L233">233</a>     @Override
      +<a class="jxr_linenumber" name="L234" href="#L234">234</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> resetSecurityToken(<strong class="jxr_keyword">final</strong> String connectionId) {
      +<a class="jxr_linenumber" name="L235" href="#L235">235</a>         <strong class="jxr_keyword">this</strong>.continueContexts.remove(connectionId);
      +<a class="jxr_linenumber" name="L236" href="#L236">236</a>     }
      +<a class="jxr_linenumber" name="L237" href="#L237">237</a> 
      +<a class="jxr_linenumber" name="L238" href="#L238">238</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L239" href="#L239">239</a> <em class="jxr_javadoccomment">     * Number of elements in the continue contexts map.</em>
      +<a class="jxr_linenumber" name="L240" href="#L240">240</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L241" href="#L241">241</a> <em class="jxr_javadoccomment">     * @return Number of elements in the hash map.</em>
      +<a class="jxr_linenumber" name="L242" href="#L242">242</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L243" href="#L243">243</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> getContinueContextsSize() {
      +<a class="jxr_linenumber" name="L244" href="#L244">244</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.continueContexts.size();
      +<a class="jxr_linenumber" name="L245" href="#L245">245</a>     }
      +<a class="jxr_linenumber" name="L246" href="#L246">246</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsComputerImpl.html b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsComputerImpl.html
      new file mode 100644
      index 0000000000..57ca743418
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsComputerImpl.html
      @@ -0,0 +1,107 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsComputerImpl xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../../apidocs/waffle/windows/auth/impl/WindowsComputerImpl.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth.impl;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.LMJoin;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Netapi32Util;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Netapi32Util.LocalGroup;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> java.util.List;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsComputer;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> * Windows Computer.</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WindowsComputerImpl" href="../../../../waffle/windows/auth/impl/WindowsComputerImpl.html#WindowsComputerImpl">WindowsComputerImpl</a> <strong class="jxr_keyword">implements</strong> <a name="IWindowsComputer" href="../../../../waffle/windows/auth/IWindowsComputer.html#IWindowsComputer">IWindowsComputer</a> {
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>      <em class="jxr_javadoccomment">/** The computer name. */</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String computerName;
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>      <em class="jxr_javadoccomment">/** The domain name. */</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String domainName;
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  <em class="jxr_javadoccomment">     * Instantiates a new windows computer impl.</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     * @param newComputerName</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     *            the new computer name</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsComputerImpl" href="../../../../waffle/windows/auth/impl/WindowsComputerImpl.html#WindowsComputerImpl">WindowsComputerImpl</a>(<strong class="jxr_keyword">final</strong> String newComputerName) {
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>          <strong class="jxr_keyword">this</strong>.computerName = newComputerName;
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>          <strong class="jxr_keyword">this</strong>.domainName = Netapi32Util.getDomainName(newComputerName);
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      }
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      @Override
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      <strong class="jxr_keyword">public</strong> String getComputerName() {
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.computerName;
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>      }
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      @Override
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      <strong class="jxr_keyword">public</strong> String[] getGroups() {
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>          <strong class="jxr_keyword">final</strong> List&lt;String&gt; groupNames = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;();
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>          <strong class="jxr_keyword">final</strong> LocalGroup[] groups = Netapi32Util.getLocalGroups(<strong class="jxr_keyword">this</strong>.computerName);
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> LocalGroup group : groups) {
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>              groupNames.add(group.name);
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>          }
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          <strong class="jxr_keyword">return</strong> groupNames.toArray(<strong class="jxr_keyword">new</strong> String[0]);
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      }
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      @Override
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>      <strong class="jxr_keyword">public</strong> String getJoinStatus() {
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>          <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> joinStatus = Netapi32Util.getJoinStatus(<strong class="jxr_keyword">this</strong>.computerName);
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          <strong class="jxr_keyword">switch</strong> (joinStatus) {
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>              <strong class="jxr_keyword">case</strong> LMJoin.NETSETUP_JOIN_STATUS.NetSetupDomainName:
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>                  <strong class="jxr_keyword">return</strong> <span class="jxr_string">"NetSetupDomainName"</span>;
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>              <strong class="jxr_keyword">case</strong> LMJoin.NETSETUP_JOIN_STATUS.NetSetupUnjoined:
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>                  <strong class="jxr_keyword">return</strong> <span class="jxr_string">"NetSetupUnjoined"</span>;
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>              <strong class="jxr_keyword">case</strong> LMJoin.NETSETUP_JOIN_STATUS.NetSetupWorkgroupName:
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>                  <strong class="jxr_keyword">return</strong> <span class="jxr_string">"NetSetupWorkgroupName"</span>;
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>              <strong class="jxr_keyword">case</strong> LMJoin.NETSETUP_JOIN_STATUS.NetSetupUnknownStatus:
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>                  <strong class="jxr_keyword">return</strong> <span class="jxr_string">"NetSetupUnknownStatus"</span>;
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>              <strong class="jxr_keyword">default</strong>:
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>                  <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> RuntimeException(<span class="jxr_string">"Unsupported join status: "</span> + joinStatus);
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>          }
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      }
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>  
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>      @Override
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      <strong class="jxr_keyword">public</strong> String getMemberOf() {
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.domainName;
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>      }
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html
      new file mode 100644
      index 0000000000..ddc62d0bfa
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html
      @@ -0,0 +1,134 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsCredentialsHandleImpl xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../../apidocs/waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth.impl;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Secur32;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi.CredHandle;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi.TimeStamp;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Win32Exception;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.WinError;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsCredentialsHandle;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment"> * Pre-existing credentials of a security principal. This is a handle to a previously authenticated logon data used by a</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment"> * security principal to establish its own identity, such as a password, or a Kerberos protocol ticket.</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WindowsCredentialsHandleImpl" href="../../../../waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html#WindowsCredentialsHandleImpl">WindowsCredentialsHandleImpl</a> <strong class="jxr_keyword">implements</strong> <a name="IWindowsCredentialsHandle" href="../../../../waffle/windows/auth/IWindowsCredentialsHandle.html#IWindowsCredentialsHandle">IWindowsCredentialsHandle</a> {
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <em class="jxr_javadoccomment">/** The principal name. */</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String principalName;
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <em class="jxr_javadoccomment">/** The credentials type. */</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> credentialsType;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <em class="jxr_javadoccomment">/** The security package. */</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> String securityPackage;
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <em class="jxr_javadoccomment">/** The handle. */</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">private</strong> CredHandle handle;
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     * A new Windows credentials handle.</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     * @param newPrincipalName</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     *            Principal name.</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     * @param newCredentialsType</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>  <em class="jxr_javadoccomment">     *            Credentials type.</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  <em class="jxr_javadoccomment">     * @param newSecurityPackage</em>
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>  <em class="jxr_javadoccomment">     *            Security package.</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsCredentialsHandleImpl" href="../../../../waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html#WindowsCredentialsHandleImpl">WindowsCredentialsHandleImpl</a>(<strong class="jxr_keyword">final</strong> String newPrincipalName, <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> newCredentialsType,
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>              <strong class="jxr_keyword">final</strong> String newSecurityPackage) {
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>          <strong class="jxr_keyword">this</strong>.principalName = newPrincipalName;
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          <strong class="jxr_keyword">this</strong>.credentialsType = newCredentialsType;
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>          <strong class="jxr_keyword">this</strong>.securityPackage = newSecurityPackage;
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      }
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>  
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  <em class="jxr_javadoccomment">     * Returns the current credentials handle.</em>
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>  <em class="jxr_javadoccomment">     * @param securityPackage</em>
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  <em class="jxr_javadoccomment">     *            Security package, eg. "Negotiate".</em>
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     * @return A windows credentials handle</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a name="IWindowsCredentialsHandle" href="../../../../waffle/windows/auth/IWindowsCredentialsHandle.html#IWindowsCredentialsHandle">IWindowsCredentialsHandle</a> getCurrent(<strong class="jxr_keyword">final</strong> String securityPackage) {
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>          <strong class="jxr_keyword">final</strong> <a name="IWindowsCredentialsHandle" href="../../../../waffle/windows/auth/IWindowsCredentialsHandle.html#IWindowsCredentialsHandle">IWindowsCredentialsHandle</a> handle = <strong class="jxr_keyword">new</strong> <a name="WindowsCredentialsHandleImpl" href="../../../../waffle/windows/auth/impl/WindowsCredentialsHandleImpl.html#WindowsCredentialsHandleImpl">WindowsCredentialsHandleImpl</a>(<strong class="jxr_keyword">null</strong>, Sspi.SECPKG_CRED_OUTBOUND,
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>                  securityPackage);
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>          handle.initialize();
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>          <strong class="jxr_keyword">return</strong> handle;
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>      }
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>  
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  <em class="jxr_javadoccomment">     * Initialize a new credentials handle.</em>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      @Override
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> initialize() {
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>          <strong class="jxr_keyword">this</strong>.handle = <strong class="jxr_keyword">new</strong> CredHandle();
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>          <strong class="jxr_keyword">final</strong> TimeStamp clientLifetime = <strong class="jxr_keyword">new</strong> TimeStamp();
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>          <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> rc = Secur32.INSTANCE.AcquireCredentialsHandle(<strong class="jxr_keyword">this</strong>.principalName, <strong class="jxr_keyword">this</strong>.securityPackage,
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>                  <strong class="jxr_keyword">this</strong>.credentialsType, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">this</strong>.handle, clientLifetime);
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>          <strong class="jxr_keyword">if</strong> (WinError.SEC_E_OK != rc) {
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> Win32Exception(rc);
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>          }
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>      }
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a> <em class="jxr_javadoccomment">     * Dispose of the credentials handle.</em>
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>     @Override
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> dispose() {
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.handle != <strong class="jxr_keyword">null</strong> &amp;&amp; !<strong class="jxr_keyword">this</strong>.handle.isNull()) {
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>             <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> rc = Secur32.INSTANCE.FreeCredentialsHandle(<strong class="jxr_keyword">this</strong>.handle);
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>             <strong class="jxr_keyword">if</strong> (WinError.SEC_E_OK != rc) {
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>                 <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> Win32Exception(rc);
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>             }
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>         }
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>     }
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a> 
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a> <em class="jxr_javadoccomment">     * Get CredHandle.</em>
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> <em class="jxr_javadoccomment">     * @return the handle</em>
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>     @Override
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>     <strong class="jxr_keyword">public</strong> CredHandle getHandle() {
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.handle;
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a>     }
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsDomainImpl.html b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsDomainImpl.html
      new file mode 100644
      index 0000000000..f2ac71a120
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsDomainImpl.html
      @@ -0,0 +1,144 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsDomainImpl xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../../apidocs/waffle/windows/auth/impl/WindowsDomainImpl.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth.impl;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Netapi32Util.DomainTrust;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsDomain;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <em class="jxr_javadoccomment"> * Windows Domain.</em>
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WindowsDomainImpl" href="../../../../waffle/windows/auth/impl/WindowsDomainImpl.html#WindowsDomainImpl">WindowsDomainImpl</a> <strong class="jxr_keyword">implements</strong> <a name="IWindowsDomain" href="../../../../waffle/windows/auth/IWindowsDomain.html#IWindowsDomain">IWindowsDomain</a> {
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <em class="jxr_javadoccomment">     * The Enum TrustDirection.</em>
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <strong class="jxr_keyword">private</strong> enum TrustDirection {
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>          <em class="jxr_javadoccomment">/** The inbound. */</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>          INBOUND,
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>          <em class="jxr_javadoccomment">/** The outbound. */</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>          OUTBOUND,
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>          <em class="jxr_javadoccomment">/** The bidirectional. */</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>          BIDIRECTIONAL
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      }
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>  
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  <em class="jxr_javadoccomment">     * The Enum TrustType.</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">private</strong> enum TrustType {
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>          <em class="jxr_javadoccomment">/** The tree root. */</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>          TREE_ROOT,
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>          <em class="jxr_javadoccomment">/** The parent child. */</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>          PARENT_CHILD,
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>          <em class="jxr_javadoccomment">/** The cross link. */</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          CROSS_LINK,
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          <em class="jxr_javadoccomment">/** The external. */</em>
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          EXTERNAL,
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          <em class="jxr_javadoccomment">/** The forest. */</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>          FOREST,
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>          <em class="jxr_javadoccomment">/** The kerberos. */</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>          KERBEROS,
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>          <em class="jxr_javadoccomment">/** The unknown. */</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          UNKNOWN
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      }
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      <em class="jxr_javadoccomment">/** The fqn. */</em>
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      <strong class="jxr_keyword">private</strong> String fqn;
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>  
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>      <em class="jxr_javadoccomment">/** The trust direction. */</em>
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>      <strong class="jxr_keyword">private</strong> TrustDirection trustDirection = TrustDirection.BIDIRECTIONAL;
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      <em class="jxr_javadoccomment">/** The trust type. */</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>      <strong class="jxr_keyword">private</strong> TrustType trustType = TrustType.UNKNOWN;
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">     * Instantiates a new windows domain impl.</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>  <em class="jxr_javadoccomment">     * @param newFqn</em>
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>  <em class="jxr_javadoccomment">     *            the new fqn</em>
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsDomainImpl" href="../../../../waffle/windows/auth/impl/WindowsDomainImpl.html#WindowsDomainImpl">WindowsDomainImpl</a>(<strong class="jxr_keyword">final</strong> String newFqn) {
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>          <strong class="jxr_keyword">this</strong>.fqn = newFqn;
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>      }
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>  
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  <em class="jxr_javadoccomment">     * Instantiates a new windows domain impl.</em>
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">     * @param trust</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     *            the trust</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsDomainImpl" href="../../../../waffle/windows/auth/impl/WindowsDomainImpl.html#WindowsDomainImpl">WindowsDomainImpl</a>(<strong class="jxr_keyword">final</strong> DomainTrust trust) {
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>          <em class="jxr_comment">// fqn</em>
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>          <strong class="jxr_keyword">this</strong>.fqn = trust.DnsDomainName;
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.fqn == <strong class="jxr_keyword">null</strong> || <strong class="jxr_keyword">this</strong>.fqn.length() == 0) {
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>              <strong class="jxr_keyword">this</strong>.fqn = trust.NetbiosDomainName;
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>          }
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>         <em class="jxr_comment">// trust direction</em>
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>         <strong class="jxr_keyword">if</strong> (trust.isInbound() &amp;&amp; trust.isOutbound()) {
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>             <strong class="jxr_keyword">this</strong>.trustDirection = TrustDirection.BIDIRECTIONAL;
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (trust.isOutbound()) {
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>             <strong class="jxr_keyword">this</strong>.trustDirection = TrustDirection.OUTBOUND;
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (trust.isInbound()) {
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>             <strong class="jxr_keyword">this</strong>.trustDirection = TrustDirection.INBOUND;
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>         }
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>         <em class="jxr_comment">// trust type</em>
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>         <strong class="jxr_keyword">if</strong> (trust.isInForest()) {
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>             <strong class="jxr_keyword">this</strong>.trustType = TrustType.FOREST;
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>         } <strong class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> (trust.isRoot()) {
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>             <strong class="jxr_keyword">this</strong>.trustType = TrustType.TREE_ROOT;
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>         }
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a>     }
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> 
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a>     @Override
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>     <strong class="jxr_keyword">public</strong> String getFqn() {
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.fqn;
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>     }
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a> 
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>     @Override
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a>     <strong class="jxr_keyword">public</strong> String getTrustDirectionString() {
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.trustDirection.toString();
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>     }
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a> 
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>     @Override
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>     <strong class="jxr_keyword">public</strong> String getTrustTypeString() {
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.trustType.toString();
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a>     }
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a> 
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.html b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.html
      new file mode 100644
      index 0000000000..8666e56883
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.html
      @@ -0,0 +1,67 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsIdentityImpersonationContextImpl xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../../apidocs/waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth.impl;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Advapi32;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Kernel32;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Win32Exception;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.WinNT.HANDLE;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsImpersonationContext;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> * The Class WindowsIdentityImpersonationContextImpl.</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WindowsIdentityImpersonationContextImpl" href="../../../../waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.html#WindowsIdentityImpersonationContextImpl">WindowsIdentityImpersonationContextImpl</a> <strong class="jxr_keyword">implements</strong> <a name="IWindowsImpersonationContext" href="../../../../waffle/windows/auth/IWindowsImpersonationContext.html#IWindowsImpersonationContext">IWindowsImpersonationContext</a> {
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">     * Impersonate a logged on user.</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">     * @param windowsIdentity</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     *            Windows identity obtained via LogonUser.</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsIdentityImpersonationContextImpl" href="../../../../waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.html#WindowsIdentityImpersonationContextImpl">WindowsIdentityImpersonationContextImpl</a>(<strong class="jxr_keyword">final</strong> HANDLE windowsIdentity) {
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>          <strong class="jxr_keyword">if</strong> (!Advapi32.INSTANCE.ImpersonateLoggedOnUser(windowsIdentity)) {
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> Win32Exception(Kernel32.INSTANCE.GetLastError());
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>          }
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      }
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      @Override
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> revertToSelf() {
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>          Advapi32.INSTANCE.RevertToSelf();
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      }
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsIdentityImpl.html b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsIdentityImpl.html
      new file mode 100644
      index 0000000000..87f87a1743
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsIdentityImpl.html
      @@ -0,0 +1,156 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsIdentityImpl xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../../apidocs/waffle/windows/auth/impl/WindowsIdentityImpl.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth.impl;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Advapi32Util;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Advapi32Util.Account;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Kernel32;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.WinNT.HANDLE;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.WinNT.WELL_KNOWN_SID_TYPE;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> java.util.ArrayList;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> java.util.List;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsAccount;
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsIdentity;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsImpersonationContext;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  <em class="jxr_javadoccomment"> * Windows Identity.</em>
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WindowsIdentityImpl" href="../../../../waffle/windows/auth/impl/WindowsIdentityImpl.html#WindowsIdentityImpl">WindowsIdentityImpl</a> <strong class="jxr_keyword">implements</strong> <a name="IWindowsIdentity" href="../../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> {
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>      <em class="jxr_javadoccomment">/** The windows identity. */</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> HANDLE windowsIdentity;
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <em class="jxr_javadoccomment">/** The user groups. */</em>
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>      <strong class="jxr_keyword">private</strong> Account[] userGroups;
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>  
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <em class="jxr_javadoccomment">/** The windows account. */</em>
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>      <strong class="jxr_keyword">private</strong> Account windowsAccount;
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  <em class="jxr_javadoccomment">     * Instantiates a new windows identity impl.</em>
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>  <em class="jxr_javadoccomment">     * @param newWindowsIdentity</em>
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  <em class="jxr_javadoccomment">     *            the new windows identity</em>
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsIdentityImpl" href="../../../../waffle/windows/auth/impl/WindowsIdentityImpl.html#WindowsIdentityImpl">WindowsIdentityImpl</a>(<strong class="jxr_keyword">final</strong> HANDLE newWindowsIdentity) {
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>          <strong class="jxr_keyword">this</strong>.windowsIdentity = newWindowsIdentity;
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      }
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>  
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>  <em class="jxr_javadoccomment">     * Gets the windows account.</em>
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>  <em class="jxr_javadoccomment">     * @return the windows account</em>
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>      <strong class="jxr_keyword">private</strong> Account getWindowsAccount() {
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.windowsAccount == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>              <strong class="jxr_keyword">this</strong>.windowsAccount = Advapi32Util.getTokenAccount(<strong class="jxr_keyword">this</strong>.windowsIdentity);
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          }
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.windowsAccount;
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>      }
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>  
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>  <em class="jxr_javadoccomment">     * Gets the user groups.</em>
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  <em class="jxr_javadoccomment">     * @return the user groups</em>
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      <strong class="jxr_keyword">private</strong> Account[] getUserGroups() {
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>          <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.userGroups == <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>              <strong class="jxr_keyword">this</strong>.userGroups = Advapi32Util.getTokenGroups(<strong class="jxr_keyword">this</strong>.windowsIdentity);
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>          }
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.userGroups.clone();
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>      }
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>  
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>      @Override
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      <strong class="jxr_keyword">public</strong> String getFqn() {
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getWindowsAccount().fqn;
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      }
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>      @Override
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>      <strong class="jxr_keyword">public</strong> <a name="IWindowsAccount" href="../../../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a>[] getGroups() {
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>          <strong class="jxr_keyword">final</strong> Account[] groups = <strong class="jxr_keyword">this</strong>.getUserGroups();
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>          <strong class="jxr_keyword">final</strong> List&lt;IWindowsAccount&gt; result = <strong class="jxr_keyword">new</strong> ArrayList&lt;&gt;(groups.length);
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>          <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> Account userGroup : groups) {
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>              <strong class="jxr_keyword">final</strong> <a name="WindowsAccountImpl" href="../../../../waffle/windows/auth/impl/WindowsAccountImpl.html#WindowsAccountImpl">WindowsAccountImpl</a> account = <strong class="jxr_keyword">new</strong> <a name="WindowsAccountImpl" href="../../../../waffle/windows/auth/impl/WindowsAccountImpl.html#WindowsAccountImpl">WindowsAccountImpl</a>(userGroup);
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>             result.add(account);
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>         }
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a> 
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>         <strong class="jxr_keyword">return</strong> result.toArray(<strong class="jxr_keyword">new</strong> <a name="IWindowsAccount" href="../../../../waffle/windows/auth/IWindowsAccount.html#IWindowsAccount">IWindowsAccount</a>[0]);
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>     }
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a> 
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>     @Override
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>     <strong class="jxr_keyword">public</strong> byte[] getSid() {
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getWindowsAccount().sid;
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a>     }
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a> 
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>     @Override
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>     <strong class="jxr_keyword">public</strong> String getSidString() {
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.getWindowsAccount().sidString;
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a>     }
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a> 
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a>     @Override
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> dispose() {
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.windowsIdentity != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>             Kernel32.INSTANCE.CloseHandle(<strong class="jxr_keyword">this</strong>.windowsIdentity);
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a>         }
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a>     }
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a> 
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>     @Override
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>     <strong class="jxr_keyword">public</strong> <a name="IWindowsImpersonationContext" href="../../../../waffle/windows/auth/IWindowsImpersonationContext.html#IWindowsImpersonationContext">IWindowsImpersonationContext</a> impersonate() {
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a name="WindowsIdentityImpersonationContextImpl" href="../../../../waffle/windows/auth/impl/WindowsIdentityImpersonationContextImpl.html#WindowsIdentityImpersonationContextImpl">WindowsIdentityImpersonationContextImpl</a>(<strong class="jxr_keyword">this</strong>.windowsIdentity);
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>     }
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a> 
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>     @Override
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isGuest() {
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a>         <strong class="jxr_keyword">for</strong> (<strong class="jxr_keyword">final</strong> Account userGroup : <strong class="jxr_keyword">this</strong>.getUserGroups()) {
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a>             <strong class="jxr_keyword">if</strong> (Advapi32Util.isWellKnownSid(userGroup.sid, WELL_KNOWN_SID_TYPE.WinBuiltinGuestsSid)) {
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a>                 <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>             }
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>             <strong class="jxr_keyword">if</strong> (Advapi32Util.isWellKnownSid(userGroup.sid, WELL_KNOWN_SID_TYPE.WinAccountDomainGuestsSid)) {
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>                 <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a>             }
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a>             <strong class="jxr_keyword">if</strong> (Advapi32Util.isWellKnownSid(userGroup.sid, WELL_KNOWN_SID_TYPE.WinAccountGuestSid)) {
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>                 <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a>             }
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a>         }
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a>         <strong class="jxr_keyword">return</strong> Advapi32Util.isWellKnownSid(<strong class="jxr_keyword">this</strong>.getSid(), WELL_KNOWN_SID_TYPE.WinAnonymousSid);
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a>     }
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html
      new file mode 100644
      index 0000000000..ff76fe92f7
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html
      @@ -0,0 +1,76 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsSecurityContextImpersonationContextImpl xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../../apidocs/waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth.impl;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Secur32;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi.CtxtHandle;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Win32Exception;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.WinError;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsImpersonationContext;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <em class="jxr_javadoccomment"> * The Class WindowsSecurityContextImpersonationContextImpl.</em>
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WindowsSecurityContextImpersonationContextImpl" href="../../../../waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html#WindowsSecurityContextImpersonationContextImpl">WindowsSecurityContextImpersonationContextImpl</a> <strong class="jxr_keyword">implements</strong> <a name="IWindowsImpersonationContext" href="../../../../waffle/windows/auth/IWindowsImpersonationContext.html#IWindowsImpersonationContext">IWindowsImpersonationContext</a> {
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>      <em class="jxr_javadoccomment">/** The ctx. */</em>
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> CtxtHandle ctx;
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment">     * Instantiates a new windows security context impersonation context impl.</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <em class="jxr_javadoccomment">     * @param newCtx</em>
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  <em class="jxr_javadoccomment">     *            the new ctx</em>
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <strong class="jxr_keyword">public</strong> <a name="WindowsSecurityContextImpersonationContextImpl" href="../../../../waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html#WindowsSecurityContextImpersonationContextImpl">WindowsSecurityContextImpersonationContextImpl</a>(<strong class="jxr_keyword">final</strong> CtxtHandle newCtx) {
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>          <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> rc = Secur32.INSTANCE.ImpersonateSecurityContext(newCtx);
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>          <strong class="jxr_keyword">if</strong> (rc != WinError.SEC_E_OK) {
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> Win32Exception(rc);
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>          }
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>  
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>          <strong class="jxr_keyword">this</strong>.ctx = newCtx;
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>      }
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>  
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      @Override
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>      <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> revertToSelf() {
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>          <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> rc = Secur32.INSTANCE.RevertSecurityContext(<strong class="jxr_keyword">this</strong>.ctx);
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>          <strong class="jxr_keyword">if</strong> (rc != WinError.SEC_E_OK) {
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> Win32Exception(rc);
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>          }
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      }
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsSecurityContextImpl.html b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsSecurityContextImpl.html
      new file mode 100644
      index 0000000000..89f784265d
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/WindowsSecurityContextImpl.html
      @@ -0,0 +1,266 @@
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="" lang="">
      +<head><meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +<title>WindowsSecurityContextImpl xref</title>
      +<link type="text/css" rel="stylesheet" href="../../../../stylesheet.css" />
      +</head>
      +<body>
      +<div id="overview"><a href="../../../../../apidocs/waffle/windows/auth/impl/WindowsSecurityContextImpl.html">View Javadoc</a></div><pre>
      +<a class="jxr_linenumber" name="L1" href="#L1">1</a>   <em class="jxr_comment">/*</em>
      +<a class="jxr_linenumber" name="L2" href="#L2">2</a>   <em class="jxr_comment"> * MIT License</em>
      +<a class="jxr_linenumber" name="L3" href="#L3">3</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L4" href="#L4">4</a>   <em class="jxr_comment"> * Copyright (c) 2010-2024 The Waffle Project Contributors: <a href="https://github.com/Waffle/waffle/graphs/contributors" target="alexandria_uri">https://github.com/Waffle/waffle/graphs/contributors</a></em>
      +<a class="jxr_linenumber" name="L5" href="#L5">5</a>   <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L6" href="#L6">6</a>   <em class="jxr_comment"> * Permission is hereby granted, free of charge, to any person obtaining a copy</em>
      +<a class="jxr_linenumber" name="L7" href="#L7">7</a>   <em class="jxr_comment"> * of this software and associated documentation files (the "Software"), to deal</em>
      +<a class="jxr_linenumber" name="L8" href="#L8">8</a>   <em class="jxr_comment"> * in the Software without restriction, including without limitation the rights</em>
      +<a class="jxr_linenumber" name="L9" href="#L9">9</a>   <em class="jxr_comment"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</em>
      +<a class="jxr_linenumber" name="L10" href="#L10">10</a>  <em class="jxr_comment"> * copies of the Software, and to permit persons to whom the Software is</em>
      +<a class="jxr_linenumber" name="L11" href="#L11">11</a>  <em class="jxr_comment"> * furnished to do so, subject to the following conditions:</em>
      +<a class="jxr_linenumber" name="L12" href="#L12">12</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L13" href="#L13">13</a>  <em class="jxr_comment"> * The above copyright notice and this permission notice shall be included in all</em>
      +<a class="jxr_linenumber" name="L14" href="#L14">14</a>  <em class="jxr_comment"> * copies or substantial portions of the Software.</em>
      +<a class="jxr_linenumber" name="L15" href="#L15">15</a>  <em class="jxr_comment"> *</em>
      +<a class="jxr_linenumber" name="L16" href="#L16">16</a>  <em class="jxr_comment"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</em>
      +<a class="jxr_linenumber" name="L17" href="#L17">17</a>  <em class="jxr_comment"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</em>
      +<a class="jxr_linenumber" name="L18" href="#L18">18</a>  <em class="jxr_comment"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE</em>
      +<a class="jxr_linenumber" name="L19" href="#L19">19</a>  <em class="jxr_comment"> * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</em>
      +<a class="jxr_linenumber" name="L20" href="#L20">20</a>  <em class="jxr_comment"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</em>
      +<a class="jxr_linenumber" name="L21" href="#L21">21</a>  <em class="jxr_comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE</em>
      +<a class="jxr_linenumber" name="L22" href="#L22">22</a>  <em class="jxr_comment"> * SOFTWARE.</em>
      +<a class="jxr_linenumber" name="L23" href="#L23">23</a>  <em class="jxr_comment"> */</em>
      +<a class="jxr_linenumber" name="L24" href="#L24">24</a>  <strong class="jxr_keyword">package</strong> waffle.windows.auth.impl;
      +<a class="jxr_linenumber" name="L25" href="#L25">25</a>  
      +<a class="jxr_linenumber" name="L26" href="#L26">26</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Secur32;
      +<a class="jxr_linenumber" name="L27" href="#L27">27</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi;
      +<a class="jxr_linenumber" name="L28" href="#L28">28</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi.CtxtHandle;
      +<a class="jxr_linenumber" name="L29" href="#L29">29</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Sspi.SecBufferDesc;
      +<a class="jxr_linenumber" name="L30" href="#L30">30</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.SspiUtil.ManagedSecBufferDesc;
      +<a class="jxr_linenumber" name="L31" href="#L31">31</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.Win32Exception;
      +<a class="jxr_linenumber" name="L32" href="#L32">32</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.WinError;
      +<a class="jxr_linenumber" name="L33" href="#L33">33</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.platform.win32.WinNT.HANDLEByReference;
      +<a class="jxr_linenumber" name="L34" href="#L34">34</a>  <strong class="jxr_keyword">import</strong> com.sun.jna.ptr.IntByReference;
      +<a class="jxr_linenumber" name="L35" href="#L35">35</a>  
      +<a class="jxr_linenumber" name="L36" href="#L36">36</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsCredentialsHandle;
      +<a class="jxr_linenumber" name="L37" href="#L37">37</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsIdentity;
      +<a class="jxr_linenumber" name="L38" href="#L38">38</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsImpersonationContext;
      +<a class="jxr_linenumber" name="L39" href="#L39">39</a>  <strong class="jxr_keyword">import</strong> waffle.windows.auth.IWindowsSecurityContext;
      +<a class="jxr_linenumber" name="L40" href="#L40">40</a>  
      +<a class="jxr_linenumber" name="L41" href="#L41">41</a>  <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L42" href="#L42">42</a>  <em class="jxr_javadoccomment"> * Windows Security Context.</em>
      +<a class="jxr_linenumber" name="L43" href="#L43">43</a>  <em class="jxr_javadoccomment"> */</em>
      +<a class="jxr_linenumber" name="L44" href="#L44">44</a>  <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">class</strong> <a name="WindowsSecurityContextImpl" href="../../../../waffle/windows/auth/impl/WindowsSecurityContextImpl.html#WindowsSecurityContextImpl">WindowsSecurityContextImpl</a> <strong class="jxr_keyword">implements</strong> <a name="IWindowsSecurityContext" href="../../../../waffle/windows/auth/IWindowsSecurityContext.html#IWindowsSecurityContext">IWindowsSecurityContext</a> {
      +<a class="jxr_linenumber" name="L45" href="#L45">45</a>  
      +<a class="jxr_linenumber" name="L46" href="#L46">46</a>      <em class="jxr_javadoccomment">/** The principal name. */</em>
      +<a class="jxr_linenumber" name="L47" href="#L47">47</a>      <strong class="jxr_keyword">private</strong> String principalName;
      +<a class="jxr_linenumber" name="L48" href="#L48">48</a>  
      +<a class="jxr_linenumber" name="L49" href="#L49">49</a>      <em class="jxr_javadoccomment">/** The security package. */</em>
      +<a class="jxr_linenumber" name="L50" href="#L50">50</a>      <strong class="jxr_keyword">private</strong> String securityPackage;
      +<a class="jxr_linenumber" name="L51" href="#L51">51</a>  
      +<a class="jxr_linenumber" name="L52" href="#L52">52</a>      <em class="jxr_javadoccomment">/** The token. */</em>
      +<a class="jxr_linenumber" name="L53" href="#L53">53</a>      <strong class="jxr_keyword">private</strong> ManagedSecBufferDesc token;
      +<a class="jxr_linenumber" name="L54" href="#L54">54</a>  
      +<a class="jxr_linenumber" name="L55" href="#L55">55</a>      <em class="jxr_javadoccomment">/** The ctx. */</em>
      +<a class="jxr_linenumber" name="L56" href="#L56">56</a>      <strong class="jxr_keyword">private</strong> CtxtHandle ctx;
      +<a class="jxr_linenumber" name="L57" href="#L57">57</a>  
      +<a class="jxr_linenumber" name="L58" href="#L58">58</a>      <em class="jxr_javadoccomment">/** The credentials. */</em>
      +<a class="jxr_linenumber" name="L59" href="#L59">59</a>      <strong class="jxr_keyword">private</strong> <a name="IWindowsCredentialsHandle" href="../../../../waffle/windows/auth/IWindowsCredentialsHandle.html#IWindowsCredentialsHandle">IWindowsCredentialsHandle</a> credentials;
      +<a class="jxr_linenumber" name="L60" href="#L60">60</a>  
      +<a class="jxr_linenumber" name="L61" href="#L61">61</a>      <em class="jxr_javadoccomment">/** The continue flag. */</em>
      +<a class="jxr_linenumber" name="L62" href="#L62">62</a>      <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">boolean</strong> continueFlag;
      +<a class="jxr_linenumber" name="L63" href="#L63">63</a>  
      +<a class="jxr_linenumber" name="L64" href="#L64">64</a>      @Override
      +<a class="jxr_linenumber" name="L65" href="#L65">65</a>      <strong class="jxr_keyword">public</strong> <a name="IWindowsImpersonationContext" href="../../../../waffle/windows/auth/IWindowsImpersonationContext.html#IWindowsImpersonationContext">IWindowsImpersonationContext</a> impersonate() {
      +<a class="jxr_linenumber" name="L66" href="#L66">66</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a name="WindowsSecurityContextImpersonationContextImpl" href="../../../../waffle/windows/auth/impl/WindowsSecurityContextImpersonationContextImpl.html#WindowsSecurityContextImpersonationContextImpl">WindowsSecurityContextImpersonationContextImpl</a>(<strong class="jxr_keyword">this</strong>.ctx);
      +<a class="jxr_linenumber" name="L67" href="#L67">67</a>      }
      +<a class="jxr_linenumber" name="L68" href="#L68">68</a>  
      +<a class="jxr_linenumber" name="L69" href="#L69">69</a>      @Override
      +<a class="jxr_linenumber" name="L70" href="#L70">70</a>      <strong class="jxr_keyword">public</strong> <a name="IWindowsIdentity" href="../../../../waffle/windows/auth/IWindowsIdentity.html#IWindowsIdentity">IWindowsIdentity</a> getIdentity() {
      +<a class="jxr_linenumber" name="L71" href="#L71">71</a>          <strong class="jxr_keyword">final</strong> HANDLEByReference phContextToken = <strong class="jxr_keyword">new</strong> HANDLEByReference();
      +<a class="jxr_linenumber" name="L72" href="#L72">72</a>          <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> rc = Secur32.INSTANCE.QuerySecurityContextToken(<strong class="jxr_keyword">this</strong>.ctx, phContextToken);
      +<a class="jxr_linenumber" name="L73" href="#L73">73</a>          <strong class="jxr_keyword">if</strong> (WinError.SEC_E_OK != rc) {
      +<a class="jxr_linenumber" name="L74" href="#L74">74</a>              <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> Win32Exception(rc);
      +<a class="jxr_linenumber" name="L75" href="#L75">75</a>          }
      +<a class="jxr_linenumber" name="L76" href="#L76">76</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a name="WindowsIdentityImpl" href="../../../../waffle/windows/auth/impl/WindowsIdentityImpl.html#WindowsIdentityImpl">WindowsIdentityImpl</a>(phContextToken.getValue());
      +<a class="jxr_linenumber" name="L77" href="#L77">77</a>      }
      +<a class="jxr_linenumber" name="L78" href="#L78">78</a>  
      +<a class="jxr_linenumber" name="L79" href="#L79">79</a>      @Override
      +<a class="jxr_linenumber" name="L80" href="#L80">80</a>      <strong class="jxr_keyword">public</strong> String getSecurityPackage() {
      +<a class="jxr_linenumber" name="L81" href="#L81">81</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.securityPackage;
      +<a class="jxr_linenumber" name="L82" href="#L82">82</a>      }
      +<a class="jxr_linenumber" name="L83" href="#L83">83</a>  
      +<a class="jxr_linenumber" name="L84" href="#L84">84</a>      @Override
      +<a class="jxr_linenumber" name="L85" href="#L85">85</a>      <strong class="jxr_keyword">public</strong> byte[] getToken() {
      +<a class="jxr_linenumber" name="L86" href="#L86">86</a>          <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.token == <strong class="jxr_keyword">null</strong> || <strong class="jxr_keyword">this</strong>.token.getBuffer(0).getBytes() == <strong class="jxr_keyword">null</strong> ? <strong class="jxr_keyword">null</strong>
      +<a class="jxr_linenumber" name="L87" href="#L87">87</a>                  : <strong class="jxr_keyword">this</strong>.token.getBuffer(0).getBytes().clone();
      +<a class="jxr_linenumber" name="L88" href="#L88">88</a>      }
      +<a class="jxr_linenumber" name="L89" href="#L89">89</a>  
      +<a class="jxr_linenumber" name="L90" href="#L90">90</a>      <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L91" href="#L91">91</a>  <em class="jxr_javadoccomment">     * Get the current Windows security context for a given SSPI package.</em>
      +<a class="jxr_linenumber" name="L92" href="#L92">92</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L93" href="#L93">93</a>  <em class="jxr_javadoccomment">     * @param securityPackage</em>
      +<a class="jxr_linenumber" name="L94" href="#L94">94</a>  <em class="jxr_javadoccomment">     *            SSPI package.</em>
      +<a class="jxr_linenumber" name="L95" href="#L95">95</a>  <em class="jxr_javadoccomment">     * @param targetName</em>
      +<a class="jxr_linenumber" name="L96" href="#L96">96</a>  <em class="jxr_javadoccomment">     *            The target of the context. The string contents are security-package specific.</em>
      +<a class="jxr_linenumber" name="L97" href="#L97">97</a>  <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L98" href="#L98">98</a>  <em class="jxr_javadoccomment">     * @return Windows security context.</em>
      +<a class="jxr_linenumber" name="L99" href="#L99">99</a>  <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L100" href="#L100">100</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <a name="IWindowsSecurityContext" href="../../../../waffle/windows/auth/IWindowsSecurityContext.html#IWindowsSecurityContext">IWindowsSecurityContext</a> getCurrent(<strong class="jxr_keyword">final</strong> String securityPackage, <strong class="jxr_keyword">final</strong> String targetName) {
      +<a class="jxr_linenumber" name="L101" href="#L101">101</a>         <a name="IWindowsCredentialsHandle" href="../../../../waffle/windows/auth/IWindowsCredentialsHandle.html#IWindowsCredentialsHandle">IWindowsCredentialsHandle</a> credentialsHandle = WindowsCredentialsHandleImpl.getCurrent(securityPackage);
      +<a class="jxr_linenumber" name="L102" href="#L102">102</a>         credentialsHandle.initialize();
      +<a class="jxr_linenumber" name="L103" href="#L103">103</a>         <strong class="jxr_keyword">try</strong> {
      +<a class="jxr_linenumber" name="L104" href="#L104">104</a>             <strong class="jxr_keyword">final</strong> <a name="WindowsSecurityContextImpl" href="../../../../waffle/windows/auth/impl/WindowsSecurityContextImpl.html#WindowsSecurityContextImpl">WindowsSecurityContextImpl</a> ctx = <strong class="jxr_keyword">new</strong> <a name="WindowsSecurityContextImpl" href="../../../../waffle/windows/auth/impl/WindowsSecurityContextImpl.html#WindowsSecurityContextImpl">WindowsSecurityContextImpl</a>();
      +<a class="jxr_linenumber" name="L105" href="#L105">105</a>             ctx.setPrincipalName(WindowsAccountImpl.getCurrentUsername());
      +<a class="jxr_linenumber" name="L106" href="#L106">106</a>             ctx.setCredentialsHandle(credentialsHandle);
      +<a class="jxr_linenumber" name="L107" href="#L107">107</a>             ctx.setSecurityPackage(securityPackage);
      +<a class="jxr_linenumber" name="L108" href="#L108">108</a>             ctx.initialize(<strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, targetName);
      +<a class="jxr_linenumber" name="L109" href="#L109">109</a> 
      +<a class="jxr_linenumber" name="L110" href="#L110">110</a>             <em class="jxr_comment">// Starting from here ctx 'owns' the credentials handle, so let's null out the</em>
      +<a class="jxr_linenumber" name="L111" href="#L111">111</a>             <em class="jxr_comment">// variable. This will prevent the finally block below from disposing it right away.</em>
      +<a class="jxr_linenumber" name="L112" href="#L112">112</a>             credentialsHandle = <strong class="jxr_keyword">null</strong>;
      +<a class="jxr_linenumber" name="L113" href="#L113">113</a> 
      +<a class="jxr_linenumber" name="L114" href="#L114">114</a>             <strong class="jxr_keyword">return</strong> ctx;
      +<a class="jxr_linenumber" name="L115" href="#L115">115</a>         } <strong class="jxr_keyword">finally</strong> {
      +<a class="jxr_linenumber" name="L116" href="#L116">116</a>             <strong class="jxr_keyword">if</strong> (credentialsHandle != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L117" href="#L117">117</a>                 credentialsHandle.dispose();
      +<a class="jxr_linenumber" name="L118" href="#L118">118</a>             }
      +<a class="jxr_linenumber" name="L119" href="#L119">119</a>         }
      +<a class="jxr_linenumber" name="L120" href="#L120">120</a>     }
      +<a class="jxr_linenumber" name="L121" href="#L121">121</a> 
      +<a class="jxr_linenumber" name="L122" href="#L122">122</a>     @Override
      +<a class="jxr_linenumber" name="L123" href="#L123">123</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> initialize(<strong class="jxr_keyword">final</strong> CtxtHandle continueCtx, <strong class="jxr_keyword">final</strong> SecBufferDesc continueToken, <strong class="jxr_keyword">final</strong> String targetName) {
      +<a class="jxr_linenumber" name="L124" href="#L124">124</a>         <strong class="jxr_keyword">final</strong> IntByReference attr = <strong class="jxr_keyword">new</strong> IntByReference();
      +<a class="jxr_linenumber" name="L125" href="#L125">125</a>         <strong class="jxr_keyword">this</strong>.ctx = <strong class="jxr_keyword">new</strong> CtxtHandle();
      +<a class="jxr_linenumber" name="L126" href="#L126">126</a>         <strong class="jxr_keyword">int</strong> tokenSize = Sspi.MAX_TOKEN_SIZE;
      +<a class="jxr_linenumber" name="L127" href="#L127">127</a>         <strong class="jxr_keyword">int</strong> rc;
      +<a class="jxr_linenumber" name="L128" href="#L128">128</a>         <strong class="jxr_keyword">do</strong> {
      +<a class="jxr_linenumber" name="L129" href="#L129">129</a>             <strong class="jxr_keyword">this</strong>.token = <strong class="jxr_keyword">new</strong> ManagedSecBufferDesc(Sspi.SECBUFFER_TOKEN, tokenSize);
      +<a class="jxr_linenumber" name="L130" href="#L130">130</a>             rc = Secur32.INSTANCE.InitializeSecurityContext(<strong class="jxr_keyword">this</strong>.credentials.getHandle(), continueCtx, targetName,
      +<a class="jxr_linenumber" name="L131" href="#L131">131</a>                     Sspi.ISC_REQ_CONNECTION, 0, Sspi.SECURITY_NATIVE_DREP, continueToken, 0, <strong class="jxr_keyword">this</strong>.ctx, <strong class="jxr_keyword">this</strong>.token, attr,
      +<a class="jxr_linenumber" name="L132" href="#L132">132</a>                     <strong class="jxr_keyword">null</strong>);
      +<a class="jxr_linenumber" name="L133" href="#L133">133</a>             <strong class="jxr_keyword">switch</strong> (rc) {
      +<a class="jxr_linenumber" name="L134" href="#L134">134</a>                 <strong class="jxr_keyword">case</strong> WinError.SEC_E_INSUFFICIENT_MEMORY:
      +<a class="jxr_linenumber" name="L135" href="#L135">135</a>                 <strong class="jxr_keyword">case</strong> WinError.SEC_E_BUFFER_TOO_SMALL:
      +<a class="jxr_linenumber" name="L136" href="#L136">136</a>                     tokenSize += Sspi.MAX_TOKEN_SIZE;
      +<a class="jxr_linenumber" name="L137" href="#L137">137</a>                     <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L138" href="#L138">138</a>                 <strong class="jxr_keyword">case</strong> WinError.SEC_I_CONTINUE_NEEDED:
      +<a class="jxr_linenumber" name="L139" href="#L139">139</a>                     <strong class="jxr_keyword">this</strong>.continueFlag = <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L140" href="#L140">140</a>                     <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L141" href="#L141">141</a>                 <strong class="jxr_keyword">case</strong> WinError.SEC_E_OK:
      +<a class="jxr_linenumber" name="L142" href="#L142">142</a>                     <strong class="jxr_keyword">this</strong>.continueFlag = false;
      +<a class="jxr_linenumber" name="L143" href="#L143">143</a>                     <strong class="jxr_keyword">break</strong>;
      +<a class="jxr_linenumber" name="L144" href="#L144">144</a>                 <strong class="jxr_keyword">default</strong>:
      +<a class="jxr_linenumber" name="L145" href="#L145">145</a>                     <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> Win32Exception(rc);
      +<a class="jxr_linenumber" name="L146" href="#L146">146</a>             }
      +<a class="jxr_linenumber" name="L147" href="#L147">147</a>         } <strong class="jxr_keyword">while</strong> (rc == WinError.SEC_E_INSUFFICIENT_MEMORY || rc == WinError.SEC_E_BUFFER_TOO_SMALL);
      +<a class="jxr_linenumber" name="L148" href="#L148">148</a>     }
      +<a class="jxr_linenumber" name="L149" href="#L149">149</a> 
      +<a class="jxr_linenumber" name="L150" href="#L150">150</a>     @Override
      +<a class="jxr_linenumber" name="L151" href="#L151">151</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> dispose() {
      +<a class="jxr_linenumber" name="L152" href="#L152">152</a>         WindowsSecurityContextImpl.dispose(<strong class="jxr_keyword">this</strong>.ctx);
      +<a class="jxr_linenumber" name="L153" href="#L153">153</a> 
      +<a class="jxr_linenumber" name="L154" href="#L154">154</a>         <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong>.credentials != <strong class="jxr_keyword">null</strong>) {
      +<a class="jxr_linenumber" name="L155" href="#L155">155</a>             <strong class="jxr_keyword">this</strong>.credentials.dispose();
      +<a class="jxr_linenumber" name="L156" href="#L156">156</a>         }
      +<a class="jxr_linenumber" name="L157" href="#L157">157</a>     }
      +<a class="jxr_linenumber" name="L158" href="#L158">158</a> 
      +<a class="jxr_linenumber" name="L159" href="#L159">159</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L160" href="#L160">160</a> <em class="jxr_javadoccomment">     * Dispose a security context.</em>
      +<a class="jxr_linenumber" name="L161" href="#L161">161</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L162" href="#L162">162</a> <em class="jxr_javadoccomment">     * @param ctx</em>
      +<a class="jxr_linenumber" name="L163" href="#L163">163</a> <em class="jxr_javadoccomment">     *            Security context.</em>
      +<a class="jxr_linenumber" name="L164" href="#L164">164</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L165" href="#L165">165</a> <em class="jxr_javadoccomment">     * @return True if a context was disposed.</em>
      +<a class="jxr_linenumber" name="L166" href="#L166">166</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L167" href="#L167">167</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">boolean</strong> dispose(<strong class="jxr_keyword">final</strong> CtxtHandle ctx) {
      +<a class="jxr_linenumber" name="L168" href="#L168">168</a>         <strong class="jxr_keyword">if</strong> (ctx != <strong class="jxr_keyword">null</strong> &amp;&amp; !ctx.isNull()) {
      +<a class="jxr_linenumber" name="L169" href="#L169">169</a>             <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> rc = Secur32.INSTANCE.DeleteSecurityContext(ctx);
      +<a class="jxr_linenumber" name="L170" href="#L170">170</a>             <strong class="jxr_keyword">if</strong> (WinError.SEC_E_OK != rc) {
      +<a class="jxr_linenumber" name="L171" href="#L171">171</a>                 <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> Win32Exception(rc);
      +<a class="jxr_linenumber" name="L172" href="#L172">172</a>             }
      +<a class="jxr_linenumber" name="L173" href="#L173">173</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
      +<a class="jxr_linenumber" name="L174" href="#L174">174</a>         }
      +<a class="jxr_linenumber" name="L175" href="#L175">175</a>         <strong class="jxr_keyword">return</strong> false;
      +<a class="jxr_linenumber" name="L176" href="#L176">176</a>     }
      +<a class="jxr_linenumber" name="L177" href="#L177">177</a> 
      +<a class="jxr_linenumber" name="L178" href="#L178">178</a>     @Override
      +<a class="jxr_linenumber" name="L179" href="#L179">179</a>     <strong class="jxr_keyword">public</strong> String getPrincipalName() {
      +<a class="jxr_linenumber" name="L180" href="#L180">180</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.principalName;
      +<a class="jxr_linenumber" name="L181" href="#L181">181</a>     }
      +<a class="jxr_linenumber" name="L182" href="#L182">182</a> 
      +<a class="jxr_linenumber" name="L183" href="#L183">183</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L184" href="#L184">184</a> <em class="jxr_javadoccomment">     * Sets the principal name.</em>
      +<a class="jxr_linenumber" name="L185" href="#L185">185</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L186" href="#L186">186</a> <em class="jxr_javadoccomment">     * @param value</em>
      +<a class="jxr_linenumber" name="L187" href="#L187">187</a> <em class="jxr_javadoccomment">     *            the new principal name</em>
      +<a class="jxr_linenumber" name="L188" href="#L188">188</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L189" href="#L189">189</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setPrincipalName(<strong class="jxr_keyword">final</strong> String value) {
      +<a class="jxr_linenumber" name="L190" href="#L190">190</a>         <strong class="jxr_keyword">this</strong>.principalName = value;
      +<a class="jxr_linenumber" name="L191" href="#L191">191</a>     }
      +<a class="jxr_linenumber" name="L192" href="#L192">192</a> 
      +<a class="jxr_linenumber" name="L193" href="#L193">193</a>     @Override
      +<a class="jxr_linenumber" name="L194" href="#L194">194</a>     <strong class="jxr_keyword">public</strong> CtxtHandle getHandle() {
      +<a class="jxr_linenumber" name="L195" href="#L195">195</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.ctx;
      +<a class="jxr_linenumber" name="L196" href="#L196">196</a>     }
      +<a class="jxr_linenumber" name="L197" href="#L197">197</a> 
      +<a class="jxr_linenumber" name="L198" href="#L198">198</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L199" href="#L199">199</a> <em class="jxr_javadoccomment">     * Sets the credentials handle.</em>
      +<a class="jxr_linenumber" name="L200" href="#L200">200</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L201" href="#L201">201</a> <em class="jxr_javadoccomment">     * @param handle</em>
      +<a class="jxr_linenumber" name="L202" href="#L202">202</a> <em class="jxr_javadoccomment">     *            the new credentials handle</em>
      +<a class="jxr_linenumber" name="L203" href="#L203">203</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L204" href="#L204">204</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setCredentialsHandle(<strong class="jxr_keyword">final</strong> <a name="IWindowsCredentialsHandle" href="../../../../waffle/windows/auth/IWindowsCredentialsHandle.html#IWindowsCredentialsHandle">IWindowsCredentialsHandle</a> handle) {
      +<a class="jxr_linenumber" name="L205" href="#L205">205</a>         <strong class="jxr_keyword">this</strong>.credentials = handle;
      +<a class="jxr_linenumber" name="L206" href="#L206">206</a>     }
      +<a class="jxr_linenumber" name="L207" href="#L207">207</a> 
      +<a class="jxr_linenumber" name="L208" href="#L208">208</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L209" href="#L209">209</a> <em class="jxr_javadoccomment">     * Sets the token.</em>
      +<a class="jxr_linenumber" name="L210" href="#L210">210</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L211" href="#L211">211</a> <em class="jxr_javadoccomment">     * @param bytes</em>
      +<a class="jxr_linenumber" name="L212" href="#L212">212</a> <em class="jxr_javadoccomment">     *            the new token</em>
      +<a class="jxr_linenumber" name="L213" href="#L213">213</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L214" href="#L214">214</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setToken(<strong class="jxr_keyword">final</strong> byte[] bytes) {
      +<a class="jxr_linenumber" name="L215" href="#L215">215</a>         <strong class="jxr_keyword">this</strong>.token = <strong class="jxr_keyword">new</strong> ManagedSecBufferDesc(Sspi.SECBUFFER_TOKEN, bytes);
      +<a class="jxr_linenumber" name="L216" href="#L216">216</a>     }
      +<a class="jxr_linenumber" name="L217" href="#L217">217</a> 
      +<a class="jxr_linenumber" name="L218" href="#L218">218</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L219" href="#L219">219</a> <em class="jxr_javadoccomment">     * Sets the security package.</em>
      +<a class="jxr_linenumber" name="L220" href="#L220">220</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L221" href="#L221">221</a> <em class="jxr_javadoccomment">     * @param value</em>
      +<a class="jxr_linenumber" name="L222" href="#L222">222</a> <em class="jxr_javadoccomment">     *            the new security package</em>
      +<a class="jxr_linenumber" name="L223" href="#L223">223</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L224" href="#L224">224</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setSecurityPackage(<strong class="jxr_keyword">final</strong> String value) {
      +<a class="jxr_linenumber" name="L225" href="#L225">225</a>         <strong class="jxr_keyword">this</strong>.securityPackage = value;
      +<a class="jxr_linenumber" name="L226" href="#L226">226</a>     }
      +<a class="jxr_linenumber" name="L227" href="#L227">227</a> 
      +<a class="jxr_linenumber" name="L228" href="#L228">228</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L229" href="#L229">229</a> <em class="jxr_javadoccomment">     * Sets the security context.</em>
      +<a class="jxr_linenumber" name="L230" href="#L230">230</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L231" href="#L231">231</a> <em class="jxr_javadoccomment">     * @param phNewServerContext</em>
      +<a class="jxr_linenumber" name="L232" href="#L232">232</a> <em class="jxr_javadoccomment">     *            the new security context</em>
      +<a class="jxr_linenumber" name="L233" href="#L233">233</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L234" href="#L234">234</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setSecurityContext(<strong class="jxr_keyword">final</strong> CtxtHandle phNewServerContext) {
      +<a class="jxr_linenumber" name="L235" href="#L235">235</a>         <strong class="jxr_keyword">this</strong>.ctx = phNewServerContext;
      +<a class="jxr_linenumber" name="L236" href="#L236">236</a>     }
      +<a class="jxr_linenumber" name="L237" href="#L237">237</a> 
      +<a class="jxr_linenumber" name="L238" href="#L238">238</a>     @Override
      +<a class="jxr_linenumber" name="L239" href="#L239">239</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> isContinue() {
      +<a class="jxr_linenumber" name="L240" href="#L240">240</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.continueFlag;
      +<a class="jxr_linenumber" name="L241" href="#L241">241</a>     }
      +<a class="jxr_linenumber" name="L242" href="#L242">242</a> 
      +<a class="jxr_linenumber" name="L243" href="#L243">243</a>     <em class="jxr_javadoccomment">/**</em>
      +<a class="jxr_linenumber" name="L244" href="#L244">244</a> <em class="jxr_javadoccomment">     * Sets the continue.</em>
      +<a class="jxr_linenumber" name="L245" href="#L245">245</a> <em class="jxr_javadoccomment">     *</em>
      +<a class="jxr_linenumber" name="L246" href="#L246">246</a> <em class="jxr_javadoccomment">     * @param b</em>
      +<a class="jxr_linenumber" name="L247" href="#L247">247</a> <em class="jxr_javadoccomment">     *            the new continue</em>
      +<a class="jxr_linenumber" name="L248" href="#L248">248</a> <em class="jxr_javadoccomment">     */</em>
      +<a class="jxr_linenumber" name="L249" href="#L249">249</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setContinue(<strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">boolean</strong> b) {
      +<a class="jxr_linenumber" name="L250" href="#L250">250</a>         <strong class="jxr_keyword">this</strong>.continueFlag = b;
      +<a class="jxr_linenumber" name="L251" href="#L251">251</a>     }
      +<a class="jxr_linenumber" name="L252" href="#L252">252</a> 
      +<a class="jxr_linenumber" name="L253" href="#L253">253</a> }
      +</pre>
      +<hr/>
      +<div id="footer">© 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a></div>
      +</body>
      +</html>
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/impl/package-frame.html b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/package-frame.html
      new file mode 100644
      index 0000000000..b66e5da502
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/package-frame.html
      @@ -0,0 +1,54 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.windows.auth.impl</title>
      +        <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar"><a href="package-summary.html" target="classFrame">waffle.windows.auth.impl</a></h1>
      +        <div class="indexContainer">
      +            <h2 title="Classes">Classes</h2>
      +            <ul title="Classes">
      +                <li>
      +                    <a href="WindowsAccountImpl.html#WindowsAccountImpl" target="classFrame">WindowsAccountImpl</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsAuthProviderImpl.html#WindowsAuthProviderImpl" target="classFrame">WindowsAuthProviderImpl</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsAuthProviderImpl.html#WindowsAuthProviderImpl.ContinueContext" target="classFrame">WindowsAuthProviderImpl.ContinueContext</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsComputerImpl.html#WindowsComputerImpl" target="classFrame">WindowsComputerImpl</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsCredentialsHandleImpl.html#WindowsCredentialsHandleImpl" target="classFrame">WindowsCredentialsHandleImpl</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsDomainImpl.html#WindowsDomainImpl" target="classFrame">WindowsDomainImpl</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsDomainImpl.html#WindowsDomainImpl.TrustDirection" target="classFrame">WindowsDomainImpl.TrustDirection</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsDomainImpl.html#WindowsDomainImpl.TrustType" target="classFrame">WindowsDomainImpl.TrustType</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsIdentityImpersonationContextImpl.html#WindowsIdentityImpersonationContextImpl" target="classFrame">WindowsIdentityImpersonationContextImpl</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsIdentityImpl.html#WindowsIdentityImpl" target="classFrame">WindowsIdentityImpl</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsSecurityContextImpersonationContextImpl.html#WindowsSecurityContextImpersonationContextImpl" target="classFrame">WindowsSecurityContextImpersonationContextImpl</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsSecurityContextImpl.html#WindowsSecurityContextImpl" target="classFrame">WindowsSecurityContextImpl</a>
      +                </li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/impl/package-summary.html b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/package-summary.html
      new file mode 100644
      index 0000000000..f38fa242fb
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/impl/package-summary.html
      @@ -0,0 +1,162 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.windows.auth.impl</title>
      +        <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="style" />
      +    </head>
      +
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_top">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 title="Package" class="title">Package waffle.windows.auth.impl</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <ul class="blockList">
      +                <li class="blockList">
      +                    <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
      +                        <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
      +                        <thead>
      +                            <tr>
      +                                <th class="colFirst colLast" scope="col">Class</th>
      +                            </tr>
      +                        </thead>
      +                        <tbody>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsAccountImpl.html#WindowsAccountImpl" target="classFrame" title="class in waffle.windows.auth.impl">WindowsAccountImpl</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsAuthProviderImpl.html#WindowsAuthProviderImpl" target="classFrame" title="class in waffle.windows.auth.impl">WindowsAuthProviderImpl</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsAuthProviderImpl.html#WindowsAuthProviderImpl.ContinueContext" target="classFrame" title="class in waffle.windows.auth.impl">WindowsAuthProviderImpl.ContinueContext</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsComputerImpl.html#WindowsComputerImpl" target="classFrame" title="class in waffle.windows.auth.impl">WindowsComputerImpl</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsCredentialsHandleImpl.html#WindowsCredentialsHandleImpl" target="classFrame" title="class in waffle.windows.auth.impl">WindowsCredentialsHandleImpl</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsDomainImpl.html#WindowsDomainImpl" target="classFrame" title="class in waffle.windows.auth.impl">WindowsDomainImpl</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsDomainImpl.html#WindowsDomainImpl.TrustDirection" target="classFrame" title="class in waffle.windows.auth.impl">WindowsDomainImpl.TrustDirection</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsDomainImpl.html#WindowsDomainImpl.TrustType" target="classFrame" title="class in waffle.windows.auth.impl">WindowsDomainImpl.TrustType</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsIdentityImpersonationContextImpl.html#WindowsIdentityImpersonationContextImpl" target="classFrame" title="class in waffle.windows.auth.impl">WindowsIdentityImpersonationContextImpl</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsIdentityImpl.html#WindowsIdentityImpl" target="classFrame" title="class in waffle.windows.auth.impl">WindowsIdentityImpl</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsSecurityContextImpersonationContextImpl.html#WindowsSecurityContextImpersonationContextImpl" target="classFrame" title="class in waffle.windows.auth.impl">WindowsSecurityContextImpersonationContextImpl</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsSecurityContextImpl.html#WindowsSecurityContextImpl" target="classFrame" title="class in waffle.windows.auth.impl">WindowsSecurityContextImpl</a>
      +                                </td>
      +                            </tr>
      +                        </tbody>
      +                    </table>
      +                </li>
      +            </ul>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_bottom">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/package-frame.html b/waffle-jna-jakarta/xref/waffle/windows/auth/package-frame.html
      new file mode 100644
      index 0000000000..688545db89
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/package-frame.html
      @@ -0,0 +1,48 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.windows.auth</title>
      +        <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="style" />
      +    </head>
      +    <body>
      +        <h1 class="bar"><a href="package-summary.html" target="classFrame">waffle.windows.auth</a></h1>
      +        <div class="indexContainer">
      +            <h2 title="Classes">Classes</h2>
      +            <ul title="Classes">
      +                <li>
      +                    <a href="IWindowsAccount.html#IWindowsAccount" target="classFrame">IWindowsAccount</a>
      +                </li>
      +                <li>
      +                    <a href="IWindowsAuthProvider.html#IWindowsAuthProvider" target="classFrame">IWindowsAuthProvider</a>
      +                </li>
      +                <li>
      +                    <a href="IWindowsComputer.html#IWindowsComputer" target="classFrame">IWindowsComputer</a>
      +                </li>
      +                <li>
      +                    <a href="IWindowsCredentialsHandle.html#IWindowsCredentialsHandle" target="classFrame">IWindowsCredentialsHandle</a>
      +                </li>
      +                <li>
      +                    <a href="IWindowsDomain.html#IWindowsDomain" target="classFrame">IWindowsDomain</a>
      +                </li>
      +                <li>
      +                    <a href="IWindowsIdentity.html#IWindowsIdentity" target="classFrame">IWindowsIdentity</a>
      +                </li>
      +                <li>
      +                    <a href="IWindowsImpersonationContext.html#IWindowsImpersonationContext" target="classFrame">IWindowsImpersonationContext</a>
      +                </li>
      +                <li>
      +                    <a href="IWindowsSecurityContext.html#IWindowsSecurityContext" target="classFrame">IWindowsSecurityContext</a>
      +                </li>
      +                <li>
      +                    <a href="PrincipalFormat.html#PrincipalFormat" target="classFrame">PrincipalFormat</a>
      +                </li>
      +                <li>
      +                    <a href="WindowsAccount.html#WindowsAccount" target="classFrame">WindowsAccount</a>
      +                </li>
      +            </ul>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file
      diff --git a/waffle-jna-jakarta/xref/waffle/windows/auth/package-summary.html b/waffle-jna-jakarta/xref/waffle/windows/auth/package-summary.html
      new file mode 100644
      index 0000000000..7d23712c49
      --- /dev/null
      +++ b/waffle-jna-jakarta/xref/waffle/windows/auth/package-summary.html
      @@ -0,0 +1,152 @@
      +
      +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      +<html xml:lang="en" lang="en">
      +    <!-- generated by Apache Maven JXR (jdk8) -->
      +    <head>
      +        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      +        <title>waffle-jna-jakarta 3.5.1 Reference Package waffle.windows.auth</title>
      +        <link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="style" />
      +    </head>
      +
      +    <body>
      +                <div class="topNav">
      +            <a name="navbar_top"><!--   --></a>
      +            <a href="#skip-navbar_top" title="Skip navigation links"></a>
      +            <a name="navbar_top_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_top">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_top"><!--   --></a>
      +        </div>
      +        
      +                <div class="header">
      +            <h1 title="Package" class="title">Package waffle.windows.auth</h1>
      +        </div>
      +        <div class="contentContainer">
      +            <ul class="blockList">
      +                <li class="blockList">
      +                    <table class="typeSummary" border="0" cellpadding="3" cellspacing="0" summary="Class Summary table, listing classes, and an explanation">
      +                        <caption><span>Class Summary</span><span class="tabEnd">&nbsp;</span></caption>
      +                        <thead>
      +                            <tr>
      +                                <th class="colFirst colLast" scope="col">Class</th>
      +                            </tr>
      +                        </thead>
      +                        <tbody>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="IWindowsAccount.html#IWindowsAccount" target="classFrame" title="class in waffle.windows.auth">IWindowsAccount</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="IWindowsAuthProvider.html#IWindowsAuthProvider" target="classFrame" title="class in waffle.windows.auth">IWindowsAuthProvider</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="IWindowsComputer.html#IWindowsComputer" target="classFrame" title="class in waffle.windows.auth">IWindowsComputer</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="IWindowsCredentialsHandle.html#IWindowsCredentialsHandle" target="classFrame" title="class in waffle.windows.auth">IWindowsCredentialsHandle</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="IWindowsDomain.html#IWindowsDomain" target="classFrame" title="class in waffle.windows.auth">IWindowsDomain</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="IWindowsIdentity.html#IWindowsIdentity" target="classFrame" title="class in waffle.windows.auth">IWindowsIdentity</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="IWindowsImpersonationContext.html#IWindowsImpersonationContext" target="classFrame" title="class in waffle.windows.auth">IWindowsImpersonationContext</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="IWindowsSecurityContext.html#IWindowsSecurityContext" target="classFrame" title="class in waffle.windows.auth">IWindowsSecurityContext</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="altColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="PrincipalFormat.html#PrincipalFormat" target="classFrame" title="class in waffle.windows.auth">PrincipalFormat</a>
      +                                </td>
      +                            </tr>
      +                            <tr class="rowColor">
      +                                <td class="colFirst colLast">
      +                                    <a href="WindowsAccount.html#WindowsAccount" target="classFrame" title="class in waffle.windows.auth">WindowsAccount</a>
      +                                </td>
      +                            </tr>
      +                        </tbody>
      +                    </table>
      +                </li>
      +            </ul>
      +        </div>
      +        
      +                <div class="bottomNav">
      +            <a name="navbar_bottom"><!--   --></a>
      +            <a href="#skip-navbar_bottom" title="Skip navigation links"></a>
      +            <a name="navbar_bottom_firstrow"><!--   --></a>
      +            <ul class="navList" title="Navigation">
      +                <li><a href="../../../overview-summary.html">Overview</a></li>
      +                <li class="navBarCell1Rev">Package</li>
      +                <li>Class</li>
      +                <li>Use</li>
      +                <li>Tree</li>
      +                <li>Deprecated</li>
      +                <li>Index</li>
      +                <li>Help</li>
      +            </ul>
      +            <div class="aboutLanguage"><em><strong>waffle-jna-jakarta 3.5.1 Reference</strong></em></div>
      +        </div>
      +        <div class="subNav">
      +            <ul class="navList">
      +                <li>Prev</li>
      +                <li>Next</li>
      +            </ul>
      +            <ul class="navList">
      +                <li><a href="../../../index.html?overview-summary.html" target="_top">Frames</a></li>
      +                <li><a href="package-summary.html" target="_top">No Frames</a></li>
      +            </ul>
      +            <ul class="navList" id="allclasses_navbar_bottom">
      +                <li>All Classes</li>
      +            </ul>
      +            <div>
      +            </div>
      +            <a name="skip-navbar_bottom"><!--   --></a>
      +        </div>
      +        
      +        <div id="footer">
      +            © 2010–2025 <a href="https://github.com/waffle/">com.github.waffle</a>
      +        </div>
      +    </body>
      +</html>
      \ No newline at end of file