Changeset - 55c195c73f99
[Not reviewed]
Merge
4 16 12
Martin Michlmayr (tbm) - 10 years ago 2013-06-04 17:04:13
tbm@cyrius.com
Merge branch 'master' of git://git.gitorious.org/conservancy/website
32 files changed with 6666 insertions and 138 deletions:
0 comments (0 inline, 0 general)
www/conservancy/feeds.py
Show inline comments
...
 
@@ -71,14 +71,14 @@ class OmnibusFeed(ConservancyFeedBase):
 
    title_template = "feeds/omnibus_title.html"
 
    description_template = "feeds/omnibus_description.html"
 
    author_email = "info@sfconservancy.org"
 
    author_link = "http://sfconservancy.org/"
 
    author_link = "https://sfconservancy.org/"
 
    author_name = "Software Freedom Conservancy"
 

	
 
    def item_enclosure_mime_type(self): return "audio/mpeg"
 

	
 
    def item_enclosure_url(self, item):
 
        if hasattr(item, 'mp3_path'):
 
            return "http://sfconservancy.org" + item.mp3_path
 
            return "https://sfconservancy.org" + item.mp3_path
 
    def item_enclosure_length(self, item):
 
        if hasattr(item, 'mp3_path'):
 
            return item.mp3_length
...
 
@@ -93,7 +93,7 @@ class OmnibusFeed(ConservancyFeedBase):
 
            return "Software Freedom Conservancy"
 

	
 
    def item_author_link(self, obj):
 
        return "http://sfconservancy.org"
 
        return "https://sfconservancy.org"
 

	
 
    def item_author_email(self, item):
 
        if item.omnibus_type == "news":
www/conservancy/middleware.py
Show inline comments
...
 
@@ -13,6 +13,11 @@ class ForceCanonicalHostnameMiddleware(object):
 
        * adds cache headers to provide hints to squid
 
        """
 

	
 
        # Never allow connection to the /admin part of the site without SSL
 
        if (not request.is_secure) and request.path.startswith('/admin'):
 
            url = 'https://sfconservancy.org%s' % request.path
 
            return http.HttpResponseRedirect(url)
 

	
 
        # Check for a redirect based on settings.APPEND_SLASH
 
        host = http.get_host(request)
 
        old_url = [host, request.path]
www/conservancy/static/about/board/index.html
Show inline comments
...
 
@@ -43,19 +43,17 @@ solving the problems of  Windows and Linux interoperability.</p>
 

	
 
<h2>Lo&iuml;c Dachary</h2>
 

	
 
<p>Lo&iuml;c Dachary has been involved with Free Software since 1987 when he
 
started distributing GNU tapes to the general public in France.  His first
 
contact was with GNU Emacs and in 1989 with GCC which he used to port a
 
Unix System V kernel to a embeded motorola 68030 motherboard.  He
 
currently works as a developer
 
for <a href="http://outflop.me/">OutFlop</a>, a company providing services
 
and software to operate poker rooms.  He
 
created <a href="http://savannah.gnu.org/">Savannah</a>, the GNU forge, in
 
2001 to provide a Free alternative to proprietary forges. As a president
 
of FSF France, he provides technical and legal resources to French Free
 
Software developers. Loic Dachary is also a honorary member
 
of <a href="http://april.org/">APRIL</a> since 1996, a French non-profit
 
dedicated to Free Software with over 5,500 members.</p>
 
<p>Lo&iuml;c Dachary has been involved with the Free Software Movement since
 
1987, when he started distributing GNU tapes to the general public in
 
France. In 2012, he founded <a href="http://upstream-university.org/">Upstream
 
University</a>, a nonprofit with the goal of teaching developers how to
 
contribute easily and efficiently. Dachary volunteers as a developer
 
for <a href="http://april.org/">April</a>, a grassroots organization
 
promoting Free Software. He maintains April's OpenStack cluster and organizes
 
contributions with agile methods. As President
 
of <a href="http://fsffrance.org/">FSF France</a>, he also provides technical
 
and legal resources to French Free Software developers. His day job is to use
 
and contribute to <a href="http://ceph.com/">Ceph</a> within OpenStack.</p>
 

	
 
<h2>Mark Galassi</h2>
 

	
...
 
@@ -90,6 +88,14 @@ Loyola College in Maryland, and an M.S. in Computer Science from the
 
University of Cincinnati.  His Master's thesis discussed methods for
 
dynamic interoperability of Free Software languages.</p>
 

	
 
<h2>Mike Linksvayer</h2>
 

	
 
<p>Mike Linksvayer serves on the boards of AcaWiki and OpenHatch,
 
and is chair of the Open Definition Advisory Council. From 2003 to
 
2012 he served as CTO and VP of Creative Commons, where he is now a
 
Senior Fellow. In 2000 he co-founded Bitzi, an early open content/open
 
data mass collaboration platform.</p>
 

	
 
<h2>Stormy Peters</h2>
 

	
 
<p>Stormy Peters is Head of Developer Engagement at Mozilla. She is
www/conservancy/static/about/eval-committee/index.html
Show inline comments
 
new file 100644
 
{% extends "base_about.html" %}
 
{% block subtitle %}Evaluation Committee - {% endblock %}
 
{% block submenuselection %}Eval{% endblock %}
 
{% block content %}
 

	
 
<h1>Evaluation Committee</h1>
 

	
 
<p>The Evaluation Committee evaluates projects that have applied to become
 
members of Conservancy.
 
  Conservancy's <a href="/about/board/">Board of
 
    Directors</a> <a href="/news/2013/apr/23/linksvayer-and-eval-committee/">formally
 
    charters and authorizes</a> this Committee to offer <a href="/members/">membership to
 
  projects  <a href="/members/apply/">that apply</a>
 
    for membership in Conservancy.</p>
 

	
 
<h2>Jeremy Allison</h2>
 

	
 
<p>Jeremy Allison is one of the lead developers on the Samba Team, a group
 
of programmers developing an Open Source Windows compatible file and print
 
server product for UNIX systems. Developed over the Internet in a
 
distributed manner similar to the Linux system, Samba is used by all Linux
 
distributions as well as many thousands of corporations and products
 
worldwide. Jeremy handles the co-ordination of Samba development efforts
 
and acts as a corporate liaison to companies using the Samba code
 
commercially.</p>
 

	
 
<p>He works for Google, Inc. who fund him to work on improving Samba and
 
solving the problems of  Windows and Linux interoperability.</p>
 

	
 
<h2>Tom Callaway</h2>
 

	
 
<p>Tom Callaway has been working for Red Hat since 2001. He started in
 
Sales Engineering and has been the Fedora Engineering Manager since 2008.
 
He served three consecutive elected terms on the Fedora Board from 2007 to
 
2011. Tom also maintains or co-maintains a large number of Packages in
 
Fedora (currently 390) and is leading the Fedora Packaging Committee,
 
responsible for RPM Packaging Standards and Practices.  Additionally, he is
 
responsible for managing Fedora's Legal issues.  Tom frequently represents
 
Fedora and Free Software at conferences around the world, and tries his
 
best not to make too big of a fool of himself.</p>
 

	
 
<p>When not working, Tom enjoys geocaching, ice hockey, gaming, science
 
fiction, and pinball.</p>
 

	
 
<h2>Lo&iuml;c Dachary</h2>
 

	
 
<p>Lo&iuml;c Dachary has been involved with the Free Software Movement since
 
1987, when he started distributing GNU tapes to the general public in
 
France. In 2012, he founded <a href="http://upstream-university.org/">Upstream
 
University</a>, a nonprofit with the goal of teaching developers how to
 
contribute easily and efficiently. Dachary volunteers as a developer
 
for <a href="http://april.org/">April</a>, a grassroots organization
 
promoting Free Software. He maintains April's OpenStack cluster and organizes
 
contributions with agile methods. As President
 
of <a href="http://fsffrance.org/">FSF France</a>, he also provides technical
 
and legal resources to French Free Software developers. His day job is to use
 
and contribute to <a href="http://ceph.com/">Ceph</a> within OpenStack.</p>
 

	
 
<h2>Mark Galassi</h2>
 

	
 
<p>Mark Galassi has been involved in the GNU project since 1984. He
 
currently works as a researcher in the International, Space, and Response
 
division at Los Alamos National Laboratory, where he has worked on the
 
HETE-2 satellite, ISIS/Genie, the Raptor telescope, the Swift satellite,
 
and the muon tomography project. In 1997 Mark took a couple of years off
 
from Los Alamos (where he was previously in the ISR division and the
 
Theoretical Astrophysics group) to work for Cygnus (now a part of Red Hat)
 
writing software and books for eCos, although he continued working on the
 
HETE-2 satellite (an astrophysical Gamma Ray Burst mission) part time. Mark
 
earned his BA in Physics at Reed College and a PhD from the Institute for
 
Theoretical Physics at Stony Brook.</p>
 

	
 
<h2>Mike Hostetler</h2>
 

	
 
<p>Mike Hostetler is an inventor, entrepreneur, programmer and proud
 
father. Having worked with web technologies since the mid 1990's, Mike has
 
had extensive experience developing web applications with PHP and
 
JavaScript.  Currently, Mike works as the Founder and CEO of appendTo, LLC,
 
the company dedicated to jQuery, based in Denver, Colorado. Heavily
 
involved in Open Source, Mike is an alumni of the jQuery Core team,
 
participates in the QCubed PHP5 Framework project, and participates in the
 
Drupal project. When not in front of a computer, Mike enjoys hiking,
 
fly-fishing, snowboarding and spending time with his family.</p>
 

	
 
<h2>Bradley M. Kuhn</h2>
 

	
 
<p>Bradley M. Kuhn began his work in the Free Software Movement as a
 
volunteer when, in 1992, he became an early adopter of the popular
 
GNU/Linux operating system, and began contributing to various Free Software
 
projects.  He worked during the 1990s as a system administrator and
 
software development consultant for Westinghouse, Lucent Technologies, and
 
numerous small companies.  He also spent one year teaching Advanced
 
Placement Computer Science (using GNU/Linux and GCC) at Walnut Hills High
 
School in Cincinnati.  In January 2000, he was hired by the Free Software
 
Foundation (FSF), and he served as its Executive Director from March 2001
 
until March 2005, when he left FSF to join the Software Freedom Law Center
 
(SFLC), where he worked as SFLC's Policy Analyst and Technology Director
 
from 2005 until October 2010, when he joined Conservancy as its Executive
 
Director.  Kuhn holds a summa cum laude B.S. in Computer Science from
 
Loyola College in Maryland, and an M.S. in Computer Science from the
 
University of Cincinnati.  His Master's thesis discussed methods for
 
dynamic interoperability of Free Software languages.</p>
 

	
 
<h2>Mike Linksvayer</h2>
 

	
 
<p>Mike Linksvayer serves on the boards of AcaWiki and OpenHatch, and is
 
chair of the Open Definition Advisory Council. From 2003 to 2012 he served
 
as CTO and VP of Creative Commons, where he is now a Senior Fellow. In 2000
 
he co-founded Bitzi, an early open content/open data mass collaboration
 
platform.</p>
 

	
 
<h2>Martin Michlmayr</h2>
 

	
 
<p>Martin Michlmayr has been involved in various free and open source
 
software projects for well over 15 years.  He acted as the leader of the
 
Debian project for two years and currently serves on the board of the Open
 
Source Initiative (OSI).  Martin works for HP as an Open Source Community
 
Expert.  In this role, he facilitates open source activities both
 
internally within HP as well as externally within the broader open source
 
community.  Martin holds Master degrees in Philosophy, Psychology and
 
Software Engineering, and earned a PhD from the University of
 
Cambridge.</p>
 

	
 
<h2>Evan Prodromou</h2>
 

	
 
<p>Evan Prodromou is the lead developer of pump.io and founder of E14N Inc.
 
He has previously worked on Free Software for web services like MediaWiki
 
and StatusNet.</p>
 

	
 
<h2>Karen Sandler</h2>
 

	
 
<p>Karen M. Sandler is currently the Executive Director of the GNOME
 
Foundation and prior to taking up this position was General Counsel of the
 
Software Freedom Law Center (SFLC). Karen continues to do <a
 
href="/about/outside#karen">pro bono legal work with Conservancy</a>, SFLC,
 
and Question Copyright and serves as an officer of both the Conservancy and
 
SFLC.  Before joining SFLC, Karen worked as an associate in the corporate
 
departments of Gibson, Dunn &amp; Crutcher LLP in New York and Clifford
 
Chance in New York and London. Karen received her law degree from Columbia
 
Law School in 2000, where she was a James Kent Scholar and co-founder of
 
the Columbia Science and Technology Law Review. Karen received her
 
bachelor’s degree in engineering from The Cooper Union. She is a recipient
 
of an O'Reilly Open Source Award and also co-host of the <a
 
href="http://faif.us">&ldquo;Free as in Freedom&rdquo; podcast</a>.</p>
 

	
 
<h2>Tony Sebro</h2>
 

	
 
<p>Tony Sebro is a seasoned technology attorney with a broad base of
 
business and legal experience relating to technology, strategy, and
 
business development.  Before joining Conservancy, Tony was most recently a
 
Partner with the PCT Companies, a family of professional service firms.
 
Prior to that, he was Program Director, Technology &amp; Intellectual
 
Property at IBM's Armonk, New York world headquarters, where he was
 
responsible for developing and executing licensing strategies in
 
partnership with IBM's Software Group.  In that role, Tony led negotiations
 
and structured deals with market leaders in the web technology, e-commerce,
 
retail, enterprise software, and financial services sectors.  Tony also led
 
various internal strategic initiatives, including an effort to provide
 
business leaders of key emerging market opportunities with coordinated
 
intellectual property development and monetization strategies, as well as
 
the revamping and supervision of IBM's corporate-wide process for
 
determining the value and availability of patents for sale.  Prior to his
 
tenure at IBM, Mr. Sebro practiced law in the New York office of Kenyon
 
&amp; Kenyon, LLP, handling litigation and licensing matters for clients in
 
the medical, pharmaceutical and mechanical technology areas.  Tony received
 
his J.D. and his M.B.A. from the University of Michigan.  He received his
 
B.S. from the Massachusetts Institute of Technology. Tony is a member of
 
the New York bar and registered to practice before the U.S. Patent and
 
Trademark Office. Tony is also an active participant in and supporter of
 
the non-profit community, and has served on the boards of multiple
 
non-profit organizations.</p>
 

	
 
{% endblock %}
www/conservancy/static/about/license/index.html
Show inline comments
...
 
@@ -14,13 +14,13 @@
 
  gitorious</a>.</p>
 

	
 
<p>The documents on this website are
 
  licensed as <a href="http://creativecommons.org/licenses/by-sa/3.0/">CC-By-SA-3.0
 
  Unported</a>.  In some cases, the documents are dual-licensed
 
  (AGPLv3-or-later|CC-By-SA-3.0-Unported-or-later), to make it more
 
  licensed as <a href="https://creativecommons.org/licenses/by-sa/3.0/us">CC-By-SA-3.0
 
  USA</a>.  In some cases, the documents are dual-licensed
 
  (AGPLv3-or-later|CC-By-SA-3.0-USA-or-later), to make it more
 
  convenient to intermix the document with code.</p>
 

	
 
<p>Conservancy's Logo is also licensed
 
  under <a href="http://creativecommons.org/licenses/by-sa/3.0/us">CC-By-SA-3.0
 
  under <a href="https://creativecommons.org/licenses/by-sa/3.0/us">CC-By-SA-3.0
 
  USA</a>.  A <a href="/img/conservancy-logo_package.zip">Conservancy
 
  logo package in ZIP format is available, which includes high quality SVG,
 
  PNG and other formats</a>.</p>
www/conservancy/static/about/outside/index.html
Show inline comments
 
{% extends "base_about.html" %}
 
{% block subtitle %}Outside Counsel &amp; Contractors - {% endblock %}
 
{% block subtitle %}Outside Counsel, et alia - {% endblock %}
 
{% block submenuselection %}Outside{% endblock %}
 
{% block content %}
 
<h1>Outside Counsel</h1>
www/conservancy/static/campaign/index.html
Show inline comments
 
new file 100644
 
{% extends "base_conservancy.html" %}
 
{% block subtitle %}Campaign - {% endblock %}
 
{% block category %}campaign{% endblock %}
 

	
 
{% block head %}
 
<link href="/jquery-ui.css" rel="stylesheet" type="text/css"/>
 
<script src="/jquery.min.js"></script>
 
<script src="/jquery-ui.min.js"></script>
 

	
 
<style type="text/css">
 
  #progressbar .ui-widget-header { background: rgb(206, 31, 31); }
 
</style>
 

	
 
<script type="text/javascript">
 
  $(document).ready(function() {
 
    $("#progressbar").progressbar({ value: (41194 / 75000) * 100 });
 

	
 
    $('.toggle-content').hide();
 

	
 
    $('.toggle-control')
 
     .addClass('clickable')
 
     .bind('click', function() {
 
        var $control = $(this);
 
        var $parent = $control.parents('.toggle-unit');
 

	
 
        $parent.toggleClass('expanded');
 
        $parent.find('.toggle-content').slideToggle();
 

	
 
        // if control has HTML5 data attributes, use to update text
 
        if ($parent.hasClass('expanded')) {
 
            $control.html($control.attr('data-expanded-text'));
 
        } else {
 
            $control.html($control.attr('data-text'));
 
        }
 
    });
 
    $('a.donate-now')
 
      .addClass('clickable')
 
      .bind('click', function() {
 
        var $control = $('#donate-box');
 

	
 
        $control.toggleClass('expanded');
 
        $control.find('.toggle-content').slideUp("slow");
 
        $control.find('.toggle-content').slideDown("slow");
 
    });
 
  });
 
</script>
 
{% endblock %}
 

	
 
{% block content %}
 

	
 
<div style="position:fixed;top:180px;right:2%;width:18%">
 
<table style="background-color:#afe478;width:100%;">
 
<tr><td style="text-align:center;padding:10px;padding-bottom:10px;">
 

	
 
<div id="donate-box" class="toggle-unit"><h1 class="toggle-content">Donate Now!</h1></div>
 
</div>
 

	
 
<!--
 
<script type="text/javascript" src="https://js.balancedpayments.com/v1/balanced.js"></script>
 

	
 
<script type="text/javascript">
 
   // FOR DEMONSTRATION PURPOSES ONLY - if you already have a server you can POST to, replace
 
   //                                   the URL with the URL to post to.
 
   // go to http://requestb.in/
 
   // click create new request bin and COPY that URL without the ?inspect at the end
 
   var requestBinURL = 'http://requestb.in/1dk2x8y1';  // make sure it doesn't end in ?inspect
 

	
 
   var marketplaceUri = '/v1/marketplaces/TEST-MPMp7ZUPDpbj69vk2wGHRVY';
 
   //var marketplaceUri = 'https://www.balancedpayments.com/marketplaces/TEST-MPMp7ZUPDpbj69vk2wGHRVY';
 
   balanced.init(marketplaceUri);
 

	
 
var cardData = {
 
  "name": "Bernhard Riemann",                 // Optional
 
  "card_number": "4111 1111 1111 1111",
 
  "expiration_month": 4,
 
  "expiration_year": 2014,
 
};
 

	
 
function evbind(el, ev, handler) {
 
if(el.addEventListener) {
 
el.addEventListener(ev, handler, false);
 
} else if(el.attachEvent) {
 
el.attachEvent('on'+ev, function() {handler.apply(el);});
 
}
 
}
 

	
 
/*
 

	
 
   function responseCallbackHandler(response) {
 
      alert(response.status);
 
      switch (response.status) {
 
        case 400:
 
            // missing or invalid field - check response.error for details
 
            console.log(response.error);
 
            break;
 
        case 404:
 
            // your marketplace URI is incorrect
 
            console.log(response.error);
 
            break;
 
        case 201:
 
            // WOO HOO! MONEY!
 
            // response.data.uri == URI of the bank account resource you
 
            // should store this bank account URI to later credit it
 
            console.log(response.data);
 
            var $form = $("#bank-account-form");
 
            // the uri is an opaque token referencing the tokenized bank account
 
            var bank_account_uri = response.data['uri'];
 
            // append the token as a hidden field to submit to the server
 
            $('<input>').attr({
 
               type: 'hidden',
 
               value: bank_account_uri,
 
               name: 'balancedBankAccountURI'
 
            }).appendTo($form);
 
            $form.attr({action: requestBinURL});
 
            $form.get(0).submit();
 
        break;
 
    default:
 
        console.log(response.status);
 
        }
 
    }
 
   //alert('allo?');
 

	
 
   var tokenizeInstrument = function(e) {
 
        alert('what"s going on?');
 
        e.preventDefault();
 
   
 
        var $form = $('#bank-account-form');
 
        var bankAccountData = {
 
            name: $form.find('.ba-name').val(),
 
            account_number: $form.find('.ba-an').val(),
 
            bank_code: $form.find('.ba-rn').val(),
 
            type: $form.find('select').val()
 
        };
 
 
 
 
 
        balanced.bankAccount.create(bankAccountData, responseCallbackHandler);
 
    };
 
   $('#bank-account-form').submit(tokenizeInstrument);
 
*/
 
</script>
 
-->
 
$41,194 raised toward<br/>
 
our $75,000 goal.</br>
 
<div id="progressbar" style="height:20px;"><span style="float:right; align:center; margin-right:40%">54.9%</div>
 
<font style="font-size: 75%">(Progress bar updated daily.)</font>
 
<a id="donate" style="text-decoration:none"></a>
 
<h3>Help us reach our goal:</h3>
 

	
 
<!-- PayPal start -->
 
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
 
<input type="hidden" name="cmd" value="_s-xclick">
 
<input type="hidden" name="hosted_button_id" value="3VRTJALJ5PQRW">
 
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="Donate Now!">
 
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
 
</form>
 
<!-- PayPal end -->
 

	
 
<!-- Balanced start -
 
<div class="container">
 
- <form action="#" method="POST" id="bank-account-form" class="form-horizontal" onsubmit="balanced.card.create(cardData, function(response) { alert(response.status); });"> -
 
<form action="#" method="POST" id="bank-account-form" class="form-horizontal">
 
    <fieldset>
 
        <legend>Bank Account Information</legend>
 
        <p><label>Account Holder's Name
 
            <input type="text"
 
                   autocomplete="off"
 
                   placeholder="Bank Account Holder's name"
 
                   class="ba-name"
 
                   name="ba_name"
 
                   value="4111 1111 1111 1111">
 
        </label></p>
 
        <p><label>Routing Number
 
            <input type="text"
 
                   autocomplete="off"
 
                   placeholder="Routing Number"
 
                   class="ba-rn"
 
                   name="ba_rn"
 
                   value="4">
 
        </label></p>
 
        <p><label>Account Number
 
            <input type="text"
 
                   autocomplete="off"
 
                   placeholder="Account Number"
 
                   class="ba-an"
 
                   name="ba_an"
 
                   value="2014">
 
        </label></p>
 
        <p><label>Account Something
 
            <input type="text"
 
                   autocomplete="off"
 
                   placeholder="Account Something"
 
                   class="ba-as"
 
                   name="ba_as"
 
                   value="something someone">
 
        </label></p>
 
        <p><label>Account Type
 
            <select name="ba_type">
 
                <option value='' disabled selected style='display:none;'>
 
                    Select Account Type
 
                </option>
 
                <option value="checking" default>CHECKING</option>
 
                <option value="savings">SAVINGS</option>
 
            </select>
 
        </label></p>
 
        <button type="submit" class="btn">
 
            Tokenize
 
        </button>
 
    </fieldset>
 
</form>
 
</div>
 
<script type="text/javascript">
 

	
 
evbind(document.getElementById('bank-account-form'), 'submit',
 
  function(e) {
 
    e.preventDefault();
 
    console.log(this.ba_as.value);
 
    balanced.card.create(
 
 {
 
  "name": this.ba_as.value,
 
  "card_number": this.ba_name.value,
 
  "expiration_month": this.ba_rn.value,
 
  "expiration_year": this.ba_an.value,
 
/*
 
  "name": "Bernhard Riemann",                 // Optional
 
  "card_number": "4111 1111 1111 1111",
 
  "expiration_month": 4,
 
  "expiration_year": 2014,
 
*/
 
 },
 
    function(response) {
 
      console.log(response);
 
      console.log(response.data.uri);
 
      $.ajax("/campaign/?token=" + response.data.uri + '&amount=' + document.getElementById('bank-account-form').ba_an.value);
 
      alert(response.status);
 
    });
 
});
 

	
 
</script>
 
- Balanced end -->
 

	
 
<p>
 
Other donation methods:
 
<div class="toggle-unit">
 
    <h4 class="toggle-control" data-text="Google Checkout" 
 
    data-expanded-text="Google Checkout:">Google Checkout</h4>
 
    <div class="toggle-content">
 
<!-- Google Checkout start -->
 
<script type="text/javascript"> 
 
function validateAmount(amount){
 
    if(amount.value.match( /^[0-9]+(\.([0-9]+))?$/)){
 
        return true;
 
    }else{
 
        alert('You must enter a valid donation.');
 
        amount.focus();
 
        return false;
 
    }
 
}
 
</script>
 
<form action="https://checkout.google.com/cws/v2/Donations/622836985124940/checkoutForm" id="BB_BuyButtonForm" method="post" name="BB_BuyButtonForm" onSubmit="return validateAmount(this.item_price_1)" target="_top">
 
    <input name="item_name_1" type="hidden" value="Directed Donation for Conservancy's NPO accounting software project"/>
 
    <input name="item_description_1" type="hidden" value="This donation to the Software Freedom Conservancy, Inc. is directed toward Conservancy's NPO accounting software project.  Conservancy is a 501(c)(3) charity in New York."/>
 
    <input name="item_quantity_1" type="hidden" value="1"/>
 
    <input name="item_currency_1" type="hidden" value="USD"/>
 
    <input name="item_is_modifiable_1" type="hidden" value="true"/>
 
    <input name="item_min_price_1" type="hidden" value="6.0"/>
 
    <input name="item_max_price_1" type="hidden" value="25000.0"/>
 
    <input name="_charset_" type="hidden" value="utf-8"/>
 
    <table cellpadding="5" cellspacing="0" width="1%">
 
        <tr>
 
            <td align="right" valign="top" style="padding-top:9px;" nowrap="nowrap" width="1%">&#x24; <input id="item_price_1" name="item_price_1" onfocus="this.style.color='black'; this.value='';" size="6" type="text" value="250.00"/>
 
            </td>
 
            <td align="left" width="1%">
 
                <input alt="Donate" src="https://checkout.google.com/buttons/donateNow.gif?merchant_id=622836985124940&amp;w=115&amp;h=50&amp;style=trans&amp;variant=text&amp;loc=en_US" type="image"/>
 
            </td>
 
        </tr>
 
    </table>
 
</form>
 
<!-- Google Checkout end -->
 
    </div><!-- /.toggle-content -->
 
</div><!-- /.toggle.unit -->
 

	
 
<div class="toggle-unit">
 
    <h4 class="toggle-control" data-text="Wire Transfer" 
 
    data-expanded-text="Wire Transfer:">Wire Transfer</h4>
 
    <div class="toggle-content">
 
        Please
 
            contact <a href="mailto:accounting@sfconservancy.org">Conservancy
 
            by email</a><br/> for wire transfer instructions.<br/>
 
            Please Include your currency and country.<br/>
 
    </div><!-- /.toggle-content -->
 
</div><!-- /.toggle.unit -->
 

	
 
<div class="toggle-unit">
 
    <h4 class="toggle-control" data-text="Paper Check" 
 
    data-expanded-text="Paper Check:">Paper Check</h4>
 
    <div class="toggle-content">
 
    Send paper check donations to:<br/>
 
    Software Freedom Conservancy, Inc.<br/>
 
    137 MONTAGUE ST  STE 380<br/>
 
    BROOKLYN, NY 11201-3548<br/>
 
    Please write <q>NPO ACCOUNTING</q> in the memo line. 
 
    </div><!-- /.toggle-content -->
 
</div><!-- /.toggle.unit -->
 

	
 
<!-- Flattr start -->
 
<p><a href="https://flattr.com/thing/1296704/Campaign-to-develop-Free-and-Open-Source-Non-Profit-Accounting-Software" target="_blank"><img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /></a></p>
 
<!-- Flattr end -->
 
</td></tr></table>
 
</div>
 

	
 
<div style="align:left;width:80%;">
 
<!-- begin campaign text -->
 

	
 
<h2>Fundraising Campaign: Non-Profit Accounting Software</h2>
 

	
 
<img src="/img/conservancy-accounting-campaign-logo.png" alt="Conservancy accounting campaign logo" style="float:left;" />
 

	
 
<p>Conservancy has a plan to help all non-profit organizations (NPOs) by
 
creating an Open Source and Free Software accounting system usable by
 
non-technical bookkeepers, accountants, and non-profit managers.  You can
 
help us do it by donating now.
 
</p>
 

	
 
<p>To keep their books and produce annual government filings, most NPOs rely
 
on proprietary software, paying exorbitant licensing fees.  This is
 
fundamentally at cross purposes with their underlying missions of charity,
 
equality, democracy, and sharing.</p>
 

	
 
<p>You can help Conservancy fix this problem by <a href="#donate-box" class="donate-now">donating now</a>.  We seek to
 
raise $75,000 to employ a 
 
developer for one year to make substantial progress on this project.</p>
 

	
 
<p>This project has the potential to save the non-profit sector
 
millions in licensing fees every year.  Even non-profits that continue to use proprietary accounting
 
software will benefit, since the existence of quality Open Source and Free
 
  Software for a particular task curtails predatory behavior by proprietary
 
  software companies, and creates a new standard of comparison.</p>
 

	
 
<p>But, more powerfully, this project's realization
 
will increase the agility and collaborative potential
 
for the non-profit sector &mdash; a boon to funders, boards, and employees &mdash;  bringing the Free Software and general NPO communities
 
into closer collaboration and understanding.</p>
 

	
 
<p>Thanks in advance for <a href="#donate-box" class="donate-now">helping us</a> develop Free Software to benefit all
 
non-profit organizations, and the 
 
populations they serve.</p>
 

	
 
<p>Donors of $500 or more will be acknowledged in the THANKS file and other
 
  appropriate places in the codebase itself.</p>
 

	
 
<p><a href="#endorsements">Endorsers of this effort</a> include Fractured Atlas, The Free Software
 
Foundation, Mozilla Foundation, GNOME Foundation, OpenHatch, Open
 
Source Initiative, QuestionCopyright.org, and Software in the Public
 
Interest; all encourage you to <a href="#donate-box" class="donate-now">donate and support it</a>.</p>
 

	
 

	
 
<h3>Background</h3>
 

	
 
<p>Like many non-profit organizations (NPOs) in the USA, Conservancy's
 
  financial accounts are audited annually by an independent accounting firm;
 
  we recently completed our fiscal year 2011 audit.  As usual, our auditors
 
  asked plenty of questions about our accounting software.  Conservancy uses
 
  only Free Software, of course, centered around a set of straightforward reporting
 
  scripts that we created to run on top
 
  of <a href="http://www.ledger-cli.org/">Ledger CLI</a>. (Conservancy's
 
  current configuration using Ledger CLI
 
  is <a href="https://gitorious.org/ledger/npo-ledger-cli">publicly
 
  documented and explained</a>.)</p>
 

	
 
<p>Our auditors were only familiar with proprietary accounting software, and
 
  so our system seemed foreign to them, as it relies on Ledger CLI's text files, Emacs and
 
  version control.  During their questions
 
  about our setup, we asked them to hypothetically prescribe a specific
 
  proprietary software setup as a model for  managing Conservancy's
 
  accounts.  Our chief auditor started by mentioning a few well-known
 
  proprietary solutions.   But then he paused and continued:  <q>Given
 
  that Conservancy's a fiscal sponsor with so many temporarily restricted
 
  accounts, existing systems really wouldn't do that good of a job for
 
  you</q>.</p>
 

	
 
<p>Indeed, Conservancy reached out into the broader fiscal sponsorship
 
  community beyond the <acronym title="Free, Libre and Open Source Software">FLOSS</acronym>
 
  <acronym title="Non-profit Organization">NPO</acronym> community and discovered that many larger fiscal sponsors &mdash; even
 
  those willing to use proprietary components &mdash; have cobbled together
 
  their own unique systems, idiosyncratically tailored to their specific
 
  environments.  Thus, good, well-designed, and reusable accounting software
 
  for non-profit fiscal sponsorship is not just missing in the software
 
  freedom community; it's missing altogether.</p>
 

	
 

	
 
<p>The project that Conservancy proposes will take a modest step
 
  forward in creating a better solution for everyone. 
 
  <a href="#quotes">Many NPO leaders and academics agree</a> with Conservancy about the
 
  immediate need for work to begin on this
 
  effort.  <a id="endorsements" style="text-decoration:none"></a><a href="https://www.fracturedatlas.org">Fractured Atlas</a>, The <a href="http://fsf.org">Free Software
 
  Foundation</a>, The <a href="https://www.mozilla.org/foundation/">Mozilla
 
Foundation</a>, The <a href="http://www.gnome.org/foundation/">GNOME Foundation</a>,  <a
 
        href="https://openhatch.org/">OpenHatch</a>, <a href="http://opensource.org/node/658">Open Source Initiative</a>,
 
  <a href="http://QuestionCopyright.org">QuestionCopyright.org</a>, and <a href="http://www.spi-inc.org/">Software in the Public Interest</a> have
 
  all endorsed Conservancy's plan, and they encourage you to <a href="#donate-box" class="donate-now">donate and
 
  support it</a>.</p>
 

	
 
<p>Conservancy is uniquely qualified to undertake this task.  Using only Free
 
  Software, Conservancy already meets the complex accounting challenges of
 
  earmarked, directed donations for over thirty different projects.  We've
 
  learned much about this work in our first seven years of
 
  operation, and we're prepared to apply what we've learned to solve
 
  this problem not just for ourselves, but for anyone who seeks a
 
  solution that both respects software freedom and handles non-profit
 
  accounting for all sorts of NPOs, including fiscal sponsors.  General NPO
 
  accounting is just a &ldquo;base case&rdquo; of fiscal sponsorship (i.e.,
 
  an NPO is just a fiscal sponsor for one and only one specific project),
 
  and Conservancy therefore believes a solution that handles fiscal sponsors
 
  will also handle the simpler case as well.</p>
 

	
 
<h3>The Plan</h3>
 

	
 
<p>Conservancy proposes to hire a software developer for one year to
 
  accomplish the first two phases of this project.  Conservancy seeks to
 
  raise $75,000 toward this project to help cover salary and benefits for a
 
  full-time staffer to work on this project.  We ask that you give generously
 
  via the donation buttons on this page to support our work.</p>
 

	
 
<h4>Phase 0</h4>
 

	
 
<p>Some Free Software accounting systems do exist.  A previous informal
 
  survey of these systems that Conservancy conducted in 2007 led us to the
 
  conclusion that, in general, these systems were heavily geared toward
 
  for-profit endeavors, ignored the unique needs of NPOs generally, and
 
  were completely hopeless for the specific needs of a fiscal sponsoring
 
  organization.  Conservancy's assessment at the time was that these
 
  challenges could be addressed only with a large rewrite of one of these
 
  systems.  Conservancy chose
 
  <a href="http://www.ledger-cli.org/">Ledger CLI</a> precisely because
 
  it provided flexibility and configurability not present in any other Free Software
 
  double-entry accounting system.</p>
 

	
 
<p>However, while that previous informal survey informs Conservancy's
 
  existing hypothesis that Ledger CLI is the right base system here,
 
  Conservancy will first test that hypothesis.  The first phase of this
 
  project (estimated to last approximately 6-8 full-time weeks) will produce
 
  a written survey of all known Free Software accounting systems, and
 
  indicate what challenges exist to adapt such systems for the needs of
 
  NPOs.  The <a href="https://fsf.org/">Free Software Foundation</a> has
 
  pledged their help in the evaluation of SQL-Ledger,
 
  and <a href="http://www.gnome.org/foundation/">the GNOME Foundation</a> has pledged their
 
  help in the evaluation of <a href="http://www.gnucash.org/">GNUcash</a> (which they
 
  currently use, respectively).</p>
 

	
 
<h4>Phase 1</h4>
 

	
 
<p>Phase 1 of the project will select the preferred codebase from Phase 0,
 
  and improve that system to create a basic accounting system for
 
  small-to-medium sized USA NPOs (i.e., Form 990-filers) &mdash; including fiscal
 
  sponsors &mdash; with the following features:
 
<ul>
 
<li>Basic accounts payable/receivable (with invoicing)</li>
 
<li>Tracking and reporting of non-profit income types (related business
 
  income, unrelated business taxable income, donations, etc.)</li>
 
<li>Basic backup documentation tracking for expenses and payments</li>
 
<li>Basic bank statement reconciliation reporting</li>
 
<li>Basic annual audit preparation reporting
 
  (A <a href="https://github.com/ledger/ledger/tree/next/contrib/non-profit-audit-reports">prototype
 
  of this portion is already complete</a> and has been relied on for
 
  real-life audits; but the prototype is just a hack and needs to be
 
  rewritten.)</li>
 
<li>Ability to easily handle all these features on a project-by-project
 
  subset of the accounts, and to easily export and excise that subset from
 
  the system. (i.e., support for temporarily restricted assets, earmarked for
 
  fiscal-sponsored projects)</li>
 
<li>Multi-currency support and reporting</li>
 
</ul>
 
</p>
 

	
 
<p>We will consider the first year of this project successful <em>only if all these
 
  functions can be performed by a bookkeeper who is generally qualified as a
 
  bookkeeper</em>, but not necessarily familiar with standard Free Software tools
 
  such as GNU/Linux, Emacs, version control, and command line scripts.  This
 
  requirement is essential: Conservancy's existing system using Ledger CLI
 
  already provides sufficient functionality to manage non-profit accounting,
 
  but our system requires a bookkeeper who is also adept with the
 
  aforementioned tools already.</p>
 

	
 
<p>Finally, while the first year of work focuses on USA NPO needs,
 
  Conservancy seeks to lead an international effort, and welcomes
 
  contributions and input from everyone in the non-profit community from
 
  around the world.  Conservancy has created
 
  a <a href="http://lists.sfconservancy.org/mailman/listinfo/npo-accounting">mailing
 
  list for discussion of this project</a> and encourages interested parties
 
  from around the world to join the mailing list and contribute to the
 
  project!</p>
 
  
 
<h3>Why Conservancy Must Fund This Work</h3>
 

	
 
<p>As it stands, nearly all Open Source and Free Software NPOs either use
 
  proprietary software, or fully outsource their bookkeeping and accounting
 
  to third-parties.  Those that don't do so (such as Conservancy and the Free
 
  Software Foundation) have long complained that existing Free Software in
 
  this area is inadequate, and have been forced to develop customized,
 
  one-off solutions in-house to make the systems work.</p>
 

	
 
<p>It's highly unlikely that the for-profit sector will adapt existing Free
 
  Software accounting systems to meet the differing needs of NPOs (let alone
 
  the more complex needs of fiscal sponsors; based on
 
  advice from our auditors and other fiscal sponsors, Conservancy understands that <em>no existing
 
  solution &mdash; proprietary or Free &mdash; meets the requirements of fiscal sponsorship accounting</em>).  Fiscal sponsors like
 
  Conservancy must track a separate set of books for every project, keeping
 
  in mind that a project may leave at any time for another NPO and need to take
 
  their books with them.  Yet, the books of the entire organization are the
 
  aggregate of the books of all these projects, and internally, they need to
 
  be presented as a single set of books for those purposes.</p>
 

	
 
<p>Meanwhile, even if an organization is not a fiscal sponsor, non-profit
 
  accounting is <em>just different</em> than for-profit accounting, particularly in
 
  the USA.  For example, for-profit-oriented systems often make problematic
 
  assumptions about the workflow of accounting tasks (often because NPOs
 
  rely primarily on donations, rather than fee-for-service or widget-selling
 
  income).  Also, non-profit income is categorized differently than
 
  for-profit income, and the reporting requirements vary wildly from their
 
  for-profit equivalents.</p>
 

	
 
<p>Conservancy's existing system is working adequately, but requires daily
 
  the relatively more expensive time of a highly technical person to do the
 
  job of bookkeeping.  Also, the system cannot easily be adapted in its
 
  current form for another NPO, unless they also have a
 
  skilled technical employee to act as bookkeeper.  This project aims to build
 
  on what Conservancy has learned and produce a non-profit accounting system
 
  that corrects these flaws.</p>
 

	
 
<p>Finally, Conservancy's mission (as stated
 
on <a href="http://sfconservancy.org/docs/conservancy_Form-1023.pdf">our Form
 
1023 with the USA IRS</a>) includes producing Open Source and Free Software.
 
Thus, this project is a great way to pursue Conservancy's mission and address a
 
specific need that so many NPOs (including us) have.  If no one steps up to create Free Software to replace the widely used
 
proprietary software, NPOs in aggregate will pay <em>much more</em> money for
 
proprietary licensing than Conservancy will ever spend in developing a
 
replacement. Please <a href="#donate-box" class="donate-now">donate
 
generously</a> to help us do it!</p>
 

	
 
<a id="quotes"></a>
 
<h3>Statements of Support For This Project from Others</h3>
 

	
 
<p><q>As a national fiscal sponsor with over 3,000 arts and cultural projects
 
under our umbrella, Fractured Atlas is ecstatic about this effort's
 
potential. After 15 years wrestling with Quickbooks and other inadequate
 
options, the idea of an open source tool designed specifically for this niche
 
of the field is beyond welcome. We wholeheartedly support the Conservancy's
 
work on this front and look forward to seeing where it leads.</q> &mdash;
 
<a href="https://www.fracturedatlas.org/site/bios/staff/1/Adam%20Forest_Huttler">Adam
 
  Huttler</a>, Executive Director, <a href="https://www.fracturedatlas.org">Fractured Atlas</a></p>
 

	
 
<p><q><a href="http://QuestionCopyright.org">QuestionCopyright.org</a> is
 
just one of many organizations that would benefit from a Free Software
 
accounting system that is usable by non-technical people.  We
 
enthusiastically support the Conservancy's campaign to create one, and look
 
forward to using the result.</q>
 
&mdash; <a href="http://questioncopyright.org/speakers/karl_fogel">Karl
 
Fogel</a>, Executive Director,
 
  <a href="http://QuestionCopyright.org">QuestionCopyright.org</a></p>
 

	
 
<p><q>As a fiscal sponsor organization with over 30 currently-associated Free
 
Software projects, Software in the Public Interest shares the Conservancy's
 
needs and interests in this area, and welcome the opportunity to collaborate
 
on the development of a Free Software solution to our accounting needs.</q>
 
&mdash; Bdale Garbee, President,  <a href="http://www.spi-inc.org/">Software
 
    in the Public Interest</a></p>
 

	
 
<p><q>Open Source accounting software specifically tailored for non-profits
 
    will fill a pretty large need.</q>
 
    &mdash; <a href="http://wagner.nyu.edu/calabrese">Thad Calabrese</a>,
 
    Assistant Professor of Public and Nonprofit Financial Management
 
    at <a href="http://wagner.nyu.edu/">NYU Wagner</a>, and co-author
 
    of <cite>Financial Management for Public, Health, and Not-for-Profit
 
    Organizations, 4th Edition</cite>.</p>
 

	
 
<p><q>Creating free software specifically designed to address the needs of
 
nonprofits is a laudable goal and one that Conservancy is extremely well
 
positioned to achieve.</q>  &mdash; <a href="http://gnomg.org">Karen
 
Sandler</a>, Executive
 
Director, The <a href="http://www.gnome.org/foundation/">GNOME Foundation</a></p>
 

	
 
<p><q>The Open Source Initiative has shared the experiences of Software
 
     Freedom Conservancy in navigating the financial management needs of
 
     non-profit organisations and shares their concern. We have many NPOs as
 
     members and we welcome this useful initiative by Conservancy.</q>
 
     &mdash; Simon Phipps, President, <a href="http://opensource.org/node/658">Open Source
 
     Initiative</a></p>
 

	
 
<p><q>The <a href="https://fsf.org/">Free Software Foundation</a> is committed to doing all of its work,
 
both public-facing and internal, using only free software. We are thankful to
 
the developers of SQL Ledger for providing the accounting software that has
 
served us well for many years. As we have grown, so have the complexities of
 
our finances.  Because of our own needs and our mission to help other
 
organizations &mdash; both inside and outside of the technology sphere
 
&mdash; run their operations on exclusively free software, we wholeheartedly
 
support this Conservancy initiative.</q> &mdash; <a href="http://www.fsf.org/about/staff-and-board#johns">John Sullivan</a>, Executive
 
Director, <a href="https://fsf.org">Free Software Foundation</a></p>
 

	
 
<p><q>Open source is a great way to solve new problems and make software that
 
is more flexible and responsive to the needs of the people who use it. That's
 
as true for the finance industry as it is on the web.</q>
 
&mdash; <a href="http://blog.mozilla.org/press/bios/mark-surman/">Mark
 
Surman</a>, Executive
 
Director, <a href="https://www.mozilla.org/foundation/">Mozilla
 
Foundation</a></p>
 

	
 
<p><q>As a young free software non-profit, OpenHatch is thrilled to see this
 
effort; it would let us spend more of our time on programs and less on
 
paperwork.  I have already personally <a href="#donate-box" class="donate-now">donated</a>.</q> &mdash; Asheesh Laroia,
 
Executive Director, <a href="https://openhatch.org/">OpenHatch</a></p>
 

	
 
<h3>Some Important Details for this Fundraiser</h3>
 

	
 
<ul>
 
<li>Donations made are general donations to the Software Freedom
 
  Conservancy, Inc., a 501(c)(3) charity incorporated in New York.
 
  Conservancy is committed to doing this work described herein, but cannot
 
  promise to complete the work if the fundraising goal is not reached.  If
 
  the fundraising goal is not reached, Conservancy will do its best to make
 
  progress on the plan above with the resources available.  It's expected
 
  that work will simply proceed, but more slowly and take more time, if the
 
  fundraising goal is not reached.</li>
 

	
 
<li>The license for the project is not yet chosen, since Phase 0 might
 
  prescribe contribution to particular upstream projects, and Conservancy is
 
  committed to contributing to upstream projects under their chosen license,
 
  where possible.  However, Conservancy promises that all software that is
 
  written will be released under a license that is both approved by
 
  the <a href="http://www.gnu.org/licenses/license-list.html#GPLCompatibleLicenses">FSF as a Free
 
  Software license</a> <strong>and</strong> by the OSI as
 
  an <a href="http://opensource.org/licenses">OSI-approved license</a>.  New
 
  documentation that is written will be released under some license
 
  compatible with <a href="https://creativecommons.org/licenses/by-sa/3.0/us/">CC BY-SA 3.0 USA</a>.</li>
 

	
 
<!-- end campaign text -->
 
</div>
 

	
 
{% endblock %}
www/conservancy/static/conservancy.css
Show inline comments
...
 
@@ -11,13 +11,20 @@ p, h1, h2, h3, h4, h5, h6, #mainContent ul, #mainContent ol {
 

	
 
body {
 
/*  font-family: "Lucida Grande",Verdana,Lucida,Helvetica,Arial,sans-serif; */
 
  font-family: Helvetica;
 
  font-size: 95%;
 
  background-color: #0000;
 
  color: #ffff;
 
}
 

	
 
a { text-decoration: none; color: #557733; }
 
a:hover { text-decoration: underline; color: #3B6337; }
 
a:hover { text-decoration: underline; color: #577632; }
 

	
 
.toggle-control  {
 
cursor: pointer;
 
text-decoration: none; color: #557733;
 
}
 
.toggle-control:hover { text-decoration: underline; color: #577632; }
 

	
 
h1 { margin-top: .75em; margin-bottom: .5em; }
 
h2 { margin-top: .75em; margin-bottom: .5em; }
...
 
@@ -57,10 +64,20 @@ h3 { margin-top: .6em; margin-bottom: .4em; }
 
}
 

	
 
/* Navigation bar */
 
#navbar-outer { background: #B3D4A3; }
 
#navbar-outer { background: #577632; }
 
#navbar { margin-left: 104px; margin-top: 3px; float: left; display: inline; }
 
#navbar ul { list-style: none; }
 
#navbar-clear { clear: both; border-bottom: 1px solid #808080; }
 
#navbar li.campaign a {
 
  display: block;
 
  background: #fafafe;
 
  padding: .2em .8em;
 
  margin-right: 3px;
 
  border: 1px solid #808080;
 
  font-size: .8em;
 
  background: url(/img/nav-bg-campaign.png) bottom repeat-x;
 
  border-color: #ffffff;
 
}
 
#navbar li a {
 
  display: block;
 
  background: #fafafe;
...
 
@@ -69,8 +86,10 @@ h3 { margin-top: .6em; margin-bottom: .4em; }
 
  border: 1px solid #808080;
 
  font-size: .8em;
 
  background: #fff url(/img/nav-bg.png) bottom repeat-x;
 
  border-color: #ffffff;
 
}
 
#navbar li:hover a { background: #3b6337; color: #fff; }
 
#navbar li:hover a { background: #577632; color: #fff; }
 
#navbar li.campaign:hover a { background: #577632; color: #CE1F1F; }
 
#navbar li { float: left; display: inline; margin-bottom: 3px; }
 

	
 
#mainContent {
...
 
@@ -101,14 +120,16 @@ h3 { margin-top: .6em; margin-bottom: .4em; }
 
    border: 1px solid #CCC;
 
    background: #fff url(/img/nav-bg.png) bottom repeat-x;
 
}
 
#container #sidebar li:hover a { background: #3b6337; color: #fff; }
 
#container #sidebar li:hover a { background: #577632; color: #fff; }
 

	
 
#container #sidebar.Directors ul li.Directors,
 
#container #sidebar.Eval ul li.Eval,
 
#container #sidebar.Contact ul li.Contact,
 
#container #sidebar.Officers ul li.Officers,
 
#container #sidebar.Staff ul li.Staff,
 
#container #sidebar.Outside ul li.Outside,
 
#container #sidebar.Filings ul li.Filings,
 
#container #sidebar.License ul li.License,
 
#container #sidebar.Current ul li.Current,
 
#container #sidebar.Services ul li.Services,
 
#container #sidebar.Applying ul li.Applying
...
 
@@ -231,6 +252,12 @@ body.conservancy-sponsors #navbar ul li.sponsors a /* NO COMMA HERE! */
 
    font-weight: bold;
 
    background: #fff url(/img/nav-bg-up.png) top repeat-x;
 
}
 
body.conservancy-campaign #navbar ul li.campaign a
 
{ 
 
    color: #000033;
 
    font-weight: bold;
 
    background: url(/img/nav-bg-campaign-up.png) bottom repeat-x;
 
}
 

	
 
#sponsor ul {
 
  clear: all;
...
 
@@ -251,3 +278,5 @@ body.conservancy-sponsors #navbar ul li.sponsors a /* NO COMMA HERE! */
 
   width: 200px;
 
   font-size: 12px;
 
}
 

	
 

	
www/conservancy/static/donate/index.html
Show inline comments
...
 
@@ -50,11 +50,11 @@ function validateAmount(amount){
 

	
 
<h3>Donate via Flattr</h3>
 
<p>
 
<a href="http://www.flattr.com">Flattr</a> is a social micro-payment system that allows users to make donations via the web.  Like Google Checkout, Flattr does not charge any processing fees on donations to Conservancy.  If you are a Flattr user and you would like to "flattr" Conservancy with a donation, click on the button below:
 
<a href="https://www.flattr.com">Flattr</a> is a social micro-payment system that allows users to make donations via the web.  Flattr does not charge any processing fees on donations to Conservancy.  If you are a Flattr user and you would like to "flattr" Conservancy with a donation, click on the button below:
 
</p>
 

	
 
<a href="http://flattr.com/thing/922714/Donate-to-Software-Freedom-Conservancy" target="_blank">
 
<img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr us!" title="Flattr us!" border="0" /></a>
 
<a href="https://flattr.com/thing/922714/Donate-to-Software-Freedom-Conservancy" target="_blank">
 
<img src="https://api.flattr.com/button/flattr-badge-large.png" alt="Flattr us!" title="Flattr us!" border="0" /></a>
 

	
 

	
 

	
www/conservancy/static/img/conservancy-accounting-campaign-logo.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
www/conservancy/static/img/nav-bg-campaign-up.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
www/conservancy/static/img/nav-bg-campaign.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
www/conservancy/static/img/sponsors/appendTo.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
www/conservancy/static/img/sponsors/mozilla.png
Show inline comments
 
new file 100644
 
binary diff not shown
Show images
www/conservancy/static/img/sponsors/redhat.eps
Show inline comments
 
new file 100644
 
%!PS-Adobe-3.1 EPSF-3.0
 
%ADO_DSC_Encoding: MacOS Roman
 
%%Title: Red_Hat_cmyk_logo.eps
 
%%Creator: Adobe Illustrator(R) 13.0
 
%%For: joshua gajownik
 
%%CreationDate: 4/7/08
 
%%BoundingBox: 0 0 394 127
 
%%HiResBoundingBox: 0 0 393.0518 126.1919
 
%%CropBox: 0 0 393.0518 126.1919
 
%%LanguageLevel: 2
 
%%DocumentData: Clean7Bit
 
%ADOBeginClientInjection: DocumentHeader "AI11EPS"
 
%%AI8_CreatorVersion: 13.0.0%AI9_PrintingDataBegin%ADO_BuildNumber: Adobe Illustrator(R) 13.0.0 x406 R agm 4.4378 ct 5.1039%ADO_ContainsXMP: MainFirst%AI7_Thumbnail: 128 44 8%%BeginData: 6042 Hex Bytes%0000330000660000990000CC0033000033330033660033990033CC0033FF%0066000066330066660066990066CC0066FF009900009933009966009999%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333%3333663333993333CC3333FF3366003366333366663366993366CC3366FF%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033%6600666600996600CC6600FF6633006633336633666633996633CC6633FF%6666006666336666666666996666CC6666FF669900669933669966669999%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF%9933009933339933669933999933CC9933FF996600996633996666996699%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100%000011111111220000002200000022222222440000004400000044444444%550000005500000055555555770000007700000077777777880000008800%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF%524C45FD0EFFA8522E05FD06F82E527EFD71FF5227FD0DF82752FD6DFF7D%FD13F853FD69FFA827FD15F8277DFD66FF7D27FD05F82727272027F82720%4B6F6F4B27FD06F852FD64FF52FD06F84B8CB08CB5686F6EB5686F4A938C%27FD06F852FD62FF7DFD06F8278CB58CB58DB58CB58D936F00F86F8C27FD%06F852FD60FF7DFD07F844B08CB08CB08CB08CB58C6F204B8CB020FD07F8%52FD5FFF27FD07F8936F276FB5939393B58DB58DB58DB58CB5FD07F827A8%FD5DFF28FD08F88C6FFD05F8278CB58CB08CB58CB58C4BFD07F827FD5CFF%A8FD08F827B58C6FF8274B6F6FB58CB58DB58CB58DB06FFD08F87DFD5BFF%00FD08F84B8CB08C6F8CB08CB08CB08CB58CB08CB58CB0FD09F8FD2DFFA8%5252FD2AFF7DFD06F827202727B58CB58DB58DB58DB58DB58DB58DB58DB5%8C4BFD08F87DFD2DFFF8F8F852FD28FF27F8F8F84B68B58CB06EF820938C%B08CB08CB58CB58CB58CB58CB58CB06EFD08F827FD2CFFA8F8F8F805FFFF%A82EA8FD23FFF8F8F84B8CB08CB58D6FF8F8F84B6FB58DB08CB58DB58CB5%8DB58CB58DB5FD09F8A8FD2CFFF8F8F827FFFF53F87DFD1AFFA9FD07FF52%F8F8F868B08CB08CB58C27FD05F8274A6F8CB58CB08CB58CB08CB58C27FD%08F852FD2BFFA8F8F8F805FFFF7DF87DFD19FF52F8FD07FF52F8F8F86F8D%B58DB58DB58D4BFD07F84B8DB58DB58DB58DB58D9326B56F4BFD05F852FD%2CFFF8F8F827FFFF7DF87DFD19FF28F8FD07FF05FD04F8B08CB58CB58CB0%8C6F20FD06F86F8CB58CB58CB58CB04A6F8CB08C6FFD05F8FD0BFFA8FFA8%FFFFA87DA8FD05FFA8597D7DFD0AFFA87D7D7DFFFFF8F8F805FFFF7DF87D%FFFF7D7D52A8FD08FFA87D527DA8FD06FF52F8FD04A8FFFFFF27FD04F827%B08DB58CB58DB58CB56F4BFD04F826B58DB58CB58DB58CB58DB58CB58C93%F8F8F827A8FD09FF2E05F852FF52F8F852FFFFFF7D27FD05F859FD06FFA8%2EFD04F82784F8F8F827FFFF7DF87DFF27FD04F82EA8FD04FFA827FD05F8%2EFFFFFF05FD04F827F8057EFFFFFD06F820B08CB08CB58CB08CB08C9344%4BF8F868B08CB08CB58CB08CB58CB08CB58C27F8F8F8A8FD09FF52F8F827%52F8F8F852FFFF52FD08F852FFFFA9FF7DFD0BF827FFFF7DF853F80552A8%7D27F827FD04FF28F82E7D7D7D27F828FFFF595227F8FD0452A8FFFFFD06%F80027938CB58DB58DB58DB58CB58DB593B58DB58DB58DB58DB58DB58DB5%8DB02700F8F87DFD09FF52F8F827FD04F82EFF7DF8F8F8277D5227F8F8F8%7DFFFFFF27F805F8F82727FD05F827FFFF7DF8F82EFD05FF52F87DFD0AFF%27F8A8FFFFFF52F8FD07FFFD09F86F8CB08CB58CB58CB58CB58CB08CB58C%B58CB58CB58CB58CB58CB58C27F8F8F8A8FD09FF52FD05F852527EFF27F8%F805FD04FF27F8F805FFFF52F8F8F8277DFFFF7DFD04F827FFFF7DF8F8A8%FD06FFF805FD0AFF7DF87DFFFFFF52F8FD07FFFD0AF8276EB58DB58CB58D%B58CB58DB58CB58DB58CB58DB58CB58DB58C93FD04F87EFD09FF2EFD04F8%A8FFFFFF7DF8F8F8A8FD04FF7DF8F8F8A8FFFD04F87DFD04FF7DF8F8F827%FFFF7DF852FD07FF27F8A9FD0AFFF82EFFFFFF28F8A9FD06FFFD09F82727%2720938CB08CB58CB08CB58CB08CB58CB08CB58CB08CB58CB020FD04F8A8%FD09FF52F8F8F852FD04FF27F8F8F87D7EFD047DF8F8F87DA8F8F8F827FD%05FFA8F8F8F805FFFF7DF87DFD07FF52F8FD07FFA87D5252F852FFFFFF52%F8FD07FF27FD07F827A8FFA827F8276FB58DB58CB58DB58DB58DB58DB58D%B58DB58DB52700F8F8F827FD0AFF52F8F8F87DFD04FF52F8F8F805FD08F8%59A8F8F8F852FD06FFF8F8F827FFFF7DF87DFD07FF52F8A8FD04FF5205FD%05F852FFFFFF2EF8AFFD06FF05FD08F8FFFFFF7D27F8F8F84B6EB08CB08C%B08CB58CB08CB58CB08C6F20FD06F8FD0AFF52F8F8F8A8FD04FF05FD0CF8%7D7DF8F8F852FD05FFA8F8F8F805FFFF7DF87DFD07FF52F8FFFFFFA805F8%27527D84A8F852FFFFFF52F8FD07FF52FD08F852FD05FF27F8F827264B4B%9393B58CB58DB5926F4B27FD07F852FD0AFF52F8F8F8A8FD04FF27F8F8F8%522752285227522852A87EF8F8F852FD06FFF8F8F827FFFF7DF87DFD07FF%28F8A9FFFF27F8A8FD05FFF82EFFFFFF2EF8A8FD06FF53FD04F8272E52F8%F8A8FD05FF05FD08F826F827FD0CF852FD0AFF52F8F8F8A8FD04FF27F8F8%05FD0AFF7DF8F8F805FD05FF84F8F8F827FFFF7DF87DFD07FF52F8FFFF53%F87DFD06FFF852FFFFFF52F8FD08FF527D527EFFFFFF52F827A8FD05FF27%27F827F82827F80528F82727FD0AF8A8FD0AFF52F8F827A8FD04FF7DF8F8%F859FD0AFFFD04F87DFD04FF52F8F8F827FFFF7DF87DFD07FF2EF8FFFF27%F8FD06FFA8F852FFFFFF52F8A8FD0FFF5227A8FD06FFA8A884FFFFFFA8FF%FFA8FF53FD09F827FD0BFF52F8F8F8A8FD04FFA8FD04F852A8FFFFFFA87D%A8FFFF52F8F8F8277DFFA853FD04F827FFFF7DF87DFD07FF52F8FFFF27F8%FD06FF52F852FFFFFF52F8A8FD23FF27FD09F859FFA8FD09FF2EF8F8F87D%FD05FF52FD04F8FD0527F87DFFFFA827FD04F82727FD05F827FFFF7DF87D%FD07FF2EF8A8FF52F852FD04FFA8F8F82EFFFFFF52F87DFD04FFA8A8FD15%FF7DF85227A8FFFFFF27FD09F8FFF827A8FD08FF52F8F8F8A8FD06FF52FD%09F827FFFFFF59FD07F82728F8F8F8FFFF7DF87DFD07FF52F8FFFFFFF8F8%52A87D52F827F827FFFFFFA8F8F87D7D7DA8F805FD15FF7D27F827A8FFFF%FFFD05F827F827F87DFF2727A8FD08FF52F8F82784FD07FF7D2EFD05F827%2784FD04FF7D27F8F8F82727FF52F8F82EFFFF7D277DFD07FF52F8A8FFFF%A805FD04F852FF2727FD04FF7DF8F8F827A82705FD17FFA8A8FFFFFF27F8%F82752A8A8FFA87EFFFFA8A8FD0AFFA8FFA8FD0AFFAF7D7D7DA8A8FD08FF%84527DA8FFFFFFA8FFA8FFFFFFA8FD09FFA8FD05FF7D7D7DA9FFFFA8FD06%FFA8537D84FFA8A8FD1BFF7DF8F8F87DFD7AFFA827F852A8FD7BFF52F852%FD7CFF7DF852FD7DFFA8A8FD7DFFA8FDFCFFFDFCFFFD6EFFFF%%EndData
 
%ADOEndClientInjection: DocumentHeader "AI11EPS"
 
%%Pages: 1
 
%%DocumentNeededResources: 
 
%%DocumentSuppliedResources: procset Adobe_AGM_Image 1.0 0
 
%%+ procset Adobe_CoolType_Utility_T42 1.0 0
 
%%+ procset Adobe_CoolType_Utility_MAKEOCF 1.23 0
 
%%+ procset Adobe_CoolType_Core 2.31 0
 
%%+ procset Adobe_AGM_Core 2.0 0
 
%%+ procset Adobe_AGM_Utils 1.0 0
 
%%DocumentFonts: 
 
%%DocumentNeededFonts: 
 
%%DocumentNeededFeatures: 
 
%%DocumentSuppliedFeatures: 
 
%%DocumentProcessColors:  Cyan Magenta Yellow Black
 
%%DocumentCustomColors: 
 
%%CMYKCustomColor: 
 
%%RGBCustomColor: 
 
%%EndComments
 
                                                                                                                                                                                                                              
 
                                                                                                                                                                                                                                                         
 
                                                                                                                                                                                                                                                         
 
                                                                                                                                                                                                                                                         
 
                                                                                                                                                                                                                                                         
 
                                                                                                                                                                                                                                                         
 
%%BeginDefaults
 
%%ViewingOrientation: 1 0 0 1
 
%%EndDefaults
 
%%BeginProlog
 
%%BeginResource: procset Adobe_AGM_Utils 1.0 0
 
%%Version: 1.0 0
 
%%Copyright: Copyright(C)2000-2006 Adobe Systems, Inc. All Rights Reserved.
 
systemdict/setpacking known
 
{currentpacking	true setpacking}if
 
userdict/Adobe_AGM_Utils 73 dict dup begin put
 
/bdf
 
{bind def}bind def
 
/nd{null def}bdf
 
/xdf
 
{exch def}bdf
 
/ldf 
 
{load def}bdf
 
/ddf
 
{put}bdf	
 
/xddf
 
{3 -1 roll put}bdf	
 
/xpt
 
{exch put}bdf
 
/ndf
 
{
 
	exch dup where{
 
		pop pop pop
 
	}{
 
		xdf
 
	}ifelse
 
}def
 
/cdndf
 
{
 
	exch dup currentdict exch known{
 
		pop pop
 
	}{
 
		exch def
 
	}ifelse
 
}def
 
/gx
 
{get exec}bdf
 
/ps_level
 
	/languagelevel where{
 
		pop systemdict/languagelevel gx
 
	}{
 
		1
 
	}ifelse
 
def
 
/level2 
 
	ps_level 2 ge
 
def
 
/level3 
 
	ps_level 3 ge
 
def
 
/ps_version
 
	{version cvr}stopped{-1}if
 
def
 
/set_gvm
 
{currentglobal exch setglobal}bdf
 
/reset_gvm
 
{setglobal}bdf
 
/makereadonlyarray
 
{
 
	/packedarray where{pop packedarray
 
	}{
 
		array astore readonly}ifelse
 
}bdf
 
/map_reserved_ink_name
 
{
 
	dup type/stringtype eq{
 
		dup/Red eq{
 
			pop(_Red_)
 
		}{
 
			dup/Green eq{
 
				pop(_Green_)
 
			}{
 
				dup/Blue eq{
 
					pop(_Blue_)
 
				}{
 
					dup()cvn eq{
 
						pop(Process)
 
					}if
 
				}ifelse
 
			}ifelse
 
		}ifelse
 
	}if
 
}bdf
 
/AGMUTIL_GSTATE 22 dict def
 
/get_gstate
 
{
 
	AGMUTIL_GSTATE begin
 
	/AGMUTIL_GSTATE_clr_spc currentcolorspace def
 
	/AGMUTIL_GSTATE_clr_indx 0 def
 
	/AGMUTIL_GSTATE_clr_comps 12 array def
 
	mark currentcolor counttomark
 
		{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 3 -1 roll put
 
		/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 add def}repeat pop
 
	/AGMUTIL_GSTATE_fnt rootfont def
 
	/AGMUTIL_GSTATE_lw currentlinewidth def
 
	/AGMUTIL_GSTATE_lc currentlinecap def
 
	/AGMUTIL_GSTATE_lj currentlinejoin def
 
	/AGMUTIL_GSTATE_ml currentmiterlimit def
 
	currentdash/AGMUTIL_GSTATE_do xdf/AGMUTIL_GSTATE_da xdf
 
	/AGMUTIL_GSTATE_sa currentstrokeadjust def
 
	/AGMUTIL_GSTATE_clr_rnd currentcolorrendering def
 
	/AGMUTIL_GSTATE_op currentoverprint def
 
	/AGMUTIL_GSTATE_bg currentblackgeneration cvlit def
 
	/AGMUTIL_GSTATE_ucr currentundercolorremoval cvlit def
 
	currentcolortransfer cvlit/AGMUTIL_GSTATE_gy_xfer xdf cvlit/AGMUTIL_GSTATE_b_xfer xdf
 
		cvlit/AGMUTIL_GSTATE_g_xfer xdf cvlit/AGMUTIL_GSTATE_r_xfer xdf
 
	/AGMUTIL_GSTATE_ht currenthalftone def
 
	/AGMUTIL_GSTATE_flt currentflat def
 
	end
 
}def
 
/set_gstate
 
{
 
	AGMUTIL_GSTATE begin
 
	AGMUTIL_GSTATE_clr_spc setcolorspace
 
	AGMUTIL_GSTATE_clr_indx{AGMUTIL_GSTATE_clr_comps AGMUTIL_GSTATE_clr_indx 1 sub get
 
	/AGMUTIL_GSTATE_clr_indx AGMUTIL_GSTATE_clr_indx 1 sub def}repeat setcolor
 
	AGMUTIL_GSTATE_fnt setfont
 
	AGMUTIL_GSTATE_lw setlinewidth
 
	AGMUTIL_GSTATE_lc setlinecap
 
	AGMUTIL_GSTATE_lj setlinejoin
 
	AGMUTIL_GSTATE_ml setmiterlimit
 
	AGMUTIL_GSTATE_da AGMUTIL_GSTATE_do setdash
 
	AGMUTIL_GSTATE_sa setstrokeadjust
 
	AGMUTIL_GSTATE_clr_rnd setcolorrendering
 
	AGMUTIL_GSTATE_op setoverprint
 
	AGMUTIL_GSTATE_bg cvx setblackgeneration
 
	AGMUTIL_GSTATE_ucr cvx setundercolorremoval
 
	AGMUTIL_GSTATE_r_xfer cvx AGMUTIL_GSTATE_g_xfer cvx AGMUTIL_GSTATE_b_xfer cvx
 
		AGMUTIL_GSTATE_gy_xfer cvx setcolortransfer
 
	AGMUTIL_GSTATE_ht/HalftoneType get dup 9 eq exch 100 eq or
 
		{
 
		currenthalftone/HalftoneType get AGMUTIL_GSTATE_ht/HalftoneType get ne
 
			{
 
			 mark AGMUTIL_GSTATE_ht{sethalftone}stopped cleartomark
 
			}if
 
		}{
 
		AGMUTIL_GSTATE_ht sethalftone
 
		}ifelse
 
	AGMUTIL_GSTATE_flt setflat
 
	end
 
}def
 
/get_gstate_and_matrix
 
{
 
	AGMUTIL_GSTATE begin
 
	/AGMUTIL_GSTATE_ctm matrix currentmatrix def
 
	end
 
	get_gstate
 
}def
 
/set_gstate_and_matrix
 
{
 
	set_gstate
 
	AGMUTIL_GSTATE begin
 
	AGMUTIL_GSTATE_ctm setmatrix
 
	end
 
}def
 
/AGMUTIL_str256 256 string def
 
/AGMUTIL_src256 256 string def
 
/AGMUTIL_dst64 64 string def
 
/AGMUTIL_srcLen nd
 
/AGMUTIL_ndx nd
 
/AGMUTIL_cpd nd
 
/capture_cpd{
 
	//Adobe_AGM_Utils/AGMUTIL_cpd currentpagedevice ddf
 
}def
 
/thold_halftone
 
{
 
	level3
 
		{sethalftone currenthalftone}
 
		{
 
			dup/HalftoneType get 3 eq
 
			{
 
				sethalftone currenthalftone
 
			}{
 
				begin
 
				Width Height mul{
 
					Thresholds read{pop}if
 
				}repeat
 
				end
 
				currenthalftone
 
			}ifelse
 
		}ifelse
 
}def 
 
/rdcmntline
 
{
 
	currentfile AGMUTIL_str256 readline pop
 
	(%)anchorsearch{pop}if
 
}bdf
 
/filter_cmyk
 
{	
 
	dup type/filetype ne{
 
		exch()/SubFileDecode filter
 
	}{
 
		exch pop
 
	}
 
	ifelse
 
	[
 
	exch
 
	{
 
		AGMUTIL_src256 readstring pop
 
		dup length/AGMUTIL_srcLen exch def
 
		/AGMUTIL_ndx 0 def
 
		AGMCORE_plate_ndx 4 AGMUTIL_srcLen 1 sub{
 
			1 index exch get
 
			AGMUTIL_dst64 AGMUTIL_ndx 3 -1 roll put
 
			/AGMUTIL_ndx AGMUTIL_ndx 1 add def
 
		}for
 
		pop
 
		AGMUTIL_dst64 0 AGMUTIL_ndx getinterval
 
	}
 
	bind
 
	/exec cvx
 
	]cvx
 
}bdf
 
/filter_indexed_devn
 
{
 
	cvi Names length mul names_index add Lookup exch get
 
}bdf
 
/filter_devn
 
{	
 
	4 dict begin
 
	/srcStr xdf
 
	/dstStr xdf
 
	dup type/filetype ne{
 
		0()/SubFileDecode filter
 
	}if
 
	[
 
	exch
 
		[
 
			/devicen_colorspace_dict/AGMCORE_gget cvx/begin cvx
 
			currentdict/srcStr get/readstring cvx/pop cvx
 
			/dup cvx/length cvx 0/gt cvx[
 
				Adobe_AGM_Utils/AGMUTIL_ndx 0/ddf cvx
 
				names_index Names length currentdict/srcStr get length 1 sub{
 
					1/index cvx/exch cvx/get cvx
 
					currentdict/dstStr get/AGMUTIL_ndx/load cvx 3 -1/roll cvx/put cvx
 
					Adobe_AGM_Utils/AGMUTIL_ndx/AGMUTIL_ndx/load cvx 1/add cvx/ddf cvx
 
				}for
 
				currentdict/dstStr get 0/AGMUTIL_ndx/load cvx/getinterval cvx
 
			]cvx/if cvx
 
			/end cvx
 
		]cvx
 
		bind
 
		/exec cvx
 
	]cvx
 
	end
 
}bdf
 
/AGMUTIL_imagefile nd
 
/read_image_file
 
{
 
	AGMUTIL_imagefile 0 setfileposition
 
	10 dict begin
 
	/imageDict xdf
 
	/imbufLen Width BitsPerComponent mul 7 add 8 idiv def
 
	/imbufIdx 0 def
 
	/origDataSource imageDict/DataSource get def
 
	/origMultipleDataSources imageDict/MultipleDataSources get def
 
	/origDecode imageDict/Decode get def
 
	/dstDataStr imageDict/Width get colorSpaceElemCnt mul string def
 
	imageDict/MultipleDataSources known{MultipleDataSources}{false}ifelse
 
	{
 
		/imbufCnt imageDict/DataSource get length def
 
		/imbufs imbufCnt array def
 
		0 1 imbufCnt 1 sub{
 
			/imbufIdx xdf
 
			imbufs imbufIdx imbufLen string put
 
			imageDict/DataSource get imbufIdx[AGMUTIL_imagefile imbufs imbufIdx get/readstring cvx/pop cvx]cvx put
 
		}for
 
		DeviceN_PS2{
 
			imageDict begin
 
		 	/DataSource[DataSource/devn_sep_datasource cvx]cvx def
 
			/MultipleDataSources false def
 
			/Decode[0 1]def
 
			end
 
		}if
 
	}{
 
		/imbuf imbufLen string def
 
		Indexed_DeviceN level3 not and DeviceN_NoneName or{
 
			/srcDataStrs[imageDict begin
 
				currentdict/MultipleDataSources known{MultipleDataSources{DataSource length}{1}ifelse}{1}ifelse
 
				{
 
					Width Decode length 2 div mul cvi string
 
				}repeat
 
				end]def		
 
			imageDict begin
 
		 	/DataSource[AGMUTIL_imagefile Decode BitsPerComponent false 1/filter_indexed_devn load dstDataStr srcDataStrs devn_alt_datasource/exec cvx]cvx def
 
			/Decode[0 1]def
 
			end
 
		}{
 
			imageDict/DataSource[1 string dup 0 AGMUTIL_imagefile Decode length 2 idiv string/readstring cvx/pop cvx names_index/get cvx/put cvx]cvx put
 
			imageDict/Decode[0 1]put
 
		}ifelse
 
	}ifelse
 
	imageDict exch
 
	load exec
 
	imageDict/DataSource origDataSource put
 
	imageDict/MultipleDataSources origMultipleDataSources put
 
	imageDict/Decode origDecode put	
 
	end
 
}bdf
 
/write_image_file
 
{
 
	begin
 
	{(AGMUTIL_imagefile)(w+)file}stopped{
 
		false
 
	}{
 
		Adobe_AGM_Utils/AGMUTIL_imagefile xddf 
 
		2 dict begin
 
		/imbufLen Width BitsPerComponent mul 7 add 8 idiv def
 
		MultipleDataSources{DataSource 0 get}{DataSource}ifelse type/filetype eq{
 
			/imbuf imbufLen string def
 
		}if
 
		1 1 Height MultipleDataSources not{Decode length 2 idiv mul}if{
 
			pop
 
			MultipleDataSources{
 
			 	0 1 DataSource length 1 sub{
 
					DataSource type dup
 
					/arraytype eq{
 
						pop DataSource exch gx
 
					}{
 
						/filetype eq{
 
							DataSource exch get imbuf readstring pop
 
						}{
 
							DataSource exch get
 
						}ifelse
 
					}ifelse
 
					AGMUTIL_imagefile exch writestring
 
				}for
 
			}{
 
				DataSource type dup
 
				/arraytype eq{
 
					pop DataSource exec
 
				}{
 
					/filetype eq{
 
						DataSource imbuf readstring pop
 
					}{
 
						DataSource
 
					}ifelse
 
				}ifelse
 
				AGMUTIL_imagefile exch writestring
 
			}ifelse
 
		}for
 
		end
 
		true
 
	}ifelse
 
	end
 
}bdf
 
/close_image_file
 
{
 
	AGMUTIL_imagefile closefile(AGMUTIL_imagefile)deletefile
 
}def
 
statusdict/product known userdict/AGMP_current_show known not and{
 
	/pstr statusdict/product get def
 
	pstr(HP LaserJet 2200)eq 	
 
	pstr(HP LaserJet 4000 Series)eq or
 
	pstr(HP LaserJet 4050 Series )eq or
 
	pstr(HP LaserJet 8000 Series)eq or
 
	pstr(HP LaserJet 8100 Series)eq or
 
	pstr(HP LaserJet 8150 Series)eq or
 
	pstr(HP LaserJet 5000 Series)eq or
 
	pstr(HP LaserJet 5100 Series)eq or
 
	pstr(HP Color LaserJet 4500)eq or
 
	pstr(HP Color LaserJet 4600)eq or
 
	pstr(HP LaserJet 5Si)eq or
 
	pstr(HP LaserJet 1200 Series)eq or
 
	pstr(HP LaserJet 1300 Series)eq or
 
	pstr(HP LaserJet 4100 Series)eq or 
 
	{
 
 		userdict/AGMP_current_show/show load put
 
		userdict/show{
 
		 currentcolorspace 0 get
 
		 /Pattern eq
 
		 {false charpath f}
 
		 {AGMP_current_show}ifelse
 
		}put
 
	}if
 
	currentdict/pstr undef
 
}if
 
/consumeimagedata
 
{
 
	begin
 
	AGMIMG_init_common
 
	currentdict/MultipleDataSources known not
 
		{/MultipleDataSources false def}if
 
	MultipleDataSources
 
		{
 
		DataSource 0 get type
 
		dup/filetype eq
 
			{
 
			1 dict begin
 
			/flushbuffer Width cvi string def
 
			1 1 Height cvi
 
				{
 
				pop
 
				0 1 DataSource length 1 sub
 
					{
 
					DataSource exch get
 
					flushbuffer readstring pop pop
 
					}for
 
				}for
 
			end
 
			}if
 
		dup/arraytype eq exch/packedarraytype eq or DataSource 0 get xcheck and
 
			{
 
			Width Height mul cvi
 
				{
 
				0 1 DataSource length 1 sub
 
					{dup DataSource exch gx length exch 0 ne{pop}if}for
 
				dup 0 eq
 
					{pop exit}if
 
				sub dup 0 le
 
					{exit}if
 
				}loop
 
			pop
 
			}if		
 
		}
 
		{
 
		/DataSource load type 
 
		dup/filetype eq
 
			{
 
			1 dict begin
 
			/flushbuffer Width Decode length 2 idiv mul cvi string def
 
			1 1 Height{pop DataSource flushbuffer readstring pop pop}for
 
			end
 
			}if
 
		dup/arraytype eq exch/packedarraytype eq or/DataSource load xcheck and
 
			{
 
				Height Width BitsPerComponent mul 8 BitsPerComponent sub add 8 idiv Decode length 2 idiv mul mul
 
					{
 
					DataSource length dup 0 eq
 
						{pop exit}if
 
					sub dup 0 le
 
						{exit}if
 
					}loop
 
				pop
 
			}if
 
		}ifelse
 
	end
 
}bdf
 
/addprocs
 
{
 
	 2{/exec load}repeat
 
	 3 1 roll
 
	 [5 1 roll]bind cvx
 
}def
 
/modify_halftone_xfer
 
{
 
	currenthalftone dup length dict copy begin
 
	 currentdict 2 index known{
 
	 	1 index load dup length dict copy begin
 
		currentdict/TransferFunction known{
 
			/TransferFunction load
 
		}{
 
			currenttransfer
 
		}ifelse
 
		 addprocs/TransferFunction xdf 
 
		 currentdict end def
 
		currentdict end sethalftone
 
	}{
 
		currentdict/TransferFunction known{
 
			/TransferFunction load 
 
		}{
 
			currenttransfer
 
		}ifelse
 
		addprocs/TransferFunction xdf
 
		currentdict end sethalftone		
 
		pop
 
	}ifelse
 
}def
 
/clonearray
 
{
 
	dup xcheck exch
 
	dup length array exch
 
	Adobe_AGM_Core/AGMCORE_tmp -1 ddf 
 
	{
 
	Adobe_AGM_Core/AGMCORE_tmp 2 copy get 1 add ddf 
 
	dup type/dicttype eq
 
		{
 
			Adobe_AGM_Core/AGMCORE_tmp get
 
			exch
 
			clonedict
 
			Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf 
 
		}if
 
	dup type/arraytype eq
 
		{
 
			Adobe_AGM_Core/AGMCORE_tmp get exch
 
			clonearray
 
			Adobe_AGM_Core/AGMCORE_tmp 4 -1 roll ddf 
 
		}if
 
	exch dup
 
	Adobe_AGM_Core/AGMCORE_tmp get 4 -1 roll put
 
	}forall
 
	exch{cvx}if
 
}bdf
 
/clonedict
 
{
 
	dup length dict
 
	begin
 
	{
 
		dup type/dicttype eq
 
			{clonedict}if
 
		dup type/arraytype eq
 
			{clonearray}if
 
		def
 
	}forall
 
	currentdict
 
	end
 
}bdf
 
/DeviceN_PS2
 
{
 
	/currentcolorspace AGMCORE_gget 0 get/DeviceN eq level3 not and
 
}bdf
 
/Indexed_DeviceN
 
{
 
	/indexed_colorspace_dict AGMCORE_gget dup null ne{
 
		dup/CSDBase known{
 
			/CSDBase get/CSD get_res/Names known 
 
		}{
 
			pop false
 
		}ifelse
 
	}{
 
		pop false
 
	}ifelse
 
}bdf
 
/DeviceN_NoneName
 
{	
 
	/Names where{
 
		pop
 
		false Names
 
		{
 
			(None)eq or
 
		}forall
 
	}{
 
		false
 
	}ifelse
 
}bdf
 
/DeviceN_PS2_inRip_seps
 
{
 
	/AGMCORE_in_rip_sep where
 
	{
 
		pop dup type dup/arraytype eq exch/packedarraytype eq or
 
		{
 
			dup 0 get/DeviceN eq level3 not and AGMCORE_in_rip_sep and
 
			{
 
				/currentcolorspace exch AGMCORE_gput
 
				false
 
			}{
 
				true
 
			}ifelse
 
		}{
 
			true
 
		}ifelse
 
	}{
 
		true
 
	}ifelse
 
}bdf
 
/base_colorspace_type
 
{
 
	dup type/arraytype eq{0 get}if
 
}bdf
 
/currentdistillerparams where{pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
 
{
 
	/pdfmark_5{cleartomark}bind def
 
}{
 
	/pdfmark_5{pdfmark}bind def
 
}ifelse
 
/ReadBypdfmark_5
 
{
 
	currentfile exch 0 exch/SubFileDecode filter
 
	/currentdistillerparams where 
 
	{pop currentdistillerparams/CoreDistVersion get 5000 lt}{true}ifelse
 
	{flushfile cleartomark}
 
	{/PUT pdfmark}ifelse 	
 
}bdf
 
/xpdfm
 
{
 
	{
 
		dup 0 get/Label eq
 
		{
 
			aload length[exch 1 add 1 roll/PAGELABEL
 
		}{
 
			aload pop
 
			[{ThisPage}<<5 -2 roll>>/PUT
 
		}ifelse
 
		pdfmark_5
 
	}forall
 
}bdf
 
/ds{
 
	Adobe_AGM_Utils begin
 
}bdf
 
/dt{
 
	currentdict Adobe_AGM_Utils eq{
 
		end
 
	}if
 
}bdf
 
systemdict/setpacking known
 
{setpacking}if
 
%%EndResource
 
%%BeginResource: procset Adobe_AGM_Core 2.0 0
 
%%Version: 2.0 0
 
%%Copyright: Copyright(C)1997-2007 Adobe Systems, Inc. All Rights Reserved.
 
systemdict/setpacking known
 
{
 
	currentpacking
 
	true setpacking
 
}if
 
userdict/Adobe_AGM_Core 209 dict dup begin put
 
/Adobe_AGM_Core_Id/Adobe_AGM_Core_2.0_0 def
 
/AGMCORE_str256 256 string def
 
/AGMCORE_save nd
 
/AGMCORE_graphicsave nd
 
/AGMCORE_c 0 def
 
/AGMCORE_m 0 def
 
/AGMCORE_y 0 def
 
/AGMCORE_k 0 def
 
/AGMCORE_cmykbuf 4 array def
 
/AGMCORE_screen[currentscreen]cvx def
 
/AGMCORE_tmp 0 def
 
/AGMCORE_&setgray nd
 
/AGMCORE_&setcolor nd
 
/AGMCORE_&setcolorspace nd
 
/AGMCORE_&setcmykcolor nd
 
/AGMCORE_cyan_plate nd
 
/AGMCORE_magenta_plate nd
 
/AGMCORE_yellow_plate nd
 
/AGMCORE_black_plate nd
 
/AGMCORE_plate_ndx nd
 
/AGMCORE_get_ink_data nd
 
/AGMCORE_is_cmyk_sep nd
 
/AGMCORE_host_sep nd
 
/AGMCORE_avoid_L2_sep_space nd
 
/AGMCORE_distilling nd
 
/AGMCORE_composite_job nd
 
/AGMCORE_producing_seps nd
 
/AGMCORE_ps_level -1 def
 
/AGMCORE_ps_version -1 def
 
/AGMCORE_environ_ok nd
 
/AGMCORE_CSD_cache 0 dict def
 
/AGMCORE_currentoverprint false def
 
/AGMCORE_deltaX nd
 
/AGMCORE_deltaY nd
 
/AGMCORE_name nd
 
/AGMCORE_sep_special nd
 
/AGMCORE_err_strings 4 dict def
 
/AGMCORE_cur_err nd
 
/AGMCORE_current_spot_alias false def
 
/AGMCORE_inverting false def
 
/AGMCORE_feature_dictCount nd
 
/AGMCORE_feature_opCount nd
 
/AGMCORE_feature_ctm nd
 
/AGMCORE_ConvertToProcess false def
 
/AGMCORE_Default_CTM matrix def
 
/AGMCORE_Default_PageSize nd
 
/AGMCORE_Default_flatness nd
 
/AGMCORE_currentbg nd
 
/AGMCORE_currentucr nd
 
/AGMCORE_pattern_paint_type 0 def
 
/knockout_unitsq nd
 
currentglobal true setglobal
 
[/CSA/Gradient/Procedure]
 
{
 
	/Generic/Category findresource dup length dict copy/Category defineresource pop
 
}forall
 
setglobal
 
/AGMCORE_key_known
 
{
 
	where{
 
		/Adobe_AGM_Core_Id known
 
	}{
 
		false
 
	}ifelse
 
}ndf
 
/flushinput
 
{
 
	save
 
	2 dict begin
 
	/CompareBuffer 3 -1 roll def
 
	/readbuffer 256 string def
 
	mark
 
	{
 
	currentfile readbuffer{readline}stopped
 
		{cleartomark mark}
 
		{
 
		not
 
			{pop exit}
 
		if
 
		CompareBuffer eq
 
			{exit}
 
		if
 
		}ifelse
 
	}loop
 
	cleartomark
 
	end
 
	restore
 
}bdf
 
/getspotfunction
 
{
 
	AGMCORE_screen exch pop exch pop
 
	dup type/dicttype eq{
 
		dup/HalftoneType get 1 eq{
 
			/SpotFunction get
 
		}{
 
			dup/HalftoneType get 2 eq{
 
				/GraySpotFunction get
 
			}{
 
				pop
 
				{
 
					abs exch abs 2 copy add 1 gt{
 
						1 sub dup mul exch 1 sub dup mul add 1 sub
 
					}{
 
						dup mul exch dup mul add 1 exch sub
 
					}ifelse
 
				}bind
 
			}ifelse
 
		}ifelse
 
	}if
 
}def
 
/np
 
{newpath}bdf
 
/clp_npth
 
{clip np}def
 
/eoclp_npth
 
{eoclip np}def
 
/npth_clp
 
{np clip}def
 
/graphic_setup
 
{
 
	/AGMCORE_graphicsave save store
 
	concat
 
	0 setgray
 
	0 setlinecap
 
	0 setlinejoin
 
	1 setlinewidth
 
	[]0 setdash
 
	10 setmiterlimit
 
	np
 
	false setoverprint
 
	false setstrokeadjust
 
	//Adobe_AGM_Core/spot_alias gx
 
	/Adobe_AGM_Image where{
 
		pop
 
		Adobe_AGM_Image/spot_alias 2 copy known{
 
			gx
 
		}{
 
			pop pop
 
		}ifelse
 
	}if
 
	/sep_colorspace_dict null AGMCORE_gput
 
	100 dict begin
 
	/dictstackcount countdictstack def
 
	/showpage{}def
 
	mark
 
}def
 
/graphic_cleanup
 
{
 
	cleartomark
 
	dictstackcount 1 countdictstack 1 sub{end}for
 
	end
 
	AGMCORE_graphicsave restore
 
}def
 
/compose_error_msg
 
{
 
	grestoreall initgraphics	
 
	/Helvetica findfont 10 scalefont setfont
 
	/AGMCORE_deltaY 100 def
 
	/AGMCORE_deltaX 310 def
 
	clippath pathbbox np pop pop 36 add exch 36 add exch moveto
 
	0 AGMCORE_deltaY rlineto AGMCORE_deltaX 0 rlineto
 
	0 AGMCORE_deltaY neg rlineto AGMCORE_deltaX neg 0 rlineto closepath
 
	0 AGMCORE_&setgray
 
	gsave 1 AGMCORE_&setgray fill grestore 
 
	1 setlinewidth gsave stroke grestore
 
	currentpoint AGMCORE_deltaY 15 sub add exch 8 add exch moveto
 
	/AGMCORE_deltaY 12 def
 
	/AGMCORE_tmp 0 def
 
	AGMCORE_err_strings exch get
 
		{
 
		dup 32 eq
 
			{
 
			pop
 
			AGMCORE_str256 0 AGMCORE_tmp getinterval
 
			stringwidth pop currentpoint pop add AGMCORE_deltaX 28 add gt
 
				{
 
				currentpoint AGMCORE_deltaY sub exch pop
 
				clippath pathbbox pop pop pop 44 add exch moveto
 
				}if
 
			AGMCORE_str256 0 AGMCORE_tmp getinterval show( )show
 
			0 1 AGMCORE_str256 length 1 sub
 
				{
 
				AGMCORE_str256 exch 0 put
 
				}for
 
			/AGMCORE_tmp 0 def
 
			}{
 
				AGMCORE_str256 exch AGMCORE_tmp xpt
 
				/AGMCORE_tmp AGMCORE_tmp 1 add def
 
			}ifelse
 
		}forall
 
}bdf
 
/AGMCORE_CMYKDeviceNColorspaces[
 
	[/Separation/None/DeviceCMYK{0 0 0}]
 
	[/Separation(Black)/DeviceCMYK{0 0 0 4 -1 roll}bind]
 
	[/Separation(Yellow)/DeviceCMYK{0 0 3 -1 roll 0}bind]
 
	[/DeviceN[(Yellow)(Black)]/DeviceCMYK{0 0 4 2 roll}bind]
 
	[/Separation(Magenta)/DeviceCMYK{0 exch 0 0}bind]
 
	[/DeviceN[(Magenta)(Black)]/DeviceCMYK{0 3 1 roll 0 exch}bind]
 
	[/DeviceN[(Magenta)(Yellow)]/DeviceCMYK{0 3 1 roll 0}bind]
 
	[/DeviceN[(Magenta)(Yellow)(Black)]/DeviceCMYK{0 4 1 roll}bind]
 
	[/Separation(Cyan)/DeviceCMYK{0 0 0}]
 
	[/DeviceN[(Cyan)(Black)]/DeviceCMYK{0 0 3 -1 roll}bind]
 
	[/DeviceN[(Cyan)(Yellow)]/DeviceCMYK{0 exch 0}bind]
 
	[/DeviceN[(Cyan)(Yellow)(Black)]/DeviceCMYK{0 3 1 roll}bind]
 
	[/DeviceN[(Cyan)(Magenta)]/DeviceCMYK{0 0}]
 
	[/DeviceN[(Cyan)(Magenta)(Black)]/DeviceCMYK{0 exch}bind]
 
	[/DeviceN[(Cyan)(Magenta)(Yellow)]/DeviceCMYK{0}]
 
	[/DeviceCMYK]
 
]def
 
/ds{
 
	Adobe_AGM_Core begin
 
	/currentdistillerparams where
 
		{
 
		pop currentdistillerparams/CoreDistVersion get 5000 lt
 
			{<</DetectBlends false>>setdistillerparams}if
 
		}if	
 
	/AGMCORE_ps_version xdf
 
	/AGMCORE_ps_level xdf
 
	errordict/AGM_handleerror known not{
 
		errordict/AGM_handleerror errordict/handleerror get put
 
		errordict/handleerror{
 
			Adobe_AGM_Core begin
 
			$error/newerror get AGMCORE_cur_err null ne and{
 
				$error/newerror false put
 
				AGMCORE_cur_err compose_error_msg
 
			}if
 
			$error/newerror true put
 
			end
 
			errordict/AGM_handleerror get exec
 
			}bind put
 
		}if
 
	/AGMCORE_environ_ok 
 
		ps_level AGMCORE_ps_level ge
 
		ps_version AGMCORE_ps_version ge and 
 
		AGMCORE_ps_level -1 eq or
 
	def
 
	AGMCORE_environ_ok not
 
		{/AGMCORE_cur_err/AGMCORE_bad_environ def}if
 
	/AGMCORE_&setgray systemdict/setgray get def
 
	level2{
 
		/AGMCORE_&setcolor systemdict/setcolor get def
 
		/AGMCORE_&setcolorspace systemdict/setcolorspace get def
 
	}if
 
	/AGMCORE_currentbg currentblackgeneration def
 
	/AGMCORE_currentucr currentundercolorremoval def
 
	/AGMCORE_Default_flatness currentflat def
 
	/AGMCORE_distilling
 
		/product where{
 
			pop systemdict/setdistillerparams known product(Adobe PostScript Parser)ne and
 
		}{
 
			false
 
		}ifelse
 
	def
 
	/AGMCORE_GSTATE AGMCORE_key_known not{
 
		/AGMCORE_GSTATE 21 dict def
 
		/AGMCORE_tmpmatrix matrix def
 
		/AGMCORE_gstack 32 array def
 
		/AGMCORE_gstackptr 0 def
 
		/AGMCORE_gstacksaveptr 0 def
 
		/AGMCORE_gstackframekeys 14 def
 
		/AGMCORE_&gsave/gsave ldf
 
		/AGMCORE_&grestore/grestore ldf
 
		/AGMCORE_&grestoreall/grestoreall ldf
 
		/AGMCORE_&save/save ldf
 
		/AGMCORE_&setoverprint/setoverprint ldf
 
		/AGMCORE_gdictcopy{
 
			begin
 
			{def}forall
 
			end
 
		}def
 
		/AGMCORE_gput{
 
			AGMCORE_gstack AGMCORE_gstackptr get
 
			3 1 roll
 
			put
 
		}def
 
		/AGMCORE_gget{
 
			AGMCORE_gstack AGMCORE_gstackptr get
 
			exch
 
			get
 
		}def
 
		/gsave{
 
			AGMCORE_&gsave
 
			AGMCORE_gstack AGMCORE_gstackptr get
 
			AGMCORE_gstackptr 1 add
 
			dup 32 ge{limitcheck}if
 
			/AGMCORE_gstackptr exch store
 
			AGMCORE_gstack AGMCORE_gstackptr get
 
			AGMCORE_gdictcopy
 
		}def
 
		/grestore{
 
			AGMCORE_&grestore
 
			AGMCORE_gstackptr 1 sub
 
			dup AGMCORE_gstacksaveptr lt{1 add}if
 
			dup AGMCORE_gstack exch get dup/AGMCORE_currentoverprint known
 
				{/AGMCORE_currentoverprint get setoverprint}{pop}ifelse
 
			/AGMCORE_gstackptr exch store
 
		}def
 
		/grestoreall{
 
			AGMCORE_&grestoreall
 
			/AGMCORE_gstackptr AGMCORE_gstacksaveptr store 
 
		}def
 
		/save{
 
			AGMCORE_&save
 
			AGMCORE_gstack AGMCORE_gstackptr get
 
			AGMCORE_gstackptr 1 add
 
			dup 32 ge{limitcheck}if
 
			/AGMCORE_gstackptr exch store
 
			/AGMCORE_gstacksaveptr AGMCORE_gstackptr store
 
			AGMCORE_gstack AGMCORE_gstackptr get
 
			AGMCORE_gdictcopy
 
		}def
 
		/setoverprint{
 
			dup/AGMCORE_currentoverprint exch AGMCORE_gput AGMCORE_&setoverprint
 
		}def	
 
		0 1 AGMCORE_gstack length 1 sub{
 
				AGMCORE_gstack exch AGMCORE_gstackframekeys dict put
 
		}for
 
	}if
 
	level3/AGMCORE_&sysshfill AGMCORE_key_known not and
 
	{
 
		/AGMCORE_&sysshfill systemdict/shfill get def
 
		/AGMCORE_&sysmakepattern systemdict/makepattern get def
 
		/AGMCORE_&usrmakepattern/makepattern load def
 
	}if
 
	/currentcmykcolor[0 0 0 0]AGMCORE_gput
 
	/currentstrokeadjust false AGMCORE_gput
 
	/currentcolorspace[/DeviceGray]AGMCORE_gput
 
	/sep_tint 0 AGMCORE_gput
 
	/devicen_tints[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]AGMCORE_gput
 
	/sep_colorspace_dict null AGMCORE_gput
 
	/devicen_colorspace_dict null AGMCORE_gput
 
	/indexed_colorspace_dict null AGMCORE_gput
 
	/currentcolor_intent()AGMCORE_gput
 
	/customcolor_tint 1 AGMCORE_gput
 
	/absolute_colorimetric_crd null AGMCORE_gput
 
	/relative_colorimetric_crd null AGMCORE_gput
 
	/saturation_crd null AGMCORE_gput
 
	/perceptual_crd null AGMCORE_gput
 
	currentcolortransfer cvlit/AGMCore_gray_xfer xdf cvlit/AGMCore_b_xfer xdf
 
		 cvlit/AGMCore_g_xfer xdf cvlit/AGMCore_r_xfer xdf
 
	<<
 
	/MaxPatternItem currentsystemparams/MaxPatternCache get
 
	>>
 
	setuserparams
 
	end
 
}def
 
/ps
 
{
 
	/setcmykcolor where{
 
		pop
 
		Adobe_AGM_Core/AGMCORE_&setcmykcolor/setcmykcolor load put
 
	}if
 
	Adobe_AGM_Core begin
 
	/setcmykcolor
 
	{
 
		4 copy AGMCORE_cmykbuf astore/currentcmykcolor exch AGMCORE_gput
 
		1 sub 4 1 roll
 
		3{
 
			3 index add neg dup 0 lt{
 
				pop 0
 
			}if
 
			3 1 roll
 
		}repeat
 
		setrgbcolor pop
 
	}ndf
 
	/currentcmykcolor
 
	{
 
		/currentcmykcolor AGMCORE_gget aload pop
 
	}ndf
 
	/setoverprint
 
	{pop}ndf
 
	/currentoverprint
 
	{false}ndf
 
	/AGMCORE_cyan_plate 1 0 0 0 test_cmyk_color_plate def
 
	/AGMCORE_magenta_plate 0 1 0 0 test_cmyk_color_plate def
 
	/AGMCORE_yellow_plate 0 0 1 0 test_cmyk_color_plate def
 
	/AGMCORE_black_plate 0 0 0 1 test_cmyk_color_plate def
 
	/AGMCORE_plate_ndx 
 
		AGMCORE_cyan_plate{
 
			0
 
		}{
 
			AGMCORE_magenta_plate{
 
				1
 
			}{
 
				AGMCORE_yellow_plate{
 
					2
 
				}{
 
					AGMCORE_black_plate{
 
						3
 
					}{
 
						4
 
					}ifelse
 
				}ifelse
 
			}ifelse
 
		}ifelse
 
		def
 
	/AGMCORE_have_reported_unsupported_color_space false def
 
	/AGMCORE_report_unsupported_color_space
 
	{
 
		AGMCORE_have_reported_unsupported_color_space false eq
 
		{
 
			(Warning: Job contains content that cannot be separated with on-host methods. This content appears on the black plate, and knocks out all other plates.)==
 
			Adobe_AGM_Core/AGMCORE_have_reported_unsupported_color_space true ddf
 
		}if
 
	}def
 
	/AGMCORE_composite_job
 
		AGMCORE_cyan_plate AGMCORE_magenta_plate and AGMCORE_yellow_plate and AGMCORE_black_plate and def
 
	/AGMCORE_in_rip_sep
 
		/AGMCORE_in_rip_sep where{
 
			pop AGMCORE_in_rip_sep
 
		}{
 
			AGMCORE_distilling 
 
			{
 
				false
 
			}{
 
				userdict/Adobe_AGM_OnHost_Seps known{
 
					false
 
				}{
 
					level2{
 
						currentpagedevice/Separations 2 copy known{
 
							get
 
						}{
 
							pop pop false
 
						}ifelse
 
					}{
 
						false
 
					}ifelse
 
				}ifelse
 
			}ifelse
 
		}ifelse
 
	def
 
	/AGMCORE_producing_seps AGMCORE_composite_job not AGMCORE_in_rip_sep or def
 
	/AGMCORE_host_sep AGMCORE_producing_seps AGMCORE_in_rip_sep not and def
 
	/AGM_preserve_spots 
 
		/AGM_preserve_spots where{
 
			pop AGM_preserve_spots
 
		}{
 
			AGMCORE_distilling AGMCORE_producing_seps or
 
		}ifelse
 
	def
 
	/AGM_is_distiller_preserving_spotimages
 
	{
 
		currentdistillerparams/PreserveOverprintSettings known
 
		{
 
			currentdistillerparams/PreserveOverprintSettings get
 
				{
 
					currentdistillerparams/ColorConversionStrategy known
 
					{
 
						currentdistillerparams/ColorConversionStrategy get
 
						/sRGB ne
 
					}{
 
						true
 
					}ifelse
 
				}{
 
					false
 
				}ifelse
 
		}{
 
			false
 
		}ifelse
 
	}def
 
	/convert_spot_to_process where{pop}{
 
		/convert_spot_to_process
 
		{
 
			//Adobe_AGM_Core begin
 
			dup map_alias{
 
				/Name get exch pop
 
			}if
 
			dup dup(None)eq exch(All)eq or
 
				{
 
				pop false
 
				}{
 
				AGMCORE_host_sep
 
				{