<?xml version="1.0" encoding="utf-8"?>
<xbrl
  xmlns="http://www.xbrl.org/2003/instance"
  xmlns:dei="http://xbrl.sec.gov/dei/2026"
  xmlns:fil="http://taylordevices.com/20260531"
  xmlns:iso4217="http://www.xbrl.org/2003/iso4217"
  xmlns:link="http://www.xbrl.org/2003/linkbase"
  xmlns:us-gaap="http://fasb.org/us-gaap/2026"
  xmlns:xbrldi="http://xbrl.org/2006/xbrldi"
  xmlns:xlink="http://www.w3.org/1999/xlink">
    <link:schemaRef xlink:href="tayd-20260531.xsd" xlink:type="simple"/>
    <context id="D250601_260531">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_StClStock-CommonClassA">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementClassOfStockAxis">us-gaap:CommonClassAMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D250601_260531_StClStock-SeriesAPrefStock">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementClassOfStockAxis">us-gaap:SeriesAPreferredStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I251130">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
        </entity>
        <period>
            <instant>2025-11-30</instant>
        </period>
    </context>
    <context id="I260818">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
        </entity>
        <period>
            <instant>2026-08-18</instant>
        </period>
    </context>
    <context id="I250531">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I250531_StEqComps-CommonStock">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I240531_StEqComps-CommonStock">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2024-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_StEqComps-CommonStock">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D240601_250531_StEqComps-CommonStock">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I260531_StEqComps-CommonStock">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:CommonStockMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_StEqComps-AddPaidInCap">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I240531_StEqComps-AddPaidInCap">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2024-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_StEqComps-AddPaidInCap">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D240601_250531_StEqComps-AddPaidInCap">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I260531_StEqComps-AddPaidInCap">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:AdditionalPaidInCapitalMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_StEqComps-RetainedEarnings">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I240531_StEqComps-RetainedEarnings">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2024-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_StEqComps-RetainedEarnings">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D240601_250531_StEqComps-RetainedEarnings">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I260531_StEqComps-RetainedEarnings">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:RetainedEarningsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_StEqComps-TreasuryStockCommon">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockCommonMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I240531_StEqComps-TreasuryStockCommon">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockCommonMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2024-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_StEqComps-TreasuryStockCommon">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockCommonMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D240601_250531_StEqComps-TreasuryStockCommon">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockCommonMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I260531_StEqComps-TreasuryStockCommon">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementEquityComponentsAxis">us-gaap:TreasuryStockCommonMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I240531">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
        </entity>
        <period>
            <instant>2024-05-31</instant>
        </period>
    </context>
    <context id="I260531_PublicUtilitiesInventory-PublicUtilitiesInventoryRawMaterials">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PublicUtilitiesInventoryAxis">us-gaap:PublicUtilitiesInventoryRawMaterialsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_PublicUtilitiesInventory-PublicUtilitiesInventoryRawMaterials">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PublicUtilitiesInventoryAxis">us-gaap:PublicUtilitiesInventoryRawMaterialsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I260531_PublicUtilitiesInventory-WorkInProcess">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PublicUtilitiesInventoryAxis">fil:WorkInProcessMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_PublicUtilitiesInventory-WorkInProcess">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PublicUtilitiesInventoryAxis">fil:WorkInProcessMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I260531_PublicUtilitiesInventory-FinishedGoods">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PublicUtilitiesInventoryAxis">fil:FinishedGoodsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_PublicUtilitiesInventory-FinishedGoods">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PublicUtilitiesInventoryAxis">fil:FinishedGoodsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I260531_PpeByType-Land">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:LandMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_PpeByType-Land">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:LandMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I260531_PpeByType-BuildingImprovements">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:BuildingImprovementsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_PpeByType-BuildingImprovements">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:BuildingImprovementsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I260531_PpeByType-MachineryAndEquipment">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:MachineryAndEquipmentMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_PpeByType-MachineryAndEquipment">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:MachineryAndEquipmentMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I260531_PpeByType-FurnitureAndFixtures">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:FurnitureAndFixturesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_PpeByType-FurnitureAndFixtures">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:FurnitureAndFixturesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I260531_PpeByType-Vehicles">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:VehiclesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_PpeByType-Vehicles">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:VehiclesMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I260531_PpeByType-LandImprovements">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:LandImprovementsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_PpeByType-LandImprovements">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:PropertyPlantAndEquipmentByTypeAxis">us-gaap:LandImprovementsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I260531_FvByLiabClass-CustomerDeposits">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByLiabilityClassAxis">fil:CustomerDepositsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_FvByLiabClass-CustomerDeposits">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByLiabilityClassAxis">fil:CustomerDepositsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I260531_FvByLiabClass-PersonnelCosts">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByLiabilityClassAxis">fil:PersonnelCostsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_FvByLiabClass-PersonnelCosts">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByLiabilityClassAxis">fil:PersonnelCostsMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="I260531_FvByLiabClass-Other">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByLiabilityClassAxis">fil:OtherMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_FvByLiabClass-Other">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:FairValueByLiabilityClassAxis">fil:OtherMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_StBusnSeg-AerospaceDefense">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementBusinessSegmentsAxis">fil:AerospaceDefenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D240601_250531_StBusnSeg-AerospaceDefense">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementBusinessSegmentsAxis">fil:AerospaceDefenseMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="D250601_260531_StBusnSeg-Structural">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementBusinessSegmentsAxis">fil:StructuralMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D240601_250531_StBusnSeg-Structural">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementBusinessSegmentsAxis">fil:StructuralMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="D250601_260531_StBusnSeg-Industrial">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementBusinessSegmentsAxis">fil:IndustrialMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D240601_250531_StBusnSeg-Industrial">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:StatementBusinessSegmentsAxis">fil:IndustrialMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="D250601_260531_IncomeTa-DomesticCountry">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeTaxAuthorityAxis">us-gaap:DomesticCountryMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D250601_260531_IncomeTa-StateAndLocalJurisdiction">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeTaxAuthorityAxis">us-gaap:StateAndLocalJurisdictionMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D250601_260531_IncomeTa-NewYork">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeTaxAuthorityAxis">fil:NewYorkMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D250601_260531_IncomeTa-California">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeTaxAuthorityAxis">fil:CaliforniaMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D250601_260531_IncomeTa-Other">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:IncomeTaxAuthorityAxis">fil:OtherMember</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N90110001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N90110001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N90110001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N90110001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N100111001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N100111001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N100111001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N100111001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N110112001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N110112001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N110112001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N110112001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N120113001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N120113001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N120113001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N120113001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N130114001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N130114001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N130114001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N130114001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N190120001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N190120001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N190120001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N190120001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N20012100">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N20012100Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N20012100">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N20012100Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N30013100">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N30013100Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N30013100">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N30013100Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N43014400">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N43014400Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N43014400">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N43014400Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N46014700">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N46014700Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N46014700">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N46014700Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N56015700">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N56015700Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N56015700">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N56015700Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N9015700">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N9015700Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2025-06-01</startDate>
            <endDate>2026-05-31</endDate>
        </period>
    </context>
    <context id="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N9015700">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N9015700Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2026-05-31</instant>
        </period>
    </context>
    <context id="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N90110001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N90110001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N90110001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N90110001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N100111001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N100111001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N100111001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N100111001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N110112001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N110112001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N110112001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N110112001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N120113001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N120113001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N120113001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N120113001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N130114001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N130114001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N130114001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N130114001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N160117001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N160117001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N160117001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N160117001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N190120001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N190120001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N190120001">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N190120001Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N20012100">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N20012100Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N20012100">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N20012100Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N30013100">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N30013100Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N30013100">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N30013100Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N43014400">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N43014400Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N43014400">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N43014400Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N46014700">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N46014700Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N46014700">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N46014700Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <context id="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N9014700">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N9014700Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <instant>2025-05-31</instant>
        </period>
    </context>
    <context id="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N9014700">
        <entity>
            <identifier scheme="http://www.sec.gov/CIK">0000096536</identifier>
            <segment>
                <xbrldi:explicitMember dimension="us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansByExercisePriceRangeAxis">fil:N9014700Member</xbrldi:explicitMember>
            </segment>
        </entity>
        <period>
            <startDate>2024-06-01</startDate>
            <endDate>2025-05-31</endDate>
        </period>
    </context>
    <unit id="USD">
        <measure>iso4217:USD</measure>
    </unit>
    <unit id="Shares">
        <measure>shares</measure>
    </unit>
    <unit id="UsdPerShare">
        <divide>
            <unitNumerator>
                <measure>iso4217:USD</measure>
            </unitNumerator>
            <unitDenominator>
                <measure>shares</measure>
            </unitDenominator>
        </divide>
    </unit>
    <unit id="Pure">
        <measure>pure</measure>
    </unit>
    <dei:EntityCentralIndexKey contextRef="D250601_260531" id="fact1">0000096536</dei:EntityCentralIndexKey>
    <dei:AmendmentFlag contextRef="D250601_260531" id="fact2">false</dei:AmendmentFlag>
    <dei:DocumentFiscalYearFocus contextRef="D250601_260531" id="fact3">2026</dei:DocumentFiscalYearFocus>
    <dei:DocumentFiscalPeriodFocus contextRef="D250601_260531" id="fact4">FY</dei:DocumentFiscalPeriodFocus>
    <dei:DocumentType contextRef="D250601_260531" id="ixv-7599">10-K</dei:DocumentType>
    <dei:DocumentAnnualReport contextRef="D250601_260531" id="ixv-7600">true</dei:DocumentAnnualReport>
    <dei:DocumentPeriodEndDate contextRef="D250601_260531" id="ixv-7601">2026-05-31</dei:DocumentPeriodEndDate>
    <dei:CurrentFiscalYearEndDate contextRef="D250601_260531" id="ixv-7602">--05-31</dei:CurrentFiscalYearEndDate>
    <dei:DocumentTransitionReport contextRef="D250601_260531" id="ixv-7603">false</dei:DocumentTransitionReport>
    <dei:EntityFileNumber contextRef="D250601_260531" id="ixv-7604">000-3498</dei:EntityFileNumber>
    <dei:EntityRegistrantName contextRef="D250601_260531" id="ixv-7605">TAYLOR DEVICES, INC.</dei:EntityRegistrantName>
    <dei:EntityIncorporationStateCountryCode contextRef="D250601_260531" id="ixv-7606">NY</dei:EntityIncorporationStateCountryCode>
    <dei:EntityTaxIdentificationNumber contextRef="D250601_260531" id="ixv-7607">16-0797789</dei:EntityTaxIdentificationNumber>
    <dei:EntityAddressAddressLine1 contextRef="D250601_260531" id="ixv-7608">90 Taylor Drive</dei:EntityAddressAddressLine1>
    <dei:EntityAddressCityOrTown contextRef="D250601_260531" id="ixv-7609">North Tonawanda</dei:EntityAddressCityOrTown>
    <dei:EntityAddressStateOrProvince contextRef="D250601_260531" id="ixv-7610">NY</dei:EntityAddressStateOrProvince>
    <dei:EntityAddressPostalZipCode contextRef="D250601_260531" id="ixv-7611">14120</dei:EntityAddressPostalZipCode>
    <dei:EntityAddressAddressDescription contextRef="D250601_260531" id="ixv-7612">Address of principal executive offices</dei:EntityAddressAddressDescription>
    <dei:PhoneFaxNumberDescription contextRef="D250601_260531" id="ixv-7613">Registrant's telephone number, including area code</dei:PhoneFaxNumberDescription>
    <dei:CityAreaCode contextRef="D250601_260531" id="ixv-7614">716</dei:CityAreaCode>
    <dei:LocalPhoneNumber contextRef="D250601_260531" id="ixv-7615">694-0800</dei:LocalPhoneNumber>
    <dei:Security12bTitle
      contextRef="D250601_260531_StClStock-CommonClassA"
      id="ixv-7616">Common Stock, $.025 par value per share</dei:Security12bTitle>
    <dei:Security12bTitle
      contextRef="D250601_260531_StClStock-SeriesAPrefStock"
      id="ixv-7617">Preferred Stock Purchase Rights</dei:Security12bTitle>
    <dei:TradingSymbol
      contextRef="D250601_260531_StClStock-CommonClassA"
      id="ixv-7618">TAYD</dei:TradingSymbol>
    <dei:SecurityExchangeName
      contextRef="D250601_260531_StClStock-CommonClassA"
      id="ixv-7619">NASDAQ</dei:SecurityExchangeName>
    <dei:EntityWellKnownSeasonedIssuer contextRef="D250601_260531" id="ixv-7620">No</dei:EntityWellKnownSeasonedIssuer>
    <dei:EntityVoluntaryFilers contextRef="D250601_260531" id="ixv-7621">No</dei:EntityVoluntaryFilers>
    <dei:EntityCurrentReportingStatus contextRef="D250601_260531" id="ixv-7622">Yes</dei:EntityCurrentReportingStatus>
    <dei:EntityInteractiveDataCurrent contextRef="D250601_260531" id="ixv-7623">Yes</dei:EntityInteractiveDataCurrent>
    <dei:EntityFilerCategory contextRef="D250601_260531" id="ixv-7624">Non-accelerated Filer</dei:EntityFilerCategory>
    <dei:EntitySmallBusiness contextRef="D250601_260531" id="ixv-7625">true</dei:EntitySmallBusiness>
    <dei:EntityEmergingGrowthCompany contextRef="D250601_260531" id="ixv-7626">false</dei:EntityEmergingGrowthCompany>
    <dei:IcfrAuditorAttestationFlag contextRef="D250601_260531" id="ixv-7627">false</dei:IcfrAuditorAttestationFlag>
    <dei:DocumentFinStmtErrorCorrectionFlag contextRef="D250601_260531" id="ixv-7628">false</dei:DocumentFinStmtErrorCorrectionFlag>
    <dei:EntityShellCompany contextRef="D250601_260531" id="ixv-7629">false</dei:EntityShellCompany>
    <dei:EntityPublicFloat
      contextRef="I251130"
      decimals="INF"
      id="ixv-7630"
      unitRef="USD">156684000</dei:EntityPublicFloat>
    <dei:EntityCommonStockSharesOutstanding
      contextRef="I260818"
      decimals="INF"
      id="ixv-7631"
      unitRef="Shares">3225015</dei:EntityCommonStockSharesOutstanding>
    <dei:AuditorName contextRef="D250601_260531" id="ixv-7632">Lumsden &amp;amp; McCormick, LLP</dei:AuditorName>
    <dei:AuditorFirmId contextRef="D250601_260531" id="ixv-7633">130</dei:AuditorFirmId>
    <dei:AuditorLocation contextRef="D250601_260531" id="ixv-7634">Buffalo, New York</dei:AuditorLocation>
    <dei:AuditorName contextRef="D250601_260531" id="ixv-7635">Lumsden &amp;amp; McCormick, LLP</dei:AuditorName>
    <dei:AuditorFirmId contextRef="D250601_260531" id="ixv-7636">130</dei:AuditorFirmId>
    <dei:AuditorLocation contextRef="D250601_260531" id="ixv-7637">Buffalo, New York</dei:AuditorLocation>
    <us-gaap:CashAndCashEquivalentsAtCarryingValue
      contextRef="I260531"
      decimals="INF"
      id="ixv-7638"
      unitRef="USD">904823</us-gaap:CashAndCashEquivalentsAtCarryingValue>
    <us-gaap:CashAndCashEquivalentsAtCarryingValue
      contextRef="I250531"
      decimals="INF"
      id="ixv-7639"
      unitRef="USD">1190656</us-gaap:CashAndCashEquivalentsAtCarryingValue>
    <us-gaap:ShortTermInvestments
      contextRef="I260531"
      decimals="INF"
      id="ixv-7640"
      unitRef="USD">40574152</us-gaap:ShortTermInvestments>
    <us-gaap:ShortTermInvestments
      contextRef="I250531"
      decimals="INF"
      id="ixv-7641"
      unitRef="USD">34799367</us-gaap:ShortTermInvestments>
    <us-gaap:AccountsAndOtherReceivablesNetCurrent
      contextRef="I260531"
      decimals="INF"
      id="fact5"
      unitRef="USD">3931831</us-gaap:AccountsAndOtherReceivablesNetCurrent>
    <us-gaap:AccountsAndOtherReceivablesNetCurrent
      contextRef="I250531"
      decimals="INF"
      id="fact6"
      unitRef="USD">5599785</us-gaap:AccountsAndOtherReceivablesNetCurrent>
    <us-gaap:InventoryPartsAndComponentsNetOfReserves
      contextRef="I260531"
      decimals="INF"
      id="fact7"
      unitRef="USD">7529043</us-gaap:InventoryPartsAndComponentsNetOfReserves>
    <us-gaap:InventoryPartsAndComponentsNetOfReserves
      contextRef="I250531"
      decimals="INF"
      id="fact8"
      unitRef="USD">8113321</us-gaap:InventoryPartsAndComponentsNetOfReserves>
    <us-gaap:PrepaidExpenseCurrent
      contextRef="I260531"
      decimals="INF"
      id="ixv-7648"
      unitRef="USD">1450157</us-gaap:PrepaidExpenseCurrent>
    <us-gaap:PrepaidExpenseCurrent
      contextRef="I250531"
      decimals="INF"
      id="ixv-7649"
      unitRef="USD">1124878</us-gaap:PrepaidExpenseCurrent>
    <us-gaap:OtherAssetsCurrent
      contextRef="I260531"
      decimals="128"
      id="ixv-7650"
      unitRef="USD">0</us-gaap:OtherAssetsCurrent>
    <us-gaap:OtherAssetsCurrent
      contextRef="I250531"
      decimals="INF"
      id="ixv-7651"
      unitRef="USD">94333</us-gaap:OtherAssetsCurrent>
    <us-gaap:CostsInExcessOfBillingsOnUncompletedContractsOrPrograms
      contextRef="I260531"
      decimals="INF"
      id="fact9"
      unitRef="USD">8032246</us-gaap:CostsInExcessOfBillingsOnUncompletedContractsOrPrograms>
    <us-gaap:CostsInExcessOfBillingsOnUncompletedContractsOrPrograms
      contextRef="I250531"
      decimals="INF"
      id="fact10"
      unitRef="USD">5360499</us-gaap:CostsInExcessOfBillingsOnUncompletedContractsOrPrograms>
    <us-gaap:AssetsCurrent
      contextRef="I260531"
      decimals="INF"
      id="ixv-7655"
      unitRef="USD">62422252</us-gaap:AssetsCurrent>
    <us-gaap:AssetsCurrent
      contextRef="I250531"
      decimals="INF"
      id="ixv-7656"
      unitRef="USD">56282839</us-gaap:AssetsCurrent>
    <us-gaap:OtherInventoryNoncurrent
      contextRef="I260531"
      decimals="INF"
      id="fact11"
      unitRef="USD">1205996</us-gaap:OtherInventoryNoncurrent>
    <us-gaap:OtherInventoryNoncurrent
      contextRef="I250531"
      decimals="INF"
      id="fact12"
      unitRef="USD">1107875</us-gaap:OtherInventoryNoncurrent>
    <us-gaap:PropertyPlantAndEquipmentNet
      contextRef="I260531"
      decimals="INF"
      id="fact13"
      unitRef="USD">12306100</us-gaap:PropertyPlantAndEquipmentNet>
    <us-gaap:PropertyPlantAndEquipmentNet
      contextRef="I250531"
      decimals="INF"
      id="fact14"
      unitRef="USD">12074172</us-gaap:PropertyPlantAndEquipmentNet>
    <us-gaap:IntangibleAssetsNetExcludingGoodwill
      contextRef="I260531"
      decimals="INF"
      id="ixv-7663"
      unitRef="USD">248148</us-gaap:IntangibleAssetsNetExcludingGoodwill>
    <us-gaap:IntangibleAssetsNetExcludingGoodwill
      contextRef="I250531"
      decimals="INF"
      id="ixv-7664"
      unitRef="USD">270370</us-gaap:IntangibleAssetsNetExcludingGoodwill>
    <us-gaap:OtherAssetsMiscellaneousNoncurrent
      contextRef="I260531"
      decimals="INF"
      id="ixv-7665"
      unitRef="USD">223968</us-gaap:OtherAssetsMiscellaneousNoncurrent>
    <us-gaap:OtherAssetsMiscellaneousNoncurrent
      contextRef="I250531"
      decimals="INF"
      id="ixv-7666"
      unitRef="USD">219444</us-gaap:OtherAssetsMiscellaneousNoncurrent>
    <us-gaap:OtherAssetsNoncurrent
      contextRef="I260531"
      decimals="INF"
      id="ixv-7667"
      unitRef="USD">65420</us-gaap:OtherAssetsNoncurrent>
    <us-gaap:OtherAssetsNoncurrent
      contextRef="I250531"
      decimals="INF"
      id="ixv-7668"
      unitRef="USD">65420</us-gaap:OtherAssetsNoncurrent>
    <us-gaap:DeferredIncomeTaxAssetsNet
      contextRef="I260531"
      decimals="INF"
      id="fact15"
      unitRef="USD">1273000</us-gaap:DeferredIncomeTaxAssetsNet>
    <us-gaap:DeferredIncomeTaxAssetsNet
      contextRef="I250531"
      decimals="INF"
      id="fact16"
      unitRef="USD">1598000</us-gaap:DeferredIncomeTaxAssetsNet>
    <us-gaap:Assets
      contextRef="I260531"
      decimals="INF"
      id="ixv-7672"
      unitRef="USD">77744884</us-gaap:Assets>
    <us-gaap:Assets
      contextRef="I250531"
      decimals="INF"
      id="ixv-7673"
      unitRef="USD">71618120</us-gaap:Assets>
    <us-gaap:AccountsPayableCurrent
      contextRef="I260531"
      decimals="INF"
      id="ixv-7674"
      unitRef="USD">574264</us-gaap:AccountsPayableCurrent>
    <us-gaap:AccountsPayableCurrent
      contextRef="I250531"
      decimals="INF"
      id="ixv-7675"
      unitRef="USD">1119240</us-gaap:AccountsPayableCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="I260531"
      decimals="INF"
      id="fact17"
      unitRef="USD">2946494</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="I250531"
      decimals="INF"
      id="fact18"
      unitRef="USD">4072436</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:BillingsInExcessOfCostCurrent
      contextRef="I260531"
      decimals="INF"
      id="fact19"
      unitRef="USD">1367083</us-gaap:BillingsInExcessOfCostCurrent>
    <us-gaap:BillingsInExcessOfCostCurrent
      contextRef="I250531"
      decimals="INF"
      id="fact20"
      unitRef="USD">4382067</us-gaap:BillingsInExcessOfCostCurrent>
    <us-gaap:AccruedIncomeTaxes
      contextRef="I260531"
      decimals="INF"
      id="ixv-7682"
      unitRef="USD">4892</us-gaap:AccruedIncomeTaxes>
    <us-gaap:AccruedIncomeTaxes
      contextRef="I250531"
      decimals="128"
      id="ixv-7683"
      unitRef="USD">0</us-gaap:AccruedIncomeTaxes>
    <us-gaap:LiabilitiesCurrent
      contextRef="I260531"
      decimals="INF"
      id="ixv-7684"
      unitRef="USD">4892733</us-gaap:LiabilitiesCurrent>
    <us-gaap:LiabilitiesCurrent
      contextRef="I250531"
      decimals="INF"
      id="ixv-7685"
      unitRef="USD">9573743</us-gaap:LiabilitiesCurrent>
    <us-gaap:CommonStockParOrStatedValuePerShare
      contextRef="I260531"
      decimals="INF"
      id="ixv-7686"
      unitRef="UsdPerShare">0.025</us-gaap:CommonStockParOrStatedValuePerShare>
    <us-gaap:CommonStockParOrStatedValuePerShare
      contextRef="I250531"
      decimals="INF"
      id="ixv-7687"
      unitRef="UsdPerShare">0.025</us-gaap:CommonStockParOrStatedValuePerShare>
    <us-gaap:CommonStockSharesAuthorized
      contextRef="I260531"
      decimals="INF"
      id="ixv-7688"
      unitRef="Shares">8000000</us-gaap:CommonStockSharesAuthorized>
    <us-gaap:CommonStockSharesAuthorized
      contextRef="I250531"
      decimals="INF"
      id="ixv-7689"
      unitRef="Shares">8000000</us-gaap:CommonStockSharesAuthorized>
    <us-gaap:CommonStockSharesIssued
      contextRef="I260531"
      decimals="INF"
      id="ixv-7690"
      unitRef="Shares">4295765</us-gaap:CommonStockSharesIssued>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="I260531"
      decimals="INF"
      id="ixv-7691"
      unitRef="Shares">4295765</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:CommonStockSharesIssued
      contextRef="I250531"
      decimals="INF"
      id="ixv-7692"
      unitRef="Shares">4196470</us-gaap:CommonStockSharesIssued>
    <us-gaap:CommonStockSharesOutstanding
      contextRef="I250531"
      decimals="INF"
      id="ixv-7693"
      unitRef="Shares">4196470</us-gaap:CommonStockSharesOutstanding>
    <us-gaap:CommonStockValue
      contextRef="I260531"
      decimals="INF"
      id="ixv-7694"
      unitRef="USD">107316</us-gaap:CommonStockValue>
    <us-gaap:CommonStockValue
      contextRef="I250531"
      decimals="INF"
      id="ixv-7695"
      unitRef="USD">104835</us-gaap:CommonStockValue>
    <us-gaap:AdditionalPaidInCapital
      contextRef="I260531"
      decimals="INF"
      id="ixv-7696"
      unitRef="USD">18104171</us-gaap:AdditionalPaidInCapital>
    <us-gaap:AdditionalPaidInCapital
      contextRef="I250531"
      decimals="INF"
      id="ixv-7697"
      unitRef="USD">14544580</us-gaap:AdditionalPaidInCapital>
    <us-gaap:RetainedEarningsAccumulatedDeficit
      contextRef="I260531"
      decimals="INF"
      id="ixv-7698"
      unitRef="USD">69103828</us-gaap:RetainedEarningsAccumulatedDeficit>
    <us-gaap:RetainedEarningsAccumulatedDeficit
      contextRef="I250531"
      decimals="INF"
      id="ixv-7699"
      unitRef="USD">60540154</us-gaap:RetainedEarningsAccumulatedDeficit>
    <us-gaap:TreasuryStockCommonShares
      contextRef="I260531"
      decimals="INF"
      id="ixv-7700"
      unitRef="Shares">1070762</us-gaap:TreasuryStockCommonShares>
    <us-gaap:TreasuryStockCommonShares
      contextRef="I250531"
      decimals="INF"
      id="ixv-7701"
      unitRef="Shares">1051688</us-gaap:TreasuryStockCommonShares>
    <us-gaap:TreasuryStockValue
      contextRef="I260531"
      decimals="INF"
      id="ixv-7702"
      unitRef="USD">14463164</us-gaap:TreasuryStockValue>
    <us-gaap:TreasuryStockValue
      contextRef="I250531"
      decimals="INF"
      id="ixv-7703"
      unitRef="USD">13145192</us-gaap:TreasuryStockValue>
    <us-gaap:StockholdersEquity
      contextRef="I260531"
      decimals="INF"
      id="ixv-7704"
      unitRef="USD">72852151</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I250531"
      decimals="INF"
      id="ixv-7705"
      unitRef="USD">62044377</us-gaap:StockholdersEquity>
    <us-gaap:LiabilitiesAndStockholdersEquity
      contextRef="I260531"
      decimals="INF"
      id="ixv-7706"
      unitRef="USD">77744884</us-gaap:LiabilitiesAndStockholdersEquity>
    <us-gaap:LiabilitiesAndStockholdersEquity
      contextRef="I250531"
      decimals="INF"
      id="ixv-7707"
      unitRef="USD">71618120</us-gaap:LiabilitiesAndStockholdersEquity>
    <us-gaap:Revenues
      contextRef="D250601_260531"
      decimals="INF"
      id="fact21"
      unitRef="USD">41649673</us-gaap:Revenues>
    <us-gaap:Revenues
      contextRef="D240601_250531"
      decimals="INF"
      id="fact22"
      unitRef="USD">46292725</us-gaap:Revenues>
    <us-gaap:CostOfGoodsAndServicesSold
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7711"
      unitRef="USD">23302557</us-gaap:CostOfGoodsAndServicesSold>
    <us-gaap:CostOfGoodsAndServicesSold
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7712"
      unitRef="USD">24814581</us-gaap:CostOfGoodsAndServicesSold>
    <us-gaap:GrossProfit
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7713"
      unitRef="USD">18347116</us-gaap:GrossProfit>
    <us-gaap:GrossProfit
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7714"
      unitRef="USD">21478144</us-gaap:GrossProfit>
    <us-gaap:ResearchAndDevelopmentExpense
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7715"
      unitRef="USD">775995</us-gaap:ResearchAndDevelopmentExpense>
    <us-gaap:ResearchAndDevelopmentExpense
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7716"
      unitRef="USD">444000</us-gaap:ResearchAndDevelopmentExpense>
    <us-gaap:SellingGeneralAndAdministrativeExpense
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7717"
      unitRef="USD">10228165</us-gaap:SellingGeneralAndAdministrativeExpense>
    <us-gaap:SellingGeneralAndAdministrativeExpense
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7718"
      unitRef="USD">11406817</us-gaap:SellingGeneralAndAdministrativeExpense>
    <us-gaap:OperatingIncomeLoss
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7719"
      unitRef="USD">7342956</us-gaap:OperatingIncomeLoss>
    <us-gaap:OperatingIncomeLoss
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7720"
      unitRef="USD">9627327</us-gaap:OperatingIncomeLoss>
    <us-gaap:InvestmentIncomeInterest
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7721"
      unitRef="USD">1641907</us-gaap:InvestmentIncomeInterest>
    <us-gaap:InvestmentIncomeInterest
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7722"
      unitRef="USD">1402440</us-gaap:InvestmentIncomeInterest>
    <us-gaap:OtherNonoperatingIncomeExpense
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7723"
      unitRef="USD">3811</us-gaap:OtherNonoperatingIncomeExpense>
    <us-gaap:OtherNonoperatingIncomeExpense
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7724"
      unitRef="USD">3369</us-gaap:OtherNonoperatingIncomeExpense>
    <us-gaap:NonoperatingIncomeExpense
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7725"
      unitRef="USD">1645718</us-gaap:NonoperatingIncomeExpense>
    <us-gaap:NonoperatingIncomeExpense
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7726"
      unitRef="USD">1405809</us-gaap:NonoperatingIncomeExpense>
    <us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7727"
      unitRef="USD">8988674</us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest>
    <us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7728"
      unitRef="USD">11033136</us-gaap:IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="D250601_260531"
      decimals="INF"
      id="fact23"
      unitRef="USD">425000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="D240601_250531"
      decimals="INF"
      id="fact24"
      unitRef="USD">1620000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:NetIncomeLoss
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7732"
      unitRef="USD">8563674</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7733"
      unitRef="USD">9413136</us-gaap:NetIncomeLoss>
    <us-gaap:EarningsPerShareBasic
      contextRef="D250601_260531"
      decimals="INF"
      id="fact25"
      unitRef="UsdPerShare">2.7</us-gaap:EarningsPerShareBasic>
    <us-gaap:EarningsPerShareBasic
      contextRef="D240601_250531"
      decimals="INF"
      id="fact26"
      unitRef="UsdPerShare">3.01</us-gaap:EarningsPerShareBasic>
    <us-gaap:EarningsPerShareDiluted
      contextRef="D250601_260531"
      decimals="INF"
      id="fact27"
      unitRef="UsdPerShare">2.62</us-gaap:EarningsPerShareDiluted>
    <us-gaap:EarningsPerShareDiluted
      contextRef="D240601_250531"
      decimals="INF"
      id="fact28"
      unitRef="UsdPerShare">2.87</us-gaap:EarningsPerShareDiluted>
    <us-gaap:StockholdersEquity
      contextRef="I250531_StEqComps-CommonStock"
      decimals="INF"
      id="ixv-7740"
      unitRef="USD">104835</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I240531_StEqComps-CommonStock"
      decimals="INF"
      id="ixv-7741"
      unitRef="USD">104056</us-gaap:StockholdersEquity>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="D250601_260531_StEqComps-CommonStock"
      decimals="INF"
      id="ixv-7742"
      unitRef="USD">3</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="D240601_250531_StEqComps-CommonStock"
      decimals="INF"
      id="ixv-7743"
      unitRef="USD">4</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeBenefitPlan
      contextRef="D250601_260531_StEqComps-CommonStock"
      decimals="INF"
      id="ixv-7744"
      unitRef="USD">2478</us-gaap:StockIssuedDuringPeriodValueEmployeeBenefitPlan>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeBenefitPlan
      contextRef="D240601_250531_StEqComps-CommonStock"
      decimals="INF"
      id="ixv-7745"
      unitRef="USD">775</us-gaap:StockIssuedDuringPeriodValueEmployeeBenefitPlan>
    <us-gaap:StockholdersEquity
      contextRef="I260531_StEqComps-CommonStock"
      decimals="INF"
      id="ixv-7746"
      unitRef="USD">107316</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I250531_StEqComps-CommonStock"
      decimals="INF"
      id="ixv-7747"
      unitRef="USD">104835</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I250531_StEqComps-AddPaidInCap"
      decimals="INF"
      id="ixv-7748"
      unitRef="USD">14544580</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I240531_StEqComps-AddPaidInCap"
      decimals="INF"
      id="ixv-7749"
      unitRef="USD">12959531</us-gaap:StockholdersEquity>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="D250601_260531_StEqComps-AddPaidInCap"
      decimals="INF"
      id="ixv-7750"
      unitRef="USD">4580</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan
      contextRef="D240601_250531_StEqComps-AddPaidInCap"
      decimals="INF"
      id="ixv-7751"
      unitRef="USD">6432</us-gaap:StockIssuedDuringPeriodValueEmployeeStockPurchasePlan>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeBenefitPlan
      contextRef="D250601_260531_StEqComps-AddPaidInCap"
      decimals="INF"
      id="ixv-7752"
      unitRef="USD">1917619</us-gaap:StockIssuedDuringPeriodValueEmployeeBenefitPlan>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeBenefitPlan
      contextRef="D240601_250531_StEqComps-AddPaidInCap"
      decimals="INF"
      id="ixv-7753"
      unitRef="USD">356108</us-gaap:StockIssuedDuringPeriodValueEmployeeBenefitPlan>
    <us-gaap:AdjustmentsToAdditionalPaidInCapitalShareBasedCompensationStockOptionsRequisiteServicePeriodRecognition
      contextRef="D250601_260531_StEqComps-AddPaidInCap"
      decimals="INF"
      id="ixv-7754"
      unitRef="USD">1637392</us-gaap:AdjustmentsToAdditionalPaidInCapitalShareBasedCompensationStockOptionsRequisiteServicePeriodRecognition>
    <us-gaap:AdjustmentsToAdditionalPaidInCapitalShareBasedCompensationStockOptionsRequisiteServicePeriodRecognition
      contextRef="D240601_250531_StEqComps-AddPaidInCap"
      decimals="INF"
      id="ixv-7755"
      unitRef="USD">1222509</us-gaap:AdjustmentsToAdditionalPaidInCapitalShareBasedCompensationStockOptionsRequisiteServicePeriodRecognition>
    <us-gaap:StockholdersEquity
      contextRef="I260531_StEqComps-AddPaidInCap"
      decimals="INF"
      id="ixv-7756"
      unitRef="USD">18104171</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I250531_StEqComps-AddPaidInCap"
      decimals="INF"
      id="ixv-7757"
      unitRef="USD">14544580</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I250531_StEqComps-RetainedEarnings"
      decimals="INF"
      id="ixv-7758"
      unitRef="USD">60540154</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I240531_StEqComps-RetainedEarnings"
      decimals="INF"
      id="ixv-7759"
      unitRef="USD">51127018</us-gaap:StockholdersEquity>
    <us-gaap:NetIncomeLoss
      contextRef="D250601_260531_StEqComps-RetainedEarnings"
      decimals="INF"
      id="ixv-7760"
      unitRef="USD">8563674</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="D240601_250531_StEqComps-RetainedEarnings"
      decimals="INF"
      id="ixv-7761"
      unitRef="USD">9413136</us-gaap:NetIncomeLoss>
    <us-gaap:StockholdersEquity
      contextRef="I260531_StEqComps-RetainedEarnings"
      decimals="INF"
      id="ixv-7762"
      unitRef="USD">69103828</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I250531_StEqComps-RetainedEarnings"
      decimals="INF"
      id="ixv-7763"
      unitRef="USD">60540154</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I250531_StEqComps-TreasuryStockCommon"
      decimals="INF"
      id="ixv-7764"
      unitRef="USD">-13145192</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I240531_StEqComps-TreasuryStockCommon"
      decimals="INF"
      id="ixv-7765"
      unitRef="USD">-12943919</us-gaap:StockholdersEquity>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeBenefitPlan
      contextRef="D250601_260531_StEqComps-TreasuryStockCommon"
      decimals="INF"
      id="ixv-7766"
      unitRef="USD">-1317972</us-gaap:StockIssuedDuringPeriodValueEmployeeBenefitPlan>
    <us-gaap:StockIssuedDuringPeriodValueEmployeeBenefitPlan
      contextRef="D240601_250531_StEqComps-TreasuryStockCommon"
      decimals="INF"
      id="ixv-7767"
      unitRef="USD">-201273</us-gaap:StockIssuedDuringPeriodValueEmployeeBenefitPlan>
    <us-gaap:StockholdersEquity
      contextRef="I260531_StEqComps-TreasuryStockCommon"
      decimals="INF"
      id="ixv-7768"
      unitRef="USD">-14463164</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I250531_StEqComps-TreasuryStockCommon"
      decimals="INF"
      id="ixv-7769"
      unitRef="USD">-13145192</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I260531"
      decimals="INF"
      id="ixv-7770"
      unitRef="USD">72852151</us-gaap:StockholdersEquity>
    <us-gaap:StockholdersEquity
      contextRef="I250531"
      decimals="INF"
      id="ixv-7771"
      unitRef="USD">62044377</us-gaap:StockholdersEquity>
    <us-gaap:NetIncomeLoss
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7772"
      unitRef="USD">8563674</us-gaap:NetIncomeLoss>
    <us-gaap:NetIncomeLoss
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7773"
      unitRef="USD">9413136</us-gaap:NetIncomeLoss>
    <us-gaap:Depreciation
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7774"
      unitRef="USD">1904373</us-gaap:Depreciation>
    <us-gaap:Depreciation
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7775"
      unitRef="USD">1708849</us-gaap:Depreciation>
    <us-gaap:AcquisitionCosts
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7776"
      unitRef="USD">22222</us-gaap:AcquisitionCosts>
    <us-gaap:AcquisitionCosts
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7777"
      unitRef="USD">22223</us-gaap:AcquisitionCosts>
    <us-gaap:StockOptionPlanExpense
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7778"
      unitRef="USD">1637392</us-gaap:StockOptionPlanExpense>
    <us-gaap:StockOptionPlanExpense
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7779"
      unitRef="USD">1222509</us-gaap:StockOptionPlanExpense>
    <us-gaap:GainsLossesOnExtinguishmentOfDebt
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7780"
      unitRef="USD">365000</us-gaap:GainsLossesOnExtinguishmentOfDebt>
    <us-gaap:GainsLossesOnExtinguishmentOfDebt
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7781"
      unitRef="USD">-535000</us-gaap:GainsLossesOnExtinguishmentOfDebt>
    <us-gaap:GainLossOnCondemnation
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7782"
      unitRef="USD">-225000</us-gaap:GainLossOnCondemnation>
    <us-gaap:GainLossOnCondemnation
      contextRef="D240601_250531"
      decimals="128"
      id="ixv-7783"
      unitRef="USD">0</us-gaap:GainLossOnCondemnation>
    <us-gaap:DeferredIncomeTaxesAndTaxCredits
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7784"
      unitRef="USD">325000</us-gaap:DeferredIncomeTaxesAndTaxCredits>
    <us-gaap:DeferredIncomeTaxesAndTaxCredits
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7785"
      unitRef="USD">-585385</us-gaap:DeferredIncomeTaxesAndTaxCredits>
    <us-gaap:IncreaseDecreaseInAccountsReceivable
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7786"
      unitRef="USD">-2032954</us-gaap:IncreaseDecreaseInAccountsReceivable>
    <us-gaap:IncreaseDecreaseInAccountsReceivable
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7787"
      unitRef="USD">922377</us-gaap:IncreaseDecreaseInAccountsReceivable>
    <us-gaap:IncreaseDecreaseInInventories
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7788"
      unitRef="USD">-261157</us-gaap:IncreaseDecreaseInInventories>
    <us-gaap:IncreaseDecreaseInInventories
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7789"
      unitRef="USD">129315</us-gaap:IncreaseDecreaseInInventories>
    <us-gaap:IncreaseDecreaseInPrepaidExpense
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7790"
      unitRef="USD">325279</us-gaap:IncreaseDecreaseInPrepaidExpense>
    <us-gaap:IncreaseDecreaseInPrepaidExpense
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7791"
      unitRef="USD">399372</us-gaap:IncreaseDecreaseInPrepaidExpense>
    <us-gaap:IncreaseDecreaseInOtherCurrentAssets
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7792"
      unitRef="USD">-94333</us-gaap:IncreaseDecreaseInOtherCurrentAssets>
    <us-gaap:IncreaseDecreaseInOtherCurrentAssets
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7793"
      unitRef="USD">94333</us-gaap:IncreaseDecreaseInOtherCurrentAssets>
    <us-gaap:IncreaseDecreaseInOtherOperatingLiabilities
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7794"
      unitRef="USD">-2671747</us-gaap:IncreaseDecreaseInOtherOperatingLiabilities>
    <us-gaap:IncreaseDecreaseInOtherOperatingLiabilities
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7795"
      unitRef="USD">-1003934</us-gaap:IncreaseDecreaseInOtherOperatingLiabilities>
    <us-gaap:IncreaseDecreaseInAccountsPayableTrade
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7796"
      unitRef="USD">-544976</us-gaap:IncreaseDecreaseInAccountsPayableTrade>
    <us-gaap:IncreaseDecreaseInAccountsPayableTrade
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7797"
      unitRef="USD">-319607</us-gaap:IncreaseDecreaseInAccountsPayableTrade>
    <us-gaap:IncreaseDecreaseInAccruedLiabilities
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7798"
      unitRef="USD">-1125942</us-gaap:IncreaseDecreaseInAccruedLiabilities>
    <us-gaap:IncreaseDecreaseInAccruedLiabilities
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7799"
      unitRef="USD">-592027</us-gaap:IncreaseDecreaseInAccruedLiabilities>
    <us-gaap:IncreaseDecreaseInBillingInExcessOfCostOfEarnings
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7800"
      unitRef="USD">-3014984</us-gaap:IncreaseDecreaseInBillingInExcessOfCostOfEarnings>
    <us-gaap:IncreaseDecreaseInBillingInExcessOfCostOfEarnings
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7801"
      unitRef="USD">-1219207</us-gaap:IncreaseDecreaseInBillingInExcessOfCostOfEarnings>
    <us-gaap:IncreaseDecreaseInAccruedIncomeTaxesPayable
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7802"
      unitRef="USD">4892</us-gaap:IncreaseDecreaseInAccruedIncomeTaxesPayable>
    <us-gaap:IncreaseDecreaseInAccruedIncomeTaxesPayable
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7803"
      unitRef="USD">-126148</us-gaap:IncreaseDecreaseInAccruedIncomeTaxesPayable>
    <us-gaap:IncreaseDecreaseInOtherOperatingAssets
      contextRef="D250601_260531"
      decimals="128"
      id="ixv-7804"
      unitRef="USD">0</us-gaap:IncreaseDecreaseInOtherOperatingAssets>
    <us-gaap:IncreaseDecreaseInOtherOperatingAssets
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7805"
      unitRef="USD">38077</us-gaap:IncreaseDecreaseInOtherOperatingAssets>
    <us-gaap:NetCashProvidedByUsedInOperatingActivities
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7806"
      unitRef="USD">7023069</us-gaap:NetCashProvidedByUsedInOperatingActivities>
    <us-gaap:NetCashProvidedByUsedInOperatingActivities
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7807"
      unitRef="USD">7471935</us-gaap:NetCashProvidedByUsedInOperatingActivities>
    <us-gaap:PaymentsToAcquirePropertyPlantAndEquipment
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7808"
      unitRef="USD">2136301</us-gaap:PaymentsToAcquirePropertyPlantAndEquipment>
    <us-gaap:PaymentsToAcquirePropertyPlantAndEquipment
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7809"
      unitRef="USD">2602088</us-gaap:PaymentsToAcquirePropertyPlantAndEquipment>
    <us-gaap:PaymentsToAcquireOtherInvestments
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7810"
      unitRef="USD">5774785</us-gaap:PaymentsToAcquireOtherInvestments>
    <us-gaap:PaymentsToAcquireOtherInvestments
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7811"
      unitRef="USD">6668088</us-gaap:PaymentsToAcquireOtherInvestments>
    <us-gaap:PaymentsForProceedsFromOtherInvestingActivities
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7812"
      unitRef="USD">4524</us-gaap:PaymentsForProceedsFromOtherInvestingActivities>
    <us-gaap:PaymentsForProceedsFromOtherInvestingActivities
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7813"
      unitRef="USD">4620</us-gaap:PaymentsForProceedsFromOtherInvestingActivities>
    <us-gaap:NetCashProvidedByUsedInInvestingActivities
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7814"
      unitRef="USD">-7915610</us-gaap:NetCashProvidedByUsedInInvestingActivities>
    <us-gaap:NetCashProvidedByUsedInInvestingActivities
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7815"
      unitRef="USD">-9274796</us-gaap:NetCashProvidedByUsedInInvestingActivities>
    <us-gaap:ProceedsFromIssuanceOfCommonStock
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7816"
      unitRef="USD">1924680</us-gaap:ProceedsFromIssuanceOfCommonStock>
    <us-gaap:ProceedsFromIssuanceOfCommonStock
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7817"
      unitRef="USD">363319</us-gaap:ProceedsFromIssuanceOfCommonStock>
    <us-gaap:PaymentsForRepurchaseOfCommonStock
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7818"
      unitRef="USD">1317972</us-gaap:PaymentsForRepurchaseOfCommonStock>
    <us-gaap:PaymentsForRepurchaseOfCommonStock
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7819"
      unitRef="USD">201273</us-gaap:PaymentsForRepurchaseOfCommonStock>
    <us-gaap:NetCashProvidedByUsedInFinancingActivities
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7820"
      unitRef="USD">606708</us-gaap:NetCashProvidedByUsedInFinancingActivities>
    <us-gaap:NetCashProvidedByUsedInFinancingActivities
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7821"
      unitRef="USD">162046</us-gaap:NetCashProvidedByUsedInFinancingActivities>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseExcludingExchangeRateEffect
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7822"
      unitRef="USD">-285833</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseExcludingExchangeRateEffect>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseExcludingExchangeRateEffect
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7823"
      unitRef="USD">-1640815</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseExcludingExchangeRateEffect>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents
      contextRef="I250531"
      decimals="INF"
      id="ixv-7824"
      unitRef="USD">1190656</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents
      contextRef="I240531"
      decimals="INF"
      id="ixv-7825"
      unitRef="USD">2831471</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents
      contextRef="I260531"
      decimals="INF"
      id="ixv-7826"
      unitRef="USD">904823</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents>
    <us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents
      contextRef="I250531"
      decimals="INF"
      id="ixv-7827"
      unitRef="USD">1190656</us-gaap:CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents>
    <us-gaap:SignificantAccountingPoliciesTextBlock contextRef="D250601_260531" id="ixv-4559">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;1. &#160;Summary of Significant Accounting Policies:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Nature of Operations:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Taylor Devices, Inc. (the Company) manufactures and sells a single group of very similar products that have many different applications for customers. &#160;These similar products are included in one of nine categories; namely, Seismic Dampers, Fluidicshoks&#xae;, Crane and Industrial Buffers, Self-Adjusting Shock Absorbers, Liquid Die Springs, Vibration Dampers, Machined Springs, Custom Shock and Vibration Isolators, and Custom Actuators for use in various types of machinery, equipment and structures, primarily to customers which are located throughout the United States and several foreign countries. &#160;The products are manufactured at the Company's sole operating facility in the United States where all of the Company's long-lived assets reside. Management does not track or otherwise account for sales broken down by these categories.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The chief operating decision maker is the Chief Executive Officer who assesses performance for the business (and lone segment) and decides how to allocate resources based on net income as reported in a format consistent with the consolidated statements of income included in these consolidated financial statements. The measure of segment assets is as reported on the consolidated balance sheets in these consolidated financial statements.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;87% of the Company's 2026 revenue was generated from sales to customers in the United States and 8% was from sales to customers in Asia. &#160;Remaining sales were to customers in other countries in North America, Europe, Australia, and South America.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;79% of the Company's 2025 revenue was generated from sales to customers in the United States and 15% was from sales to customers in Asia. &#160;Remaining sales were to customers in other countries in North America, Europe, Australia, and South America.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Principles of Consolidation:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The accompanying consolidated financial statements include the accounts of the Company and its wholly owned subsidiary, Tayco Realty Corporation (Realty). &#160;All inter-company transactions and balances have been eliminated in consolidation.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Subsequent Events:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;span style="color:#000000"&gt;The Company has evaluated events and transactions for potential recognition or disclosure in the financial statements through the date the financial statements were issued.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Use of Estimates:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The preparation of financial statements in conformity with accounting principles generally accepted in the United States of America requires management to make estimates and assumptions that affect the amounts reported in the financial statements and accompanying notes. &#160;Actual results could differ from those estimates.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Cash and Cash Equivalents:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company includes all highly liquid investments in money market funds in cash and cash equivalents on the accompanying balance sheets. &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Cash and cash equivalents in financial institutions may exceed insured limits at various times during the year and subject the Company to concentrations of credit risk.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;b&gt;Short-Term Investments:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;At times, the Company invests excess funds in liquid interest earning instruments. Short-term investments at May 31, 2026 and May 31, 2025 include money market funds, U.S. treasury securities and corporate bonds stated at fair value, which approximates cost. &#160;Unrealized holding gains and losses would be presented as a separate component of accumulated other comprehensive income, net of deferred income taxes.&#160;Realized gains and losses on the sale of investments are determined using the specific identification method.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The short-term investments are valued using pricing models maximizing the use of observable inputs for similar securities. This includes basing value on yields currently available on comparable securities of issuers with similar credit ratings.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;b&gt;Accounts Receivable:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Accounts receivable are stated at an amount management expects to collect from outstanding balances. &#160;Management provides for estimated credit losses through a charge to expense and a credit to a valuation allowance based on its assessment of the current status of individual accounts, historical trends, and forecasted economic conditions. &#160;Balances that are still outstanding after management has used reasonable collection efforts are written off through a charge to the valuation allowance and a credit to the receivable.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Inventory:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Inventory is stated at the lower of average cost or net realizable value. Average cost approximates first-in, first-out cost.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Property and Equipment:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;span style="color:#000000"&gt;Property and equipment is stated at cost net of accumulated depreciation. &#160;Depreciation is provided primarily using the straight-line method for financial reporting purposes and accelerated methods for income tax reporting purposes. &#160;Maintenance and repairs are charged to operations as incurred; significant improvements are capitalized.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Cash Value of Life Insurance:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Cash value of life insurance is stated at the surrender value of the contracts.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Revenue Recognition:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin-top:0pt;margin-bottom:12pt;color:#000000;text-align:justify"&gt;Revenue is recognized (generally at fixed prices) when, or as, the Company transfers control of promised products or services to a customer in an amount that reflects the consideration to which the Company expects to be entitled in exchange for transferring those products or services.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin-top:0pt;margin-bottom:12pt;color:#000000;text-align:justify"&gt;A performance obligation is a promise in a contract to transfer a distinct good or service to the customer, and is the unit of account. A contract&#x2019;s transaction price is allocated to each distinct performance obligation and recognized as revenue when, or as, the performance obligation is satisfied. The majority of the Company&#x2019;s contracts have a single performance obligation as the promise to transfer the individual goods or services is not separately identifiable from other promises in the contracts which are, therefore, not distinct. Promised goods or services that are immaterial in the context of the contract are not separately assessed as performance obligations. &#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin-top:0pt;margin-bottom:12pt;color:#000000;text-align:justify"&gt;For contracts with customers in which the Company satisfies a promise to the customer to provide a product that has no alternative use to the Company and the Company has enforceable rights to payment for progress completed to date inclusive of profit, the Company satisfies the performance obligation and recognizes revenue over time (generally less than one year), using costs incurred to date relative to total estimated costs at completion to measure progress toward satisfying the Company&#x2019;s performance obligations. &#160;Incurred costs represents work performed, which corresponds with, and thereby best depicts, the transfer of control to the customer. &#160;Contract costs include labor, material and overhead. &#160;Adjustments to cost estimates are made periodically, and losses expected to be incurred on contracts in progress are charged to operations in the period such losses are determined. &#160;Other sales to customers are recognized upon shipment to the customer based on contract prices and terms. &#160;In the year ended May 31, 2026, 56% of revenue was recorded for contracts in which revenue was recognized over time while 44% was recognized at a point in time. &#160;In the year ended May 31, 2025, 68% of revenue was recorded for contracts in which revenue was recognized over time while 32% was recognized at a point in time. &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin-top:0pt;margin-bottom:12pt;color:#000000;text-align:justify"&gt;Progress payments are typically negotiated for long term projects. &#160;Payments are otherwise due once performance obligations are complete (generally at shipment and transfer of title). &#160;For financial statement presentation purposes, the Company nets progress billings against the total costs incurred on uncompleted contracts. &#160;The asset, &#x201c;costs and estimated earnings in excess of billings,&#x201d; represents revenue recognized in excess of amounts billed. &#160;The liability, &#x201c;billings in excess of costs and estimated earnings,&#x201d; represents billings in excess of revenue recognized.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;If applicable, the Company recognizes an asset for the incremental material costs of obtaining a contract with a customer if the Company expects the benefit of those costs to be longer than one year and the costs are expected to be recovered. &#160;As of May 31, 2026 and 2025, the Company does not have material incremental costs on any open contracts with an original expected duration of greater than one year, and therefore such costs are expensed as incurred. &#160;These incremental costs include, but are not limited to, sales commissions incurred to obtain a contract with a customer.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Shipping and Handling Costs:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Shipping and handling costs on incoming inventory items are classified as a component of cost of goods sold, while shipping and handling costs on outgoing shipments to customers are classified as a component of selling, general and administrative expenses. The amounts of these costs classified as a component of selling, general and administrative expenses were $231,485 and $239,182 for the years ended May 31, 2026 and 2025. Shipping and handling activities that occur after the customer has obtained control of the product are considered fulfillment activities, not performance obligations.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;b&gt;Income Taxes:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The provision for income taxes provides for the tax effects of transactions reported in the financial statements regardless of when such taxes are payable. &#160;Deferred tax assets and liabilities are recognized for the expected future tax consequences of temporary differences between the tax and financial statement basis of assets and liabilities. &#160;Deferred taxes are based on tax laws currently enacted with tax rates expected to be in effect when the taxes are actually paid or recovered. &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company's practice is to recognize interest related to income tax matters in interest income / expense and to recognize penalties in selling, general and administrative expenses. &#160;The Company did not have any accrued interest or penalties included in its consolidated balance sheets at May 31, 2026 and 2025. &#160;The Company recorded no interest expense or penalties in its consolidated statements of income during the years ended May 31, 2026 and 2025. &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;span style="color:#000000"&gt;The Company believes it is no longer subject to examination by federal and state taxing authorities for years prior to May 31, 2023.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Sales Taxes:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;span style="color:#000000"&gt;Certain jurisdictions impose a sales tax on Company sales to nonexempt customers. &#160;The Company collects these taxes from customers and remits the entire amount as required by the applicable law. &#160;The Company excludes from revenue and expenses the tax collected and remitted.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Stock-Based Compensation:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company measures compensation cost arising from the grant of share-based payments to employees at fair value and recognizes such cost in income over the period during which the employee is required to provide service in exchange for the award. The stock-based compensation expense for the years ended May 31, 2026 and 2025 was $1,637,392 and $1,222,509.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;span style="color:#000080"&gt;&lt;b&gt;New Accounting Standards:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;In December 2023, the FASB issued Accounting Standards Update (&#x201c;ASU&#x201d;) 2023-09 &#x201c;Income Taxes (Topic 740): Improvements to Income Tax Disclosures&#x201d; to expand the disclosure requirements for income taxes, specifically related to the effective tax rate reconciliation and income taxes paid by jurisdiction. ASU 2023-09 is effective for our annual periods beginning June 1, 2025. We adopted this standard for the year ended May 31, 2026, and applied the amendments on a prospective basis. &#160;Refer to Note 10 for more information. The adoption of this standard did not have a material effect on the financial statements and related disclosures.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;In November 2024, the FASB issued ASU 2025-03, &#x201c;Income Statement &#x2013;&#160;Reporting Comprehensive Income &#x2013;&#160;Expense Disaggregation Disclosures (Subtopic 220-40): Disaggregation of Income Statement Expenses&#x201d; to enhance disclosure of specified categories of expenses (purchases of inventory, employee compensation, depreciation, and intangible asset amortization) included in certain expense captions presented on the face of the income statement. ASU 2025-03 is effective for annual periods beginning after December 15, 2026, and for interim periods within fiscal years beginning after December 15, 2027, with early adoption permitted on a prospective basis for financial statements issued for reporting periods after the forementioned effective date. The Company is currently evaluating the potential effect that the updated standard will have on the financial statements and related disclosures.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Other recently issued FASB Accounting Standards Codification (&#x201c;FASB ASC&#x201d;) guidance has either been implemented or is not significant to the Company. &lt;/p&gt;
</us-gaap:SignificantAccountingPoliciesTextBlock>
    <us-gaap:NatureOfOperations contextRef="D250601_260531" id="ixv-4563">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Nature of Operations:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Taylor Devices, Inc. (the Company) manufactures and sells a single group of very similar products that have many different applications for customers. &#160;These similar products are included in one of nine categories; namely, Seismic Dampers, Fluidicshoks&#xae;, Crane and Industrial Buffers, Self-Adjusting Shock Absorbers, Liquid Die Springs, Vibration Dampers, Machined Springs, Custom Shock and Vibration Isolators, and Custom Actuators for use in various types of machinery, equipment and structures, primarily to customers which are located throughout the United States and several foreign countries. &#160;The products are manufactured at the Company's sole operating facility in the United States where all of the Company's long-lived assets reside. Management does not track or otherwise account for sales broken down by these categories.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The chief operating decision maker is the Chief Executive Officer who assesses performance for the business (and lone segment) and decides how to allocate resources based on net income as reported in a format consistent with the consolidated statements of income included in these consolidated financial statements. The measure of segment assets is as reported on the consolidated balance sheets in these consolidated financial statements.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;87% of the Company's 2026 revenue was generated from sales to customers in the United States and 8% was from sales to customers in Asia. &#160;Remaining sales were to customers in other countries in North America, Europe, Australia, and South America.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;79% of the Company's 2025 revenue was generated from sales to customers in the United States and 15% was from sales to customers in Asia. &#160;Remaining sales were to customers in other countries in North America, Europe, Australia, and South America.&lt;/p&gt;
</us-gaap:NatureOfOperations>
    <us-gaap:ConsolidationPolicyTextBlock contextRef="D250601_260531" id="ixv-4575">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Principles of Consolidation:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The accompanying consolidated financial statements include the accounts of the Company and its wholly owned subsidiary, Tayco Realty Corporation (Realty). &#160;All inter-company transactions and balances have been eliminated in consolidation.&lt;/p&gt;
</us-gaap:ConsolidationPolicyTextBlock>
    <us-gaap:SubsequentEventsPolicyPolicyTextBlock contextRef="D250601_260531" id="ixv-4581">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Subsequent Events:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;span style="color:#000000"&gt;The Company has evaluated events and transactions for potential recognition or disclosure in the financial statements through the date the financial statements were issued.&lt;/span&gt;&lt;/p&gt;
</us-gaap:SubsequentEventsPolicyPolicyTextBlock>
    <us-gaap:UseOfEstimates contextRef="D250601_260531" id="ixv-4588">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Use of Estimates:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The preparation of financial statements in conformity with accounting principles generally accepted in the United States of America requires management to make estimates and assumptions that affect the amounts reported in the financial statements and accompanying notes. &#160;Actual results could differ from those estimates.&lt;/p&gt;
</us-gaap:UseOfEstimates>
    <us-gaap:CashAndCashEquivalentsPolicyTextBlock contextRef="D250601_260531" id="ixv-4594">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Cash and Cash Equivalents:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company includes all highly liquid investments in money market funds in cash and cash equivalents on the accompanying balance sheets. &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Cash and cash equivalents in financial institutions may exceed insured limits at various times during the year and subject the Company to concentrations of credit risk.&lt;/p&gt;
</us-gaap:CashAndCashEquivalentsPolicyTextBlock>
    <us-gaap:CashCashEquivalentsAndShortTermInvestmentsTextBlock contextRef="D250601_260531" id="ixv-4608">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;b&gt;Short-Term Investments:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;At times, the Company invests excess funds in liquid interest earning instruments. Short-term investments at May 31, 2026 and May 31, 2025 include money market funds, U.S. treasury securities and corporate bonds stated at fair value, which approximates cost. &#160;Unrealized holding gains and losses would be presented as a separate component of accumulated other comprehensive income, net of deferred income taxes.&#160;Realized gains and losses on the sale of investments are determined using the specific identification method.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The short-term investments are valued using pricing models maximizing the use of observable inputs for similar securities. This includes basing value on yields currently available on comparable securities of issuers with similar credit ratings.&lt;/p&gt;
</us-gaap:CashCashEquivalentsAndShortTermInvestmentsTextBlock>
    <us-gaap:TradeAndOtherAccountsReceivablePolicy contextRef="D250601_260531" id="ixv-4616">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;b&gt;Accounts Receivable:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Accounts receivable are stated at an amount management expects to collect from outstanding balances. &#160;Management provides for estimated credit losses through a charge to expense and a credit to a valuation allowance based on its assessment of the current status of individual accounts, historical trends, and forecasted economic conditions. &#160;Balances that are still outstanding after management has used reasonable collection efforts are written off through a charge to the valuation allowance and a credit to the receivable.&lt;/p&gt;
</us-gaap:TradeAndOtherAccountsReceivablePolicy>
    <us-gaap:InventoryPolicyTextBlock contextRef="D250601_260531" id="ixv-4622">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Inventory:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Inventory is stated at the lower of average cost or net realizable value. Average cost approximates first-in, first-out cost.&lt;/p&gt;
</us-gaap:InventoryPolicyTextBlock>
    <us-gaap:PropertyPlantAndEquipmentPolicyTextBlock contextRef="D250601_260531" id="ixv-4628">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Property and Equipment:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;span style="color:#000000"&gt;Property and equipment is stated at cost net of accumulated depreciation. &#160;Depreciation is provided primarily using the straight-line method for financial reporting purposes and accelerated methods for income tax reporting purposes. &#160;Maintenance and repairs are charged to operations as incurred; significant improvements are capitalized.&lt;/span&gt;&lt;/p&gt;
</us-gaap:PropertyPlantAndEquipmentPolicyTextBlock>
    <us-gaap:LifeInsuranceCorporateOrBankOwnedTextBlock contextRef="D250601_260531" id="ixv-4635">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Cash Value of Life Insurance:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Cash value of life insurance is stated at the surrender value of the contracts.&lt;/p&gt;
</us-gaap:LifeInsuranceCorporateOrBankOwnedTextBlock>
    <us-gaap:RevenueRecognitionPolicyTextBlock contextRef="D250601_260531" id="ixv-4641">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Revenue Recognition:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin-top:0pt;margin-bottom:12pt;color:#000000;text-align:justify"&gt;Revenue is recognized (generally at fixed prices) when, or as, the Company transfers control of promised products or services to a customer in an amount that reflects the consideration to which the Company expects to be entitled in exchange for transferring those products or services.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin-top:0pt;margin-bottom:12pt;color:#000000;text-align:justify"&gt;A performance obligation is a promise in a contract to transfer a distinct good or service to the customer, and is the unit of account. A contract&#x2019;s transaction price is allocated to each distinct performance obligation and recognized as revenue when, or as, the performance obligation is satisfied. The majority of the Company&#x2019;s contracts have a single performance obligation as the promise to transfer the individual goods or services is not separately identifiable from other promises in the contracts which are, therefore, not distinct. Promised goods or services that are immaterial in the context of the contract are not separately assessed as performance obligations. &#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin-top:0pt;margin-bottom:12pt;color:#000000;text-align:justify"&gt;For contracts with customers in which the Company satisfies a promise to the customer to provide a product that has no alternative use to the Company and the Company has enforceable rights to payment for progress completed to date inclusive of profit, the Company satisfies the performance obligation and recognizes revenue over time (generally less than one year), using costs incurred to date relative to total estimated costs at completion to measure progress toward satisfying the Company&#x2019;s performance obligations. &#160;Incurred costs represents work performed, which corresponds with, and thereby best depicts, the transfer of control to the customer. &#160;Contract costs include labor, material and overhead. &#160;Adjustments to cost estimates are made periodically, and losses expected to be incurred on contracts in progress are charged to operations in the period such losses are determined. &#160;Other sales to customers are recognized upon shipment to the customer based on contract prices and terms. &#160;In the year ended May 31, 2026, 56% of revenue was recorded for contracts in which revenue was recognized over time while 44% was recognized at a point in time. &#160;In the year ended May 31, 2025, 68% of revenue was recorded for contracts in which revenue was recognized over time while 32% was recognized at a point in time. &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin-top:0pt;margin-bottom:12pt;color:#000000;text-align:justify"&gt;Progress payments are typically negotiated for long term projects. &#160;Payments are otherwise due once performance obligations are complete (generally at shipment and transfer of title). &#160;For financial statement presentation purposes, the Company nets progress billings against the total costs incurred on uncompleted contracts. &#160;The asset, &#x201c;costs and estimated earnings in excess of billings,&#x201d; represents revenue recognized in excess of amounts billed. &#160;The liability, &#x201c;billings in excess of costs and estimated earnings,&#x201d; represents billings in excess of revenue recognized.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;If applicable, the Company recognizes an asset for the incremental material costs of obtaining a contract with a customer if the Company expects the benefit of those costs to be longer than one year and the costs are expected to be recovered. &#160;As of May 31, 2026 and 2025, the Company does not have material incremental costs on any open contracts with an original expected duration of greater than one year, and therefore such costs are expensed as incurred. &#160;These incremental costs include, but are not limited to, sales commissions incurred to obtain a contract with a customer.&lt;/p&gt;
</us-gaap:RevenueRecognitionPolicyTextBlock>
    <us-gaap:ShippingAndHandlingCostPolicyTextBlock contextRef="D250601_260531" id="ixv-4658">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Shipping and Handling Costs:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Shipping and handling costs on incoming inventory items are classified as a component of cost of goods sold, while shipping and handling costs on outgoing shipments to customers are classified as a component of selling, general and administrative expenses. The amounts of these costs classified as a component of selling, general and administrative expenses were $231,485 and $239,182 for the years ended May 31, 2026 and 2025. Shipping and handling activities that occur after the customer has obtained control of the product are considered fulfillment activities, not performance obligations.&lt;/p&gt;
</us-gaap:ShippingAndHandlingCostPolicyTextBlock>
    <us-gaap:IncomeTaxPolicyTextBlock contextRef="D250601_260531" id="ixv-4664">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;b&gt;Income Taxes:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The provision for income taxes provides for the tax effects of transactions reported in the financial statements regardless of when such taxes are payable. &#160;Deferred tax assets and liabilities are recognized for the expected future tax consequences of temporary differences between the tax and financial statement basis of assets and liabilities. &#160;Deferred taxes are based on tax laws currently enacted with tax rates expected to be in effect when the taxes are actually paid or recovered. &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company's practice is to recognize interest related to income tax matters in interest income / expense and to recognize penalties in selling, general and administrative expenses. &#160;The Company did not have any accrued interest or penalties included in its consolidated balance sheets at May 31, 2026 and 2025. &#160;The Company recorded no interest expense or penalties in its consolidated statements of income during the years ended May 31, 2026 and 2025. &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;span style="color:#000000"&gt;The Company believes it is no longer subject to examination by federal and state taxing authorities for years prior to May 31, 2023.&lt;/span&gt;&lt;/p&gt;
</us-gaap:IncomeTaxPolicyTextBlock>
    <us-gaap:RegulatoryIncomeTaxesPolicy contextRef="D250601_260531" id="ixv-4675">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Sales Taxes:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;span style="color:#000000"&gt;Certain jurisdictions impose a sales tax on Company sales to nonexempt customers. &#160;The Company collects these taxes from customers and remits the entire amount as required by the applicable law. &#160;The Company excludes from revenue and expenses the tax collected and remitted.&lt;/span&gt;&lt;/p&gt;
</us-gaap:RegulatoryIncomeTaxesPolicy>
    <us-gaap:ShareBasedCompensationOptionAndIncentivePlansPolicy contextRef="D250601_260531" id="ixv-4682">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;Stock-Based Compensation:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company measures compensation cost arising from the grant of share-based payments to employees at fair value and recognizes such cost in income over the period during which the employee is required to provide service in exchange for the award. The stock-based compensation expense for the years ended May 31, 2026 and 2025 was $1,637,392 and $1,222,509.&lt;/p&gt;
</us-gaap:ShareBasedCompensationOptionAndIncentivePlansPolicy>
    <us-gaap:StockOptionPlanExpense
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7828"
      unitRef="USD">1637392</us-gaap:StockOptionPlanExpense>
    <us-gaap:StockOptionPlanExpense
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7829"
      unitRef="USD">1222509</us-gaap:StockOptionPlanExpense>
    <us-gaap:NewAccountingPronouncementsPolicyPolicyTextBlock contextRef="D250601_260531" id="ixv-4694">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;span style="color:#000080"&gt;&lt;b&gt;New Accounting Standards:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;In December 2023, the FASB issued Accounting Standards Update (&#x201c;ASU&#x201d;) 2023-09 &#x201c;Income Taxes (Topic 740): Improvements to Income Tax Disclosures&#x201d; to expand the disclosure requirements for income taxes, specifically related to the effective tax rate reconciliation and income taxes paid by jurisdiction. ASU 2023-09 is effective for our annual periods beginning June 1, 2025. We adopted this standard for the year ended May 31, 2026, and applied the amendments on a prospective basis. &#160;Refer to Note 10 for more information. The adoption of this standard did not have a material effect on the financial statements and related disclosures.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;In November 2024, the FASB issued ASU 2025-03, &#x201c;Income Statement &#x2013;&#160;Reporting Comprehensive Income &#x2013;&#160;Expense Disaggregation Disclosures (Subtopic 220-40): Disaggregation of Income Statement Expenses&#x201d; to enhance disclosure of specified categories of expenses (purchases of inventory, employee compensation, depreciation, and intangible asset amortization) included in certain expense captions presented on the face of the income statement. ASU 2025-03 is effective for annual periods beginning after December 15, 2026, and for interim periods within fiscal years beginning after December 15, 2027, with early adoption permitted on a prospective basis for financial statements issued for reporting periods after the forementioned effective date. The Company is currently evaluating the potential effect that the updated standard will have on the financial statements and related disclosures.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Other recently issued FASB Accounting Standards Codification (&#x201c;FASB ASC&#x201d;) guidance has either been implemented or is not significant to the Company. &lt;/p&gt;
</us-gaap:NewAccountingPronouncementsPolicyPolicyTextBlock>
    <us-gaap:LoansNotesTradeAndOtherReceivablesDisclosureTextBlock contextRef="D250601_260531" id="ixv-4705">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;2. &#160;Accounts Receivable:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:347.7pt"&gt;&lt;tr&gt;&lt;td style="width:220.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:55pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Customers&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:2pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:53pt"&gt;&lt;b&gt;4,126,839&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;6,164,251&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Less allowance for estimated credit losses&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:53pt"&gt;&lt;b&gt;195,008&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;564,466&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.7pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:55pt;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:2pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:53pt"&gt;&lt;b&gt;3,931,831&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;5,599,785&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company decreased its allowance for estimated credit losses due to full collection of a $751,000 overdue balance at May 31, 2025. &#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;All amounts are expected to be collected within the next fiscal year.&lt;/p&gt;
</us-gaap:LoansNotesTradeAndOtherReceivablesDisclosureTextBlock>
    <us-gaap:AccountsReceivableAllowanceForCreditLossTableTextBlock contextRef="D250601_260531" id="ixv-4708">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:347.7pt"&gt;&lt;tr&gt;&lt;td style="width:220.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:55pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Customers&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:2pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:53pt"&gt;&lt;b&gt;4,126,839&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;6,164,251&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Less allowance for estimated credit losses&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:53pt"&gt;&lt;b&gt;195,008&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;564,466&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.7pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:55pt;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:2pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:53pt"&gt;&lt;b&gt;3,931,831&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;5,599,785&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:AccountsReceivableAllowanceForCreditLossTableTextBlock>
    <us-gaap:AccountsReceivableGrossCurrent
      contextRef="I260531"
      decimals="INF"
      id="ixv-7830"
      unitRef="USD">4126839</us-gaap:AccountsReceivableGrossCurrent>
    <us-gaap:AccountsReceivableGrossCurrent
      contextRef="I250531"
      decimals="INF"
      id="ixv-7831"
      unitRef="USD">6164251</us-gaap:AccountsReceivableGrossCurrent>
    <us-gaap:AllowanceForDoubtfulAccountsPremiumsAndOtherReceivables
      contextRef="I260531"
      decimals="INF"
      id="ixv-7832"
      unitRef="USD">195008</us-gaap:AllowanceForDoubtfulAccountsPremiumsAndOtherReceivables>
    <us-gaap:AllowanceForDoubtfulAccountsPremiumsAndOtherReceivables
      contextRef="I250531"
      decimals="INF"
      id="ixv-7833"
      unitRef="USD">564466</us-gaap:AllowanceForDoubtfulAccountsPremiumsAndOtherReceivables>
    <us-gaap:AccountsAndOtherReceivablesNetCurrent
      contextRef="I260531"
      decimals="INF"
      id="ixv-7834"
      unitRef="USD">3931831</us-gaap:AccountsAndOtherReceivablesNetCurrent>
    <us-gaap:AccountsAndOtherReceivablesNetCurrent
      contextRef="I250531"
      decimals="INF"
      id="ixv-7835"
      unitRef="USD">5599785</us-gaap:AccountsAndOtherReceivablesNetCurrent>
    <us-gaap:InventoryDisclosureTextBlock contextRef="D250601_260531" id="ixv-4766">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;3. &#160;Inventory:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:220.1pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:68.05pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Raw materials&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;642,141&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;627,616&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Work-in-process&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;6,697,444&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;7,222,613&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Finished goods&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;224,458&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;286,092&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:68.05pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;7,564,043&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;8,136,321&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Less allowance for obsolescence&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt;border-bottom:1pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;35,000&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:1pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:1pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;23,000&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:68.05pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;7,529,043&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;8,113,321&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:InventoryDisclosureTextBlock>
    <us-gaap:ScheduleOfUtilityInventoryTextBlock contextRef="D250601_260531" id="ixv-4769">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:220.1pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:68.05pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Raw materials&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;642,141&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;627,616&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Work-in-process&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;6,697,444&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;7,222,613&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Finished goods&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;224,458&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;286,092&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:68.05pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;7,564,043&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;8,136,321&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Less allowance for obsolescence&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt;border-bottom:1pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;35,000&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:1pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:1pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;23,000&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:68.05pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;7,529,043&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;8,113,321&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:ScheduleOfUtilityInventoryTextBlock>
    <us-gaap:InventoryGross
      contextRef="I260531_PublicUtilitiesInventory-PublicUtilitiesInventoryRawMaterials"
      decimals="INF"
      id="ixv-7836"
      unitRef="USD">642141</us-gaap:InventoryGross>
    <us-gaap:InventoryGross
      contextRef="I250531_PublicUtilitiesInventory-PublicUtilitiesInventoryRawMaterials"
      decimals="INF"
      id="ixv-7837"
      unitRef="USD">627616</us-gaap:InventoryGross>
    <us-gaap:InventoryGross
      contextRef="I260531_PublicUtilitiesInventory-WorkInProcess"
      decimals="INF"
      id="ixv-7838"
      unitRef="USD">6697444</us-gaap:InventoryGross>
    <us-gaap:InventoryGross
      contextRef="I250531_PublicUtilitiesInventory-WorkInProcess"
      decimals="INF"
      id="ixv-7839"
      unitRef="USD">7222613</us-gaap:InventoryGross>
    <us-gaap:InventoryGross
      contextRef="I260531_PublicUtilitiesInventory-FinishedGoods"
      decimals="INF"
      id="ixv-7840"
      unitRef="USD">224458</us-gaap:InventoryGross>
    <us-gaap:InventoryGross
      contextRef="I250531_PublicUtilitiesInventory-FinishedGoods"
      decimals="INF"
      id="ixv-7841"
      unitRef="USD">286092</us-gaap:InventoryGross>
    <us-gaap:InventoryGross
      contextRef="I260531"
      decimals="INF"
      id="ixv-7842"
      unitRef="USD">7564043</us-gaap:InventoryGross>
    <us-gaap:InventoryGross
      contextRef="I250531"
      decimals="INF"
      id="ixv-7843"
      unitRef="USD">8136321</us-gaap:InventoryGross>
    <us-gaap:InventoryAdjustments
      contextRef="I260531"
      decimals="INF"
      id="ixv-7844"
      unitRef="USD">35000</us-gaap:InventoryAdjustments>
    <us-gaap:InventoryAdjustments
      contextRef="I250531"
      decimals="INF"
      id="ixv-7845"
      unitRef="USD">23000</us-gaap:InventoryAdjustments>
    <us-gaap:InventoryNet
      contextRef="I260531"
      decimals="INF"
      id="ixv-7846"
      unitRef="USD">7529043</us-gaap:InventoryNet>
    <us-gaap:InventoryNet
      contextRef="I250531"
      decimals="INF"
      id="ixv-7847"
      unitRef="USD">8113321</us-gaap:InventoryNet>
    <us-gaap:BusinessAndContractualArrangementsDisclosureTextBlock contextRef="D250601_260531" id="ixv-4858">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;b&gt;4. &#160;Costs and Estimated Earnings on Uncompleted Contracts:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:220.85pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Costs incurred on uncompleted contracts&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;9,111,805&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:4pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;12,499,313&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Estimated earnings&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;11,539,013&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;13,175,240&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;20,650,818&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;25,674,553&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Less billings to date&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;13,985,655&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;24,696,121&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;6,665,163&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="margin-left:4pt"&gt;&lt;/kbd&gt;$ &#160;&#160;&#160;&#160;&#160;&#160;&#160;978,432&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Amounts are included in the accompanying balance sheets under the following captions:&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:220.6pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.8pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Costs and estimated earnings in excess of billings&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;8,032,246&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.8pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;5,360,499&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Billings in excess of costs and estimated earnings &lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;1,367,083&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.8pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;4,382,067&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.6pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.3pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;6,665,163&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.8pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;978,432&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;span style="color:#000000"&gt;The following summarizes the status of long-term projects in progress as of May 31, 2026 and 2025:&lt;/span&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="border-collapse:collapse"&gt;&lt;tr&gt;&lt;td style="width:252pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:93.6pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:252pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;Number of projects in progress&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;19&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;21&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:252pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;Aggregate percent complete&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;62%&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;65%&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:252pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;Aggregate amount remaining&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;$10,116,421&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$13,100,204&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:252pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;Percentage of total value invoiced to customer&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;45%&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;64%&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company expects to recognize the majority of remaining revenue on all open projects during the May 31, 2027 fiscal year. &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Revenue recognized during the years ended May 31, 2026 and 2025 for amounts included in billings in excess of costs and estimated earnings as of the beginning of the year amounted to $4,206,000 and $5,601,000.&lt;/p&gt;
</us-gaap:BusinessAndContractualArrangementsDisclosureTextBlock>
    <us-gaap:CostsInExcessOfBillingsAndBillingsInExcessOfCostsTableTextBlock contextRef="D250601_260531" id="ixv-4861">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:220.85pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Costs incurred on uncompleted contracts&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;9,111,805&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:4pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;12,499,313&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Estimated earnings&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;11,539,013&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;13,175,240&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;20,650,818&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;25,674,553&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Less billings to date&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;13,985,655&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;24,696,121&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;6,665,163&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="margin-left:4pt"&gt;&lt;/kbd&gt;$ &#160;&#160;&#160;&#160;&#160;&#160;&#160;978,432&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
</us-gaap:CostsInExcessOfBillingsAndBillingsInExcessOfCostsTableTextBlock>
    <fil:CostsIncurredOnUncompletedContracts
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7848"
      unitRef="USD">9111805</fil:CostsIncurredOnUncompletedContracts>
    <fil:CostsIncurredOnUncompletedContracts
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7849"
      unitRef="USD">12499313</fil:CostsIncurredOnUncompletedContracts>
    <fil:CostsIncurredOnUncompletedContractsEstimatedEarnings
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7850"
      unitRef="USD">11539013</fil:CostsIncurredOnUncompletedContractsEstimatedEarnings>
    <fil:CostsIncurredOnUncompletedContractsEstimatedEarnings
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7851"
      unitRef="USD">13175240</fil:CostsIncurredOnUncompletedContractsEstimatedEarnings>
    <fil:CostsIncurredOnUncompletedContractsGross
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7852"
      unitRef="USD">20650818</fil:CostsIncurredOnUncompletedContractsGross>
    <fil:CostsIncurredOnUncompletedContractsGross
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7853"
      unitRef="USD">25674553</fil:CostsIncurredOnUncompletedContractsGross>
    <fil:CostsIncurredOnUncompletedContractsBillingsToDate
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7854"
      unitRef="USD">13985655</fil:CostsIncurredOnUncompletedContractsBillingsToDate>
    <fil:CostsIncurredOnUncompletedContractsBillingsToDate
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7855"
      unitRef="USD">24696121</fil:CostsIncurredOnUncompletedContractsBillingsToDate>
    <fil:CostsIncurredOnUncompletedContractsNet
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7856"
      unitRef="USD">6665163</fil:CostsIncurredOnUncompletedContractsNet>
    <fil:CostsIncurredOnUncompletedContractsNet
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7857"
      unitRef="USD">978432</fil:CostsIncurredOnUncompletedContractsNet>
    <fil:ScheduleOfAmountsAreIncludedInTheAccompanyingBalanceSheetsTextBlock contextRef="D250601_260531" id="ixv-4944">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:220.6pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.8pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Costs and estimated earnings in excess of billings&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;8,032,246&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.8pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;5,360,499&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Billings in excess of costs and estimated earnings &lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;1,367,083&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.8pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;4,382,067&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.6pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.3pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;6,665,163&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.8pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.3pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;978,432&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</fil:ScheduleOfAmountsAreIncludedInTheAccompanyingBalanceSheetsTextBlock>
    <fil:CostsAndEstimatedEarningsInExcessOfBillings
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7858"
      unitRef="USD">8032246</fil:CostsAndEstimatedEarningsInExcessOfBillings>
    <fil:CostsAndEstimatedEarningsInExcessOfBillings
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7859"
      unitRef="USD">5360499</fil:CostsAndEstimatedEarningsInExcessOfBillings>
    <fil:BillingsInExcessOfCostsAndEstimatedEarnings
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7860"
      unitRef="USD">-1367083</fil:BillingsInExcessOfCostsAndEstimatedEarnings>
    <fil:BillingsInExcessOfCostsAndEstimatedEarnings
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7861"
      unitRef="USD">-4382067</fil:BillingsInExcessOfCostsAndEstimatedEarnings>
    <fil:CostsIncurredOnUncompletedContractsNet
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7862"
      unitRef="USD">6665163</fil:CostsIncurredOnUncompletedContractsNet>
    <fil:CostsIncurredOnUncompletedContractsNet
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7863"
      unitRef="USD">978432</fil:CostsIncurredOnUncompletedContractsNet>
    <fil:SchduleOfStatusOfProjectsInProgressTextBlock contextRef="D250601_260531" id="ixv-5000">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="border-collapse:collapse"&gt;&lt;tr&gt;&lt;td style="width:252pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:93.6pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:252pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;Number of projects in progress&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;19&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;21&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:252pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;Aggregate percent complete&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;62%&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;65%&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:252pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;Aggregate amount remaining&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;$10,116,421&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$13,100,204&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:252pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;Percentage of total value invoiced to customer&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;45%&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:93.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;64%&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</fil:SchduleOfStatusOfProjectsInProgressTextBlock>
    <fil:NumberOfProjectsInProgress
      contextRef="I260531"
      decimals="INF"
      id="ixv-7864"
      unitRef="Pure">19</fil:NumberOfProjectsInProgress>
    <fil:NumberOfProjectsInProgress
      contextRef="I250531"
      decimals="INF"
      id="ixv-7865"
      unitRef="Pure">21</fil:NumberOfProjectsInProgress>
    <fil:AggregatePercentComplete
      contextRef="I260531"
      decimals="INF"
      id="ixv-7866"
      unitRef="Pure">0.62</fil:AggregatePercentComplete>
    <fil:AggregatePercentComplete
      contextRef="I250531"
      decimals="INF"
      id="ixv-7867"
      unitRef="Pure">0.65</fil:AggregatePercentComplete>
    <fil:AggregateAmountRemaining
      contextRef="I260531"
      decimals="INF"
      id="ixv-7868"
      unitRef="USD">10116421</fil:AggregateAmountRemaining>
    <fil:AggregateAmountRemaining
      contextRef="I250531"
      decimals="INF"
      id="ixv-7869"
      unitRef="USD">13100204</fil:AggregateAmountRemaining>
    <fil:PercentageOfTotalValueInvoicedToCustomer
      contextRef="I260531"
      decimals="INF"
      id="ixv-7870"
      unitRef="Pure">0.45</fil:PercentageOfTotalValueInvoicedToCustomer>
    <fil:PercentageOfTotalValueInvoicedToCustomer
      contextRef="I250531"
      decimals="INF"
      id="ixv-7871"
      unitRef="Pure">0.64</fil:PercentageOfTotalValueInvoicedToCustomer>
    <fil:RevenuesRecognizedForAmountsIncludedInBillingsInExcessOfCostsAndEstimatedEarnings
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7873"
      unitRef="USD">4206000</fil:RevenuesRecognizedForAmountsIncludedInBillingsInExcessOfCostsAndEstimatedEarnings>
    <fil:RevenuesRecognizedForAmountsIncludedInBillingsInExcessOfCostsAndEstimatedEarnings
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7874"
      unitRef="USD">5601000</fil:RevenuesRecognizedForAmountsIncludedInBillingsInExcessOfCostsAndEstimatedEarnings>
    <us-gaap:PropertyPlantAndEquipmentPlannedMajorMaintenanceActivitiesPolicy contextRef="D250601_260531" id="ixv-5052">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;5. &#160;Maintenance and Other Inventory:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:356.4pt"&gt;&lt;tr&gt;&lt;td style="width:218.45pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:66.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:218.45pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Maintenance and other inventory&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;$ 1,865,680&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;$ 1,872,931&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:218.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Less allowance for obsolescence&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;659,684&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;765,056&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:218.45pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:66.65pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;$ 1,205,996&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;$ 1,107,875&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Maintenance and other inventory represent stock that is estimated to have a product life-cycle in excess of twelve-months. &#160;This stock represents certain items the Company is required to maintain for service of products sold, and items that are generally subject to spontaneous ordering. &#160;This inventory is particularly sensitive to obsolescence in the near term due to its use in industries characterized by the continuous introduction of new product lines, rapid technological advances and product obsolescence. &#160;Therefore, management of the Company has recorded an allowance for potential inventory obsolescence. &#160;$318,000 and $107,000 of inventory was disposed of during the years ended May 31, 2026 and 2025. &#160;The provision for potential inventory obsolescence was $225,000 and zero for the years ended May 31, 2026 and 2025. &#160;The Company continues to rework slow-moving inventory, where applicable, to convert it to product to be used on customer orders. &lt;/p&gt;
</us-gaap:PropertyPlantAndEquipmentPlannedMajorMaintenanceActivitiesPolicy>
    <fil:ScheduleOfMaintenanceAndOtherInventoryTextBlock contextRef="D250601_260531" id="ixv-5055">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:356.4pt"&gt;&lt;tr&gt;&lt;td style="width:218.45pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:66.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:218.45pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Maintenance and other inventory&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;$ 1,865,680&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;$ 1,872,931&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:218.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Less allowance for obsolescence&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;659,684&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;765,056&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:218.45pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:66.65pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;$ 1,205,996&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;$ 1,107,875&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</fil:ScheduleOfMaintenanceAndOtherInventoryTextBlock>
    <fil:MaintenanceAndOtherInventoryGross
      contextRef="I260531"
      decimals="INF"
      id="ixv-7875"
      unitRef="USD">1865680</fil:MaintenanceAndOtherInventoryGross>
    <fil:MaintenanceAndOtherInventoryGross
      contextRef="I250531"
      decimals="INF"
      id="ixv-7876"
      unitRef="USD">1872931</fil:MaintenanceAndOtherInventoryGross>
    <fil:MaintenanceAndOtherInventoryAllowanceForObsolescence
      contextRef="I260531"
      decimals="INF"
      id="ixv-7877"
      unitRef="USD">659684</fil:MaintenanceAndOtherInventoryAllowanceForObsolescence>
    <fil:MaintenanceAndOtherInventoryAllowanceForObsolescence
      contextRef="I250531"
      decimals="INF"
      id="ixv-7878"
      unitRef="USD">765056</fil:MaintenanceAndOtherInventoryAllowanceForObsolescence>
    <fil:MaintenanceAndOtherInventoryNet
      contextRef="I260531"
      decimals="INF"
      id="ixv-7879"
      unitRef="USD">1205996</fil:MaintenanceAndOtherInventoryNet>
    <fil:MaintenanceAndOtherInventoryNet
      contextRef="I250531"
      decimals="INF"
      id="ixv-7880"
      unitRef="USD">1107875</fil:MaintenanceAndOtherInventoryNet>
    <fil:InventoryDisposedOf
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7881"
      unitRef="USD">318000</fil:InventoryDisposedOf>
    <fil:InventoryDisposedOf
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7882"
      unitRef="USD">107000</fil:InventoryDisposedOf>
    <fil:ProvisionForPotentialInventoryObsolescence
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7883"
      unitRef="USD">225000</fil:ProvisionForPotentialInventoryObsolescence>
    <fil:ProvisionForPotentialInventoryObsolescence
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7884"
      unitRef="USD">0</fil:ProvisionForPotentialInventoryObsolescence>
    <us-gaap:PropertyPlantAndEquipmentDisclosureTextBlock contextRef="D250601_260531" id="ixv-5099">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;6. &#160;Property and Equipment:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:220.85pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:-13.9pt;margin-right:6.15pt;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Land&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;195,220&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;195,220&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Buildings and improvements&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;10,493,928&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;10,160,842&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Machinery and equipment&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;19,590,503&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;17,950,644&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Office furniture and equipment&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;3,252,655&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;3,193,150&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Autos and trucks&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;91,717&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;91,717&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Land improvements&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;662,168&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;662,168&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;34,286,191&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;32,253,741&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Less accumulated depreciation&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;21,980,091&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;20,179,569&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;12,306,100&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;12,074,172&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Depreciation expense was $1,904,373 and $1,708,849 for the years ended May 31, 2026 and 2025.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company has commitments to make capital expenditures of approximately $1,770,000 as of May 31, 2026.&lt;/p&gt;
</us-gaap:PropertyPlantAndEquipmentDisclosureTextBlock>
    <us-gaap:PropertyPlantAndEquipmentTextBlock contextRef="D250601_260531" id="ixv-5102">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:220.85pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:-13.9pt;margin-right:6.15pt;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Land&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;195,220&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;195,220&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Buildings and improvements&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;10,493,928&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;10,160,842&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Machinery and equipment&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;19,590,503&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;17,950,644&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Office furniture and equipment&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;3,252,655&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;3,193,150&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Autos and trucks&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;91,717&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;91,717&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Land improvements&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;662,168&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;662,168&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;34,286,191&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;32,253,741&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Less accumulated depreciation&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;21,980,091&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;20,179,569&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.85pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;12,306,100&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;12,074,172&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:PropertyPlantAndEquipmentTextBlock>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I260531_PpeByType-Land"
      decimals="INF"
      id="ixv-7885"
      unitRef="USD">195220</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I250531_PpeByType-Land"
      decimals="INF"
      id="ixv-7886"
      unitRef="USD">195220</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I260531_PpeByType-BuildingImprovements"
      decimals="INF"
      id="ixv-7887"
      unitRef="USD">10493928</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I250531_PpeByType-BuildingImprovements"
      decimals="INF"
      id="ixv-7888"
      unitRef="USD">10160842</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I260531_PpeByType-MachineryAndEquipment"
      decimals="INF"
      id="ixv-7889"
      unitRef="USD">19590503</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I250531_PpeByType-MachineryAndEquipment"
      decimals="INF"
      id="ixv-7890"
      unitRef="USD">17950644</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I260531_PpeByType-FurnitureAndFixtures"
      decimals="INF"
      id="ixv-7891"
      unitRef="USD">3252655</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I250531_PpeByType-FurnitureAndFixtures"
      decimals="INF"
      id="ixv-7892"
      unitRef="USD">3193150</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I260531_PpeByType-Vehicles"
      decimals="INF"
      id="ixv-7893"
      unitRef="USD">91717</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I250531_PpeByType-Vehicles"
      decimals="INF"
      id="ixv-7894"
      unitRef="USD">91717</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I260531_PpeByType-LandImprovements"
      decimals="INF"
      id="ixv-7895"
      unitRef="USD">662168</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I250531_PpeByType-LandImprovements"
      decimals="INF"
      id="ixv-7896"
      unitRef="USD">662168</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I260531"
      decimals="INF"
      id="ixv-7897"
      unitRef="USD">34286191</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:PropertyPlantAndEquipmentGross
      contextRef="I250531"
      decimals="INF"
      id="ixv-7898"
      unitRef="USD">32253741</us-gaap:PropertyPlantAndEquipmentGross>
    <us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment
      contextRef="I260531"
      decimals="INF"
      id="ixv-7899"
      unitRef="USD">21980091</us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment>
    <us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment
      contextRef="I250531"
      decimals="INF"
      id="ixv-7900"
      unitRef="USD">20179569</us-gaap:AccumulatedDepreciationDepletionAndAmortizationPropertyPlantAndEquipment>
    <us-gaap:PropertyPlantAndEquipmentNet
      contextRef="I260531"
      decimals="INF"
      id="ixv-7901"
      unitRef="USD">12306100</us-gaap:PropertyPlantAndEquipmentNet>
    <us-gaap:PropertyPlantAndEquipmentNet
      contextRef="I250531"
      decimals="INF"
      id="ixv-7902"
      unitRef="USD">12074172</us-gaap:PropertyPlantAndEquipmentNet>
    <us-gaap:DepreciationDepletionAndAmortization
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7903"
      unitRef="USD">1904373</us-gaap:DepreciationDepletionAndAmortization>
    <us-gaap:DepreciationDepletionAndAmortization
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7904"
      unitRef="USD">1708849</us-gaap:DepreciationDepletionAndAmortization>
    <us-gaap:OtherCommitment
      contextRef="I260531"
      decimals="INF"
      id="ixv-7905"
      unitRef="USD">1770000</us-gaap:OtherCommitment>
    <us-gaap:ShortTermDebtTextBlock contextRef="D250601_260531" id="ixv-5236">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&lt;span style="color:#000080"&gt;&lt;b&gt;7. &#160;Short-Term Borrowings:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company has available a $10,000,000 bank demand line of credit with interest payable at the Company's option of 30, 60 or 90 day SOFR rate plus 2.365%. The line is secured by a negative pledge of the Company's real and personal property and is subject to renewal annually. &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;There is no amount outstanding under the line of credit at May 31, 2026 or 2025. &#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company uses a cash management facility under which the bank draws against the available line of credit to cover checks presented for payment on a daily basis. &#160;Outstanding checks under this arrangement totaled $59,107 and $97,673 as of May 31, 2026 and 2025. &#160;These amounts are included in accounts payable on the accompanying balance sheets.&lt;/p&gt;
</us-gaap:ShortTermDebtTextBlock>
    <us-gaap:LineOfCredit
      contextRef="I260531"
      decimals="INF"
      id="ixv-7906"
      unitRef="USD">10000000</us-gaap:LineOfCredit>
    <us-gaap:LineOfCreditFacilityAverageOutstandingAmount
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7907"
      unitRef="USD">0</us-gaap:LineOfCreditFacilityAverageOutstandingAmount>
    <fil:OutstandingChecks
      contextRef="I260531"
      decimals="INF"
      id="ixv-7908"
      unitRef="USD">59107</fil:OutstandingChecks>
    <fil:OutstandingChecks
      contextRef="I250531"
      decimals="INF"
      id="ixv-7909"
      unitRef="USD">97673</fil:OutstandingChecks>
    <us-gaap:AccountsPayableAndAccruedLiabilitiesDisclosureTextBlock contextRef="D250601_260531" id="ixv-5247">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;8. &#160;Accrued Expenses: &lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:220.1pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:68.05pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Customer deposits&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;68,482&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;104,825&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Personnel costs&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;2,154,490&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;3,214,157&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Other&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;723,522&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;753,454&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:68.05pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;2,946,494&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;4,072,436&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:AccountsPayableAndAccruedLiabilitiesDisclosureTextBlock>
    <us-gaap:ScheduleOfAccruedLiabilitiesTableTextBlock contextRef="D250601_260531" id="ixv-5250">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:220.1pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:68.05pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Customer deposits&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;68,482&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;104,825&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Personnel costs&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;2,154,490&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;3,214,157&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Other&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:68.05pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;723,522&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;753,454&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:220.1pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;/td&gt;&lt;td style="width:68.05pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;2,946,494&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;4,072,436&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:ScheduleOfAccruedLiabilitiesTableTextBlock>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="I260531_FvByLiabClass-CustomerDeposits"
      decimals="INF"
      id="ixv-7910"
      unitRef="USD">68482</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="I250531_FvByLiabClass-CustomerDeposits"
      decimals="INF"
      id="ixv-7911"
      unitRef="USD">104825</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="I260531_FvByLiabClass-PersonnelCosts"
      decimals="INF"
      id="ixv-7912"
      unitRef="USD">2154490</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="I250531_FvByLiabClass-PersonnelCosts"
      decimals="INF"
      id="ixv-7913"
      unitRef="USD">3214157</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="I260531_FvByLiabClass-Other"
      decimals="INF"
      id="ixv-7914"
      unitRef="USD">723522</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="I250531_FvByLiabClass-Other"
      decimals="INF"
      id="ixv-7915"
      unitRef="USD">753454</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="I260531"
      decimals="INF"
      id="ixv-7916"
      unitRef="USD">2946494</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:AccruedLiabilitiesCurrent
      contextRef="I250531"
      decimals="INF"
      id="ixv-7917"
      unitRef="USD">4072436</us-gaap:AccruedLiabilitiesCurrent>
    <us-gaap:RevenueFromContractWithCustomerTextBlock contextRef="D250601_260531" id="ixv-5316">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;9. &#160;Sales:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company manufactures and sells a single group of very similar products that have many different applications for customers. &#160;These similar products are included in one of nine categories; namely, Seismic Dampers, Fluidicshoks&#xae;, Crane and Industrial Buffers, Self-Adjusting Shock Absorbers, Liquid Die Springs, Vibration Dampers, Machined Springs, Custom Shock and Vibration Isolators, and Custom Actuators. &#160;Management does not track or otherwise account for sales broken down by these categories. &#160;Sales of the Company's products are made to three general groups of customers: aerospace / defense, structural and industrial. A breakdown of sales to these three general groups of customers is as follows: &#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:216.1pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:65.95pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&lt;span style="color:#000080"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:12pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Aerospace / Defense&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;$ 27,522,079&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:12pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;$ 27,134,038&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Structural&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;10,262,939&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:12pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;14,827,044&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Industrial&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;3,864,655&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:12pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;4,331,643&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.1pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:65.95pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;$ 41,649,673&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:12pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;$ 46,292,725&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Sales to three customers approximated 32% (11%, 11% and 10% respectively) of net sales for 2026. Sales to two customers approximated 36% (21% and 15% respectively) of net sales for 2025.&lt;/p&gt;
</us-gaap:RevenueFromContractWithCustomerTextBlock>
    <us-gaap:DisaggregationOfRevenueTableTextBlock contextRef="D250601_260531" id="ixv-5321">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:216.1pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:65.95pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&lt;span style="color:#000080"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:12pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Aerospace / Defense&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;$ 27,522,079&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:12pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;$ 27,134,038&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Structural&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;10,262,939&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:12pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;14,827,044&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.1pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Industrial&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;3,864,655&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:12pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt;border-bottom:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;4,331,643&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.1pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:65.95pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;$ 41,649,673&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:12pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:65.95pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;$ 46,292,725&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:DisaggregationOfRevenueTableTextBlock>
    <us-gaap:Revenues
      contextRef="D250601_260531_StBusnSeg-AerospaceDefense"
      decimals="INF"
      id="ixv-7918"
      unitRef="USD">27522079</us-gaap:Revenues>
    <us-gaap:Revenues
      contextRef="D240601_250531_StBusnSeg-AerospaceDefense"
      decimals="INF"
      id="ixv-7919"
      unitRef="USD">27134038</us-gaap:Revenues>
    <us-gaap:Revenues
      contextRef="D250601_260531_StBusnSeg-Structural"
      decimals="INF"
      id="ixv-7920"
      unitRef="USD">10262939</us-gaap:Revenues>
    <us-gaap:Revenues
      contextRef="D240601_250531_StBusnSeg-Structural"
      decimals="INF"
      id="ixv-7921"
      unitRef="USD">14827044</us-gaap:Revenues>
    <us-gaap:Revenues
      contextRef="D250601_260531_StBusnSeg-Industrial"
      decimals="INF"
      id="ixv-7922"
      unitRef="USD">3864655</us-gaap:Revenues>
    <us-gaap:Revenues
      contextRef="D240601_250531_StBusnSeg-Industrial"
      decimals="INF"
      id="ixv-7923"
      unitRef="USD">4331643</us-gaap:Revenues>
    <us-gaap:Revenues
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7924"
      unitRef="USD">41649673</us-gaap:Revenues>
    <us-gaap:Revenues
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7925"
      unitRef="USD">46292725</us-gaap:Revenues>
    <us-gaap:IncomeTaxDisclosureTextBlock contextRef="D250601_260531" id="ixv-5376">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;10. &#160;Income Taxes:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company adopted ASU 2023-09 on a prospective basis as of June 1, 2025, which resulted in additional income tax disclosures for the rate reconciliation and income taxes paid for 2026. &#160;Given that the Company elected to adopt ASU 2023-09 prospectively, the 2025 rate reconciliation is not disaggregated in accordance with ASU 2023-09 and the income taxes paid is not presented by jurisdiction.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:391.55pt"&gt;&lt;tr&gt;&lt;td style="width:216.5pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;/td&gt;&lt;td colspan="2" style="width:85pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:4.75pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.5pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Current tax provision:&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:85pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:4.75pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Federal &lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;100,000&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;2,204,000&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;State&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;100&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;1,000&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:67.5pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;100,100&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;2,205,000&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Deferred tax provision (benefit):&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Federal&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;324,900&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;(585,000)&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;State&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;-&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:67.5pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;324,900&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;(585,000)&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:67.5pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;425,000&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;1,620,000&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The provision for income taxes for the fiscal year ended May 31, 2026 differed from the amount computed by applying the federal statutory income tax rate due to:&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:418.5pt"&gt;&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;Amount&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Percent&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;U.S. Federal Statutory Income Tax and Rate&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:0pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;&lt;b&gt;1,888,000&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:51pt"&gt;21.0%&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;State and local income taxes, net of federal income tax effect (1)&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;&lt;b&gt;100&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:51pt"&gt;0.0%&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Effect of Cross Border Tax Laws:&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Foreign-Derived Deduction Eligible Income&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;&lt;b&gt;(14,300)&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:51pt"&gt;-0.2%&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Tax Credits:&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Research and development tax credits&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;&lt;b&gt;(369,000)&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:51pt"&gt;-4.1%&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Nontaxable and nondeductible items:&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Share-based payment awards&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;&lt;b&gt;(929,900)&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:51pt"&gt;-10.3%&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Other&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;&lt;b&gt;10,900&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:51pt"&gt;0.1%&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Other adjustments:&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt; &#160;&#160;&#160;Various miscellaneous items&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;&lt;b&gt;(160,800)&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:51pt"&gt;-1.8%&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:0pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;&lt;b&gt;425,000&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:51pt"&gt;4.7%&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:265.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:55.5pt;border-top:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:25.5pt;border-top:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:58.5pt;border-top:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:13.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;margin-left:18pt;color:#000000;text-align:justify"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:-18pt"&gt;(1)&lt;/kbd&gt;State taxes in California make up the majority (more than 50%) of the tax effect of this category.&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;A reconciliation of the statutory U.S. federal income tax rate to the effective tax rate for the period before the adoption of ASU 2023-09 was as follows:&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:356.35pt"&gt;&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:4.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099;text-align:center"&gt;&lt;b&gt;2025&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Computed tax provision at the expected statutory rate&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;2,317,000&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Tax effect of permanent differences:&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Research tax credits&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;(489,692)&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Foreign-derived intangible income deduction&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;(224,700)&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Stock option costs&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;(11,682)&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Other permanent differences&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;24,300&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Other&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;4,774&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:4.65pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;1,620,000&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Effective income tax rate&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt;border-top:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt;border-top:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;14.7%&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Income taxes paid (net of refunds) consisted of the following:&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:356.35pt"&gt;&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Federal&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;-&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;State&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;875&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:4.7pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;875&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Income taxes paid (net of refunds) was $2,425,000 for the year ended May 31, 2025.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Income taxes paid, net of refunds, exceeded five (5) percent of total income taxes paid (net of refunds) in the following jurisdictions:&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:356.35pt"&gt;&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Federal&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;State&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;New York&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;50&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt; &#160;&#160;&#160;California&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;800&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt; &#160;&#160;&#160;Other&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;25&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:4.7pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;875&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;The tax effects of temporary differences that give rise to the deferred income tax assets at May 31, 2026 and 2025 are as follows:&lt;/p&gt;
&lt;p style="font:11pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.25pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Deferred tax assets:&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Allowance for estimated credit losses&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:4pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;41,000&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;118,500&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Tax inventory adjustment&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;67,200&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;52,600&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Allowance for obsolete inventory&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;145,900&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;165,500&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Accrued professional fees&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;20,100&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;-&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Accrued vacation&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;179,000&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;169,600&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Warranty reserve&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;100,100&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;112,500&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;R&amp;amp;D capitalization&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;1,450,500&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;2,111,200&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Stock options issued for services&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;537,700&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;117,700&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.25pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;2,541,500&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;2,847,600&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Deferred tax liabilities:&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Excess tax depreciation&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;(1,268,500)&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;(1,249,600)&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:27pt;color:#000000"&gt;Net deferred tax assets&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:4pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;1,273,000&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;1,598,000&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Realization of the deferred tax assets is dependent on generating sufficient taxable income at the time temporary differences become deductible. &#160;The Company provides a valuation allowance to the extent that deferred tax assets may not be realized. &#160;A valuation allowance has not been recorded against the deferred tax assets since management believes it is more likely than not that the deferred tax assets are recoverable. &#160;The Company considers future taxable income and potential tax planning strategies in assessing the need for a potential valuation allowance. &#160;The amount of the deferred tax assets considered realizable however, could be reduced in the near term if estimates of future taxable income are reduced. &#160;The Company will need to generate approximately $12.1 million in taxable income in future years in order to realize the deferred tax assets recorded as of May 31, 2026 of $2,541,500.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company and its subsidiary file consolidated Federal and State income tax returns. &#160;As of May 31, 2026, the Company had State investment tax credit carryforwards of approximately $546,000 expiring through May 2031.&lt;/p&gt;
</us-gaap:IncomeTaxDisclosureTextBlock>
    <us-gaap:ScheduleOfComponentsOfIncomeTaxExpenseBenefitTableTextBlock contextRef="D250601_260531" id="ixv-5381">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:391.55pt"&gt;&lt;tr&gt;&lt;td style="width:216.5pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;/td&gt;&lt;td colspan="2" style="width:85pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:4.75pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.5pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Current tax provision:&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:85pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:4.75pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Federal &lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;100,000&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;2,204,000&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;State&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;100&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;1,000&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:67.5pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;100,100&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;2,205,000&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Deferred tax provision (benefit):&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Federal&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;324,900&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;(585,000)&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;State&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;-&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:67.5pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;324,900&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;(585,000)&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan="2" style="width:234pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:67.5pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;425,000&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:18.15pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.15pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;1,620,000&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:ScheduleOfComponentsOfIncomeTaxExpenseBenefitTableTextBlock>
    <us-gaap:CurrentFederalTaxExpenseBenefit
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7926"
      unitRef="USD">100000</us-gaap:CurrentFederalTaxExpenseBenefit>
    <us-gaap:CurrentFederalTaxExpenseBenefit
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7927"
      unitRef="USD">2204000</us-gaap:CurrentFederalTaxExpenseBenefit>
    <us-gaap:CurrentStateAndLocalTaxExpenseBenefit
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7928"
      unitRef="USD">100</us-gaap:CurrentStateAndLocalTaxExpenseBenefit>
    <us-gaap:CurrentStateAndLocalTaxExpenseBenefit
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7929"
      unitRef="USD">1000</us-gaap:CurrentStateAndLocalTaxExpenseBenefit>
    <us-gaap:CurrentFederalStateAndLocalTaxExpenseBenefit
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7930"
      unitRef="USD">100100</us-gaap:CurrentFederalStateAndLocalTaxExpenseBenefit>
    <us-gaap:CurrentFederalStateAndLocalTaxExpenseBenefit
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7931"
      unitRef="USD">2205000</us-gaap:CurrentFederalStateAndLocalTaxExpenseBenefit>
    <us-gaap:DeferredFederalIncomeTaxExpenseBenefit
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7932"
      unitRef="USD">324900</us-gaap:DeferredFederalIncomeTaxExpenseBenefit>
    <us-gaap:DeferredFederalIncomeTaxExpenseBenefit
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7933"
      unitRef="USD">-585000</us-gaap:DeferredFederalIncomeTaxExpenseBenefit>
    <us-gaap:DeferredStateAndLocalIncomeTaxExpenseBenefit
      contextRef="D250601_260531"
      decimals="128"
      id="ixv-7934"
      unitRef="USD">0</us-gaap:DeferredStateAndLocalIncomeTaxExpenseBenefit>
    <us-gaap:DeferredStateAndLocalIncomeTaxExpenseBenefit
      contextRef="D240601_250531"
      decimals="128"
      id="ixv-7935"
      unitRef="USD">0</us-gaap:DeferredStateAndLocalIncomeTaxExpenseBenefit>
    <us-gaap:DeferredFederalStateAndLocalTaxExpenseBenefit
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7936"
      unitRef="USD">324900</us-gaap:DeferredFederalStateAndLocalTaxExpenseBenefit>
    <us-gaap:DeferredFederalStateAndLocalTaxExpenseBenefit
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7937"
      unitRef="USD">-585000</us-gaap:DeferredFederalStateAndLocalTaxExpenseBenefit>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7938"
      unitRef="USD">425000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7939"
      unitRef="USD">1620000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:ScheduleOfEffectiveIncomeTaxRateReconciliationTableTextBlock contextRef="D250601_260531" id="ixv-5714">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:356.35pt"&gt;&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:4.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099;text-align:center"&gt;&lt;b&gt;2025&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Computed tax provision at the expected statutory rate&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;2,317,000&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Tax effect of permanent differences:&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Research tax credits&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;(489,692)&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Foreign-derived intangible income deduction&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;(224,700)&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Stock option costs&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;(11,682)&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;Other permanent differences&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;24,300&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Other&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;4,774&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:4.65pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;1,620,000&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:281.35pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Effective income tax rate&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.65pt;border-top:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:66.65pt;border-top:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;14.7%&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:3.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:ScheduleOfEffectiveIncomeTaxRateReconciliationTableTextBlock>
    <us-gaap:IncomeTaxReconciliationIncomeTaxExpenseBenefitAtFederalStatutoryIncomeTaxRate
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7940"
      unitRef="USD">2317000</us-gaap:IncomeTaxReconciliationIncomeTaxExpenseBenefitAtFederalStatutoryIncomeTaxRate>
    <us-gaap:IncomeTaxReconciliationTaxCreditsResearch
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7941"
      unitRef="USD">489692</us-gaap:IncomeTaxReconciliationTaxCreditsResearch>
    <us-gaap:IncomeTaxReconciliationTaxCreditsForeign
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7942"
      unitRef="USD">224700</us-gaap:IncomeTaxReconciliationTaxCreditsForeign>
    <fil:StockOptionCosts
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7943"
      unitRef="USD">-11682</fil:StockOptionCosts>
    <us-gaap:IncomeTaxReconciliationOtherReconcilingItems
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7944"
      unitRef="USD">24300</us-gaap:IncomeTaxReconciliationOtherReconcilingItems>
    <fil:OtherAdjustments
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7945"
      unitRef="USD">4774</fil:OtherAdjustments>
    <us-gaap:IncomeTaxExpenseBenefit
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7946"
      unitRef="USD">1620000</us-gaap:IncomeTaxExpenseBenefit>
    <us-gaap:EffectiveIncomeTaxRateContinuingOperations
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7947"
      unitRef="Pure">0.147</us-gaap:EffectiveIncomeTaxRateContinuingOperations>
    <us-gaap:ScheduleOfIncomeBeforeIncomeTaxDomesticAndForeignTableTextBlock contextRef="D250601_260531" id="ixv-5828">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:356.35pt"&gt;&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Federal&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;-&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;State&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;875&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:4.7pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:61pt"&gt;&lt;b&gt;875&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Income taxes paid (net of refunds) was $2,425,000 for the year ended May 31, 2025.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Income taxes paid, net of refunds, exceeded five (5) percent of total income taxes paid (net of refunds) in the following jurisdictions:&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:356.35pt"&gt;&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Federal&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;State&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:9pt;color:#000000"&gt;New York&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;50&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt; &#160;&#160;&#160;California&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;800&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt; &#160;&#160;&#160;Other&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;25&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:284.3pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:4.7pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.35pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000099"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;&lt;b&gt;875&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:ScheduleOfIncomeBeforeIncomeTaxDomesticAndForeignTableTextBlock>
    <us-gaap:IncomeTaxesPaidNet
      contextRef="D250601_260531_IncomeTa-DomesticCountry"
      decimals="128"
      id="ixv-7948"
      unitRef="USD">0</us-gaap:IncomeTaxesPaidNet>
    <us-gaap:IncomeTaxesPaidNet
      contextRef="D250601_260531_IncomeTa-StateAndLocalJurisdiction"
      decimals="INF"
      id="ixv-7949"
      unitRef="USD">875</us-gaap:IncomeTaxesPaidNet>
    <us-gaap:IncomeTaxesPaidNet
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7950"
      unitRef="USD">875</us-gaap:IncomeTaxesPaidNet>
    <us-gaap:IncomeTaxesPaidNet
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7951"
      unitRef="USD">2425000</us-gaap:IncomeTaxesPaidNet>
    <us-gaap:IncomeTaxesPaidNet
      contextRef="D250601_260531_IncomeTa-DomesticCountry"
      decimals="128"
      id="ixv-7952"
      unitRef="USD">0</us-gaap:IncomeTaxesPaidNet>
    <us-gaap:IncomeTaxesPaidNet
      contextRef="D250601_260531_IncomeTa-NewYork"
      decimals="INF"
      id="ixv-7953"
      unitRef="USD">50</us-gaap:IncomeTaxesPaidNet>
    <us-gaap:IncomeTaxesPaidNet
      contextRef="D250601_260531_IncomeTa-California"
      decimals="INF"
      id="ixv-7954"
      unitRef="USD">800</us-gaap:IncomeTaxesPaidNet>
    <us-gaap:IncomeTaxesPaidNet
      contextRef="D250601_260531_IncomeTa-Other"
      decimals="INF"
      id="ixv-7955"
      unitRef="USD">25</us-gaap:IncomeTaxesPaidNet>
    <us-gaap:IncomeTaxesPaidNet
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7956"
      unitRef="USD">875</us-gaap:IncomeTaxesPaidNet>
    <us-gaap:ScheduleOfDeferredTaxAssetsAndLiabilitiesTableTextBlock contextRef="D250601_260531" id="ixv-5951">&lt;p style="font:11pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.25pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Deferred tax assets:&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Allowance for estimated credit losses&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:4pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;41,000&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;118,500&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Tax inventory adjustment&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;67,200&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;52,600&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Allowance for obsolete inventory&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;145,900&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;165,500&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Accrued professional fees&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;20,100&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;-&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Accrued vacation&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;179,000&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;169,600&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Warranty reserve&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;100,100&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;112,500&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;R&amp;amp;D capitalization&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;1,450,500&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;2,111,200&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Stock options issued for services&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;537,700&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;117,700&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.25pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;2,541,500&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt;border-top:0.5pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;2,847,600&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Deferred tax liabilities:&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:4.5pt;color:#000000"&gt;Excess tax depreciation&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;(1,268,500)&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;(1,249,600)&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:216.6pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:27pt;color:#000000"&gt;Net deferred tax assets&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:4pt"&gt;&lt;b&gt;$&lt;/b&gt;&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:63pt"&gt;&lt;b&gt;1,273,000&#160;&lt;/b&gt;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.25pt;border-top:0.75pt solid #000000;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:60pt"&gt;1,598,000&#160;&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.45pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:ScheduleOfDeferredTaxAssetsAndLiabilitiesTableTextBlock>
    <fil:AllowanceForDoubtfulReceivables
      contextRef="I260531"
      decimals="INF"
      id="ixv-7957"
      unitRef="USD">41000</fil:AllowanceForDoubtfulReceivables>
    <fil:AllowanceForDoubtfulReceivables
      contextRef="I250531"
      decimals="INF"
      id="ixv-7958"
      unitRef="USD">118500</fil:AllowanceForDoubtfulReceivables>
    <fil:TaxInventoryAdjustment
      contextRef="I260531"
      decimals="INF"
      id="ixv-7959"
      unitRef="USD">67200</fil:TaxInventoryAdjustment>
    <fil:TaxInventoryAdjustment
      contextRef="I250531"
      decimals="INF"
      id="ixv-7960"
      unitRef="USD">52600</fil:TaxInventoryAdjustment>
    <fil:AllowanceForObsoleteInventory
      contextRef="I260531"
      decimals="INF"
      id="ixv-7961"
      unitRef="USD">145900</fil:AllowanceForObsoleteInventory>
    <fil:AllowanceForObsoleteInventory
      contextRef="I250531"
      decimals="INF"
      id="ixv-7962"
      unitRef="USD">165500</fil:AllowanceForObsoleteInventory>
    <fil:AccruedProfessionalFees
      contextRef="I260531"
      decimals="INF"
      id="ixv-7963"
      unitRef="USD">20100</fil:AccruedProfessionalFees>
    <fil:AccruedProfessionalFees
      contextRef="I250531"
      decimals="128"
      id="ixv-7964"
      unitRef="USD">0</fil:AccruedProfessionalFees>
    <fil:AccruedVacation
      contextRef="I260531"
      decimals="INF"
      id="ixv-7965"
      unitRef="USD">179000</fil:AccruedVacation>
    <fil:AccruedVacation
      contextRef="I250531"
      decimals="INF"
      id="ixv-7966"
      unitRef="USD">169600</fil:AccruedVacation>
    <fil:WarrantyReserve
      contextRef="I260531"
      decimals="INF"
      id="ixv-7967"
      unitRef="USD">100100</fil:WarrantyReserve>
    <fil:WarrantyReserve
      contextRef="I250531"
      decimals="INF"
      id="ixv-7968"
      unitRef="USD">112500</fil:WarrantyReserve>
    <fil:RDCapitalization
      contextRef="I260531"
      decimals="INF"
      id="ixv-7969"
      unitRef="USD">1450500</fil:RDCapitalization>
    <fil:RDCapitalization
      contextRef="I250531"
      decimals="INF"
      id="ixv-7970"
      unitRef="USD">2111200</fil:RDCapitalization>
    <fil:StockOptionsIssuedForServices
      contextRef="I260531"
      decimals="INF"
      id="ixv-7971"
      unitRef="USD">537700</fil:StockOptionsIssuedForServices>
    <fil:StockOptionsIssuedForServices
      contextRef="I250531"
      decimals="INF"
      id="ixv-7972"
      unitRef="USD">117700</fil:StockOptionsIssuedForServices>
    <us-gaap:DeferredTaxAssetsGross
      contextRef="I260531"
      decimals="INF"
      id="ixv-7973"
      unitRef="USD">2541500</us-gaap:DeferredTaxAssetsGross>
    <us-gaap:DeferredTaxAssetsGross
      contextRef="I250531"
      decimals="INF"
      id="ixv-7974"
      unitRef="USD">2847600</us-gaap:DeferredTaxAssetsGross>
    <fil:ExcessTaxDepreciation
      contextRef="I260531"
      decimals="INF"
      id="ixv-7975"
      unitRef="USD">1268500</fil:ExcessTaxDepreciation>
    <fil:ExcessTaxDepreciation
      contextRef="I250531"
      decimals="INF"
      id="ixv-7976"
      unitRef="USD">1249600</fil:ExcessTaxDepreciation>
    <us-gaap:DeferredTaxAssetsNet
      contextRef="I260531"
      decimals="INF"
      id="ixv-7977"
      unitRef="USD">1273000</us-gaap:DeferredTaxAssetsNet>
    <us-gaap:DeferredTaxAssetsNet
      contextRef="I250531"
      decimals="INF"
      id="ixv-7978"
      unitRef="USD">1598000</us-gaap:DeferredTaxAssetsNet>
    <us-gaap:DeferredTaxAssetsGross
      contextRef="I260531"
      decimals="INF"
      id="ixv-7979"
      unitRef="USD">2541500</us-gaap:DeferredTaxAssetsGross>
    <us-gaap:EarningsPerShareTextBlock contextRef="D250601_260531" id="ixv-6156">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&lt;b&gt;11. &#160;Earnings Per Common Share: &lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Basic earnings per common share is computed by dividing income available to common stockholders by the weighted-average common shares outstanding for the period. &#160;Diluted earnings per common share reflects the weighted-average common shares outstanding and dilutive potential common shares, such as stock options.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;A reconciliation of weighted-average common shares outstanding to weighted-average common shares outstanding assuming dilution is as follows:&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:388.8pt"&gt;&lt;tr&gt;&lt;td style="width:258.7pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:62.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:258.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:6.2pt;color:#000000"&gt;Average common shares outstanding&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;3,170,439&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;3,131,134&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:258.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:6.2pt;color:#000000"&gt;Common shares issuable under stock option plans&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;99,238&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;147,555&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:258.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:6.2pt;color:#000000"&gt;Average common shares outstanding assuming dilution&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;3,269,677&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;3,278,689&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:EarningsPerShareTextBlock>
    <us-gaap:ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock contextRef="D250601_260531" id="ixv-6163">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:388.8pt"&gt;&lt;tr&gt;&lt;td style="width:258.7pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:62.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:258.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:6.2pt;color:#000000"&gt;Average common shares outstanding&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;3,170,439&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;3,131,134&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:258.7pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:6.2pt;color:#000000"&gt;Common shares issuable under stock option plans&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;99,238&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;147,555&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:258.7pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;margin-left:6.2pt;color:#000000"&gt;Average common shares outstanding assuming dilution&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;3,269,677&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:4.7pt;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.7pt;border-bottom:2.25pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;3,278,689&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:ScheduleOfEarningsPerShareBasicAndDilutedTableTextBlock>
    <fil:AverageCommonSharesOutstanding
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7980"
      unitRef="Shares">3170439</fil:AverageCommonSharesOutstanding>
    <fil:AverageCommonSharesOutstanding
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7981"
      unitRef="Shares">3131134</fil:AverageCommonSharesOutstanding>
    <fil:CommonSharesIssuableUnderStockOptionPlans
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7982"
      unitRef="Shares">99238</fil:CommonSharesIssuableUnderStockOptionPlans>
    <fil:CommonSharesIssuableUnderStockOptionPlans
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7983"
      unitRef="Shares">147555</fil:CommonSharesIssuableUnderStockOptionPlans>
    <fil:AverageCommonSharesOutstandingAssumingDilution
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7984"
      unitRef="Shares">3269677</fil:AverageCommonSharesOutstandingAssumingDilution>
    <fil:AverageCommonSharesOutstandingAssumingDilution
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7985"
      unitRef="Shares">3278689</fil:AverageCommonSharesOutstandingAssumingDilution>
    <us-gaap:DisclosureOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTextBlock contextRef="D250601_260531" id="ixv-6206">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;12. &#160;Employee Stock Purchase Plan:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;In March 2004, the Company reserved 295,000 shares of common stock for issuance pursuant to a non-qualified employee stock purchase plan. &#160;Participation in the employee stock purchase plan is voluntary for all eligible employees of the Company. &#160;Purchase of common shares can be made by employee contributions through payroll deductions and without brokers&#x2019; fees. &#160;At the end of each calendar quarter, the employee contributions will be applied to the purchase of common shares using a share value equal to the mean between the closing bid and ask prices of the stock on that date. &#160;These shares are distributed to the employees at the end of each calendar quarter or upon withdrawal from the plan. &#160;During the years ended May 31, 2026 and 2025, 90 ($43.88 to $58.02 price per share) and 155 ($32.51 to $49.40 price per share) common shares, respectively, were issued to employees. As of May 31, 2026, 215,748 shares were reserved for further issue. &lt;/p&gt;
</us-gaap:DisclosureOfShareBasedCompensationArrangementsByShareBasedPaymentAwardTextBlock>
    <fil:CommonSharesIssuedToEmployees
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7986"
      unitRef="Shares">90</fil:CommonSharesIssuedToEmployees>
    <fil:CommonSharesIssuedToEmployees
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7987"
      unitRef="Shares">155</fil:CommonSharesIssuedToEmployees>
    <fil:SharesReservedForFurtherIssue
      contextRef="I260531"
      decimals="INF"
      id="ixv-7988"
      unitRef="Shares">215748</fil:SharesReservedForFurtherIssue>
    <us-gaap:DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock contextRef="D250601_260531" id="ixv-6212">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;13. &#160;Stock Option Plans:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;In 2025, the Company adopted a stock option plan which permits the Company to grant both incentive stock options and non-qualified stock options. &#160;The incentive stock options qualify for preferential treatment under the Internal Revenue Code. &#160;Under this plan, 316,200 shares of common stock have been reserved for grant to key employees and directors of the Company and 83,850 shares have been granted as of May 31, 2026. Under the plan, the option price may not be less than the fair market value of the stock at the time the options are granted. Options vest immediately and expire ten years from the date of grant.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Using the Black-Scholes option pricing model, the weighted average estimated fair value of each option granted under the plan was $19.53 during 2026 and $13.61 during 2025. &#160;The pricing model uses the assumptions noted in the following table. &#160;Expected volatility is based on the historical volatility of the Company's stock. &#160;The risk-free interest rate for periods within the contractual life of the option is based on the U.S. Treasury yield curve in effect at the time of the grant. &#160;The expected life of options granted is derived from previous history of stock exercises from the grant date and represents the period of time that options granted are expected to be outstanding. &#160;The Company uses historical data to estimate option exercise and employee termination assumptions under the valuation model. &#160;The Company has never paid dividends on its common stock and does not anticipate doing so in the foreseeable future.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:217.5pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.5pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:7.5pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:217.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Risk-free interest rate&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;3.84%&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:7.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;3.87%&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:217.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Expected life in years&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;4.3&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:7.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;4.2&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:217.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Expected volatility &lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt; 42%&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:7.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;39%&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:4pt"&gt;&lt;td style="width:217.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Expected dividend yield&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;0%&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:7.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;0%&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;The following is a summary of stock option activity:&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:62.3pt;border-bottom:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&lt;b&gt;Shares&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt;border-bottom:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-bottom:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&lt;b&gt;Weighted Average Exercise Price&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-bottom:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&lt;b&gt;Intrinsic Value&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Outstanding - May 31, 2024&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-top:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;340,500&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt;border-top:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-top:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;18.07&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-top:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;11,185,815&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt; &#160;&#160;&#160;&#160;Options granted&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;89,800&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;37.24&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt; &#160;&#160;&#160;&#160;Less: options exercised&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;31,000&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;11.51&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt; &#160;&#160;&#160;&#160;Less: options expired&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;-&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Outstanding - May 31, 2025&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-top:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;399,300&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt;border-top:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;22.89&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;6,341,305&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt; &#160;&#160;&#160;&#160;Options granted&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;83,850&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;49.14&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt; &#160;&#160;&#160;&#160;Less: options exercised&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;99,205&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;19.35&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt; &#160;&#160;&#160;&#160;Less: options expired&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;1,500&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;-&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:12.55pt"&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Outstanding - May 31, 2026&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;382,445&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;29.58&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;8,386,635&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;We calculated intrinsic value for those options that had an exercise price lower than the market price of our common shares as of the balance sheet dates. &#160;The aggregate intrinsic value of outstanding options as of the end of each fiscal year is calculated as the difference between the exercise price of the underlying options and the market price of our common shares for the options that were in-the-money at that date (346,445 at May 31, 2026 and 309,500 at May 31, 2025). &#160;The Company's closing stock price was $51.00 and $36.93 as of May 31, 2026 and 2025. &#160;As of May 31, 2026, there are 232,350 options available for future grants under the 2025 stock option plan. &#160;$1,920,098 was received from the exercise of options during the fiscal year ended May 31, 2026; $356,883 was received from the exercise of options during the fiscal year ended May 31, 2025.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The following table summarizes information about stock options outstanding at May 31, 2026:&lt;/p&gt;
&lt;p style="font:6pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:367.2pt"&gt;&lt;tr&gt;&lt;td colspan="4" style="width:360pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;Outstanding and Exercisable&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;margin-right:-9pt;color:#000000;text-align:center"&gt;Range of Exercise Prices&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Number of Options&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Weighted Average Remaining Years of Contractual Life&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Weighted Average Exercise Price&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$ &#160;9.01-$10.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;30,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;4.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$ &#160;9.69&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:12.15pt"&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$10.01-$11.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;10,250&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;3.1&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$10.17&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:12.15pt"&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$11.01-$12.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;70,850&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;4.6&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$11.68&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:12.15pt"&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$12.01-$13.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;3,750&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;1.2&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$12.28&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$13.01-$14.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;5,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;0.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$13.80&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$19.01-$20.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;42,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;6.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$19.96&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$20.01-$21.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;23,250&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;7.4&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$20.78&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$30.01-$31.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;42,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;8.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$30.55&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$43.01-$44.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;77,345&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;8.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$43.53&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$46.01-$47.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;42,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;7.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$46.99&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$56.01-$57.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;36,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;9.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$56.43&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$ &#160;9.01-$57.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;382,445&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;7.1&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$29.58&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The following table summarizes information about stock options outstanding at May 31, 2025:&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:367.2pt"&gt;&lt;tr&gt;&lt;td colspan="4" style="width:360pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;Outstanding and Exercisable&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;margin-right:-9pt;color:#000000;text-align:center"&gt;Range of Exercise Prices&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Number of Options&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Weighted Average Remaining Years of Contractual Life&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Weighted Average Exercise Price&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$ &#160;9.01-$10.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;45,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;5.8&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$ &#160;9.71&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:12.15pt"&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$10.01-$11.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;15,250&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;3.7&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$10.21&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:12.15pt"&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$11.01-$12.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;99,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;5.4&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$11.72&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$12.01-$13.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;6,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;1.7&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$12.41&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$13.01-$14.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;10,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;1.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$13.80&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$16.01-$17.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;10,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;0.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$16.40&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$19.01-$20.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;47,500&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;7.3&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$19.89&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$20.01-$21.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;33,750&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;8.4&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$20.78&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$30.01-$31.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;43,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;9.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$30.55&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$43.01-$44.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;46,800&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;9.4&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$43.38&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$46.01-$47.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;43,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;8.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$46.99&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$ &#160;9.01-$47.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;399,300&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;6.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$22.89&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:DisclosureOfCompensationRelatedCostsShareBasedPaymentsTextBlock>
    <us-gaap:FairValueOptionTextBlock contextRef="D250601_260531" id="ixv-6219">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:217.5pt" valign="top"&gt;&lt;/td&gt;&lt;td style="width:67.5pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;2026&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:7.5pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt;border-bottom:0.75pt solid #000000" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;2025&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:217.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Risk-free interest rate&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;3.84%&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:7.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;3.87%&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:217.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Expected life in years&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;4.3&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:7.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;4.2&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:217.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Expected volatility &lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt; 42%&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:7.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;39%&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:4pt"&gt;&lt;td style="width:217.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;Expected dividend yield&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;0%&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:7.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:67.5pt" valign="top"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;0%&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
</us-gaap:FairValueOptionTextBlock>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7989"
      unitRef="Pure">0.0384</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7990"
      unitRef="Pure">0.0387</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsRiskFreeInterestRate>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1 contextRef="D250601_260531" id="ixv-7991">P4Y3M18D</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1>
    <us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1 contextRef="D240601_250531" id="ixv-7992">P4Y2M12D</us-gaap:SharebasedCompensationArrangementBySharebasedPaymentAwardFairValueAssumptionsExpectedTerm1>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7993"
      unitRef="Pure">0.42</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7994"
      unitRef="Pure">0.39</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedVolatilityRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-7995"
      unitRef="Pure">0</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-7996"
      unitRef="Pure">0</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardFairValueAssumptionsExpectedDividendRate>
    <us-gaap:ScheduleOfStockOptionsRollForwardTableTextBlock contextRef="D250601_260531" id="ixv-6279">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:360pt"&gt;&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;/td&gt;&lt;td style="width:62.3pt;border-bottom:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&lt;b&gt;Shares&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt;border-bottom:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-bottom:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&lt;b&gt;Weighted Average Exercise Price&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-bottom:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;&lt;b&gt;Intrinsic Value&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Outstanding - May 31, 2024&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-top:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;340,500&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt;border-top:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-top:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;18.07&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-top:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;11,185,815&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt; &#160;&#160;&#160;&#160;Options granted&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;89,800&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;37.24&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt; &#160;&#160;&#160;&#160;Less: options exercised&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;31,000&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;11.51&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt; &#160;&#160;&#160;&#160;Less: options expired&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;-&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;-&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Outstanding - May 31, 2025&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-top:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;399,300&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt;border-top:0.5pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;22.89&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;6,341,305&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt; &#160;&#160;&#160;&#160;Options granted&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;83,850&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;49.14&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt; &#160;&#160;&#160;&#160;Less: options exercised&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;99,205&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;19.35&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt; &#160;&#160;&#160;&#160;Less: options expired&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;1,500&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;-&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:12.55pt"&gt;&lt;td style="width:171.2pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Outstanding - May 31, 2026&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-top:0.5pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:right"&gt;&lt;b&gt;382,445&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:1.9pt;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080"&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:7pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:55pt"&gt;29.58&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:62.3pt;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&lt;kbd style="position:absolute;font:10pt Times New Roman;margin-left:6pt"&gt;$&lt;/kbd&gt;&lt;kbd style="position:absolute;text-align:right;font:10pt Times New Roman;width:56pt"&gt;8,386,635&lt;/kbd&gt;&#160;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:ScheduleOfStockOptionsRollForwardTableTextBlock>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber
      contextRef="I240531"
      decimals="INF"
      id="ixv-7997"
      unitRef="Shares">340500</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice
      contextRef="I240531"
      decimals="INF"
      id="ixv-7998"
      unitRef="UsdPerShare">18.07</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue
      contextRef="I240531"
      decimals="INF"
      id="ixv-7999"
      unitRef="USD">11185815</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-8000"
      unitRef="Shares">89800</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-8001"
      unitRef="UsdPerShare">37.24</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice>
    <us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-8002"
      unitRef="Shares">31000</us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-8003"
      unitRef="UsdPerShare">11.51</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExpirationsInPeriod
      contextRef="D240601_250531"
      decimals="128"
      id="ixv-8004"
      unitRef="Shares">0</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExpirationsInPeriod>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExpirationsInPeriodWeightedAverageExercisePrice
      contextRef="D240601_250531"
      decimals="128"
      id="ixv-8005"
      unitRef="UsdPerShare">0</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExpirationsInPeriodWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber
      contextRef="I250531"
      decimals="INF"
      id="ixv-8006"
      unitRef="Shares">399300</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice
      contextRef="I250531"
      decimals="INF"
      id="ixv-8007"
      unitRef="UsdPerShare">22.89</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue
      contextRef="I250531"
      decimals="INF"
      id="ixv-8008"
      unitRef="USD">6341305</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-8009"
      unitRef="Shares">83850</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsGrantsInPeriodGross>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-8010"
      unitRef="UsdPerShare">49.14</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsGrantsInPeriodWeightedAverageExercisePrice>
    <us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-8011"
      unitRef="Shares">99205</us-gaap:StockIssuedDuringPeriodSharesStockOptionsExercised>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-8012"
      unitRef="UsdPerShare">19.35</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExercisesInPeriodWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExpirationsInPeriod
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-8013"
      unitRef="Shares">1500</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsExpirationsInPeriod>
    <us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExpirationsInPeriodWeightedAverageExercisePrice
      contextRef="D250601_260531"
      decimals="128"
      id="ixv-8014"
      unitRef="UsdPerShare">0</us-gaap:ShareBasedCompensationArrangementsByShareBasedPaymentAwardOptionsExpirationsInPeriodWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber
      contextRef="I260531"
      decimals="INF"
      id="ixv-8015"
      unitRef="Shares">382445</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingNumber>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice
      contextRef="I260531"
      decimals="INF"
      id="ixv-8016"
      unitRef="UsdPerShare">29.58</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingWeightedAverageExercisePrice>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue
      contextRef="I260531"
      decimals="INF"
      id="ixv-8017"
      unitRef="USD">8386635</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsOutstandingIntrinsicValue>
    <us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsVestedAndExpectedToVestOutstandingAndExercisableTableTextBlock contextRef="D250601_260531" id="ixv-6428">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The following table summarizes information about stock options outstanding at May 31, 2026:&lt;/p&gt;
&lt;p style="font:6pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:367.2pt"&gt;&lt;tr&gt;&lt;td colspan="4" style="width:360pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;Outstanding and Exercisable&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;margin-right:-9pt;color:#000000;text-align:center"&gt;Range of Exercise Prices&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Number of Options&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Weighted Average Remaining Years of Contractual Life&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Weighted Average Exercise Price&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$ &#160;9.01-$10.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;30,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;4.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$ &#160;9.69&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:12.15pt"&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$10.01-$11.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;10,250&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;3.1&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$10.17&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:12.15pt"&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$11.01-$12.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;70,850&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;4.6&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$11.68&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:12.15pt"&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$12.01-$13.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;3,750&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;1.2&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$12.28&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$13.01-$14.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;5,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;0.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$13.80&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$19.01-$20.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;42,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;6.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$19.96&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$20.01-$21.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;23,250&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;7.4&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$20.78&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$30.01-$31.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;42,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;8.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$30.55&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$43.01-$44.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;77,345&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;8.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$43.53&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$46.01-$47.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;42,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;7.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$46.99&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$56.01-$57.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;36,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;9.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$56.43&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$ &#160;9.01-$57.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;382,445&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;7.1&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$29.58&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The following table summarizes information about stock options outstanding at May 31, 2025:&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;table style="margin:0 auto;border-collapse:collapse;width:367.2pt"&gt;&lt;tr&gt;&lt;td colspan="4" style="width:360pt;border-bottom:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:center"&gt;&lt;b&gt;Outstanding and Exercisable&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;margin-right:-9pt;color:#000000;text-align:center"&gt;Range of Exercise Prices&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Number of Options&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Weighted Average Remaining Years of Contractual Life&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt;border-top:0.75pt solid #000000" valign="bottom"&gt;&lt;p style="font:9pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;Weighted Average Exercise Price&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$ &#160;9.01-$10.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;45,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;5.8&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$ &#160;9.71&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:12.15pt"&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$10.01-$11.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;15,250&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;3.7&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$10.21&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr style="height:12.15pt"&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$11.01-$12.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;99,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;5.4&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$11.72&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$12.01-$13.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;6,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;1.7&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$12.41&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$13.01-$14.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;10,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;1.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$13.80&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$16.01-$17.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;10,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;0.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$16.40&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$19.01-$20.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;47,500&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;7.3&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$19.89&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$20.01-$21.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;33,750&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;8.4&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$20.78&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$30.01-$31.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;43,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;9.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$30.55&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$43.01-$44.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;46,800&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;9.4&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$43.38&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$46.01-$47.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;43,000&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;8.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$46.99&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style="width:144pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$ &#160;9.01-$47.00&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:50.4pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:right"&gt;399,300&lt;/p&gt;
&lt;/td&gt;&lt;td style="width:100.8pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;6.9&lt;/p&gt;
&lt;/td&gt;&lt;td colspan="2" style="width:72pt;border-top:1pt solid #000000;border-bottom:2.25pt solid #000000" valign="bottom"&gt;&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:center"&gt;$22.89&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
</us-gaap:ShareBasedCompensationArrangementByShareBasedPaymentAwardOptionsVestedAndExpectedToVestOutstandingAndExercisableTableTextBlock>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N90110001"
      decimals="INF"
      id="ixv-8018"
      unitRef="Shares">30000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N90110001"
      id="ixv-8019">P4Y10M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N90110001"
      decimals="INF"
      id="ixv-8020"
      unitRef="UsdPerShare">9.69</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N100111001"
      decimals="INF"
      id="ixv-8021"
      unitRef="Shares">10250</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N100111001"
      id="ixv-8022">P3Y1M6D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N100111001"
      decimals="INF"
      id="ixv-8023"
      unitRef="UsdPerShare">10.17</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N110112001"
      decimals="INF"
      id="ixv-8024"
      unitRef="Shares">70850</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N110112001"
      id="ixv-8025">P4Y7M6D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N110112001"
      decimals="INF"
      id="ixv-8026"
      unitRef="UsdPerShare">11.68</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N120113001"
      decimals="INF"
      id="ixv-8027"
      unitRef="Shares">3750</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N120113001"
      id="ixv-8028">P1Y2M12D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N120113001"
      decimals="INF"
      id="ixv-8029"
      unitRef="UsdPerShare">12.28</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N130114001"
      decimals="INF"
      id="ixv-8030"
      unitRef="Shares">5000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N130114001"
      id="ixv-8031">P0Y10M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N130114001"
      decimals="INF"
      id="ixv-8032"
      unitRef="UsdPerShare">13.8</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N190120001"
      decimals="INF"
      id="ixv-8033"
      unitRef="Shares">42000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N190120001"
      id="ixv-8034">P6Y10M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N190120001"
      decimals="INF"
      id="ixv-8035"
      unitRef="UsdPerShare">19.96</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N20012100"
      decimals="INF"
      id="ixv-8036"
      unitRef="Shares">23250</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N20012100"
      id="ixv-8037">P7Y4M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N20012100"
      decimals="INF"
      id="ixv-8038"
      unitRef="UsdPerShare">20.78</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N30013100"
      decimals="INF"
      id="ixv-8039"
      unitRef="Shares">42000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N30013100"
      id="ixv-8040">P8Y10M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N30013100"
      decimals="INF"
      id="ixv-8041"
      unitRef="UsdPerShare">30.55</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N43014400"
      decimals="INF"
      id="ixv-8042"
      unitRef="Shares">77345</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N43014400"
      id="ixv-8043">P8Y10M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N43014400"
      decimals="INF"
      id="ixv-8044"
      unitRef="UsdPerShare">43.53</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N46014700"
      decimals="INF"
      id="ixv-8045"
      unitRef="Shares">42000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N46014700"
      id="ixv-8046">P7Y10M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N46014700"
      decimals="INF"
      id="ixv-8047"
      unitRef="UsdPerShare">46.99</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N56015700"
      decimals="INF"
      id="ixv-8048"
      unitRef="Shares">36000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N56015700"
      id="ixv-8049">P9Y10M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N56015700"
      decimals="INF"
      id="ixv-8050"
      unitRef="UsdPerShare">56.43</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N9015700"
      decimals="INF"
      id="ixv-8051"
      unitRef="Shares">382445</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D250601_260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N9015700"
      id="ixv-8052">P7Y1M6D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I260531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N9015700"
      decimals="INF"
      id="ixv-8053"
      unitRef="UsdPerShare">29.58</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N90110001"
      decimals="INF"
      id="ixv-8054"
      unitRef="Shares">45000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N90110001"
      id="ixv-8055">P5Y9M18D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N90110001"
      decimals="INF"
      id="ixv-8056"
      unitRef="UsdPerShare">9.71</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N100111001"
      decimals="INF"
      id="ixv-8057"
      unitRef="Shares">15250</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N100111001"
      id="ixv-8058">P3Y8M12D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N100111001"
      decimals="INF"
      id="ixv-8059"
      unitRef="UsdPerShare">10.21</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N110112001"
      decimals="INF"
      id="ixv-8060"
      unitRef="Shares">99000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N110112001"
      id="ixv-8061">P5Y4M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N110112001"
      decimals="INF"
      id="ixv-8062"
      unitRef="UsdPerShare">11.72</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N120113001"
      decimals="INF"
      id="ixv-8063"
      unitRef="Shares">6000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N120113001"
      id="ixv-8064">P1Y8M12D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N120113001"
      decimals="INF"
      id="ixv-8065"
      unitRef="UsdPerShare">12.41</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N130114001"
      decimals="INF"
      id="ixv-8066"
      unitRef="Shares">10000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N130114001"
      id="ixv-8067">P1Y10M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N130114001"
      decimals="INF"
      id="ixv-8068"
      unitRef="UsdPerShare">13.8</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N160117001"
      decimals="INF"
      id="ixv-8069"
      unitRef="Shares">10000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N160117001"
      id="ixv-8070">P0Y10M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N160117001"
      decimals="INF"
      id="ixv-8071"
      unitRef="UsdPerShare">16.4</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N190120001"
      decimals="INF"
      id="ixv-8072"
      unitRef="Shares">47500</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N190120001"
      id="ixv-8073">P7Y3M18D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N190120001"
      decimals="INF"
      id="ixv-8074"
      unitRef="UsdPerShare">19.89</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N20012100"
      decimals="INF"
      id="ixv-8075"
      unitRef="Shares">33750</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N20012100"
      id="ixv-8076">P8Y4M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N20012100"
      decimals="INF"
      id="ixv-8077"
      unitRef="UsdPerShare">20.78</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N30013100"
      decimals="INF"
      id="ixv-8078"
      unitRef="Shares">43000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N30013100"
      id="ixv-8079">P9Y10M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N30013100"
      decimals="INF"
      id="ixv-8080"
      unitRef="UsdPerShare">30.55</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N43014400"
      decimals="INF"
      id="ixv-8081"
      unitRef="Shares">46800</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N43014400"
      id="ixv-8082">P9Y4M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N43014400"
      decimals="INF"
      id="ixv-8083"
      unitRef="UsdPerShare">43.38</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N46014700"
      decimals="INF"
      id="ixv-8084"
      unitRef="Shares">43000</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N46014700"
      id="ixv-8085">P8Y10M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N46014700"
      decimals="INF"
      id="ixv-8086"
      unitRef="UsdPerShare">46.99</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N9014700"
      decimals="INF"
      id="ixv-8087"
      unitRef="Shares">399300</us-gaap:ShareBasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeNumberOfOutstandingOptions>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2
      contextRef="D240601_250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N9014700"
      id="ixv-8088">P6Y10M24D</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageRemainingContractualTerm2>
    <us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1
      contextRef="I250531_ShareBasedCompensationSharesAuthUnderStockOptionPlansByExercisePriceRange-N9014700"
      decimals="INF"
      id="ixv-8089"
      unitRef="UsdPerShare">22.89</us-gaap:SharebasedCompensationSharesAuthorizedUnderStockOptionPlansExercisePriceRangeOutstandingOptionsWeightedAverageExercisePriceBeginningBalance1>
    <us-gaap:PensionAndOtherPostretirementBenefitsDisclosureTextBlock contextRef="D250601_260531" id="ixv-6687">&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&lt;span style="color:#000080"&gt;&lt;b&gt;1&lt;/b&gt;&lt;b&gt;4&lt;/b&gt;&lt;b&gt;. &#160;Retirement Plan:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company maintains a retirement plan for essentially all employees pursuant to Section 401(k) of the Internal Revenue Code. &#160;The Company matches a percentage of employee voluntary salary deferrals subject to limitations. &#160;The Company may also make discretionary contributions as determined annually by the Company's Board of Directors. &#160;The amount expensed under the plan was $471,767 and $462,445 for the years ended May 31, 2026 and 2025.&lt;/p&gt;
</us-gaap:PensionAndOtherPostretirementBenefitsDisclosureTextBlock>
    <us-gaap:PensionAndOtherPostretirementBenefitExpense
      contextRef="D250601_260531"
      decimals="INF"
      id="ixv-8090"
      unitRef="USD">471767</us-gaap:PensionAndOtherPostretirementBenefitExpense>
    <us-gaap:PensionAndOtherPostretirementBenefitExpense
      contextRef="D240601_250531"
      decimals="INF"
      id="ixv-8091"
      unitRef="USD">462445</us-gaap:PensionAndOtherPostretirementBenefitExpense>
    <us-gaap:FairValueDisclosuresTextBlock contextRef="D250601_260531" id="ixv-6696">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;15. &#160;Fair Value of Financial Instruments:&lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The carrying amounts of cash and cash equivalents, accounts receivable, accounts payable, and accrued liabilities approximate fair value because of the short maturity of these instruments.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The fair values of short-term investments were determined as described in Note 1.&lt;/p&gt;
</us-gaap:FairValueDisclosuresTextBlock>
    <us-gaap:LegalMattersAndContingenciesTextBlock contextRef="D250601_260531" id="ixv-6704">&lt;p style="font:10pt Times New Roman;margin:0;color:#000080;text-align:justify"&gt;&lt;b&gt;16. &#160;Legal Proceedings: &lt;/b&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Company has been named as a third-party defendant in an action captioned Board of Managers of the 432 Park Condominium, et al. v. 56&lt;span style="vertical-align:super"&gt;th&lt;/span&gt; and Park (NY) Owner LLC, et al. (the &#x201c;Original Action&#x201d;). &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Original Action was filed on or about September 23, 2021. In the Original Action, the Board of Managers of 432 Park Condominium (the &#x201c;Owner&#x201d;), a condominium association for a high-rise condominium building (the &#x201c;Building&#x201d;) located at 432 Park Avenue in New York, N.Y., asserts a claim against the condominium sponsor, 56&lt;span style="vertical-align:super"&gt;th&lt;/span&gt; and Park (NY) Owner LLC (the &#x201c;Sponsor&#x201d;) for damages arising from construction and design defects to the residential and commercial units at the Building. &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Sponsor subsequently filed a third-party complaint against LendLease Construction (US) LMB (&#x201c;LendLease&#x201d;) and other parties involved in the Building&#x2019;s design. As to LendLease, the third-party complaint alleges breach of a construction management contract between LendLease and the Sponsor and negligence arising from purported failure to perform under the contract, and seeks indemnification against any damages asserted against the Sponsor by the Owner.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;LendLease subsequently initiated a third-party complaint seeking indemnification from entities with whom LendLease had contracted for the supply of materials and services in connection with construction of the Building. The third-party complaint also names the Company as a third-party defendant based upon a contract between the Company and LendLease to supply 16 Viscous Damping Devices that were incorporated into a Tuned Mass Damper system designed by a third party to limit accelerations of the Building during wind events. The Company has timely filed and served an answer denying the allegations in LendLease&#x2019;s third- party complaint.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;On June 15, 2026, the Owner filed an amended third-party complaint asserting claims for fraud against the Sponsor arising from construction of the fa&#xe7;ade at the Building (the &#x201c;Fraud Action&#x201d;). The Sponsor subsequently filed a third-party complaint against &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&lt;span style="font-size:10pt"&gt;LendLease for contribution and indemnity relating to the Fraud Action, and LendLease subsequently initiated a third-party complaint against multiple parties, including the Company, relating to the Fraud Action. The Company believes it had no involvement in the fa&#xe7;ade work performed at the Building. After the Company and other third-party defendants objected to their being named defendants in LendLease&#x2019;s third-party complaint relating to the Fraud Action, LendLease agreed to discontinue, without prejudice and pursuant to a proposed stipulation, its third-party claims against the Company and other third-party defendants, but only to the extent those claims relate to the Fraud Action. The Company does not expect to participate in discovery proceedings relating to the Fraud Action. However, the proposed stipulation has not yet been agreed to by all parties, and thus the Company has timely filed and served an answer denying the allegations in LendLease&#x2019;s third-party complaint relating to the Fraud Action.&lt;/span&gt;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;The Original Action and the Fraud Action, and all of the related third-party actions thereto, are pending in the Commercial Division of the Supreme Court, New York County. &lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;Discovery relating to the Original Action is substantially complete. Discovery relating to the Fraud Action remains ongoing and is expected to conclude on or about February 26, 2027.&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;&#160;&lt;/p&gt;
&lt;p style="font:10pt Times New Roman;margin:0;color:#000000;text-align:justify"&gt;At present, the Company is unable to determine the likelihood of an unfavorable outcome or to quantify a potential loss.&lt;/p&gt;
</us-gaap:LegalMattersAndContingenciesTextBlock>
    <us-gaap:LossContingencyPartiesJointlyAndSeverallyLiableInLitigation contextRef="D250601_260531" id="ixv-8092">The Company has been named as a third-party defendant</us-gaap:LossContingencyPartiesJointlyAndSeverallyLiableInLitigation>
    <us-gaap:LossContingencyNameOfPlaintiff contextRef="D250601_260531" id="ixv-8093">Board of Managers of the 432 Park Condominium, et al.</us-gaap:LossContingencyNameOfPlaintiff>
    <us-gaap:LossContingencyLawsuitFilingDate1 contextRef="D250601_260531" id="ixv-8094">2021-09-23</us-gaap:LossContingencyLawsuitFilingDate1>
    <us-gaap:LossContingencyAllegations contextRef="D250601_260531" id="ixv-8095">construction and design defects to the residential and commercial units at the Building</us-gaap:LossContingencyAllegations>
    <fil:LossContingencyInestimableLoss2 contextRef="D250601_260531" id="ixv-8096">At present, the Company is unable to determine the likelihood of an unfavorable outcome or to quantify a potential loss.</fil:LossContingencyInestimableLoss2>
    <link:footnoteLink
      xlink:role="http://www.xbrl.org/2003/role/link"
      xlink:type="extended">
        <link:loc
          xlink:href="#fact5"
          xlink:label="fact5"
          xlink:type="locator"/>
        <link:footnote id="Note2" xlink:label="Note2" xlink:role="http://www.xbrl.org/2003/role/footnote" xlink:type="resource" xml:lang="en-US">Note 2</link:footnote>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact5"
          xlink:to="Note2"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact6"
          xlink:label="fact6"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact6"
          xlink:to="Note2"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact7"
          xlink:label="fact7"
          xlink:type="locator"/>
        <link:footnote id="Note3" xlink:label="Note3" xlink:role="http://www.xbrl.org/2003/role/footnote" xlink:type="resource" xml:lang="en-US">Note 3</link:footnote>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact7"
          xlink:to="Note3"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact8"
          xlink:label="fact8"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact8"
          xlink:to="Note3"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact9"
          xlink:label="fact9"
          xlink:type="locator"/>
        <link:footnote id="Note4" xlink:label="Note4" xlink:role="http://www.xbrl.org/2003/role/footnote" xlink:type="resource" xml:lang="en-US">Note 4Note 4</link:footnote>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact9"
          xlink:to="Note4"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact10"
          xlink:label="fact10"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact10"
          xlink:to="Note4"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact11"
          xlink:label="fact11"
          xlink:type="locator"/>
        <link:footnote id="Note5" xlink:label="Note5" xlink:role="http://www.xbrl.org/2003/role/footnote" xlink:type="resource" xml:lang="en-US">Note 5</link:footnote>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact11"
          xlink:to="Note5"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact12"
          xlink:label="fact12"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact12"
          xlink:to="Note5"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact13"
          xlink:label="fact13"
          xlink:type="locator"/>
        <link:footnote id="Note6" xlink:label="Note6" xlink:role="http://www.xbrl.org/2003/role/footnote" xlink:type="resource" xml:lang="en-US">Note 6</link:footnote>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact13"
          xlink:to="Note6"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact14"
          xlink:label="fact14"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact14"
          xlink:to="Note6"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact15"
          xlink:label="fact15"
          xlink:type="locator"/>
        <link:footnote id="Note10" xlink:label="Note10" xlink:role="http://www.xbrl.org/2003/role/footnote" xlink:type="resource" xml:lang="en-US">Note 10Note 10</link:footnote>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact15"
          xlink:to="Note10"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact16"
          xlink:label="fact16"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact16"
          xlink:to="Note10"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact17"
          xlink:label="fact17"
          xlink:type="locator"/>
        <link:footnote id="Note8" xlink:label="Note8" xlink:role="http://www.xbrl.org/2003/role/footnote" xlink:type="resource" xml:lang="en-US">Note 8</link:footnote>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact17"
          xlink:to="Note8"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact18"
          xlink:label="fact18"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact18"
          xlink:to="Note8"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact19"
          xlink:label="fact19"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact19"
          xlink:to="Note4"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact20"
          xlink:label="fact20"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact20"
          xlink:to="Note4"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact21"
          xlink:label="fact21"
          xlink:type="locator"/>
        <link:footnote id="Note9" xlink:label="Note9" xlink:role="http://www.xbrl.org/2003/role/footnote" xlink:type="resource" xml:lang="en-US">Note 9</link:footnote>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact21"
          xlink:to="Note9"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact22"
          xlink:label="fact22"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact22"
          xlink:to="Note9"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact23"
          xlink:label="fact23"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact23"
          xlink:to="Note10"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact24"
          xlink:label="fact24"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact24"
          xlink:to="Note10"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact25"
          xlink:label="fact25"
          xlink:type="locator"/>
        <link:footnote id="Note11" xlink:label="Note11" xlink:role="http://www.xbrl.org/2003/role/footnote" xlink:type="resource" xml:lang="en-US">Note 11Note 11</link:footnote>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact25"
          xlink:to="Note11"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact26"
          xlink:label="fact26"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact26"
          xlink:to="Note11"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact27"
          xlink:label="fact27"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact27"
          xlink:to="Note11"
          xlink:type="arc"/>
        <link:loc
          xlink:href="#fact28"
          xlink:label="fact28"
          xlink:type="locator"/>
        <link:footnoteArc
          xlink:arcrole="http://www.xbrl.org/2003/arcrole/fact-footnote"
          xlink:from="fact28"
          xlink:to="Note11"
          xlink:type="arc"/>
    </link:footnoteLink>
</xbrl>
