<!doctype html>
<html class="no-js" lang="en">
    <head>
        

        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />

        
        
        
    
        
        <script src="//a.fsdn.com/con/js/min/sf.sandiego-cmp-top.js?1747330880"></script>

        
    

        


            


    <script>
        bizx.cmp.ifConsent({ purposes: 'ads', vendors: 'adshield'}, function () {
            var s = document.createElement('script');
            s.async = true;s.id = "FIXtUCr";
            s.setAttribute('data-sdk', 'l/1.1.5');
            s.setAttribute('data-cfasync', 'false');
            s.src = "https://as.sourceforge.net/loader.min.js";
            s.charset = "UTF-8";
            s.data="ithc1r8q8e878b8v808e1p8efy81108k3e8iy28y8e808784y8i801m8i8i878y8e387848r8i28y8e878i8g8712z80808y8e8sf12y81108k8s8e1z89";
            s.setAttribute('onload', "!async function(){let e='html-load.com';const t=window,r=e=>new Promise((t=>setTimeout(t,e))),o=t.atob,a=t.btoa,n=r=>{const n=o('VGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQgcHJvcGVybHkgZHVlIHRvIGluY29ycmVjdCAvIGJhZCBmaWx0ZXJpbmcgcnVsZShzKSBvZiBhZGJsb2NrZXJzIGluIHVzZS4gUGxlYXNlIGRpc2FibGUgYWxsIGFkYmxvY2tlcnMgdG8gY29udGludWUgdXNpbmcgdGhlIHdlYnNpdGUuIChjbGljayBPSyBpZiB5b3UnZCBsaWtlIHRvIGxlYXJuIG1vcmUp');if(confirm(n)){const o=new t.URL('https://report.error-report.com/modal'),n=o.searchParams;n.set('url',a(location.href)),n.set('error',a(r.toString())),n.set('domain',e),location.href=o.href}else location.reload()};try{const l=()=>new Promise((e=>{let r=Math.random().toString(),o=Math.random().toString();t.addEventListener('message',(e=>e.data===r&&t.postMessage(o,'*'))),t.addEventListener('message',(t=>t.data===o&&e())),t.postMessage(r,'*')}));async function s(){try{let e=!1,o=Math.random().toString();if(t.addEventListener('message',(t=>{t.data===o+'_as_res'&&(e=!0)})),t.postMessage(o+'_as_req','*'),await l(),await r(500),e)return!0}catch(e){console.error(e)}return!1}const c=[100,500,1e3];for(let i=0;i<=c.length&&!await s();i++){if(i===c.length-1)throw o('RmFpbGVkIHRvIGxvYWQgd2Vic2l0ZSBwcm9wZXJseSBzaW5jZSA')+e+o('IGlzIHRhaW50ZWQuIFBsZWFzZSBhbGxvdyA')+e;await r(c[i])}}catch(d){console.error(d);try{t.localStorage.setItem(t.location.host+'_fa_'+a('last_bfa_at'),Date.now().toString())}catch(m){}try{setInterval((()=>document.querySelectorAll('link,style').forEach((e=>e.remove()))),100),alert(d);const h=await(await fetch('https://error-report.com/report?type=loader_light&url='+a(location.href)+'&error='+a(d),{method:'POST'})).text();let g=!1;t.addEventListener('message',(e=>{'as_modal_loaded'===e.data&&(g=!0)}));let p=document.createElement('iframe');const v=new t.URL('https://report.error-report.com/modal'),u=v.searchParams;u.set('url',a(location.href)),u.set('eventId',h),u.set('error',a(d)),u.set('domain',e),p.src=v.href,p.setAttribute('style','width:100vw;height:100vh;z-index:2147483647;position:fixed;left:0;top:0;');const I=e=>{'close-error-report'===e.data&&(p.remove(),t.removeEventListener('message',I))};t.addEventListener('message',I),document.body.appendChild(p);const G=()=>{const e=p.getBoundingClientRect();return'none'!==t.getComputedStyle(p).display&&0!==e.width&&0!==e.height},f=setInterval((()=>{if(!document.contains(p))return clearInterval(f);G()||(n(d),clearInterval(f))}),1e3);setTimeout((()=>{g||n(errStr)}),3e3)}catch(w){n(w)}}}();");
            s.setAttribute('onerror', "!async function(){const t=window,e=t.atob,r=t.btoa;let o=JSON.parse(e('WyJodG1sLWxvYWQuY29tIiwiZmIuaHRtbC1sb2FkLmNvbSIsImNvbnRlbnQtbG9hZGVyLmNvbSIsImZiLmNvbnRlbnQtbG9hZGVyLmNvbSJd'));const a=o=>{const a=e('VGhpcyBwYWdlIGNvdWxkIG5vdCBiZSBsb2FkZWQgcHJvcGVybHkgZHVlIHRvIGluY29ycmVjdCAvIGJhZCBmaWx0ZXJpbmcgcnVsZShzKSBvZiBhZGJsb2NrZXJzIGluIHVzZS4gUGxlYXNlIGRpc2FibGUgYWxsIGFkYmxvY2tlcnMgdG8gY29udGludWUgdXNpbmcgdGhlIHdlYnNpdGUuIChjbGljayBPSyBpZiB5b3UnZCBsaWtlIHRvIGxlYXJuIG1vcmUp');if(confirm(a)){const e=new t.URL('https://report.error-report.com/modal'),a=e.searchParams;a.set('url',r(location.href)),a.set('error',r(o.toString())),a.set('domain',domain),location.href=e.href}else location.reload()};try{if(void 0===t.as_retry&&(t.as_retry=0),t.as_retry>=o.length)throw e('RmFpbGVkIHRvIGxvYWQgd2Vic2l0ZSBwcm9wZXJseSBzaW5jZSA')+o[0]+e('IGlzIGJsb2NrZWQuIFBsZWFzZSBhbGxvdyA')+o[0];const r=document.getElementById('FIXtUCr'),a=document.createElement('script');for(let t=0;t<r.attributes.length;t++)a.setAttribute(r.attributes[t].name,r.attributes[t].value);const n=new t.URL(r.getAttribute('src'));n.host=o[t.as_retry++],a.setAttribute('src',n.href),r.setAttribute('id',r.getAttribute('id')+'_'),r.parentNode.insertBefore(a,r),r.remove()}catch(e){console.error(e);try{t.localStorage.setItem(t.location.host+'_fa_'+r('last_bfa_at'),Date.now().toString())}catch(t){}try{setInterval((()=>document.querySelectorAll('link,style').forEach((t=>t.remove()))),100),alert(e);const o=await(await fetch('https://error-report.com/report?type=loader_light&url='+r(location.href)+'&error='+r(e),{method:'POST'})).text();let n=!1;t.addEventListener('message',(t=>{'as_modal_loaded'===t.data&&(n=!0)}));let s=document.createElement('iframe');const c=new t.URL('https://report.error-report.com/modal'),l=c.searchParams;l.set('url',r(location.href)),l.set('eventId',o),l.set('error',r(e)),l.set('domain',domain),s.src=c.href,s.setAttribute('style','width: 100vw; height: 100vh; z-index: 2147483647; position: fixed; left: 0; top: 0;');const i=e=>{'close-error-report'===e.data&&(s.remove(),t.removeEventListener('message',i))};t.addEventListener('message',i),document.body.appendChild(s);const d=()=>{const e=s.getBoundingClientRect();return'none'!==t.getComputedStyle(s).display&&0!==e.width&&0!==e.height},m=setInterval((()=>{if(!document.contains(s))return clearInterval(m);d()||(a(e),clearInterval(m))}),1e3);setTimeout((()=>{n||a(errStr,domain)}),3e3)}catch(t){a(t)}}}();");
            document.head.appendChild(s);
        });
    </script>


        <script>
            /*global unescape, window, SF*/
            // Setup our namespace
            if (!window.SF) { window.SF = {}; }
            if (!window.net) { window.net = {}; }
            if (!window.net.sf) { window.net.sf = {}; }
            SF.Ads = {};
            SF.cdn = '//a.fsdn.com/con';
            SF.alluracdn = '//a.fsdn.com/allura/cdn/allura/nf';
            SF.deploy_time = '1747330880';
            SF.sandiego = true;
            SF.sandiego_chrome = true;
            SF.variant = 'sf';
            SF.fpid = '3ed3901b-1b6f-4f1f-874b-d96ac2b38587';
            SF.billboard_route = '/software/product/$slug/';
            
            SF.Breakpoints = {
              small: 0,
              medium: 640,
              leaderboard: 743,
              billboard: 985,
              large: 1053,
              xlarge: 1295,
              xxlarge: 1366
            };
            SF.initial_breakpoints_visible = {};
            for (var bp in SF.Breakpoints) {
                if (!SF.Breakpoints.hasOwnProperty(bp)) {
                    continue;
                }
                SF.initial_breakpoints_visible[bp] = !window.matchMedia || window.matchMedia('(min-width: ' + SF.Breakpoints[bp] + 'px)').matches;
            }
            
                
                SF.Ads.viewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
                SF.Ads.viewportHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
            
        </script>

        
        <script>
            window.ID5EspConfig = {partnerId: 1787};
        </script>
        

        
<script>
    bizx.uids.gather();
</script>
<script>
                
                bizx.cmp.ifConsent({ purposes: 'ads', vendors: ['amazon-ads']}, function () {
                    
                    /*jshint ignore:start*/
                    !function(a9,a,p,s,t,A,g){if(a[a9])return;function q(c,r){a[a9]._Q.push([c,r])}a[a9]={init:function(){q("i",arguments)},fetchBids:function(){q("f",arguments)},setDisplayBids:function(){},targetingKeys:function(){return[]},_Q:[]};A=p.createElement(s);A.async=!0;A.src=t;g=p.getElementsByTagName(s)[0];g.parentNode.insertBefore(A,g)}("apstag",window,document,"script","//c.amazon-adsystem.com/aax2/apstag.js");
                    /*jshint ignore:end*/
                    /*global apstag*/

                    apstag.init({
                         pubID: 'c97760a3-e14d-4cad-9969-833f3ed793e6',
                         adServer: 'googletag'
                    });
                });
                
            

            SF.Ads.prebidOptions = {
                showIndicators: false,
                analytics: false,
                timeout: 650,
                timeouts_by_bids: {500: 5, 650: 0},
                pbjsConfig: { 
                },
                uids: { 
                    ip: "2a06:98c0:3600::103",
                },
            };

            if (!SF.Ads.prebidOptions.uids.hem) {
                SF.Ads.prebidOptions.uids.hem = bizx.uids.getHem();
            }

            SF.Ads.prebidUnits = [];
            if (SF.initial_breakpoints_visible.leaderboard) {
                var thisUnit =  {
                    bids: [{"bidder":"sovrn","params":{"tagid":"364652"}},
                            {"bidder":"rubicon","params":{"zoneId":"486000","sizes":[2],"position":"atf","accountId":"15680","siteId":"103240"}},
                            {"bidder":"appnexus","params":{"placementId":9265107}},
                            {"bidder":"sharethrough","params":{"pkey":"0O0HaNkULcWUqgdT4RyA3HmD"}},
                            {"bidder":"pubmatic","params":{"adSlot":"4741589","publisherId":"162538"}},
                            {"bidder":"smartadserver","params":{"pageId":1887797,"networkId":4559,"siteId":575816,"formatId":119583}},
                            ],
                    code: 'div-gpt-ad-1394209358853-0',
                    tag: 'SF_ProjectSum_728x90_A',
                    mediaTypes: { banner: { sizes: [] } }
                }; 
                if (SF.Ads.viewportWidth >= 728 && SF.Ads.viewportHeight >= 200){
                    thisUnit.mediaTypes.banner.sizes = [[728,90]];
                } 
                if (SF.Ads.viewportWidth >= 970 && SF.Ads.viewportHeight >= 901){
                    thisUnit.mediaTypes.banner.sizes = [[728,90],[970,250]];
                }

                SF.Ads.prebidUnits.push(thisUnit);
            }
            if (!SF.initial_breakpoints_visible.leaderboard) {
                var thisUnit =  {
                    bids: [{"bidder":"sovrn","params":{"tagid":"542316"}},
                            {"bidder":"rubicon","params":{"zoneId":"610848","sizes":[43],"position":"atf","accountId":"15680","siteId":"103240"}},
                            {"bidder":"appnexus","params":{"placementId":12559081}},
                            {"bidder":"sharethrough","params":{"pkey":"BMaGlI19W57KKQXdp5OJTkmO"}},
                            {"bidder":"pubmatic","params":{"adSlot":"4845070","publisherId":"162538"}},
                            {"bidder":"smartadserver","params":{"pageId":1887185,"networkId":4559,"siteId":575816,"formatId":119583}},
                            ],
                    code: 'div-gpt-ad-1512154506943-0',
                    tag: 'SF_Mobile_320x50_A',
                    mediaTypes: { banner: { sizes: [[320,50]] } }
                };

                SF.Ads.prebidUnits.push(thisUnit);
            }
            if (SF.initial_breakpoints_visible.large) {
                var thisUnit =  {
                    bids: [{"bidder":"sovrn","params":{"tagid":"364649"}},
                            {"bidder":"rubicon","params":{"zoneId":"486000","sizes":[15,10],"position":"atf","accountId":"15680","siteId":"103240"}},
                            {"bidder":"appnexus","params":{"placementId":9265108}},
                            {"bidder":"sharethrough","params":{"pkey":"wRfKsiMDUYdf3l7d5oiqLGNN"}},
                            {"bidder":"pubmatic","params":{"adSlot":"4741586","publisherId":"162538"}},
                            {"bidder":"smartadserver","params":{"pageId":1911495,"networkId":4559,"siteId":575816,"formatId":119583}},
                            ],
                    code: 'div-gpt-ad-1394209358855-0',
                    tag: 'SF_ProjectSum_300x250_A',
                    mediaTypes: { banner: { sizes: [[300,250],[300,600]] } }
                };

                SF.Ads.prebidUnits.push(thisUnit);
            }
            if (SF.initial_breakpoints_visible.large) {
                var thisUnit =  {
                    bids: [{"bidder":"sovrn","params":{"tagid":"364650"}},
                            {"bidder":"rubicon","params":{"zoneId":"486010","sizes":[15],"accountId":"15680","siteId":"103240"}},
                            {"bidder":"appnexus","params":{"placementId":9265109}},
                            {"bidder":"sharethrough","params":{"pkey":"7HxEnZ0CEMTA5NRl4AUaORu0"}},
                            {"bidder":"pubmatic","params":{"adSlot":"4741587","publisherId":"162538"}},
                            {"bidder":"smartadserver","params":{"pageId":1911495,"networkId":4559,"siteId":575816,"formatId":119583}},
                            ],
                    code: 'div-gpt-ad-1394209358856-0',
                    tag: 'SF_ProjectSum_300x250_B',
                    mediaTypes: { banner: { sizes: [[300,250]] } }
                };

                SF.Ads.prebidUnits.push(thisUnit);
            }
            if (SF.initial_breakpoints_visible.large) {
                var thisUnit =  {
                    bids: [{"bidder":"sovrn","params":{"tagid":"364651"}},
                            {"bidder":"rubicon","params":{"zoneId":"486010","sizes":[15],"accountId":"15680","siteId":"103240"}},
                            {"bidder":"appnexus","params":{"placementId":9265110}},
                            {"bidder":"sharethrough","params":{"pkey":"rvuxL42mH8PIbkmQJS7tHEZh"}},
                            {"bidder":"pubmatic","params":{"adSlot":"4741588","publisherId":"162538"}},
                            {"bidder":"smartadserver","params":{"pageId":1911495,"networkId":4559,"siteId":575816,"formatId":119583}},
                            ],
                    code: 'div-gpt-ad-1394209358857-0',
                    tag: 'SF_ProjectSum_300x250_C',
                    mediaTypes: { banner: { sizes: [[300,250]] } }
                };

                SF.Ads.prebidUnits.push(thisUnit);
            }
            if (SF.initial_breakpoints_visible.leaderboard) {
                var thisUnit =  {
                    bids: [{"bidder":"sovrn","params":{"tagid":"364655"}},
                            {"bidder":"rubicon","params":{"zoneId":"486010","sizes":[2],"accountId":"15680","siteId":"103240"}},
                            {"bidder":"appnexus","params":{"placementId":9265111}},
                            {"bidder":"sharethrough","params":{"pkey":"gxlPOpGoCVd0mEaTT2EaPIkD"}},
                            {"bidder":"pubmatic","params":{"adSlot":"4741590","publisherId":"162538"}},
                            {"bidder":"smartadserver","params":{"pageId":1887797,"networkId":4559,"siteId":575816,"formatId":119583}},
                            ],
                    code: 'div-gpt-ad-1392148208790-0',
                    tag: 'SF_ProjectSum_728x90_B',
                    mediaTypes: { banner: { sizes: [] } }
                }; 
                if (SF.Ads.viewportWidth >= 728 && SF.Ads.viewportHeight >= 200){
                    thisUnit.mediaTypes.banner.sizes = [[728,90]];
                } 
                if (SF.Ads.viewportWidth >= 1280 && SF.Ads.viewportHeight >= 200){
                    thisUnit.mediaTypes.banner.sizes = [[728,90],[970,250]];
                }

                SF.Ads.prebidUnits.push(thisUnit);
            }
            if (!SF.initial_breakpoints_visible.leaderboard) {
                var thisUnit =  {
                    bids: [{"bidder":"sovrn","params":{"tagid":"542317"}},
                            {"bidder":"rubicon","params":{"zoneId":"798260","sizes":[43],"accountId":"15680","siteId":"103240"}},
                            {"bidder":"appnexus","params":{"placementId":12559084}},
                            {"bidder":"sharethrough","params":{"pkey":"SXwmmIIkcmWjzHzA894YxcyC"}},
                            {"bidder":"pubmatic","params":{"adSlot":"4845074","publisherId":"162538"}},
                            {"bidder":"smartadserver","params":{"pageId":1887185,"networkId":4559,"siteId":575816,"formatId":119583}},
                            ],
                    code: 'div-gpt-ad-1512154653435-0',
                    tag: 'SF_Mobile_Multi_B',
                    mediaTypes: { banner: { sizes: [[300,50],[300,250],[320,50],[320,100]] } }
                };

                SF.Ads.prebidUnits.push(thisUnit);
            }
            if (SF.initial_breakpoints_visible.leaderboard) {
                var thisUnit =  {
                    bids: [{"bidder":"sovrn","params":{"tagid":"542319"}},
                            {"bidder":"rubicon","params":{"zoneId":"486010","sizes":[2],"accountId":"15680","siteId":"103240"}},
                            {"bidder":"appnexus","params":{"placementId":12559070}},
                            {"bidder":"sharethrough","params":{"pkey":"ocrhilNvTSAhgL1EczYFJ2hy"}},
                            {"bidder":"pubmatic","params":{"adSlot":"4845073","publisherId":"162538"}},
                            {"bidder":"smartadserver","params":{"pageId":1887797,"networkId":4559,"siteId":575816,"formatId":119583}},
                            ],
                    code: 'div-gpt-ad-1491500833666-0',
                    tag: 'SF_ProjectSum_728x90_C',
                    mediaTypes: { banner: { sizes: [] } }
                }; 
                if (SF.Ads.viewportWidth >= 728 && SF.Ads.viewportHeight >= 200){
                    thisUnit.mediaTypes.banner.sizes = [[728,90]];
                } 
                if (SF.Ads.viewportWidth >= 1280 && SF.Ads.viewportHeight >= 200){
                    thisUnit.mediaTypes.banner.sizes = [[728,90],[970,250]];
                }

                SF.Ads.prebidUnits.push(thisUnit);
            }
            if (!SF.initial_breakpoints_visible.leaderboard) {
                var thisUnit =  {
                    bids: [{"bidder":"sovrn","params":{"tagid":"542318"}},
                            {"bidder":"rubicon","params":{"zoneId":"798260","sizes":[43],"accountId":"15680","siteId":"103240"}},
                            {"bidder":"appnexus","params":{"placementId":12559087}},
                            {"bidder":"sharethrough","params":{"pkey":"fHzpAnRYW6tF9CT8ux9oAtwB"}},
                            {"bidder":"pubmatic","params":{"adSlot":"4845075","publisherId":"162538"}},
                            {"bidder":"smartadserver","params":{"pageId":1887185,"networkId":4559,"siteId":575816,"formatId":119583}},
                            ],
                    code: 'div-gpt-ad-1512154755912-0',
                    tag: 'SF_Mobile_Multi_C',
                    mediaTypes: { banner: { sizes: [[300,50],[300,250],[320,50],[320,100]] } }
                };

                SF.Ads.prebidUnits.push(thisUnit);
            }
            SF.Ads.prebidAdjustments = {"bidder_deflations":{"aardvark":1,"aol":0.98,"appnexus":1.07,"brealtime":0.98,"districtm":1.04,"districtmdmx":1.08,"emxdigital":1,"indexex#hange":0.98,"indexexchange":0.95,"komoona":0.92,"oftmedia":0.9,"onefiftytwo":0.9,"pubmatic":1,"pulsepoint":0.93,"rhythmone":0.85,"rubicon":1.23,"rubiconlite":1,"sharethrough":1.07,"smartadserver":1.15,"sovrn":1.25,"springserve":0.001},"inflation":1,"floor":0.02};
        </script>

        

        
            <script id="pbjs_script" data-dom="https://d3tglifpd8whs6.cloudfront.net"  src="//a.fsdn.com/con/js/sftheme/vendor/bizx-prebid.js?1747330880"></script>
        
        <script>
            function logAdsConsent(msg) {
            }
            bizx.cmp.ifConsent({ purposes: 'all', vendors: 'prebid'}, function () { // hasConsentFn
                if (window.bizxPrebid) {
                    window.bizxPrebid.Ads.initPrebid(window.bizxPrebid.adUnits);
                }
                
                    
                    var link = document.createElement("link");
                    link.rel = "preload";
                    link.as = "script";
                    link.href = 'https://securepubads.g.doubleclick.net/tag/js/gpt.js';
                    document.head.appendChild(link);
                
                logAdsConsent('pageview with ads consent');
            }, function() { // rejectedFn
                // no 'prebid' consent (e.g. region without prebid consent string support) but try GPT directly
                bizx.cmp.ifConsent({ purposes: 'all', vendors: 'google-ads'}, function () { // hasConsentFn
                    bizx.cmp.embedScript('https://securepubads.g.doubleclick.net/tag/js/gpt.js');
                    logAdsConsent('pageview without prebid consent but able to run GPT');
                }, function() { // rejectedFn
                    logAdsConsent('pageview without ads consent');
                }, null,
                function() { // unknownFn
                    logAdsConsent('pageview without prebid consent and UNKNOWN ads consent');
                });
            }, null,
            function() { // unknownFn
                logAdsConsent('pageview with UNKNOWN ads consent');
            });
            </script>
        
            
    
    
    
    
    
    
    
    
    <link rel="stylesheet" href="//a.fsdn.com/con/css/lato.css?1747330880">

        
        
        
        <link rel="stylesheet" href="//a.fsdn.com/con/css/sandiego.css?1747330880">
        
        <link rel="stylesheet" href="//a.fsdn.com/con/css/disallow.css?1747330880">

        
<meta name="description" content="Download FSet for free.  A high-performance functional, set-theoretic collections library. All collections are immutable;"/>
<meta name="keywords"
      content="FSet, download FSet free, Algorithms"/>



<meta property="og:title" content="FSet"/>
<meta property="og:type" content="product"/>
<meta property="og:url" content="https://sourceforge.net/projects/fset/"/>
<meta property="og:site_name" content="SourceForge"/>
<meta property="og:description" content="Download FSet for free.  A high-performance functional, set-theoretic collections library. All collections are immutable;"/>



        <title>FSet download | SourceForge.net</title>
        <link rel="icon" sizes="180x180" href="//a.fsdn.com/con/img/sandiego/logo-180x180.png" type="image/png">
<link rel="icon" sizes="any" href="//a.fsdn.com/con/img/sandiego/svg/originals/sf-icon-orange-no_sf.svg" type="image/svg+xml">
<link rel="apple-touch-icon" sizes="180x180" href="//a.fsdn.com/con/img/sandiego/logo-180x180.png">
<link rel="mask-icon" href="//a.fsdn.com/con/img/sandiego/svg/originals/sf-icon-orange-no_sf.svg" color="#FF6600">
        
        <script>
            /*global unescape, window, console, jQuery, $, net, SF, bizx  */
            if (!window.SF) {
                window.SF = {};
            }SF.EU_country_codes = ["YT","TF","VG","RO","MQ","IS","PL","PT","CY","MT","WF","FK","IT","BG","ES","LV","AX","MF","TC","DK","GR","HU","PF","SI","SE","GI","AW","CH","LI","IE","JE","FI","GF","NL","AT","CZ","MS","GL","NO","GB","BL","FR","CW","GP","NC","RE","KY","GG","BE","DE","HR","SX","AI","BM","LU","PN","ME","IO","SK","PM","LT","EE","SH","GS"];
            SF.unknown_country_codes = ["","A1","A2","O1"];
        </script>
        
    
        
        <script src="//a.fsdn.com/con/js/min/sf.sandiego-head.js?1747330880"></script>

        
    


        <style>.Cb8778e82e783265d8d961d80f6902294444a4830 { display: none !important; }</style>
<link rel="alternate" type="application/rss+xml" title="FSet&#8230;Recent Activity" href="/p/fset/activity/feed"/>
<link rel="alternate" type="application/rss+xml" title="FSet&#8230;File Releases"
      href="/projects/fset/rss?path=/"/>
<link rel="canonical" href="https://sourceforge.net/projects/fset/">

        
<script>SF.adblock = true;</script>  
<script src="//a.fsdn.com/con/js/adpopup.js?1747330880"></script>



<script>
       /*global Foundation */
           /*global googletag, bizxPrebid */
            SF.Ads.gptExpected();
            SF.Ads.usePrebid = true;

       var gptadslots=[];
       var gptadHandlers={};
       var gptadRenderers=[];
       SF.Ads.slotsById = {};
       SF.Ads.idsByPath = {};

        googletag.cmd.push(function() {
            var leaderboard = googletag.sizeMapping()
                .addSize([970, 901], [[728,90],[970,250]])
                .addSize([728, 200], [[728,90]])
                .build();
            var leaderboardInContent = googletag.sizeMapping()
                .addSize([1280, 200], [[728,90],[970,250]])
                .addSize([728, 200], [[728,90]])
                .build();

                googletag.pubads().setTargeting('usingSafeFrame','1')
                .setSafeFrameConfig({
                        allowOverlayExpansion: true,
                        allowPushExpansion: true,
                        sandbox: true
                });

                var thisSlot;
                thisSlot = googletag.defineSlot('/41014381/Sourceforge/SF_ProjectSum_GEL_A',"fluid",'div-gpt-ad-1715706427041-0')
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('sz',"fluid")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1715706427041-0'] = thisSlot;
                SF.Ads.idsByPath['/41014381/Sourceforge/SF_ProjectSum_GEL_A'] = 'div-gpt-ad-1715706427041-0';
                thisSlot = googletag.defineSlot('/41014381/Sourceforge/SF_ProjectSum_GEL_B',"fluid",'div-gpt-ad-1715706481535-0')
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('sz',"fluid")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1715706481535-0'] = thisSlot;
                SF.Ads.idsByPath['/41014381/Sourceforge/SF_ProjectSum_GEL_B'] = 'div-gpt-ad-1715706481535-0';
                thisSlot = googletag.defineSlot('/41014381/Sourceforge/SF_ProjectSum_GEL_C',"fluid",'div-gpt-ad-1715706533700-0')
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('sz',"fluid")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1715706533700-0'] = thisSlot;
                SF.Ads.idsByPath['/41014381/Sourceforge/SF_ProjectSum_GEL_C'] = 'div-gpt-ad-1715706533700-0';
                thisSlot = googletag.defineSlot('/41014381/Sourceforge/SF_ProjectSum_728x90_A',
                                                            [728, 90],'div-gpt-ad-1394209358853-0')
                                                        .defineSizeMapping( leaderboard )
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1394209358853-0'] = thisSlot;
                SF.Ads.idsByPath['/41014381/Sourceforge/SF_ProjectSum_728x90_A'] = 'div-gpt-ad-1394209358853-0';
                thisSlot = googletag.defineSlot('/41014381/Sourceforge/SF_Mobile_320x50_A',[320,50],'div-gpt-ad-1512154506943-0')
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('sz',"320x50")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1512154506943-0'] = thisSlot;
                SF.Ads.idsByPath['/41014381/Sourceforge/SF_Mobile_320x50_A'] = 'div-gpt-ad-1512154506943-0';
                thisSlot = googletag.defineSlot('/41014381/Sourceforge/SF_ProjectSum_300x250_A',[[300,250],[300,600]],'div-gpt-ad-1394209358855-0')
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('sz',"300x250,300x600")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1394209358855-0'] = thisSlot;
                SF.Ads.idsByPath['/41014381/Sourceforge/SF_ProjectSum_300x250_A'] = 'div-gpt-ad-1394209358855-0';
                thisSlot = googletag.defineSlot('/41014381/Sourceforge/SF_ProjectSum_300x250_B',[300,250],'div-gpt-ad-1394209358856-0')
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('sz',"300x250")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1394209358856-0'] = thisSlot;
                SF.Ads.idsByPath['/41014381/Sourceforge/SF_ProjectSum_300x250_B'] = 'div-gpt-ad-1394209358856-0';
                thisSlot = googletag.defineSlot('/41014381/Sourceforge/SF_ProjectSum_300x250_C',[300,250],'div-gpt-ad-1394209358857-0')
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('sz',"300x250")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1394209358857-0'] = thisSlot;
                SF.Ads.idsByPath['/41014381/Sourceforge/SF_ProjectSum_300x250_C'] = 'div-gpt-ad-1394209358857-0';
                thisSlot = googletag.defineSlot('/41014381/Sourceforge/SF_ProjectSum_728x90_B',
                                                            [728, 90],'div-gpt-ad-1392148208790-0')
                                                        .defineSizeMapping( leaderboardInContent )
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1392148208790-0'] = thisSlot;
                SF.Ads.idsByPath['/41014381/Sourceforge/SF_ProjectSum_728x90_B'] = 'div-gpt-ad-1392148208790-0';
                thisSlot = googletag.defineSlot('/41014381/Sourceforge/SF_Mobile_Multi_B',[[300,50],[300,250],[320,50],[320,100]],'div-gpt-ad-1512154653435-0')
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('sz',"300x50,300x250,320x50,320x100")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1512154653435-0'] = thisSlot;
                SF.Ads.idsByPath['/41014381/Sourceforge/SF_Mobile_Multi_B'] = 'div-gpt-ad-1512154653435-0';
                thisSlot = googletag.defineSlot('/41014381/Sourceforge/SF_ProjectSum_728x90_C',
                                                            [728, 90],'div-gpt-ad-1491500833666-0')
                                                        .defineSizeMapping( leaderboardInContent )
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1491500833666-0'] = thisSlot;
                SF.Ads.idsByPath['/41014381/Sourceforge/SF_ProjectSum_728x90_C'] = 'div-gpt-ad-1491500833666-0';
                thisSlot = googletag.defineSlot('/41014381/Sourceforge/SF_Mobile_Multi_C',[[300,50],[300,250],[320,50],[320,100]],'div-gpt-ad-1512154755912-0')
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('sz',"300x50,300x250,320x50,320x100")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1512154755912-0'] = thisSlot;
                SF.Ads.idsByPath['/41014381/Sourceforge/SF_Mobile_Multi_C'] = 'div-gpt-ad-1512154755912-0';
                thisSlot = googletag.defineSlot('/7346874/SF-300x250',[300,250],'div-gpt-ad-1392148208795-0')
                                                        .addService(googletag.pubads())
                                                            .setTargeting('oss_tpc',["Algorithms","Software Development"])
                                                            .setTargeting('shortname',"fset")
                                                            .setTargeting('dc_ref',"https://sourceforge.net/projects/fset/")
                                                            .setTargeting('sz',"300x250")
                                                            .setTargeting('page_type',"pg_project");
                gptadslots.push(thisSlot);
                SF.Ads.slotsById['div-gpt-ad-1392148208795-0'] = thisSlot;
                SF.Ads.idsByPath['/7346874/SF-300x250'] = 'div-gpt-ad-1392148208795-0';   
                
                googletag.pubads().enableAsyncRendering();

                googletag.pubads().collapseEmptyDivs();
                    googletag.pubads().enableLazyLoad({fetchMarginPercent: 0,renderMarginPercent: 0,});googletag.pubads().addEventListener('slotOnload', function(event) {
                    SF.Ads.Helpers.getSizeAndSetClass.call(this, event);
                });
                googletag.pubads().addEventListener('slotRenderEnded', function(event) {
                    var unitName = event.slot.getAdUnitPath();
                    if ( unitName in gptadHandlers ) {
                    for (var i = 0; i < gptadHandlers[unitName].length; i++) {
                        try {
                            SF.Ads.RenderHandlers[gptadHandlers[unitName][i]].call(this, event);
                        } catch (e) {
                        }
                    }
                    }
                    if (event.slot.getResponseInformation()) {
                        SF.Ads.RenderHandlers.decorateSizeDelivered.call(this, event);
                    } else {SF.Ads.RenderHandlers.gotBlank.call(this, event);
                    }
                    if(SF.Ads.scrollFixable) {
                        SF.Ads.scrollFixable.scrollRelocate();
                    }
                });
                googletag.pubads().addEventListener('slotVisibilityChanged', SF.Ads.visibilityChangedTracker);
                SF.Ads.setupAdRefresh();
                googletag.pubads().addEventListener('impressionViewable', SF.Ads.RenderHandlers.viewabilityInstrumentation);
                
                googletag.pubads().addEventListener('slotRenderEnded', SF.Ads.listenerForBlockThis);
                bizxPrebid.Ads.pushToGoogle();

                console.log('GPT enableServices');
                googletag.enableServices();

                if ($.isEmptyObject(SF.Ads.slotsById)) {
                    $('body').addClass("no-ads");
                }
            });
   </script>  

        

        
    <script>
        function initPiwik(){
            var _paq = window._paq = window._paq || [];
            _paq.push(['trackPageView', document.title, {
                    dimension1: 'fset',
                dimension2: 'pg_project',
                dimension3: SF.devicePixelRatio,
                
            }]);
            _paq.push(['enableLinkTracking']);

            (function() {
                var u="//analytics.slashdotmedia.com/";
                _paq.push(['setTrackerUrl', u+'sf.php']);
                _paq.push(['setSiteId', 39]);
                 
        // only execute if 'measurement' has been granted
        bizx.cmp.ifConsent({ purposes: ['measurement'], vendors: 'sdm'}, function() {
            var interval = 6 * 60 * 60 * 1000; // 6 hrs, expressed in ms
            var vid_date = new Date(localStorage.getItem('vid_date'));
            if (new Date() - vid_date >= interval) {
                var data = {do_not_sell: false, is_commercial_page: "False" };
                bizx.cmp.ifConsent({ purposes: ['ads'], vendors: 'sdm'}, function() {},
                    function(){
                        // no consent (opt-out)
                        data.do_not_sell = true;
                    },
                    function(){
                        //finally call api endpoint
                        // push promise to pwik and set it run if pwik is allowed to run based on it's own ifConsent check
                        _paq.push([ function() {
                            data.matomo_id = this.getVisitorId();
                            data.domain = "sourceforge.net";
                            $.ajax({
                                method: 'PUT',
                                url: '/p/sfapi/push_vid',
                                data:  JSON.stringify(data)
                            })
                            .done(function(response){
                                if(response.result) {
                                    localStorage.setItem('vid_date', new Date());
                                }
                            })
                            .fail(function(){
                                // Do nothing on failure
                            });
                        }]);
                    }
                    );
                }
            });
    
                var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
                g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'sf.js'; s.parentNode.insertBefore(g,s);
            })();
        }
        bizx.cmp.ifConsent({ purposes: ['storage', 'measurement'], vendors: 'sdm' }, initPiwik);
    </script>


        
        


        

        <script type="application/ld+json">
            {
                "@context": "http://schema.org",
                "@type": "WebSite",
                "name": "SourceForge",
                "url": "https://sourceforge.net/"
            }
        </script>
    </head>
    <body id="pg_project"
          class="  anonymous has-ads sandiego v-sf">
        

            
        <div id="busy-spinner"></div>
        
        
<div id="messages">
</div>


        <div class="off-canvas position-right" id="offCanvas" data-off-canvas>
    <!-- Menu -->
    <ul class="header-nav-menulist">
        <li class="highlight search">
            
            
                
            
            
    <form method="get" action="/directory/" class="m-search-form">
    
        <input type="text" placeholder="Search for software or solutions" autocomplete="off" name="q" >
        
        <label >
            <input type="submit" class="bt" value="">
            


<svg  data-name="search" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z"/></svg>
        </label>
    </form>
        </li>
        
        <li class="highlight"><a href="https://sourceforge.net/auth/">Join/Login</a></li>
        
        <li><a href="/software/">Business Software</a></li>
        <li><a href="/directory/">Open Source Software</a></li>
        <li><a  href="/software/vendors/" title="For Vendors">For Vendors</a></li>
        <li><a href="/blog/" title="Blog">Blog</a></li>
        <li><a href="/about">About</a></li>
        <li><a id="header-nav-more" data-toggle="header-nav-more header-nav-more-content" data-toggler=".toggled">More</a></li>
        <li>
            <ul id="header-nav-more-content" class="toggled" data-toggler=".toggled">
                
    

    
    
        <li><a href="/articles/">Articles</a></li>
    
    

    
 
                
                <li><a href="/create">Create</a></li>
                
                <li><a href="https://sourceforge.net/articles/category/sourceforge-podcast/">SourceForge Podcast</a></li>
                
                    <li><a href="https://sourceforge.net/p/forge/documentation/Docs%20Home/">Site Documentation</a></li>
                
                <li><a href="/user/newsletters">Subscribe to our Newsletter</a></li>
                <li><a href="/support">Support Request</a></li>
            </ul>
        </li>
    </ul>
</div>

        <div class="off-canvas-content" data-off-canvas-content>
            
                


<script>
    SF.linkout_icon = '<svg  data-name="sf-linkout-icon" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve"><polygon class="st0" points="243.2,243.2 56.8,243.2 56.8,56.8 123,56.8 123,9 9,9 9,291 291,291 291,179.4 243.2,179 "/><polygon class="st0" points="128.5,213 155,186.5 176,165.5 206.7,196.3 235.5,132.5 248.9,102.6 290.6,9.8 291,9 290.6,9.2 197.4,51.1 169.1,63.8 103.7,93.3 137,126.5 115.9,147.5 89.5,174 "/></svg>';
</script>


    <section class="sandiego l-header-nav-top show-for-large">
        <div class="row">
            <a href="/" title="Home" class="sf-logo">
                
    
    <img src="//a.fsdn.com/con/images/sandiego/sf-logo-full.svg"  alt="SourceForge logo" class="sf-logo-full"/>
            </a>
            <nav class="links">
                
                    <a href="/user/newsletters" title="Subscribe to our newsletter"><span class="newsletter-icon">


<svg  data-name="mmSF_11mail" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 42 42" enable-background="new 0 0 42 42" xml:space="preserve"><path fill="#FFFFFF" d="M0,6v30h42V6H0z M24.2,21.2c-0.8,0.8-2.3,2-3.2,2c-0.9,0-2.4-1.2-3.2-2L5.8,9.7h30.3L24.2,21.2z M13.7,21l-9.9,9.4V11.6L13.7,21z M15.7,23L15.7,23c0.5,0.5,2.9,2.9,5.3,2.9c2.4,0,4.8-2.4,5.2-2.8l0.1-0.1l9.8,9.4H5.8L15.7,23z M28.3,21l9.9-9.5v18.9L28.3,21z"/></svg></span></a>
                
                <a href="/software/vendors/" title="For Vendors">For Vendors</a>
                
                
                    <a href="/support" title="Help">Help</a>
                    <a href="/create/" title="Create">Create</a>
                

                
                <a href="/user/registration" title="Join" >Join</a>
                <a href="https://sourceforge.net/auth/" title="Login">Login</a>
                
            </nav>
        </div>
    </section>

<div class="l-header-nav sticky sandiego l-header-nav-collapse">

    <section class="sandiego l-header-nav-top hide-for-large">
        <div class="row">
            <a href="/" title="Home" class="sf-logo">
                
    
    <img src="//a.fsdn.com/con/images/sandiego/sf-logo-full.svg"  alt="SourceForge logo" class="sf-logo-full"/>
            </a>
            <div class="title-bar-right">
                <button type="button" aria-label="Toggle Main Menu" class="menu-icon" data-toggle="offCanvas"></button>
            </div>
        </div>
    </section>
    <section class="sandiego l-header-nav-bottom">
        <nav class="row">
            <a href="/" title="Home" class="sf-logo">
                
    
    <img src="//a.fsdn.com/con/images/sandiego/sf-logo-full.svg"  alt="SourceForge logo" class="sf-logo-full"/>
            </a>
            <div class="links">
                
    
        <div class="nav-dropdown">
            <a href="/software/">Business Software</a>
            
        </div>
        <div class="nav-dropdown">
            <a href="/directory/" title="Browse">Open Source Software</a>
            
        </div>
        <div class="nav-dropdown">
            <a href="https://sourceforge.net/articles/category/sourceforge-podcast/">SourceForge Podcast</a>
        </div>
        <div class="nav-dropdown">
            <a>Resources</a>
            <ul class="nav-dropdown-menu">
                  <li><a href="/articles/">Articles</a></li>
                  
                  <li><a href="/software/case-studies/">Case Studies</a></li>
                  
                  <li><a href="/blog/">Blog</a></li>
            </ul>
        </div>
    

                <div class="dev-menu-when-stuck">
                    Menu
                    <ul class="dev-menu-dropdown header-nav-menulist">
                        <li><a href="/support">Help</a></li>
                        <li><a href="/create">Create</a></li>
                        <li><a href="/user/registration/" title="Join" >Join</a></li>
                        <li><a href="https://sourceforge.net/auth/" title="Login">Login</a></li>
                    </ul>
                </div>
                <div class="search-toggle-when-stuck">
                    <a class="search-toggle">
                        


<svg  data-name="search" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z"/></svg>
                    </a>
                </div>
            </div>

            <div class="search">
                
                
    
    
        <div class="main-nav-link">
            
            
            <a href="https://hubs.la/Q038lz530" rel="nofollow" target="_blank" id="main-nav-badge-link" data-label="socradarmay">
                <img src="//a.fsdn.com/con/assets/maxnav/sourceforge/report-32-f587c5f2.png"  srcset="//a.fsdn.com/con/assets/maxnav/sourceforge/report-64-f5896c5e.png 2x"  alt="" id="main-nav-image"/>
            </a>
        </div>
    


                
                    
                
                
                
                
    <form method="get" action="/directory/" class="m-search-form">
    
    <div class="typeahead__container">
      <div class="typeahead__field">
        <div class="typeahead__query">
        
        <input type="text" placeholder="Search for software or solutions" autocomplete="off" name="q" >
        
        </div>
        
        <label >
            <input type="submit" class="bt" value="">
            


<svg  data-name="search" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1216 832q0-185-131.5-316.5t-316.5-131.5-316.5 131.5-131.5 316.5 131.5 316.5 316.5 131.5 316.5-131.5 131.5-316.5zm512 832q0 52-38 90t-90 38q-54 0-90-38l-343-342q-179 124-399 124-143 0-273.5-55.5t-225-150-150-225-55.5-273.5 55.5-273.5 150-225 225-150 273.5-55.5 273.5 55.5 225 150 150 225 55.5 273.5q0 220-124 399l343 343q37 37 37 90z"/></svg>
        </label>
      </div>
    </div>
    
    </form>
                
            </div>
        </nav>
        
    </section>
    <div id="banner-sterling" class="sterling">
        
        
        


    


<div id="SF_ProjectSum_728x90_A_wrapped" data-id="div-gpt-ad-1394209358853-0" class="draper   
visibility_rules
 v_970_billboard  v_728_leaderboard "> </div><script>
/*global googletag */
if (SF.initial_breakpoints_visible.leaderboard) {
(function(){
    
    var el = document.getElementById('SF_ProjectSum_728x90_A_wrapped');
    var newNode = document.createElement('div');
    newNode.id = 'div-gpt-ad-1394209358853-0';
    el.appendChild(newNode);
}());

gptadRenderers['SF_ProjectSum_728x90_A'] = function(){  // jshint ignore:line
    
        if (!SF.adblock) {
            
                
            
            $('#div-gpt-ad-1394209358853-0').parents('.draper').css("min-height", 90 + 13 + 12); // for height of .lbl-ad and padding
        }
    
    googletag.cmd.push(function() {
        googletag.display('div-gpt-ad-1394209358853-0');
    });
};
gptadRenderers['SF_ProjectSum_728x90_A']();  // jshint ignore:line
}
</script>
        


    


<div id="SF_Mobile_320x50_A_wrapped" data-id="div-gpt-ad-1512154506943-0" class="draper   
"> </div><script>
/*global googletag */
if (!SF.initial_breakpoints_visible.leaderboard) {
(function(){
    
    var el = document.getElementById('SF_Mobile_320x50_A_wrapped');
    var newNode = document.createElement('div');
    newNode.id = 'div-gpt-ad-1512154506943-0';
    el.appendChild(newNode);
}());

gptadRenderers['SF_Mobile_320x50_A'] = function(){  // jshint ignore:line
    
        if (!SF.adblock) {
            
                
            
            $('#div-gpt-ad-1512154506943-0').parents('.draper').css("min-height", 50 + 13 + 12); // for height of .lbl-ad and padding
        }
    
    googletag.cmd.push(function() {
        googletag.display('div-gpt-ad-1512154506943-0');
    });
};
gptadRenderers['SF_Mobile_320x50_A']();  // jshint ignore:line
}
</script>
    </div>
</div>
            

            
                

                
                <div class="l-two-column-page">
                    <div class="l-content-column l-has-sidebar">
                        
<div class="project-body" itemscope itemtype="http://schema.org/SoftwareApplication">
    
    
    

    
    

    
<section class="project-masthead"> 
    
    

    
<div class="backdrop" style="box-sizing: content-box; padding-bottom: 137px"></div>

    <div class="content">
    
        
    <nav id="breadcrumbs" class="breadcrumbs rtl">
        <ul itemscope itemtype="http://schema.org/BreadcrumbList">
            
            <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
            <a itemprop="item" href="/"><span itemprop="name">Home</span></a>
            <meta itemprop="position" content="1" />
            </li>
            
            <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
                <a itemprop="item" href="/directory/"><span itemprop="name">Open Source Software</span></a>
                <meta itemprop="position" content="2" />
            </li>
            <li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
                <a itemprop="item" href="/directory/software-development/"><span itemprop="name">Software Development</span></a>
                <meta itemprop="position" content="3" />
            </li><li itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
                <a itemprop="item" href="/directory/algorithms/"><span itemprop="name">Algorithms</span></a>
                <meta itemprop="position" content="4" />
            </li><li class="project" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><span itemprop="name">FSet</span><meta itemprop="position" content="5" />
            </li>
            
        </ul>
    </nav>

    
    
    
        
                
                
<div class="overview">
    


<div class="project-icon  default-project-icon " >
    
    
    


<svg  data-name="default-icon" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 300 300" style="enable-background:new 0 0 300 300;" xml:space="preserve"><rect class="st0" width="300" height="300"/><g><path class="st1" d="M162.5,154.8c0-28.9-10.2-42-15.6-46.9c-1.1-1-2.7-0.1-2.6,1.3c1.1,16.3-19.4,20.3-19.4,45.9h0c0,0.1,0,0.1,0,0.2c0,15.6,11.8,28.3,26.3,28.3c14.5,0,26.3-12.7,26.3-28.3c0-0.1,0-0.1,0-0.2h0c0-7.2-2.7-14.1-5.5-19.3c-0.5-1-2.1-0.6-1.9,0.3C174.9,158.1,162.5,171.8,162.5,154.8z"/><g><path class="st1" d="M131.2,215.6c-0.7,0-1.3-0.3-1.8-0.7l-67.2-67.1c-1-1-1-2.6,0-3.6l70.9-70.9c0.5-0.5,1.1-0.7,1.8-0.7h20.4c1.2,0,2,0.8,2.3,1.6c0.3,0.7,0.3,1.9-0.5,2.7l-66.7,66.7c-1.3,1.3-1.3,3.5,0,4.9l52.7,52.7c1,1,1,2.6,0,3.6L133,214.9C132.5,215.4,131.9,215.6,131.2,215.6z"/></g><g><path class="st1" d="M144.7,227.4c-1.2,0-2-0.8-2.3-1.5c-0.3-0.7-0.3-1.9,0.5-2.7l66.7-66.7c0.7-0.6,1-1.5,1-2.4s-0.4-1.8-1-2.4l-52.7-52.7c-1-1-1-2.6,0-3.6l10.2-10.2c0.5-0.5,1.1-0.7,1.8-0.7c0.7,0,1.3,0.3,1.8,0.7l67,67.1c0.5,0.5,0.7,1.1,0.7,1.8s-0.3,1.3-0.7,1.8l-70.9,70.9c-0.5,0.5-1.1,0.7-1.8,0.7H144.7z"/></g></g></svg>
    </div>


    
    <div class="title "> 

        
        <h1  itemprop="name">FSet
        </h1>
         
          
        
            
            
            <div class="as-h3 brought-by">
                
                    <div class="project-status">Status: <span class="status-value">Beta</span></div>
                
                Brought to you by:
                
                    <a href="/u/sburson/profile/">sburson</a>
                    
                
            </div>
            
        

        

        
    </div>


    

</div>

                
                  
    
        <div class="stats ">
            
    
    
    <div class="rating">
        <a href="/projects/fset/reviews/" class="count" title="Add a review">
            Add a Review
        </a>
    </div>
    

    <div class="as-h2">
        <b class="label">Downloads:</b>
        <a href="/projects/fset/files/stats/timeline" title="Downloads This Week">
            0 This Week
        </a>
    </div>

    <div class="as-h2">
        <b class="label">Last Update:</b>
        <a href="/p/fset/activity/">
            <time class="dateUpdated" datetime="2016-11-12">2016-11-12</time>
        </a>
    </div>

        </div>

        <div class="buttons">
            
<div
    
        class="button blue big-text browse_code">
        <img src="//a.fsdn.com/con/images/sandiego/sf-icon-black.svg"  alt="" class="sf-browse-icon" />
        Browse Code&nbsp;&nbsp;▾
        <nav>
            <ul><li><a href="/p/fset/git/" title="Browse Git">Git</a></li><li><a href="/p/fset/mercurial/" title="Browse Mercurial">Mercurial</a></li><li><a href="/p/fset/svn/" title="Browse SVN">SVN</a></li></ul>
        </nav>
    </div>
    






            <a id="share-project-button" class="button default" href="#">Share This</a>
            

<div class="social-sharing-buttons invisible hide">
    
    
    
    <a rel=nofollow class="social-media-icon twitter" href="https://twitter.com/share?url=https://sourceforge.net/projects/fset/&amp;text=Download%20FSet%20on%20SourceForge%20for%20free%21%20" title="Share FSet on SourceForge on Twitter">


<svg  data-name="twitter" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1684 408q-67 98-162 167 1 14 1 42 0 130-38 259.5t-115.5 248.5-184.5 210.5-258 146-323 54.5q-271 0-496-145 35 4 78 4 225 0 401-138-105-2-188-64.5t-114-159.5q33 5 61 5 43 0 85-11-112-23-185.5-111.5t-73.5-205.5v-4q68 38 146 41-66-44-105-115t-39-154q0-88 44-163 121 149 294.5 238.5t371.5 99.5q-8-38-8-74 0-134 94.5-228.5t228.5-94.5q140 0 236 102 109-21 205-78-37 115-142 178 93-10 186-50z"/></svg></a>
    <a rel=nofollow class="social-media-icon facebook" href="https://www.facebook.com/sharer/sharer.php?u=https://sourceforge.net/projects/fset/&title=FSet%20on%20SourceForge" title="Share FSet on SourceForge on facebook">


<svg  data-name="facebook" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1343 12v264h-157q-86 0-116 36t-30 108v189h293l-39 296h-254v759h-306v-759h-255v-296h255v-218q0-186 104-288.5t277-102.5q147 0 228 12z"/></svg></a>
    <a rel=nofollow class="social-media-icon linkedin" href="https://www.linkedin.com/shareArticle?mini=true&url=https://sourceforge.net/projects/fset/&title=FSet%20on%20SourceForge&source=SourceForge.net" title="Share FSet on SourceForge on LinkedIn">


<svg  data-name="linkedin" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M477 625v991h-330v-991h330zm21-306q1 73-50.5 122t-135.5 49h-2q-82 0-132-49t-50-122q0-74 51.5-122.5t134.5-48.5 133 48.5 51 122.5zm1166 729v568h-329v-530q0-105-40.5-164.5t-126.5-59.5q-63 0-105.5 34.5t-63.5 85.5q-11 30-11 81v553h-329q2-399 2-647t-1-296l-1-48h329v144h-2q20-32 41-56t56.5-52 87-43.5 114.5-15.5q171 0 275 113.5t104 332.5z"/></svg></a>
</div>

            <div id="get-updates">
    <img id="psp_newsletter_subscribe-icon" src="//a.fsdn.com/con/images/sandiego/sf_email_icon.svg"  alt="Email in envelope"  />
    
        <h4>Get an email when there's a new version of FSet</h4>
        <div id="get-updates-form">
            <form>
                <input type="email" name="email" placeholder="Enter your email address" value="">
                <a id="get-updates-button" class="button blue" data-open="psp-newsletter-modal">Next</a>
            </form>
        </div>
    
    </div>
    <div class="psp_newsletter_subscribe reveal" data-reveal id="psp-newsletter-modal" data-v-offset="0" data-ajax-url="/projects/fset/get_updates?source=PSP">

    </div>
    <script>

    $('#get-updates-form input[type="email"]').on('focus', function(){
        if(SF.downloader) {
            SF.downloader.cancelRedirect();
        }
        SF.noRedirect =  true;
    });
    $('#get-updates-button').click(function(){
        if(SF.downloader) {
            SF.downloader.cancelRedirect();
        }
        SF.noRedirect =  true;
    });
    $("#get-updates-form form").on("keydown", function(event) {
        if(event.which === 13) {
            if (SF.downloader) {
                SF.downloader.cancelRedirect();
            }
            SF.noRedirect = true;
            $('#get-updates-button').trigger('click');
        }
    });

    </script>

        </div>

        

        <div class="badges">
        </div>
    
    
            
            
        
    </div>
</section>


    
        
    <div id="top_nav"><div id="top_nav_admin">
        <ul class="dropdown">
            
            <li class="selected">
                <a href="/projects/fset/"
                >
                <span>Summary</span></a>
                
            </li>
            
            <li >
                <a href="/projects/fset/reviews/"
                >
                <span>Reviews</span></a>
                
            </li>
            
            <li >
                <a href="/projects/fset/support"
                >
                <span>Support</span></a>
                
            </li>
            
            <li >
                <a href="/p/fset/git/"
                >
                <span>Git</span></a>
                
            </li>
            
            <li >
                <a href="/p/fset/mercurial/"
                >
                <span>Mercurial</span></a>
                
            </li>
            
            <li >
                <a href="/p/fset/svn/"
                >
                <span>SVN</span></a>
                
            </li>
            
            <li >
                <a href="/p/fset/cvs/"
                >
                <span>CVS</span></a>
                
            </li>
            
            
        </ul>
        
    </div></div>
    
    
  

    <article class="main-content">

        

        


    



<section class="row c-description" id="section-description">
    <div id="about" class="small-12 columns">
        
        



        
        
        <p itemprop="description" class="description">A high-performance functional, set-theoretic collections library.  All collections are immutable; updates return a new collection.  Supports arbitrary nesting (sets of sets etc.).  Implemented with heterogeneous binary trees.  Lisp and Java; more to come.</p>
    </div>
</section>



        

        

        
            

    <div class="m-project-activity columns small-12 psp-section">
        <div class="heading">
            <h3>Project Activity</h3>
            <div>
                <a class="button yellow icon-only follow-action-disabled show-for-medium"
                   href="https://sourceforge.net/auth/?return_to=%2Fprojects%2Ffset%2F"
                        title="Follow FSet - Requires login"
                    rel="nofollow"
                   >
<svg  data-name="sf_star_grey" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 300 285.8" style="enable-background:new 0 0 300 285.8;" xml:space="preserve"><polygon class="st0" fill="#CCCCCB" points="150,0 185.4,109.2 300,109.2 207.3,176.6 242.7,285.8 150,218.3 57.3,285.8 92.7,176.6 0,109.2 114.6,109.2 "/></svg></a>
                <a class="button blue icon-only show-for-medium" href="/p/fset/activity/feed" title="RSS" rel="nofollow">
<svg  data-name="feed" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1408.1818 1408" > <path d="m 384,1216 q 0,80 -56,136 -56,56 -136,56 -80,0 -136,-56 -56,-56 -56,-136 0,-80 56,-136 56,-56 136,-56 80,0 136,56 56,56 56,136 z m 512,123 q 2,28 -17,48 -18,21 -47,21 l -135,0 q -25,0 -43,-16.5 Q 636,1375 634,1350 612,1121 449.5,958.5 287,796 58,774 33,772 16.5,754 0,736 0,711 L 0,576 q 0,-29 21,-47 17,-17 43,-17 l 5,0 q 160,13 306,80.5 146,67.5 259,181.5 114,113 181.5,259 67.5,146 80.5,306 z m 512,2 q 2,27 -18,47 -18,20 -46,20 l -143,0 q -26,0 -44.5,-17.5 Q 1138,1373 1137,1348 1125,1133 1036,939.5 947,746 804.5,603.5 662,461 468.5,372 275,283 60,270 35,269 17.5,250.5 0,232 0,207 L 0,64 Q 0,36 20,18 38,0 64,0 l 3,0 Q 329,13 568.5,120 808,227 994,414 q 187,186 294,425.5 107,239.5 120,501.5 z" /></svg></a>
            </div>
        </div>
        <div id="project-activity">
            
            <div class="space--placeholder" style="height: 315px"></div>
        </div>
        <p class="all-activities"><a href="/p/fset/activity/">See All Activity &gt;</a></p>
    </div>

    <script type="text/x-handlebars-template" id="project-activity-template">
    
        <ul class="list-of-activities">
            {{#each timeline}}
            <li class="item">
                <time datetime="{{ iso8601date this.published }}" title="{{ readable_date this.published }}">{{ ago this.published }}</time>
                <div>
                {{#ifTagged "release"}}
                  {{ cap this.verb }}
                {{else}}
                  {{ icon this.actor.activity_extras.icon_url }}
                  {{ activity_obj this.actor }}
                  {{ this.verb }}
                {{/ifTagged}}
                {{ activity_obj this.obj }}
                {{#if this.target.activity_name}} on {{ activity_obj this.target }}{{/if}}
                </div>
                <div class="summary">
                    {{ this.obj.activity_extras.summary }}
                </div>
            </li>
            {{/each}}
        </ul>
    
    </script>

        

        
<section class="row psp-section collapsible-section">
    
    <div class="small-12 medium-5 columns">
        <h3>Categories</h3><a href="/directory/algorithms/"><span itemprop="applicationCategory">Algorithms</span></a></div>
    

    <div class="medium-5 small-12 columns">
        <section class="project-info">
    <h3>License</h3>Other License</section>


    </div>
</section>


        
<section class="row psp-section collapsible-section">
    <div class="small-12 columns">
        <h3>Follow FSet</h3>
        
        <p>
            <a id="homepage" class="pspbtn" href="https://fset.sourceforge.io" title="FSet Web Site"  target="_blank">FSet Web Site</a>
        </p>
        
        
        
        
    </div>
</section>


        

        
        <div class="sterling">
            


    


<div id="SF_ProjectSum_728x90_B_wrapped" data-id="div-gpt-ad-1392148208790-0" class="draper   
visibility_rules
 v_970_xlarge  v_728_leaderboard "> </div><script>
/*global googletag */
if (SF.initial_breakpoints_visible.leaderboard) {
(function(){
    
    var el = document.getElementById('SF_ProjectSum_728x90_B_wrapped');
    var newNode = document.createElement('div');
    newNode.id = 'div-gpt-ad-1392148208790-0';
    el.appendChild(newNode);
}());

gptadRenderers['SF_ProjectSum_728x90_B'] = function(){  // jshint ignore:line
    
    googletag.cmd.push(function() {
        googletag.display('div-gpt-ad-1392148208790-0');
    });
};
gptadRenderers['SF_ProjectSum_728x90_B']();  // jshint ignore:line
}
</script>
            


    
    


<div id="SF_Mobile_Multi_B_wrapped" data-id="div-gpt-ad-1512154653435-0" class="draper multisize  
"> </div><script>
/*global googletag */
if (!SF.initial_breakpoints_visible.leaderboard) {
(function(){
    
    var el = document.getElementById('SF_Mobile_Multi_B_wrapped');
    var newNode = document.createElement('div');
    newNode.id = 'div-gpt-ad-1512154653435-0';
    el.appendChild(newNode);
}());

gptadRenderers['SF_Mobile_Multi_B'] = function(){  // jshint ignore:line
    
    googletag.cmd.push(function() {
        googletag.display('div-gpt-ad-1512154653435-0');
    });
};
gptadRenderers['SF_Mobile_Multi_B']();  // jshint ignore:line
}
</script>
        </div>
        

        
    
        

<script>
    if (!SF.wireOutboundZoneTrackingComplete) {  
        $(SF.wireOutboundZoneTracking);
        $('body').append('<iframe src="https://c.sf-syn.com/conversion_outbound_tracker/sf" id="frame-zone-outbound" style="display: none;"></iframe>');
        SF.wireOutboundZoneTrackingComplete = true;
    }
</script>


        
            <section id="nels" class="small-12 columns">
               
               
    
    
    
    
     <div class="as-header">
        <div class="as-h2">Other Useful Business Software</div>
    </div>
    
    
        
        

    
    
        
    

    <div class="nel standard trunc-eligible  "
        data-id="19603" data-cid="15605">

        


<span id="70c2b433-6291-4bc5-b58f-e3b49a4f6416"></span>
<script>
    /* globals bizx */
    bizx.cmp.trackingPixel('publisher', ['storage', 'measurement'], '/directory/tp3/?b=80808&amp;c=15605&amp;z=78205&amp;cb=b019bc7548', "Powering the best of the internet | Fastly", '70c2b433-6291-4bc5-b58f-e3b49a4f6416');
</script>


        
        <div class="application-image thumbnail"  data-dest="https://sourceforge.net/software/link?oaparams=2__bannerid=80808__zoneid=78205__cb=b019bc7548__oadest=https%3A%2F%2Fwww.fastly.com%2Fsignup%3Futm_campaign%3DGLOBAL_Display-Website-Visits_Sourceforge-CDN_EN_Iron-Horse_Lead-Create_Sourceforge-Media%26utm_source%3Dsourceforge%26utm_medium%3Dreferral" data-newtab="true" data-target="_blank" rel="nofollow">
            <img class="main-image" src="//a.fsdn.com/con/app/nel_img/19603" alt="Powering the best of the internet | Fastly Icon">
            
        </div>
        <div class="wrapper">
            <div class="heading">
                <div class="heading-main">
                    
                    <span data-dest="https://sourceforge.net/software/link?oaparams=2__bannerid=80808__zoneid=78205__cb=b019bc7548__oadest=https%3A%2F%2Fwww.fastly.com%2Fsignup%3Futm_campaign%3DGLOBAL_Display-Website-Visits_Sourceforge-CDN_EN_Iron-Horse_Lead-Create_Sourceforge-Media%26utm_source%3Dsourceforge%26utm_medium%3Dreferral" data-newtab="true" data-target="_blank" rel="nofollow" title="Find out more about Powering the best of the internet | Fastly">Powering the best of the internet | Fastly</span>

                    
                    <p class="teaser">Fastly's edge cloud platform delivers faster, safer, and more scalable sites and apps to customers. </p>
                </div>
            </div>

            
            

            <div class="tiles">
                <div class="tile">
                    
                    <div class="description ">
                        <div class="description-inner">
                            Ensure your websites, applications and services can effortlessly handle the demands of your users with Fastly. Fastly’s portfolio is designed to be highly performant, personalized and secure while seamlessly scaling to support your growth.
                        </div>
                    </div>
                </div>

                
            </div>

        </div>

        
        <div class="download standard">
            
            

            

            
        
            
        
        <div class="button green wide sfdl sfdl-lite" data-target="_blank" data-newtab="true" data-dest="https://sourceforge.net/software/link?oaparams=2__bannerid=80808__zoneid=78205__cb=b019bc7548__oadest=https%3A%2F%2Fwww.fastly.com%2Fsignup%3Futm_campaign%3DGLOBAL_Display-Website-Visits_Sourceforge-CDN_EN_Iron-Horse_Lead-Create_Sourceforge-Media%26utm_source%3Dsourceforge%26utm_medium%3Dreferral"
                >Try for free</div>
        </div>

        
    </div>


    
            </section>
        
    


        
<section class="row m-rate-project">
    <div class="small-12 columns">
        <div class="as-h3">Rate This Project</div><a class="rate-this-project" href="/projects/fset/reviews/new" rel="nofollow">Login To Rate This Project</a>
    </div>
</section>

<section class="row reviews-section psp-section collapsible-section hr-bottom">
    <div class="small-12 columns">
        


<section id="reviews" class="m-reviews-list" data-name="FSet" data-endpoint="/projects/fset/reviews/">
    <section class="heading">
        <h2 class="as-h3">User Reviews</h2>
        <div class="info-no-reviews">
            Be the first to <a href="/projects/fset/reviews/new" rel="nofollow">post a review</a> of FSet!
        </div>
    </section>
    <section class="content">
    </section>
</section>


    </div>
</section>


        <section class="row m-section-additional-details psp-section collapsible-section">
    <div class="small-12 columns">
        <h3>Additional Project Details</h3>
        









<section class="project-info">
    <h4>Intended Audience</h4>Developers</section>




<section class="project-info">
    <h4>Programming Language</h4><a href="/directory/common-lisp/">Common Lisp</a>, <a href="/directory/java/">Java</a></section>








    <section class="project-info">
     <h4>Related Categories</h4>
    
        
        
    
        
        
    
        
                
            
            
        
    
        
                
            
            
        
    
    
      
          
           
           <a href="/directory/algorithms/common lisp/"><span itemprop="relatedCategory">Common Lisp Algorithms</span></a>, 
      
          
           
           <a href="/directory/algorithms/java/"><span itemprop="relatedCategory">Java Algorithms</span></a>
    </section>


<section class="project-info">
    <div class="as-header">
        <h4>Registered</h4>
    </div>
    <section class="content">
        2006-09-08
    </section>
</section>

    </div>
</section>

          
            
<aside class="m-wide-widget m-wide-projects-widget ">
    <div class="as-header">
        
        Similar Business Software
    </div>
    <div class="body">
        <ul>
            
            




<li>
    
        


<div class="project-icon   " >
    
    
    <img alt="Lodash" title="Lodash" 
src="//a.fsdn.com/allura/s/lodash/icon?07cf45c265cf635d799fc773740177aa44f6aa615a837fa68317cee9f8575ef6?&amp;w=48"
     loading="lazy"/></div>

    
    <div class="project-info ">
        <div class="result-heading-texts">
            <a href="/software/product/Lodash/" title="Find out more about Lodash">
                
                <strong>Lodash</strong>
            </a>
            
        </div>
        
        <div class="summary">
            <span>A modern JavaScript utility library delivering modularity, performance, and extras. Lodash is released under the MIT license and supports modern environments. Lodash makes JavaScript easier by taking the hassle out of working with arrays, numbers, objects, strings, etc. Lodash’s modular methods...</span>
        </div>
        
    </div>
    <div>
        <a href="/software/product/Lodash/" title="Find out more about Lodash" class="button blue hollow see-project">See Software</a>
    </div>
</li>

            
            




<li>
    
        


<div class="project-icon   " >
    
    
    <img alt="Clojure" title="Clojure" 
src="//a.fsdn.com/allura/s/clojure/icon?448405396cf3af008e604aeb24c2fefaa5ecb3bfedcc135f587641263b6bb5f9?&amp;w=48"
     loading="lazy"/></div>

    
    <div class="project-info ">
        <div class="result-heading-texts">
            <a href="/software/product/Clojure/" title="Find out more about Clojure">
                
                <strong>Clojure</strong>
            </a>
            
        </div>
        
        <div class="summary">
            <span>Clojure is a robust, practical, and fast programming language with a set of useful features that together form a simple, coherent, and powerful tool. Clojure is a dynamic, general-purpose programming language, combining the approachability and interactive development of a scripting language with...</span>
        </div>
        
    </div>
    <div>
        <a href="/software/product/Clojure/" title="Find out more about Clojure" class="button blue hollow see-project">See Software</a>
    </div>
</li>

            
            




<li>
    
        


<div class="project-icon   " >
    
    
    <img alt="Helidon" title="Helidon" 
src="//a.fsdn.com/allura/s/helidon/icon?05f2f9ead0403585fd6be8bf1b563ec358a617d7b0c226401e37255ec167c4e8?&amp;w=48"
     loading="lazy"/></div>

    
    <div class="project-info ">
        <div class="result-heading-texts">
            <a href="/software/product/Helidon/" title="Find out more about Helidon">
                
                <strong>Helidon</strong>
            </a>
            
        </div>
        
        <div class="summary">
            <span>Helidon is a cloud-native, open‑source set of Java libraries for writing microservices that run on a fast web core powered by Netty. Helidon Níma is the first Java microservices framework based on virtual threads. Helidon is designed to be simple to use, with tooling and examples to get you...</span>
        </div>
        
    </div>
    <div>
        <a href="/software/product/Helidon/" title="Find out more about Helidon" class="button blue hollow see-project">See Software</a>
    </div>
</li>

            
        </ul>
    </div>
</aside>


        <section class="row ">
    <div class="small-12 columns">
        <a id="report-inappropriate" href="/projects/fset/report_inappropriate" rel="nofollow">Report inappropriate content</a>
    </div>
</section>
    </article>
    <div class="sterling">
        


    


<div id="SF_ProjectSum_728x90_C_wrapped" data-id="div-gpt-ad-1491500833666-0" class="draper   
visibility_rules
 v_970_xlarge  v_728_leaderboard "> </div><script>
/*global googletag */
if (SF.initial_breakpoints_visible.leaderboard) {
(function(){
    
    var el = document.getElementById('SF_ProjectSum_728x90_C_wrapped');
    var newNode = document.createElement('div');
    newNode.id = 'div-gpt-ad-1491500833666-0';
    el.appendChild(newNode);
}());

gptadRenderers['SF_ProjectSum_728x90_C'] = function(){  // jshint ignore:line
    
    googletag.cmd.push(function() {
        googletag.display('div-gpt-ad-1491500833666-0');
    });
};
gptadRenderers['SF_ProjectSum_728x90_C']();  // jshint ignore:line
}
</script>
    </div>
    

</div>
                    </div>
                    <div class="l-gutter">
                    </div>
                    <div class="l-side-column">
                        



<div class="scroll-fixable">
    <section class="sterling">
        


    
    


<div id="SF_ProjectSum_300x250_A_wrapped" data-id="div-gpt-ad-1394209358855-0" class="draper multisize  
visibility_rules
 v_300_large "> </div><script>
/*global googletag */
if (SF.initial_breakpoints_visible.large) {
(function(){
    
    var el = document.getElementById('SF_ProjectSum_300x250_A_wrapped');
    var newNode = document.createElement('div');
    newNode.id = 'div-gpt-ad-1394209358855-0';
    el.appendChild(newNode);
}());

gptadRenderers['SF_ProjectSum_300x250_A'] = function(){  // jshint ignore:line
    
        if (!SF.adblock) {
            
                
            
            $('#div-gpt-ad-1394209358855-0').parents('.draper').css("min-height", 250 + 13 + 12); // for height of .lbl-ad and padding
        }
    
    googletag.cmd.push(function() {
        googletag.display('div-gpt-ad-1394209358855-0');
    });
};
gptadRenderers['SF_ProjectSum_300x250_A']();  // jshint ignore:line
}
</script>
        


    


<div id="SF_ProjectSum_300x250_B_wrapped" data-id="div-gpt-ad-1394209358856-0" class="draper medrec  
visibility_rules
 v_300_large "> </div><script>
/*global googletag */
if (SF.initial_breakpoints_visible.large) {
(function(){
    
    var el = document.getElementById('SF_ProjectSum_300x250_B_wrapped');
    var newNode = document.createElement('div');
    newNode.id = 'div-gpt-ad-1394209358856-0';
    el.appendChild(newNode);
}());

gptadRenderers['SF_ProjectSum_300x250_B'] = function(){  // jshint ignore:line
    
        if (!SF.adblock) {
            
                
            
            $('#div-gpt-ad-1394209358856-0').parents('.draper').css("min-height", 250 + 13 + 12); // for height of .lbl-ad and padding
        }
    
    googletag.cmd.push(function() {
        googletag.display('div-gpt-ad-1394209358856-0');
    });
};
gptadRenderers['SF_ProjectSum_300x250_B']();  // jshint ignore:line
}
</script>
    </section>
    
    
<aside class="m-sidebar-widget m-project-list">
    <div class="as-header">Recommended Projects</div>

    <div class="body">
        <ul >
            
            <li class="item">
                
                
                <a href="/projects/sevenzip/" title="7-Zip">
                    


<div class="project-icon   " >
    
    
    <img alt="7-Zip" title="7-Zip" 
src="//a.fsdn.com/allura/p/sevenzip/icon?1715850074?&amp;w=48"
    srcset="//a.fsdn.com/allura/p/sevenzip/icon?1715850074?&amp;w=72 1.5x
        ,
            //a.fsdn.com/allura/p/sevenzip/icon?1715850074?&amp;w=96 2x" loading="lazy"/></div>

                </a>
                <div class="pinfo-content recommended">
                    <a class="project-name" href="/projects/sevenzip/" title="Learn more about 7-Zip ">7-Zip</a>
                    <div class="summary">
                        A free file archiver for extremely high compression
                    </div>
                </div>
            </li>
            
            <li class="item">
                
                
                <a href="/projects/keepass/" title="KeePass">
                    


<div class="project-icon   " >
    
    
    <img alt="KeePass" title="KeePass" 
src="//a.fsdn.com/allura/p/keepass/icon?1740068736?&amp;w=48"
    srcset="//a.fsdn.com/allura/p/keepass/icon?1740068736?&amp;w=72 1.5x
        ,
            //a.fsdn.com/allura/p/keepass/icon?1740068736?&amp;w=96 2x" loading="lazy"/></div>

                </a>
                <div class="pinfo-content recommended">
                    <a class="project-name" href="/projects/keepass/" title="Learn more about KeePass ">KeePass</a>
                    <div class="summary">
                        A lightweight and easy-to-use password manager
                    </div>
                </div>
            </li>
            
            <li class="item">
                
                
                <a href="/projects/openofficeorg.mirror/" title="Apache OpenOffice">
                    


<div class="project-icon   " >
    
    
    <img alt="Apache OpenOffice" title="Apache OpenOffice" 
src="//a.fsdn.com/allura/mirror/openofficeorg/icon?1703330040?&amp;w=48"
    srcset="//a.fsdn.com/allura/mirror/openofficeorg/icon?1703330040?&amp;w=72 1.5x
        " loading="lazy"/></div>

                </a>
                <div class="pinfo-content recommended">
                    <a class="project-name" href="/projects/openofficeorg.mirror/" title="Learn more about Apache OpenOffice ">Apache OpenOffice</a>
                    <div class="summary">
                        The free and Open Source productivity suite
                    </div>
                </div>
            </li>
            
            <li class="item">
                
                
                <a href="/projects/desmume/" title="DeSmuME: Nintendo DS emulator">
                    


<div class="project-icon   " >
    
    
    <img alt="DeSmuME: Nintendo DS emulator" title="DeSmuME: Nintendo DS emulator" 
src="//a.fsdn.com/allura/p/desmume/icon?1513717481?&amp;w=48"
    srcset="//a.fsdn.com/allura/p/desmume/icon?1513717481?&amp;w=72 1.5x
        ,
            //a.fsdn.com/allura/p/desmume/icon?1513717481?&amp;w=96 2x" loading="lazy"/></div>

                </a>
                <div class="pinfo-content recommended">
                    <a class="project-name" href="/projects/desmume/" title="Learn more about DeSmuME: Nintendo DS emulator ">DeSmuME: Nintendo DS emulator</a>
                    <div class="summary">
                        DeSmuME is a Nintendo DS emulator
                    </div>
                </div>
            </li>
            
            <li class="item">
                
                
                <a href="/projects/clonezilla/" title="Clonezilla">
                    


<div class="project-icon   " >
    
    
    <img alt="Clonezilla" title="Clonezilla" 
src="//a.fsdn.com/allura/p/clonezilla/icon?1588915417?&amp;w=48"
    srcset="//a.fsdn.com/allura/p/clonezilla/icon?1588915417?&amp;w=72 1.5x
        ,
            //a.fsdn.com/allura/p/clonezilla/icon?1588915417?&amp;w=96 2x" loading="lazy"/></div>

                </a>
                <div class="pinfo-content recommended">
                    <a class="project-name" href="/projects/clonezilla/" title="Learn more about Clonezilla ">Clonezilla</a>
                    <div class="summary">
                        A partition and disk imaging/cloning program
                    </div>
                </div>
            </li>
            
        </ul>
    </div>
</aside>
    

    
    <section class="sterling">
        


    


<div id="SF_ProjectSum_300x250_C_wrapped" data-id="div-gpt-ad-1394209358857-0" class="draper medrec  
visibility_rules
 v_300_large "> </div><script>
/*global googletag */
if (SF.initial_breakpoints_visible.large) {
(function(){
    
    var el = document.getElementById('SF_ProjectSum_300x250_C_wrapped');
    var newNode = document.createElement('div');
    newNode.id = 'div-gpt-ad-1394209358857-0';
    el.appendChild(newNode);
}());

gptadRenderers['SF_ProjectSum_300x250_C'] = function(){  // jshint ignore:line
    
    googletag.cmd.push(function() {
        googletag.display('div-gpt-ad-1394209358857-0');
    });
};
gptadRenderers['SF_ProjectSum_300x250_C']();  // jshint ignore:line
}
</script>
    </section>

    



    
    
        <aside class="m-sidebar-widget">
            <div class="as-header">Related Business Categories</div>
            <div class="body">
                <ul>
                    
                        
                            <li class="item">
                                <a href="/software/application-development/">Application Development</a>
                            </li>
                    
                </ul>
            </div>
        </aside>
    

</div>

    
<script>
if (!SF.adblock && SF.initial_breakpoints_visible.large) {
    
        bizx.cmp.ifConsent({ purposes: 'all', vendors: 'google-ads'}, function() {
            SF.Ads.scrollFixable = new SF.ScrollFixable($('.scroll-fixable').eq(0), {"adjustHorizontal":false,"avoidElement":".l-header-nav, .l-header-nav-bottom","watchAvoidStickiness":true});
            if (SF.Ads.acceptable_ads_active){
                SF.Ads.scrollFixable.disable();
            }
        });
    
}
</script>


<div class="sterling">
    


    
    


<div id="SF_Mobile_Multi_C_wrapped" data-id="div-gpt-ad-1512154755912-0" class="draper multisize  
"> </div><script>
/*global googletag */
if (!SF.initial_breakpoints_visible.leaderboard) {
(function(){
    
    var el = document.getElementById('SF_Mobile_Multi_C_wrapped');
    var newNode = document.createElement('div');
    newNode.id = 'div-gpt-ad-1512154755912-0';
    el.appendChild(newNode);
}());

gptadRenderers['SF_Mobile_Multi_C'] = function(){  // jshint ignore:line
    
    googletag.cmd.push(function() {
        googletag.display('div-gpt-ad-1512154755912-0');
    });
};
gptadRenderers['SF_Mobile_Multi_C']();  // jshint ignore:line
}
</script>
</div>
                    </div>
                </div>
            

            
    <footer class="sandiego">
    <div class="as-row">
        <div class="footer-wrapper">
            <nav aria-label="Site Links" role="navigation">
                <section>
                    <div class="as-h2">SourceForge</div>
                    <ul>
                    
                        <li><a href="/create/" title="Create a Project">Create a Project</a></li>
                    
                        <li><a href="/directory/" title="Open Source Software Directory">Open Source Software</a></li>
                        <li><a href="/software/" title="Business Software Directory">Business Software</a></li>
                        
                            
                            <li><a href="/top" title="Top Open Source Projects">Top Downloaded Projects</a></li>
                        

                    </ul>
                </section>
            </nav>
            <nav aria-label="Company Links" role="navigation">
                <section>
                    <div class="as-h2">Company</div>
                    <ul>
                        <li><a href="/about">About</a></li>
                        <li><a href="/about/leadership" title="Open Source Software Directory">Team</a></li>
                        <li class="h-card">
                            <address>
                                <span class="p-name p-org">SourceForge Headquarters</span><br>
                                <span class="p-street-address">225 Broadway Suite 1600</span><br>
                                <span class="p-locality">San Diego, CA <span class="p-postal-code">92101</span></span><br>
                                <span class="p-tel">+1 (858) 422-6466</span><br>
                            </address>
                        </li>
                        <li id="social">
                            
<span></span>
<a href="https://twitter.com/sourceforge" class="twitter" rel="nofollow" target="_blank" title="SourceForge on X">


<svg  class="vertical-icon-fix" data-name="twitter" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1684 408q-67 98-162 167 1 14 1 42 0 130-38 259.5t-115.5 248.5-184.5 210.5-258 146-323 54.5q-271 0-496-145 35 4 78 4 225 0 401-138-105-2-188-64.5t-114-159.5q33 5 61 5 43 0 85-11-112-23-185.5-111.5t-73.5-205.5v-4q68 38 146 41-66-44-105-115t-39-154q0-88 44-163 121 149 294.5 238.5t371.5 99.5q-8-38-8-74 0-134 94.5-228.5t228.5-94.5q140 0 236 102 109-21 205-78-37 115-142 178 93-10 186-50z"/></svg></a>
<a href="https://fosstodon.org/@sourceforge" rel="me nofollow" target="_blank" title="SourceForge on Mastodon">


<svg  class="vertical-icon-fix" data-name="mastodon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg></a>
<a href="https://www.facebook.com/sourceforgenet/" class="facebook" rel="nofollow" target="_blank" title="SourceForge on Facebook">


<svg  data-name="facebook" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M1343 12v264h-157q-86 0-116 36t-30 108v189h293l-39 296h-254v759h-306v-759h-255v-296h255v-218q0-186 104-288.5t277-102.5q147 0 228 12z"/></svg></a>
<a href="https://www.linkedin.com/company/sourceforge.net" class="linkedin" rel="nofollow" target="_blank" title="SourceForge on LinkedIn">


<svg  data-name="linkedin" viewBox="0 0 1792 1792" xmlns="http://www.w3.org/2000/svg"><path d="M477 625v991h-330v-991h330zm21-306q1 73-50.5 122t-135.5 49h-2q-82 0-132-49t-50-122q0-74 51.5-122.5t134.5-48.5 133 48.5 51 122.5zm1166 729v568h-329v-530q0-105-40.5-164.5t-126.5-59.5q-63 0-105.5 34.5t-63.5 85.5q-11 30-11 81v553h-329q2-399 2-647t-1-296l-1-48h329v144h-2q20-32 41-56t56.5-52 87-43.5 114.5-15.5q171 0 275 113.5t104 332.5z"/></svg></a>

<a href="/user/newsletters" rel=nofollow class="newsletter" title="Subscribe to our newsletter">


<svg  class="vertical-icon-fix" data-name="mmSF_11mail" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 42 42" enable-background="new 0 0 42 42" xml:space="preserve"><path fill="#FFFFFF" d="M0,6v30h42V6H0z M24.2,21.2c-0.8,0.8-2.3,2-3.2,2c-0.9,0-2.4-1.2-3.2-2L5.8,9.7h30.3L24.2,21.2z M13.7,21l-9.9,9.4V11.6L13.7,21z M15.7,23L15.7,23c0.5,0.5,2.9,2.9,5.3,2.9c2.4,0,4.8-2.4,5.2-2.8l0.1-0.1l9.8,9.4H5.8L15.7,23z M28.3,21l9.9-9.5v18.9L28.3,21z"/></svg></a>

<span></span>
                        </li>
                    </ul>
                </section>
            </nav>
             <nav aria-label="Resources Links" role="navigation">
                <section>
                    <div class="as-h2">Resources</div>
                    <ul>
                        
                            <li><a href="/support" title="Support Section">Support</a></li>
                            <li><a href="/p/forge/documentation/Docs%20Home/" title="Site Documentation">Site Documentation</a></li>
                        
                        <li><a href="https://fosstodon.org/@sourceforgestatus" title="Site Status" rel="me nofollow">Site Status</a></li>
                        <li><a href="/reviews" title="Reviews" rel="me nofollow">SourceForge Reviews</a></li>

                    </ul>
                </section>
            </nav>
            <section class="footer-logo">
                <a href="/" title="Home" class="sf-logo">
                    
    
    <img src="//a.fsdn.com/con/images/sandiego/sf-logo-full.svg"  alt="SourceForge logo" class="sf-logo-full"/>
                </a>
            </section>
        </div>
    </div>
    <section class="l-nav-bottom">
        <nav class="row">
            
                
            
        
    <div class="columns small-12 large-6 copyright-notice">
        &copy; 2025 Slashdot Media. All Rights Reserved.
    </div>
    <div class="columns large-6 links links-right">
        

    
    

    <a href="https://slashdotmedia.com/terms-of-use" target="_blank" title="Terms" rel="nofollow">Terms</a>
    <a href="https://slashdotmedia.com/privacy-statement/" target="_blank" title="Privacy" rel="nofollow">Privacy</a>

    
    
    

    
        <a href="https://slashdotmedia.com/opt-out-choices/" target="_blank" title="Opt Out" rel="nofollow">Opt Out</a>
    

    
        <a href="https://slashdotmedia.com/contact/" target="_blank" title="Advertise" rel="nofollow">Advertise</a>
    
    </div>
        </nav>
    </section>

    </footer>
    



            
    
        </div>
            
    
    <div id="newsletter-floating" class="sandiego newsletter-floating-new">
        <a class="close-button btn-closer" data-close aria-label="Close modal">
            <span aria-hidden="true">&times;</span>
        </a>
        <div class="as-h2">Want the latest updates on software, tech news, and AI?</div>
        <div class="row">
            <div class="column small-2 medium-2 large-2" style="padding-left: 0px; padding-right: 0px;"><img src="//a.fsdn.com/con/images/sandiego/sf_email_icon.svg"  alt="" /></div>
            <div class="as-h3 column small-10 medium-10 large-10">Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.</div>
        </div>
        <form action="/user/newsletters/" method="post">
            <div class="row">
              <input class="newsletter-input" type="email" placeholder="Enter your email address" autocomplete="off" name="newsletter_email"
                     value="">
              <input type="hidden" name="source" value="floating">
              <button type="submit" class="button blue newsletter-button">Submit</button>
            </div>
        </form>
    </div>
    

            
    
        
    
        <script src="//a.fsdn.com/con/js/min/sf.sandiego-base.js?1747330880"></script>

        
    

    <script>
        /* global Dropzone */
        Dropzone.options.blockthisForm = false;
    </script>
        
    
        <script src="//a.fsdn.com/con/js/min/sf.sandiego-foundation-base.js?1747330880"></script>

        
    

    
    
        <script src="//a.fsdn.com/con/js/min/sf.sandiego-foundation-tooltip.js?1747330880"></script>

        
    

    
    

        

        <script>
            /* global Foundation */
            $(document).foundation();
            Foundation.Triggers.forceListenersNow();
        </script>


        
        <script>
            bizx.cmp.ifConsent({purposes:'all', vendors:'google-ads'}, function () {
                $('body').removeClass('no-ads-consent'); 
            },
            function () { 
                $('body').addClass('no-ads-consent');
            },
            null,
            function () { 
                $('body').addClass('no-ads-consent');
            });
        </script>

        <noscript><p><img src="https://analytics.slashdotmedia.com/index.php?idsite=39" style="border:0;" alt="" /></p></noscript>

        

        
        

        <script>

        function geturl(url, params) {
            params = Object
                .keys(params)
                .map(function(key) {
                    return key + "=" + encodeURIComponent(params[key]);
                })
                .join("&");
            return url + "?" + params;
        }

        
        function loadimg(params, dimension_prefix) {
            params = Object.assign({"idsite":1,"rec":1,"rand":42594,"dimension2":"pg_project","url":"https://sourceforge.net/projects/fset/","action_name":"FSet download | SourceForge.net"}, params);
            for (var key in params) {
                if (params.hasOwnProperty(key) && key.indexOf('dimension') === 0 && params[key] !== undefined) {
                    params[key] = (dimension_prefix||'') + params[key];
                }
            }
            params.rand = Math.floor(Math.random() * 100000);
            bizx.cmp.ifConsent('publisher', ['measurement'], function() {
                var url = geturl("//sourceforge.net/software/visit", params);
                if (!('sendBeacon' in navigator) || !navigator.sendBeacon(url)) {
                    var img = document.createElement('img');
                    img.src = url;
                    img.style = "border:0;position:absolute;top:0;";
                    img.alt = "";
                    document.body.appendChild(img);
                }
            });
        }

        var $typeaheads = $('.typeahead__container input[name=q]');
        $typeaheads.on('typeahead-item-clicked', function(ev, $typeahead, q, item){
            var groupIndex = ($typeahead.data('groups') || []).indexOf(item.group);
            if (groupIndex === 2 || groupIndex === 3) {
                loadimg({
                    'e_c': 'Search | Typeahead | ' + item.group,
                    'e_a': "Typeahead Click | q=" + q,
                    'e_n': item.href, 
                 }, 'typeahead_on_');
            }
        });
        </script>

        <script type="text/javascript">
            bizx.cmp.ifConsent({purposes: 'all', vendors: '6sense'}, async() => {
                
                (function(){var s = document.getElementsByTagName("script")[0];
                var b = document.createElement("script");
                b.type = "text/javascript";b.async = true;b.defer=true;b.id='6senseWebTag';
                b.src = "https://j.6sc.co/j/58729049-be80-466a-9abf-b3911430bbd8.js";
                s.parentNode.insertBefore(b, s);})();
            });
            </script>

    
        <script src="//a.fsdn.com/con/js/min/sf.sandiego-project.js?1747330880"></script>

        
            <script src="//a.fsdn.com/con/js/min/sf.sandiego-project-disallow.js?1747330880"></script>
        
    

        

<!-- CCM Tag -->
<script>
    (function () {
        bizx.cmp.ifConsent({ purposes: 'all', vendors: 'bombora'}, function () {
            /*global _ml:true, window */
            _ml = window._ml || {};
            
            _ml.eid = '771';
            _ml.fp = '3ed3901b-1b6f-4f1f-874b-d96ac2b38587';  
            var s = document.getElementsByTagName('script')[0], cd = new Date(), mltag = document.createElement('script');
            mltag.type = 'text/javascript';
            mltag.async = true;
            mltag.defer = true;
            mltag.src = '//ml314.com/tag.aspx?' + cd.getDate() + cd.getMonth() + cd.getFullYear();
            s.parentNode.insertBefore(mltag, s);
        });
    })();
</script>
<!-- End CCM Tag -->


        
        
<!-- Hubspot tracking -->


        


        
            
    
    <div id="overlay-blockthis-wrapper" style="display: none;">
        <div id="overlay-blockthis">
            <div class="as-h2 title">Thanks for helping keep SourceForge clean.</div>
            <a href="#" id="btn-blockthis-close">X</a>
            <form class="dropzone small-12" action="/api/instrumentation/gpt" id="blockthisForm" method="POST">
                <div class="row small-12">
                    <div class="column description small-12">
                        <input type="hidden" name="_visit_cookie" value="3ed3901b-1b6f-4f1f-874b-d96ac2b38587"/>
                            <input type='hidden' name='timestamp' value='1747555029'/>
                            <input type='hidden' name='spinner' value='XUp1bebxZigHJRibWCmkf8dIspEM'/>
                            <p class='Cb8778e82e783265d8d961d80f6902294444a4830'><label for='XVcO1NBfDmSDCujEOw4TCjcOWVBZCw5jDsMKnwrLDuA'>You seem to have CSS turned off.
             Please don't fill out this field.</label><input id='XVcO1NBfDmSDCujEOw4TCjcOWVBZCw5jDsMKnwrLDuA' name='XVMO1NBfDmSDCusOGS8OtJsKIdTQ2w5NZOh9_' type=
             'text'/></p>
                            <p class='Cb8778e82e783265d8d961d80f6902294444a4830'><label for='XVcO1NBfDmSDCujAOw4TCjcOWVBZCw5jDsMKnwrLDuA'>You seem to have CSS turned off.
             Please don't fill out this field.</label><input id='XVcO1NBfDmSDCujAOw4TCjcOWVBZCw5jDsMKnwrLDuA' name='XVMO1NBfDmSDCu8OGS8OtJsKIdTQ2w5NZOh9_' type=
             'text'/></p>
                        Briefly describe the problem (required):
                        <input name="XWcO5PgrDnyvDo3HCvS9JwrjDjcOrwrTDscKMU8O5ag" type="text" required>
                    </div>
                </div>
                <div class="column small-12">
                    <div class="upload-text">Upload screenshot of ad (required):</div>
                    <div id='upload-it'>
                        <a href="#" id="upload-select-file">Select a file</a>, or drag & drop file here.
                    </div>
                    <div id="upload-it-placeholder"></div> 

                    <div class="dropzone-previews" style="display: none"></div>
                    <div class="dz-message" style="display: none"></div> 
                    
                    <div id="dropzone-preview-template" style="display: none">
                        <div class="dz-preview dz-file-preview">
                            <img data-dz-thumbnail src="data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=" alt=""/>
                            <div class="dz-success-mark"><span>✔</span></div>
                            <div class="dz-error-mark"><span>✘</span></div>
                            <div class="dz-error-message"><span data-dz-errormessage></span></div>
                        </div>
                    </div>
                </div>
                <div class="column small-12">
                    <u>Screenshot instructions:</u>
                    
                </div>
                <div class="row small-12">
                    <div class="column large-5 small-6">
                        <p>
                            <u>Click URL instructions:</u><br>
                            Right-click on the ad, choose "Copy Link", then paste here &rarr;<br>
                            (This may not be possible with some types of ads)
                        </p>
                        <a class="more-info" href="https://sourceforge.net/p/forge/documentation/Report%20a%20problem%20with%20Ad%20content/" target="_blank">More information about our ad policies</a>
                    </div>
                    <div class="column large-7 small-6">
                        <p>Ad destination/click URL:
                        <input name="XW8O:NxDDnzLDlXTCuyrDoVTCoWlBwo7CjwXChsOI" type="url" required>
                        </p>
                        <textarea id="gpt-info" name="XVsO5Og3DncKeCMKqw4kYWcKLI0vClMOnaRDDk8O_"></textarea>
                        <input class="button" type="submit" id="btn-blockthis-submit" value="Submit Report">
                    </div>
                </div>
            </form>
        </div>
    </div>

        

        <script>
            bizx.cmp.ifConsent('', ['all'], function () {
                bizx.cmp.embedScript('//ads.pro-market.net/ads/scripts/site-143572.js');
            });
        </script><script>
            bizx.cmp.ifConsent('', ['all'], function () {
                try{(function(){ var cb = new Date().getTime(); var s = document.createElement("script"); s.defer = true; s.src = "//tag.crsspxl.com/s1.js?d=2396&cb="+cb; var s0 = document.getElementsByTagName('script')[0]; s0.parentNode.insertBefore(s, s0); })();}catch(e){}
            });
        </script>
    
    
<script type="text/javascript">
    bizx.cmp.ifConsent({ purposes: ['storage', 'measurement'], vendors: 'google-analytics'}, function () {
        /* jshint ignore:start */
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
                (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
            m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
        /* jshint ignore:end */

        window.dataLayer = window.dataLayer || [];
        function gtag(){ window.dataLayer.push(arguments); }
        window.gtag = window.gtag || gtag;
        bizx.cmp.embedScript("https://www.googletagmanager.com/gtag/js");
        gtag('js', new Date());
        gtag('set', {
            'page_location': 'https://sourceforge.net/projects/fset/',
        });
    });
</script>
    <script>
        /*global ga, gtag */
        SF.devicePixelRatio = Math.round(window.getDevicePixelRatio()*10)/10;

        

        
            bizx.cmp.ifConsent({ purposes: ['storage', 'measurement'], vendors: 'google-analytics'}, function () {
                gtag('config', 'G-1H226E4E4L', {
                    
                    send_page_view: false,
                    'SF_Project_Shortname': 'fset', 
                    'SF_Page_Type': 'pg_project', 
                    user_properties: {
                        'SF_Logged_in': 'Logged Out', 
                    },
                    'SF_Ads_Disabled': 'No',   
                    'SF_Prebid_Load_Method': 'sync', 
                    'devicePixelRatio': SF.devicePixelRatio, 
                });
                gtag('event', 'page_view', { send_to: 'G-1H226E4E4L' });
            });
        
            
            
        
        
    </script>
    

        
        
        
             <script>
    $(function() {
        bizx.cmp.ifConsent({ purposes: 'all' , vendors: 'narrative'}, function() {
            var current_time = (new Date()).getTime();
            let imageUrl = "https://io.narrative.io/?companyId=2440&id=first_party%3A3ed3901b-1b6f-4f1f-874b-d96ac2b38587&id=site_name%3Asourceforge.net&id=url%3A%2Fprojects%2Ffset%2F&id=pagetitle%3AFSet+download+%7C+SourceForge.net&id=vertical%3AOpen+Source+Software&id=product%3AFSet&id=topics%3AAlgorithms&id=programming_language%3ACommon+Lisp%2CJava";
            imageUrl = imageUrl.replace(encodeURIComponent("$PAGE_TITLE"), document.title);  
            
            imageUrl = URL.parse(imageUrl);
            let hem = bizx.uids.getHem();
            if (hem) {
                imageUrl.searchParams.append('id', 'hem:' + hem);
            }
            imageUrl.searchParams.append('rand', current_time);

            var image = new Image();
            image.src = imageUrl.toString();
            image.style.display = "none";
            image.style.height = 0;
            image.style.width = 0;
            document.body.appendChild(image);
        });
    })
</script>
        

        
            
<script>
    $(function() {
        bizx.cmp.ifConsent({ purposes: 'all', vendors: 'xandr'}, function() {
            /*jshint ignore:start*/
            !function(e,i){if(!e.pixie){var n=e.pixie=function(e,i,a){n.actionQueue.push({action:e,actionValue:i,params:a})};n.actionQueue=[];var a=i.createElement("script");a.async=!0,a.src="//acdn.adnxs.com/dmp/up/pixie.js";var t=i.getElementsByTagName("head")[0];t.insertBefore(a,t.firstChild)}}(window,document);
            pixie('init', '48d4c5e5-03de-40f8-81ab-b370a8860afa');
            pixie('event', 'PageView');
            /*jshint ignore:end*/

        });
    });
</script>

        

        









<script>
        function gam(id){
            bizx.cmp.ifConsent({ purposes: 'all', vendors: 'google-ads'}, function () {
                bizx.cmp.embedScript(`https://pagead2.googlesyndication.com/pagead/js/pcd.js?${id}`,
                    true,  // async
                    'head', // location
                    null, // callback
                    false, // defer
                    {id: `google-pcd-tag-${id}`, 'data-audience-pixel': 'dc_iu=/41014381/DFPAudiencePixel;dc_seg=' + id});
            });
        }

        
            gam("8901705213");gam("8901712041");</script>

        
        








        
        
            
            
            
        
        
    </body>
</html>