texlive[41692] Master/texmf-dist: acmart (14jul16)

commits+karl at tug.org commits+karl at tug.org
Thu Jul 14 23:38:03 CEST 2016


Revision: 41692
          http://tug.org/svn/texlive?view=revision&revision=41692
Author:   karl
Date:     2016-07-14 23:38:03 +0200 (Thu, 14 Jul 2016)
Log Message:
-----------
acmart (14jul16)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/acmart/Makefile
    trunk/Master/texmf-dist/doc/latex/acmart/README
    trunk/Master/texmf-dist/doc/latex/acmart/acmart.pdf
    trunk/Master/texmf-dist/doc/latex/acmart/sample-acmlarge.pdf
    trunk/Master/texmf-dist/doc/latex/acmart/sample-acmlarge.tex
    trunk/Master/texmf-dist/doc/latex/acmart/sample-acmsmall.pdf
    trunk/Master/texmf-dist/doc/latex/acmart/sample-acmsmall.tex
    trunk/Master/texmf-dist/doc/latex/acmart/sample-acmtog.pdf
    trunk/Master/texmf-dist/doc/latex/acmart/sample-acmtog.tex
    trunk/Master/texmf-dist/doc/latex/acmart/sample-manuscript.pdf
    trunk/Master/texmf-dist/doc/latex/acmart/sample-manuscript.tex
    trunk/Master/texmf-dist/doc/latex/acmart/sample-sigchi-a.pdf
    trunk/Master/texmf-dist/doc/latex/acmart/sample-sigchi-a.tex
    trunk/Master/texmf-dist/doc/latex/acmart/sample-sigchi.pdf
    trunk/Master/texmf-dist/doc/latex/acmart/sample-sigchi.tex
    trunk/Master/texmf-dist/doc/latex/acmart/sample-sigconf.pdf
    trunk/Master/texmf-dist/doc/latex/acmart/sample-sigconf.tex
    trunk/Master/texmf-dist/doc/latex/acmart/sample-siggraph.pdf
    trunk/Master/texmf-dist/doc/latex/acmart/sample-siggraph.tex
    trunk/Master/texmf-dist/doc/latex/acmart/sample-sigplan.pdf
    trunk/Master/texmf-dist/doc/latex/acmart/sample-sigplan.tex
    trunk/Master/texmf-dist/doc/latex/acmart/samplebody-conf.tex
    trunk/Master/texmf-dist/doc/latex/acmart/samplebody-journals.tex
    trunk/Master/texmf-dist/source/latex/acmart/acmart.dtx
    trunk/Master/texmf-dist/tex/latex/acmart/acmart.cls

Added Paths:
-----------
    trunk/Master/texmf-dist/bibtex/bst/acmart/ACM-Reference-Format.bst

Removed Paths:
-------------
    trunk/Master/texmf-dist/bibtex/bst/acmart/ACM-Reference-Format-Journals.bst
    trunk/Master/texmf-dist/bibtex/bst/acmart/SIGCHI-Reference-Format.bst
    trunk/Master/texmf-dist/bibtex/bst/acmart/acm-abbrv.bst
    trunk/Master/texmf-dist/bibtex/bst/acmart/acm-alpha.bst
    trunk/Master/texmf-dist/bibtex/bst/acmart/acm-plain.bst
    trunk/Master/texmf-dist/bibtex/bst/acmart/acm-unsrt.bst
    trunk/Master/texmf-dist/bibtex/bst/acmart/acmsiggraph.bst

Deleted: trunk/Master/texmf-dist/bibtex/bst/acmart/ACM-Reference-Format-Journals.bst
===================================================================
--- trunk/Master/texmf-dist/bibtex/bst/acmart/ACM-Reference-Format-Journals.bst	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/bibtex/bst/acmart/ACM-Reference-Format-Journals.bst	2016-07-14 21:38:03 UTC (rev 41692)
@@ -1,3349 +0,0 @@
-%%% -*-BibTeX-*-
-%%% ====================================================================
-%%%  @BibTeX-style-file{
-%%%     author          = "Nelson H. F. Beebe, Boris Veytsman and Gerald Murray",
-%%%     version         = "1.00",
-%%%     date            = "18 January 2012",
-%%%     time            = "11:48 EST",
-%%%     filename        = "ACM-Reference-Format-Journals.bst",
-%%%     address         = "University of Utah
-%%%                        Department of Mathematics, 110 LCB
-%%%                        155 S 1400 E RM 233
-%%%                        Salt Lake City, UT 84112-0090
-%%%                        USA",
-%%%     telephone       = "+1 801 581 5254",
-%%%     FAX             = "+1 801 581 4148",
-%%%     URL             = "http://www.math.utah.edu/~beebe",
-%%%     checksum        = "available here: http://www.acm.org/publications/latex_style/CRC-journals.txt"
-%%%     email           = "beebe at math.utah.edu, beebe at acm.org,
-%%%                        beebe at computer.org, borisv at lk.net, murray at hq.acm.org", 
-%%%     codetable       = "ISO/ASCII",
-%%%     keywords        = "ACM Transactions bibliography style; BibTeX",
-%%%     license         = "public domain",
-%%%     supported       = "yes",
-%%%     abstract        = "",
-%%%     docstring       = "The checksum field, above, is produced by WinMD5Free (v1.20) 
-%%%                        available from http://www.winmd5.com/?rid=winmd5,"
-%%%  }
-%%% ====================================================================
-
-% "ACM Transactions" BibTeX style, ACM-Reference-Format-Journals.bst
-%  for BibTeX version 0.99c, LaTeX version 3.141
-%  ACM extensions with code cleaned up, extended, and debugged 10--15-Nov-2008
-%  Revised 17-APRIL-2008 (Nelson)
-%  Revised 13-MARCH-2011 (Boris/Gerry)
-%  Revised 23-MARCH-2011 (Boris/Gerry)
-%  Revised 27-MARCH-2011 (Boris/Gerry)
-%  Revised 15-APRIL-2011 (Boris/Gerry)
-%  Revised 27-SEPTEMBER-2011 (Boris)
-%
-%
-% History (by Nelson)
-%
-% Based on 'acmtrans' (for ACM Journals)
-% Date: 28th April 2008
-%
-% 1. Avoid 'repeating' the 'month' values.
-% 2. Avoid incorrectly italicizing the volume number.
-% 3. Avoid non italicizing certain titles (book, inproceedings etc).
-% 4. NO series if there is NO volume.
-% 5. Sorting of reference with first surname.
-% 6. Article no added for Inproceedings.
-%
-% Date: 07th May 2008
-%
-% 1. Abbreviation list added
-%
-%   Citation format: [author-last-name year]
-%             [author-last-name and author-last-name year]
-%             [author-last-name, author-last-name, and author-last-name year]
-%             [author-last-name et al. year]
-%             [author-last-name]
-%             author-last-name [year]
-%             [author-last-name and author-last-name]
-%             [author-last-name et al.]
-%             [year] or [year,year]
-%             year or year,year
-%
-%   Reference list ordering: alphabetical by author or whatever passes
-%    for author in the absence of one.
-%
-% Features of the old acmtrans.bst:
-% =================================
-%
-% - all authors appear last name first.
-% - all pages are listed xx-xx, (no pp.) and are at the end of the reference
-% - publishers are identified as publisher, address
-% - conferences papers (inproceedings) may give city of conference,
-%   date of conference, and journal that the proceedings appear in.
-% - months abbreviated to max four letters (eg. Mar.)
-% - volume of a series indicated after the title of the series
-% - editors appear after edited title and are identified by a trailing "Eds."
-%   not in parentheses.  Editor names are not given in small caps.
-%   (unless there is no author line)
-% - names terminated with a period even if there is no first name.
-% - editions are indicated trailing after the work, not in parentheses.
-% - "et al." citations have a protected period to avoid bad spacing (jrh)
-% - "address" required when publisher given
-% - series (roman) and volume are in a sentence separate from (book-)title
-%
-%
-% Features of chicago.bst:
-% =======================
-%
-% - full names used in citations, but abbreviated citations are available
-%   (see above)
-% - if an entry has a "month", then the month and year are also printed
-%   as part of that bibitem.
-% - all conjunctions use "and" instead of "\&"
-% - major modification from Chicago Manual of Style (13th ed.) is that
-%   only the first author in a reference appears last name first-
-%   additional authors appear as J. Q. Public.
-% - pages are listed as "pp. xx-xx" in all entry types except
-%   article entries.
-% - book, inbook, and manual use "location: publisher" (or organization)
-%   for address and publisher. All other types list publishers separately.
-% - "pp." are used to identify page numbers for all entry types except
-%   articles.
-% - organization is used as a citation label if neither author nor editor
-%   is present (for manuals).
-% - "et al." is used for long author and editor lists, or when "others"
-%   is used.
-%
-% Modifications and bug fixes from newapa.bst:
-% ===========================================
-%
-%   - added month, year to bib entries if month is present
-%   - fixed bug with In proceedings, added necessary comma after title
-%   - all conjunctions changed to "and" from "\&"
-%   - fixed bug with author labels in my.full.label: "et al." now is
-%        generated when "others" is an author name
-%   - major modification from Chicago Manual of Style (13th ed.) is that
-%     only the first author in a reference appears last name first-
-%     additional authors appear as J. Q. Public.
-%   - pages are listed as "pp. xx-xx" in all entry types except
-%     article entries. Unnecessary (IMHO) "()" around page numbers
-%     were removed, and page numbers now don't end with a period.
-%   - created chicago.sty for use with this bibstyle (required).
-%   - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
-%     number, and /or pages. Renamed to format.journal.volume.number.
-%   - fixed bug in formatting booktitles: additional period an error if
-%     book has a volume.
-%   - fixed bug: editors usually given redundant period before next clause
-%     (format.editors.dot) removed.
-%   - added label support for organizations, if both author and editor
-%     are missing (from alpha.bst). If organization is too long, then
-%     the key field is used for abbreviated citations.
-%   - In proceedings or books of several volumes, no comma was written
-%     between the "Volume x" and the page numbers (this was intentional
-%     in newapa.bst). Fixed.
-%   - Some journals may not have volumes/numbers, only month/year (eg.
-%     IEEE Computer). Fixed bug in article style that assumed volume/number
-%     was always present.
-%
-% Original documentation for newapa.sty:
-% =====================================
-%
-% This version was made by modifying the master file made by
-% Oren Patashnik (PATASHNIK at SCORE.STANFORD.EDU), and the 'named' BibTeX
-% style of Peter F. Patel-Schneider.
-%
-% Copyright (C) 1985, all rights reserved.
-% Copying of this file is authorized only if either
-% (1) you make absolutely no changes to your copy, including name, or
-% (2) if you do make changes, you name it something other than 'newapa.bst'.
-% There are undoubtably bugs in this style.  If you make bug fixes,
-% improvements, etc.  please let me know.  My e-mail address is:
-%    spencer at cgrg.ohio.state.edu or 71160.3141 at compuserve.com
-%
-% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
-% with lots of tweaking to make it look like APA style, along with tips
-% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
-%
-%
-% Start of ACM-Reference-Format-Journals.bst
-%
-% Note: Many of the new bibentry 'fields' will only work with the 
-% 'ACM-Reference-Format-Journals.bst' file. Legacy .bib files (which will, in all probability,
-% NOT contain these new fields) will _still_ work with the ACM-Reference-Format-Journals.bst.
-% 
-%
-ENTRY
-  { address
-    advisor
-    author
-    booktitle
-    chapter
-    city        % jtb: added
-    date        % jtb: added
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-        % New keys recognized 
-        issue         % UTAH: used in, e.g., ACM SIGSAM Bulletin and ACM Communications in Computer Algebra
-        articleno
-        day           % UTAH: needed for newspapers, weeklies, bi-weeklies
-        doi           % UTAH
-        url           % UTAH
-        bookpages     % UTAH
-        numpages
-        lastaccessed  % UTAH: used only for @Misc{...}
-        coden         % UTAH
-        isbn          % UTAH
-        isbn-13       % UTAH
-        issn          % UTAH
-        lccn          % UTAH
-  }
-  {}
-  { label.year extra.label sort.year sort.label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-INTEGERS { show-isbn-10-and-13 }  % initialized below in begin.bib
-
-INTEGERS { nameptr namesleft numnames }
-
-INTEGERS { multiresult }
-
-INTEGERS { len }
-
-INTEGERS { last.extra.num }
-
-STRINGS { s t t.org u }
-
-STRINGS { last.label next.extra }
-
-STRINGS { p1 p2 p3 page.count }
-
-FUNCTION { dump.stack.1 }
-{
-    duplicate$ "STACK[top] = [" swap$ * "]" * warning$
-}
-
-FUNCTION { dump.stack.2 }
-{
-    duplicate$ "STACK[top  ] = [" swap$ * "]" * warning$
-    swap$
-    duplicate$ "STACK[top-1] = [" swap$ * "]" * warning$
-    swap$
-}
-
-FUNCTION { empty.or.unknown }
-{
-  %% Examine the top stack entry, and push 1 if it is empty, or
-  %% consists only of whitespace, or is a string beginning with two
-  %% queries (??), and otherwise, push 0.
-  %%
-  %% This function provides a replacement for empty$, with the
-  %% convenient feature that unknown values marked by two leading
-  %% queries are treated the same as missing values, and thus, do not
-  %% appear in the output .bbl file, and yet, their presence in .bib
-  %% file(s) serves to mark values which are temporarily missing, but
-  %% are expected to be filled in eventually once more data is
-  %% obtained.  The TeX User Group and BibNet bibliography archives
-  %% make extensive use of this practice.
-  %%
-  %% An empty string cannot serve the same purpose, because just as in
-  %% statistics data processing, an unknown value is not the same as an
-  %% empty value.
-  %%
-  %% At entry: stack = ... top:[string]
-  %% At exit:  stack = ... top:[0 or 1]
-
-  duplicate$ empty$
-    { pop$ #1 }
-    { #1 #2 substring$ "??" = }
-  if$
-}
-
-FUNCTION { writeln }
-{
-  %% In BibTeX style files, the sequences
-  %%
-  %%     ... "one" "two" output
-  %%     ... "one" "two" output.xxx
-  %%
-  %% ship "one" to the output file, possibly following by punctuation,
-  %% leaving the stack with
-  %%
-  %%     ... "two"
-  %%
-  %% There is thus a one-string lag in output processing that must be
-  %% carefully handled to avoid duplicating a string in the output
-  %% file.  Unless otherwise noted, all output.xxx functions leave
-  %% just one new string on the stack, and that model should be born
-  %% in mind when reading or writing function code.
-  %%
-  %% BibTeX's asynchronous buffering of output from strings from the
-  %% stack is confusing because newline$ bypasses the buffer.  It
-  %% would have been so much easier for newline to be a character
-  %% rather than a state of the output-in-progress.
-  %%
-  %% The documentation in btxhak.dvi is WRONG:  it says
-  %%
-  %%    newline$ Writes onto the bbl file what's accumulated in the
-  %%             output buffer. It writes a blank line if and only
-  %%             if the output buffer is empty. Since write$ does
-  %%             reasonable line breaking, you should use this
-  %%             function only when you want a blank line or an
-  %%             explicit line break.
-  %%
-  %%    write$   Pops the top (string) literal and writes it on the
-  %%             output buffer (which will result in stuff being
-  %%             written onto the bbl file when the buffer fills
-  %%             up).
-  %%
-  %% Examination of the BibTeX source code shows that write$ does
-  %% indeed behave as claimed, but newline$ sends a newline character
-  %% directly to the output file, leaving the stack unchanged.  The
-  %% first line "Writes onto ... buffer." is therefore wrong.
-  %%
-  %% The original BibTeX style files almost always use "write$ newline$"
-  %% in that order, so it makes sense to hide that pair in a private
-  %% function like this one, named after a statement in Pascal,
-  %% the programming language embedded in the BibTeX Web program.
-
-  write$                % output top-of-stack string
-  newline$              % immediate write of newline (not via stack)
-}
-
-FUNCTION { init.state.consts }
-{
-  #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-}
-
-FUNCTION { output.nonnull }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<comma><space>
-  's :=
-  output.state mid.sentence =
-    {
-      ", " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln
-          "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.dot.space }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<dot><space>
-  's :=
-  output.state mid.sentence =           % { "<DEBUG output.nonnull.dot.space>. " * write$ }
-    {
-      ". " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.remove }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<space>
-  's :=
-  output.state mid.sentence =
-    {
-      " " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.removenospace }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S
-  's :=
-  output.state mid.sentence =
-    {
-      "" * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output }
-{ % discard top token if empty, else like output.nonnull
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION { output.dot.space }
-{ % discard top token if empty, else like output.nonnull.dot.space
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull.dot.space
-  if$
-}
-
-FUNCTION { output.removenospace }
-{ % discard top token if empty, else like output.nonnull.removenospace
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull.removenospace
-  if$
-}
-
-FUNCTION { output.check }
-{ % like output, but warn if key name on top-of-stack is not set
-  't :=
-  duplicate$ empty.or.unknown
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull
-  if$
-}
-
-FUNCTION { output.check.dot.space }
-{ % like output.dot.space, but warn if key name on top-of-stack is not set
-  't :=
-  duplicate$ empty.or.unknown
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull.dot.space
-  if$
-}
-
-FUNCTION { fin.block }
-{ % functionally, but not logically, identical to fin.entry
-   add.period$
-   writeln
-}
-
-FUNCTION { fin.entry }
-{
-   add.period$
-   writeln
-}
-
-FUNCTION { new.sentence }
-{ % update sentence state, with neither output nor stack change
-  output.state after.block =
-    'skip$
-    {
-      output.state before.all =
-        'skip$
-        { after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION { fin.sentence }
-{
-   add.period$
-   write$
-   new.sentence
-   ""
-}
-
-FUNCTION { new.block }
-{
-  output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION { output.coden }       % UTAH
-{ % output non-empty CODEN as one-line sentence (stack untouched)
-  coden empty.or.unknown
-    { }
-    { "\showCODEN{" coden * "}" * writeln }
-  if$
-}
-
-FUNCTION { format.articleno }
-{
-  articleno empty.or.unknown
-     { "" }
-     {
-        numpages empty.or.unknown
-          { "articleno field, but no numpages field, in " cite$ * warning$ }
-          { }
-        if$
-        "Article " articleno *
-     }
-  if$
-}
-
-FUNCTION { format.year }
-{ % push year string or "????" onto output stack
-  %% Because year is a mandatory field, we always force SOMETHING
-  %% to be output
-  year empty.or.unknown
-    { "????" }
-    { year }
-  if$
-}
-
-FUNCTION { format.day.month }
-{ % push "day month " or "month " or "" onto output stack
-  day empty.or.unknown
-    {
-      month empty.or.unknown
-        { "" }
-        { month " " *}
-      if$
-    }
-    {
-      month empty.or.unknown
-        { "" }
-        { day " " * month * " " *}
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.day.month.year }     % UTAH
-{ % if month is empty, push "" else push "(MON.)" or "(DD MON.)"
-  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
-  % acm-*.bst addition: prefix parenthesized date string with
-  % ", Article nnn "
-  articleno empty.or.unknown
-    { "" }
-    { ", " format.articleno * }
-  if$
-  " (" * format.day.month * format.year * ")" *
-}
-
-FUNCTION { output.day.month.year }     % UTAH
-{ % if month is empty value, do nothing; else output stack top and
-  % leave with new top string "(MON.)" or "(DD MON.)"
-  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
-  format.day.month.year
-  output.nonnull.remove
-}
-
-FUNCTION { strip.doi } % UTAH
-{ % Strip any Web address prefix to recover the bare DOI, leaving the
-  % result on the output stack, as recommended by CrossRef DOI
-  % documentation.
-  % For example, reduce "http://doi.acm.org/10.1145/1534530.1534545" to
-  % "10.1145/1534530.1534545".  That is later typeset and displayed as
-  % doi:10.1145/1534530.1534545 as the LAST item in the reference list
-  % entry.  Publisher Web sites wrap this with a suitable link to a real
-  % URL to resolve the DOI, and the master http://dx.doi.org/ address is
-  % preferred, since publisher-specific URLs can disappear in response
-  % to economic events.  All journals are encouraged by the DOI
-  % authorities to use that typeset format and link procedures for
-  % uniformity across all publications that include DOIs in reference
-  % lists.
-  % The numeric prefix is guaranteed to start with "10.", so we use
-  % that as a test.
-  doi #1 #3 substring$ "10." =
-    { doi }
-    {
-      doi #1 #7 substring$ "http://" =
-        {
-            doi #8 doi text.length$ #7 - substring$ 't := % get modifiable copy of rest of DOI
-
-            "INTERNAL STYLE-FILE ERROR" 's :=
-
-            % search for next "/" and assign its suffix to s
-
-            { t text.length$ }
-            {
-              t #1 #1 substring$ "/" =
-                {
-                  % save rest of string as true DOI (should be 10.xxxx/yyyy)
-                  t #2 t text.length$ #1 - substring$ 's :=
-                  "" 't :=    % empty string t terminates the loop
-                }
-                {
-                  % discard first character and continue loop: t <= substring(t,2,last)
-                  t #2 t text.length$ #1 - substring$ 't :=
-                }
-              if$
-            }
-            while$
-
-            % check for valid DOI (should be 10.xxxx/yyyy)
-            s #1 #3 substring$ "10." =
-              { }
-              { "unrecognized DOI substring " s * " in DOI value [" * doi * "]" * warning$ }
-            if$
-
-            s   % push the stripped DOI on the output stack
-
-        }
-        {
-          "unrecognized DOI value [" doi * "]" * warning$
-          doi   % push the unrecognized original DOI on the output stack
-        }
-      if$
-    }
-  if$
-}
-
-%
-% Change by BV: added standard prefix to URL
-%
-FUNCTION { output.doi } % UTAH
-{ % output non-empty DOI as one-line sentence (stack untouched)
-  doi empty.or.unknown
-    { }
-    {
-      %% NB: We want URLs at beginning of line to reduce likelihood of
-      %% BibTeX's nasty line wrapping after column 79, which then requires
-      %% manual (or automated) editing of the .bbl file to repair.
-      %% The \url{} macro strips percent-newlines, and is thus safe in
-      %% the presence of the line wrapping, but \path|...| and
-      %% \verb|...| do not.
-      "\showDOI{%" writeln
-      "\url{http://dx.doi.org/" strip.doi * "}}" * writeln
-    }
-  if$
-}
-
-FUNCTION { output.isbn }                % UTAH
-{ % output non-empty ISBN-10 and/or ISBN-13 as one-line sentences (stack untouched)
-  show-isbn-10-and-13
-    {
-      %% show both 10- and 13-digit ISBNs
-      isbn empty.or.unknown
-        { }
-        {
-          "\showISBNx{" isbn * "}" * writeln
-        }
-      if$
-      isbn-13 empty.or.unknown
-        { }
-        {
-          "\showISBNxiii{" isbn-13 * "}" * writeln
-        }
-      if$
-    }
-    {
-      %% show 10-digit ISBNs only if 13-digit ISBNs not available
-      isbn-13 empty.or.unknown
-        {
-          isbn empty.or.unknown
-            { }
-            {
-              "\showISBNx{" isbn * "}" * writeln
-            }
-          if$
-        }
-        {
-          "\showISBNxiii{" isbn-13 * "}" * writeln
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION { output.issn } % UTAH
-{ % output non-empty ISSN as one-line sentence (stack untouched)
-  issn empty.or.unknown
-    { }
-    { "\showISSN{" issn * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.issue }
-{ % output non-empty issue number as a one-line sentence (stack untouched)
-  issue empty.or.unknown
-    { }
-    { "Issue " issue * "." * writeln }
-  if$
-}
-
-FUNCTION { output.lccn } % UTAH
-{ % return with stack untouched
-  lccn empty.or.unknown
-    { }
-    { "\showLCCN{" lccn * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.note } % UTAH
-{ % return with stack empty
-  note empty.or.unknown
-    { }
-    { "\shownote{" note add.period$ * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.note.check } % UTAH
-{ % return with stack empty
-  note empty.or.unknown
-    { "empty note in " cite$ * warning$ }
-    { "\shownote{" note add.period$ * "}" * writeln }
-  if$
-}
-
-%
-% Changes by BV 2011/04/15.  Do not output
-% url if doi is defined
-%
-FUNCTION { output.url } % UTAH
-{ % return with stack untouched
-  % output URL and associated lastaccessed fields
-  doi empty.or.unknown
-  {
-    url empty.or.unknown
-      { }
-      {
-          %% NB: We want URLs at beginning of line to reduce likelihood of
-          %% BibTeX's nasty line wrapping after column 79, which would require
-          %% manual (or automated) editing of the .bbl file to repair.  However,
-          %% the \url{} macro handles the unwrapping job automatically.
-          "\showURL{%" writeln
-          lastaccessed empty.or.unknown
-            { "" }
-            { "Retrieved " lastaccessed * " from " * }
-          if$
-
-          %% The URL field may contain a semicolon-separated list of Web
-          %% addresses, and we locate and wrap each of them in \url{...}.
-          %% The simplistic approach of putting the entire list into the
-          %% macro argument is that the semicolons are typeset in a
-          %% typewriter font, and no space follows them.
-          %%
-          %% We therefore replace the original code
-          %%    "\url{" * url * "}}" * writeln
-          %% with this character-at-a-time loop:
-
-          "\url{" *
-
-          url 't :=                       % get modifiable copy of URL list
-
-          { t text.length$ }
-          {
-            t #1 #1 substring$ ";" =
-              {                         % then split argument at separator
-                "};" * writeln
-                "\url{"
-              }
-              {                         % else concatenate nonblank character to argument
-                t #1 #1 substring$ " " =
-                  { }
-                  { t #1 #1 substring$ * }
-                if$
-              }
-            if$
-
-            t #2 t text.length$ #1 - substring$ 't :=
-          }
-          while$
-
-          "}}" * writeln
-      }
-    if$
-  }
-  { }
-  if$
-}
-
-FUNCTION { output.year.check }
-{ % warn if year empty, else output top string and leave " YEAR<label>" on stack in mid-sentence
-  year empty.or.unknown
-     { "empty year in " cite$ * warning$ }
-     { write$
-        " " year * extra.label *
-       mid.sentence 'output.state :=
-     }
-  if$
-}
-
-FUNCTION { not }
-{
-    { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION { and }
-{
-    'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION { or }
-{
-   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION { le }
-{
-  %% test whether first number is less than or equal to second number
-  %% stack in:  n1 n2
-  %% stack out: if n1 <= n2 then 1 else 0
-
-  %% "DEBUG: le " cite$ * warning$
-  > { #0 } { #1 } if$
-}
-
-FUNCTION { ge }
-{
-  %% test whether first number is greater than or equal to second number
-  %% stack in:  n1 n2
-  %% stack out: if n1 >= n2 then 1 else 0
-
-  %% "DEBUG: ge " cite$ * warning$
-  < { #0 } { #1 } if$
-}
-
-FUNCTION { is.leading.digit }
-{
-  %% test whether first character of string is a digit
-  %% stack in:  string
-  %% stack out: if first-char-is-digit then 1 else 0
-
-  #1 #1 substring$                      % replace string by string[1:1]
-  duplicate$                            % string[1:1] string[1:1]
-  chr.to.int$
-  "0" chr.to.int$ swap$ le              % "0" <= string[1:1] --> 0-or-1
-  swap$                                 % 0-or-1 string[1:1]
-  chr.to.int$
-  "9" chr.to.int$ le                    % string[1:1} <= "9" --> 0-or-1
-  and
-}
-
-FUNCTION { skip.digits }
-{
-  %% skip over leading digits in string
-  %% stack in:  string
-  %% stack out: rest-of-string leading-digits
-
-  %% "DEBUG: enter skip.digits " cite$ * warning$
-
-  %% dump.stack.1
-
-  duplicate$
-  't :=
-  't.org :=
-  "" 'u :=
-
-  { t text.length$ }
-  {
-    %% "=================DEBUG: skip.digits   t = [" t * "]" * warning$
-    t is.leading.digit
-      { t #2 t text.length$ #1 - substring$ }
-      {
-        t 'u :=
-        ""
-      }
-    if$
-    't :=
-  }
-  while$
-
-  u                                                             % rest of string
-  t.org #1 t.org text.length$ u text.length$ - substring$       % leading digits
-
-  %% "DEBUG: t.org = [" t.org * "]" * warning$
-  %% "DEBUG: u     = [" u * "]" * warning$
-
-  %% dump.stack.2
-
-  %% "DEBUG: leave skip.digits " cite$ * warning$
-}
-
-FUNCTION { skip.nondigits }
-{
-  %% skip over leading nondigits in string
-  %% stack in:  string
-  %% stack out: rest-of-string
-
-  %% "DEBUG: enter skip.nondigits " cite$ * warning$
-
-  't :=
-  "" 'u :=
-
-  { t text.length$ }
-  {
-    %% "=================DEBUG: skip.nondigits   t = [" t * "]" * warning$
-    t is.leading.digit
-      {
-        t 'u :=
-        ""
-      }
-      { t #2 t text.length$ #1 - substring$ }
-    if$
-    't :=
-  }
-  while$
-
-  u                     % rest of string
-
-  %% dump.stack.1
-  %% "DEBUG: leave skip.nondigits " cite$ * warning$
-}
-
-FUNCTION { parse.next.number }
-{
-  %% stack in:  string
-  %% stack out: rest-of-string next-numeric-part-of-string
-  %% Example:
-  %% stack in:  "123:1--123:59"
-  %% stack out: ":1--123:59" "123"
-
-  's :=
-  s skip.nondigits 's :=
-  s skip.digits
-}
-
-FUNCTION { reduce.pages.to.page.count }
-{
-  %% Stack in:  arbitrary-and-unused
-  %% Stack out: unchanged
-  %%
-  %% For the new-style pagination with article number and numpages or
-  %% pages, we expect to have BibTeX entries containing something like
-  %%     articleno = "17",
-  %%     pages     = "1--23",
-  %% with output "Article 17, 23 pages",
-  %% or
-  %%     articleno = "17",
-  %%     numpages  = "23",
-  %% with output "Article 17, 23 pages",
-  %% or
-  %%     articleno = "17",
-  %%     pages     = "17:1--17:23",
-  %% with output "Article 17, 23 pages",
-  %%
-  %% If articleno is missing or empty, then we should output "1--23",
-  %% "23" (with a warning of a missing articleno), or "17:1--17:23",
-  %% respectively.
-
-  %% "DEBUG: enter reduce.pages.to.page.count " cite$ * warning$
-
-  %% "DEBUG: pages = [" pages * "]" * warning$
-
-  pages
-  parse.next.number 'p1 :=
-  parse.next.number 'p2 :=
-  parse.next.number 'p3 :=
-  parse.next.number 'page.count :=
-
-  duplicate$
-  empty.or.unknown
-    {  }
-    {
-      duplicate$ "unexpected trailing garbage [" swap$ *
-      "] after n:p1--n:p2 in pages = [" *
-      pages *
-      "] in " *
-      cite$ *
-      warning$
-    }
-  if$
-
-  pop$
-
-  %% "DEBUG: reduce.pages.to.page.count: "
-  %% " p1 = " p1 * *
-  %% " p2 = " p2 * *
-  %% " p3 = " p3 * *
-  %% " p4 = " page.count * *
-  %% " in " cite$ * * warning$
-
-  p1 p3 =   p2 "1" =   and   numpages empty.or.unknown   and
-    { "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$ }
-    {
-      numpages empty.or.unknown
-        { pages }
-        { numpages }
-      if$
-      'page.count :=
-    }
-  if$
-
-  p1 "1" =   p3 empty.or.unknown   and   numpages empty.or.unknown   and
-    {
-      p2 'page.count :=
-      "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$
-    }
-    {
-      numpages empty.or.unknown
-        { pages }
-        { numpages }
-      if$
-      'page.count :=
-    }
-  if$
-
-  %% "DEBUG: leave reduce.pages.to.page.count " cite$ * warning$
-}
-
-FUNCTION { new.block.checkb }
-{ % issue a new.block only if at least one of top two stack strings is not empty
-  empty.or.unknown
-  swap$ empty.or.unknown
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION { field.or.null }
-{ % convert empty value to null string, else return value
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION { emphasize }
-{ % emphasize a non-empty top string on the stack (WITHOUT italic correction)
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{\em " swap$ * "}" * }
-  if$
-}
-
-FUNCTION { emphasize.with.italic.correction }
-{ % convert empty string to null string, or emphasize with a trailing italic correction
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{\em " swap$ * "\/}" * }
-  if$
-}
-
-FUNCTION { comma }
-{ % convert empty string to null string, or brace string and add trailing comma
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{" swap$ * "}," * }
-  if$
-}
-
-FUNCTION { format.names }
-{
-  % Format bibliographical entries with the first author last name first,
-  % and subsequent authors with initials followed by last name.
-  % All names are formatted in this routine.
-
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 =
-        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
-        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
-        {"{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
-        {"{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
-      if$
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "{\sc others}" =
-                { " {et~al\mbox{.}}" * } % jrh: avoid spacing problems
-                { " {and} " * t * } % from Chicago Manual of Style
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-}
-
-FUNCTION { my.full.label }
-{
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-
-    { s nameptr "{vv~}{ll}" format.name$ 't :=  % get the next name
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "others" =
-                { " et~al\mbox{.}" * } % jrh: avoid spacing problems
-                { " and " * t * } % from Chicago Manual of Style
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-
-}
-
-FUNCTION { format.names.fml }
-{
-  % Format names in "familiar" format, with first initial followed by
-  % last name. Like format.names, ALL names are formatted.
-  % jtb: The names are NOT put in small caps
-
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-
-    {
-      "{" s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
-
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "{others}" =
-                { " {et~al\mbox{.}}" * }
-                { " {and} " * t * }
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-}
-
-FUNCTION { format.authors }
-{
-  author empty.or.unknown
-    { "" }
-    { author format.names add.period$} % jtb: add period if none before
-  if$
-}
-
-FUNCTION { format.key }
-{
-  empty.or.unknown
-    { key field.or.null }
-    { "" }
-  if$
-}
-
-FUNCTION { format.no.key }
-{
-  empty.or.unknown
-    { "" }
-    { "" }
-  if$
-}
-
-FUNCTION { format.editors.fml }
-{
-  % Format editor names for use in the "in" types: inbook, incollection,
-  % inproceedings: first initial, then last names. When editors are the
-  % LABEL for an entry, then format.editor is used which lists editors
-  % by last name first.
-
-  editor empty.or.unknown
-    { "" }
-    {
-      editor format.names.fml editor num.names$ #1 >
-        { " (Eds.)" * }
-        { " (Ed.)" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.editors }
-{ % format editor names for use in labels, last names first.
-  editor empty.or.unknown
-    { "" }
-    {
-      editor format.names
-      editor num.names$ #1 >
-        { " (Eds.)." * }
-        { " (Ed.)." * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.articletitle }
-{
-  title empty.or.unknown
-    { "" }
-    % Use this to preserve lettercase in titles:
-    { "\showarticletitle{" title * "}" * }
-    % Use this for downcase title style:
-    % { \showarticletitle{" title "t" change.case$ * "}" * }
-  if$
-}
-
-FUNCTION { format.title }
-{
-  title empty.or.unknown
-    { "" }
-    % Use this to preserve lettercase in titles:
-    { title }
-    % Use this for downcase title style:
-    % { title "t" change.case$ }
-  if$
-}
-
-FUNCTION { n.dashify }
-{
-  't :=
-  ""
-    { t empty.or.unknown not }
-    {
-      t #1 #1 substring$ "-" =
-        {
-          t #1 #2 substring$ "--" = not
-            { "--" *
-              t #2 global.max$ substring$ 't :=
-            }
-            {
-              { t #1 #1 substring$ "-" = }
-              {
-                "-" *
-                t #2 global.max$ substring$ 't :=
-              }
-              while$
-            }
-          if$
-        }
-        {
-          t #1 #1 substring$ *
-          t #2 global.max$ substring$ 't :=
-        }
-      if$
-    }
-  while$
-}
-
-FUNCTION { format.btitle }
-{
-  edition empty.or.unknown
-  { title emphasize }
-  { title empty.or.unknown
-    { title emphasize } % jtb: what is this supposed to do ?!?
-    { "{\em " title * "\/} (" * edition "l" change.case$ * " ed.)" * } % jtb: no parens for ed.
-    if$
-  }
-  if$
-}
-
-FUNCTION { format.emphasize.booktitle }
-{ % push "" or "{\em booktitle}" or "{\em booktitle}, (second ed.)" on stack
-  edition empty.or.unknown
-    { booktitle emphasize }
-    { booktitle empty.or.unknown
-      { "" }
-      { "{\em " booktitle * "} (" * edition "l" change.case$ * " ed.)" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.city }
-{
-  % jtb: if the preceding string (the title of the conference) is non-empty,
-  % jtb: append the location, otherwise leave empty (so as to trigger the
-  % jtb: error message in output.check
-
-  duplicate$ empty.or.unknown
-    { }
-    {
-      city empty.or.unknown
-        {
-          date empty.or.unknown
-            { }
-            { " (" * date * ")" * }
-          if$
-        }
-        {
-          date empty.or.unknown
-            { " (" * city * ")" * }
-            { " (" * city * ", " * date * ")" * }
-          if$
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION { tie.or.space.connect }
-{
-  duplicate$ text.length$ #3 <
-    { "~" }
-    { " " }
-  if$
-  swap$ * *
-}
-
-FUNCTION { either.or.check }
-{
-  empty.or.unknown
-    'pop$
-    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
-  if$
-}
-
-FUNCTION { format.bvolume }
-{
-  % jtb: If there is a series, this is added and the volume trails after it.
-  % jtb: Otherwise, "Vol" is Capitalized.
-
-  volume empty.or.unknown
-    { "" }
-    {
-      series empty.or.unknown
-        { "Vol." volume tie.or.space.connect}
-        { series ", " * "Vol." volume tie.or.space.connect *}
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION { format.bvolume.noseries }
-{
-  volume empty.or.unknown
-    { "" }
-    {
-      series empty.or.unknown
-        { "Vol." volume tie.or.space.connect}
-        { "Vol." volume tie.or.space.connect}
-%        { series ", " * "Vol." volume tie.or.space.connect *}
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION { format.series }
-{
-  series empty.or.unknown
-    {""}
-    {" {\em (" * series ")}" *}
-  if$
-}
-
-FUNCTION { format.number.series }
-{
-  volume empty.or.unknown
-    {
-      number empty.or.unknown
-        {
-          volume empty.or.unknown
-          { "" }
-          {
-            series empty.or.unknown
-              { "" }
-              { " (" series * ")" * }
-            if$
-          }
-          if$
-        }                                       %    { series field.or.null }
-        {
-          output.state mid.sentence =
-            { "Number" }                        % gnp - changed to mixed case always
-            { "Number" }
-          if$
-          number tie.or.space.connect series empty.or.unknown
-            { "there's a number but no series in " cite$ * warning$ }
-            { " in " * series * }
-          if$
-        }
-      if$
-    }
-    {
-      ""
-    }
-  if$
-}
-
-FUNCTION { multi.page.check }
-{
-  't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty.or.unknown not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
-    { #1 'multiresult := }
-    { t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION { format.pages }
-{
-  pages empty.or.unknown
-    { "" }
-    {
-      pages multi.page.check
-        { pages n.dashify } % gnp - removed () % jtb: removed pp.
-        { pages }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.pages.check.without.articleno }
-{ %% format pages field only if articleno is absent
-  %% Stack out: pages-specification
-  numpages missing$ pages missing$ and
-    { "page numbers missing in both pages and numpages fields in " cite$ * warning$ }
-    { }
-  if$
-
-  articleno empty.or.unknown
-    {
-      pages missing$
-        { numpages }
-        { format.pages }
-      if$
-    }
-    { "" }
-  if$
-}
-
-FUNCTION { format.pages.check }
-{
-  pages empty.or.unknown
-    { "page numbers missing in " cite$ * warning$ "" }
-    { pages n.dashify }
-  if$
-}
-
-FUNCTION { format.bookpages }
-{
-  bookpages empty.or.unknown
-    { "" }
-    { bookpages "book pages" tie.or.space.connect }
-  if$
-}
-
-FUNCTION { format.named.pages }
-{
-  pages empty.or.unknown
-    { "" }
-    { format.pages "pages" tie.or.space.connect }
-  if$
-}
-
-%
-% Changed by Boris Veytsman, 2011-03-13
-% Now the word "pages" is printed even if
-% there field pages is not empty.
-%
-
-FUNCTION { format.page.count }
-{
-  page.count empty.or.unknown
-    { "" }
-    {
-      articleno empty.or.unknown
-        { "numpages field, but no articleno field, in " cite$ * warning$ }
-        { }
-      if$
-      page.count "pages" tie.or.space.connect
-    }
-  if$
-}
-
-FUNCTION { format.articleno.numpages }
-{
-  %% There are seven possible outputs, depending on which fields are set.
-  %%
-  %% These four are handled here:
-  %%
-  %%     articleno, numpages, pages     -> "Article articleno-value, numpages-value pages"
-  %%     articleno, numpages            -> "Article articleno-value, numpages-value pages"
-  %%     articleno, pages               -> "Article articleno-value, reduced-pages-value pages"
-  %%     articleno                      -> "Article articleno-value" and warn about missing numpages
-  %%
-  %% The remaining three have already been handled by
-  %% format.pages.check.without.articleno:
-  %%
-  %%     numpages, pages                -> "pages-value"
-  %%     numpages                       -> "numpages-value"
-  %%     pages                          -> "pages-value"
-
-  articleno empty.or.unknown
-    {
-      numpages empty.or.unknown
-        { }
-        { "require articleno with numpages field in " cite$ * warning$ }
-      if$
-      ""
-    }
-    {
-      numpages empty.or.unknown
-        {
-          pages empty.or.unknown
-            {
-              "require pages or numpages fields with articleno field in " cite$ * warning$
-              "" 'page.count :=
-            }
-            { reduce.pages.to.page.count }
-          if$
-        }
-        { numpages 'page.count := }
-      if$
-
-      %% The Article number is now handled in format.day.month.year because
-      %% ACM prefers the style "Digital Libraries 12, 3, Article 5 (July 2008)"
-      %% over "Digital Libraries 12, 3 (July 2008), Article 5"
-      %% format.articleno output
-      format.page.count
-    }
-  if$
-}
-
-FUNCTION { format.journal.volume.number.day.month.year }
-{
-  % By Young (and Spencer)
-  % GNP - fixed bugs with missing volume, number, and/or pages
-  %
-  % Format journal, volume, number, pages for article types.
-  %
-  journal empty.or.unknown
-    { "no journal in " cite$ * warning$
-      "" }
-%    { journal emphasize.with.italic.correction }
-     {
-           journal "Journal of the ACM" =
-       { "{\it J. ACM}" }
-       {
-           journal "American Mathematical Society Translations" =
-       { "{\it Amer. Math. Soc. Transl.}" }
-       {
-           journal "Bulletin of the American Mathematical Society" =
-       { "{\it Bull. Amer. Math. Soc.}" }
-       {
-           journal "Proceedings of the American Mathematical Society" =
-       { "{\it Proc. Amer. Math. Soc.}" }
-       {
-           journal "Transactions of the American Mathematical Society" =
-       { "{\it Trans. Amer. Math. Soc.}" }
-       {
-           journal "Communications of the {ACM}" =
-       { "{\it Commun. {ACM}}" }
-       {
-           journal "{ACM} Computing Surveys" =
-       { "{\it Comput. Surveys}" }
-       {
-           journal "{ACM} Transactions on Mathematical Software" =
-       { "{\it {ACM} Trans. Math. Software}" }
-       {
-           journal "{ACM} {SIGNUM} Newsletter" =
-       { "{\it {ACM} {SIGNUM} Newslett.}" }
-       {
-           journal "American Journal of Sociology" =
-       { "{\it Amer. J. Sociology}" }
-       {
-           journal "Journal of the American Statistical Association" =
-       { "{\it J. Amer. Statist. Assoc.}" }
-       {
-           journal "Applied Mathematics and Computation" =
-       { "{\it Appl. Math. Comput.}" }
-       {
-           journal "American Mathematical Monthly" =
-       { "{\it Amer. Math. Monthly}" }
-       {
-           journal "British Journal of Mathematical and Statistical Psychology" =
-       { "{\it Brit. J. Math. Statist. Psych.}" }
-       {
-           journal "Canadian Mathematical Bulletin" =
-       { "{\it Canad. Math. Bull.}" }
-       {
-           journal "Journal of Computational and Applied Mathematics" =
-       { "{\it J. Comput. Appl. Math.}" }
-       {
-           journal "Journal of Computational Physics" =
-       { "{\it J. Comput. Phys.}" }
-       {
-           journal "Computers and Structures" =
-       { "{\it Comput. \& Structures}" }
-       {
-           journal "The Computer Journal" =
-       { "{\it Comput. J.}" }
-       {
-           journal "Journal of Computer and System Sciences" =
-       { "{\it J. Comput. System Sci.}" }
-       {
-           journal "Contemporary Mathematics" =
-       { "{\it Contemp. Math.}" }
-       {
-           journal "Crelle's Journal" =
-       { "{\it Crelle's J.}" }
-       {
-           journal "Giornale di Mathematiche" =
-       { "{\it Giorn. Mat.}" }
-       {
-           journal "{IEEE} Transactions on Computers" =
-       { "{\it {IEEE} Trans. Comput.}" }
-       {
-           journal "{IEEE} Transactions on Automatic Control" =
-       { "{\it {IEEE} Trans. Automat. Control}" }
-       {
-           journal "Proceedings of the {IEEE}" =
-       { "{\it Proc. {IEEE}}" }
-       {
-           journal "{IEEE} Transactions on Aerospace and Electronic Systems" =
-       { "{\it {IEEE} Trans. Aerospace Electron. Systems}" }
-       {
-           journal "{IMA} Journal of Numerical Analysis" =
-       { "{\it {IMA} J. Numer. Anal.}" }
-       {
-           journal "Information Processing Letters" =
-       { "{\it Inform. Process. Lett.}" }
-       {
-           journal "Journal of the Institute of Mathematics and its Applications" =
-       { "{\it J. Inst. Math. Appl.}" }
-       {
-           journal "International Journal of Control" =
-       { "{\it Internat. J. Control}" }
-       {
-           journal "International Journal for Numerical Methods in Engineering" =
-       { "{\it Internat. J. Numer. Methods Engrg.}" }
-       {
-           journal "International Journal of Supercomputing Applications" =
-       { "{\it Internat. J. Supercomputing Applic.}" }
-       {
-           journal "Journal of Research of the National Bureau of Standards" =
-       { "{\it J. Res. Nat. Bur. Standards}" }
-       {
-           journal "Linear Algebra and its Applications" =
-       { "{\it Linear Algebra Appl.}" }
-       {
-           journal "Journal of Mathematical Analysis and Applications" =
-       { "{\it J. Math. Anal. Appl.}" }
-       {
-           journal "Mathematische Annalen" =
-       { "{\it Math. Ann.}" }
-       {
-           journal "Journal of Mathematical Physics" =
-       { "{\it J. Math. Phys.}" }
-       {
-           journal "Mathematics of Computation" =
-       { "{\it Math. Comp.}" }
-       {
-           journal "Mathematica Scandinavica" =
-       { "{\it Math. Scand.}" }
-       {
-           journal "Mathematical Tables and Other Aids to Computation" =
-       { "{\it Math. Tables Aids Comput.}" }
-       {
-           journal "Numerische Mathematik" =
-       { "{\it Numer. Math.}" }
-       {
-           journal "Pacific Journal of Mathematics" =
-       { "{\it Pacific J. Math.}" }
-       {
-           journal "Journal of Parallel and Distributed Computing" =
-       { "{\it J. Parallel and Distrib. Comput.}" }
-       {
-           journal "Parallel Computing" =
-       { "{\it Parallel Comput.}" }
-       {
-           journal "Philosophical Magazine" =
-       { "{\it Philos. Mag.}" }
-       {
-           journal "Proceedings of the National Academy of Sciences of the USA" =
-       { "{\it Proc. Nat. Acad. Sci. U. S. A.}" }
-       {
-           journal "Quarterly Journal of Mathematics, Oxford, Series (2)" =
-       { "{\it Quart. J. Math. Oxford Ser. (2)}" }
-       {
-           journal "Quarterly of Applied Mathematics" =
-       { "{\it Quart. Appl. Math.}" }
-       {
-           journal "Review of the International Statisical Institute" =
-       { "{\it Rev. Inst. Internat. Statist.}" }
-       {
-           journal "Journal of the Society for Industrial and Applied Mathematics" =
-       { "{\it J. Soc. Indust. Appl. Math.}" }
-       {
-           journal "Journal of the Society for Industrial and Applied Mathematics, Series B, Numerical Analysis" =
-       { "{\it J. Soc. Indust. Appl. Math. Ser. B Numer. Anal.}" }
-       {
-           journal "{SIAM} Journal on Algebraic and Discrete Methods" =
-       { "{\it {SIAM} J. Algebraic Discrete Methods}" }
-       {
-           journal "{SIAM} Journal on Applied Mathematics" =
-       { "{\it {SIAM} J. Appl. Math.}" }
-       {
-           journal "{SIAM} Journal on Computing" =
-       { "{\it {SIAM} J. Comput.}" }
-       {
-           journal "{SIAM} Journal on Matrix Analysis and Applications" =
-       { "{\it {SIAM} J. Matrix Anal. Appl.}" }
-       {
-           journal "{SIAM} Journal on Numerical Analysis" =
-       { "{\it {SIAM} J. Numer. Anal.}" }
-       {
-           journal "{SIAM} Review" =
-       { "{\it {SIAM} Rev.}" }
-       {
-           journal "{SIAM} Journal on Scientific and Statistical Computing" =
-       { "{\it {SIAM} J. Sci. Statist. Comput.}" }
-       {
-           journal "Software Practice and Experience" =
-       { "{\it Software Prac. Experience}" }
-       {
-           journal "Statistical Science" =
-       { "{\it Statist. Sci.}" }
-       {
-           journal "{USSR} Computational Mathematics and Mathematical Physics" =
-       { "{\it {U. S. S. R.} Comput. Math. and Math. Phys.}" }
-       {
-           journal "Journal of {VLSI} and Computer Systems" =
-       { "{\it J. {VLSI} Comput. Syst.}" }
-       {
-           journal "Zeitschrift fur Angewandte Mathematik und Mechanik" =
-       { "{\it Z. Angew. Math. Mech.}" }
-       {
-           journal "Zeitschrift fur Angewandte Mathematik und Physik" =
-       { "{\it Z. Angew. Math. Phys.}" }
-       {
-           journal "ACM Computing Surveys" =
-       { "{\it Comput. Surveys}" }
-       {
-           journal "ACM Transactions on Mathematical Software" =
-       { "{\it ACM Trans. Math. Software}" }
-       {
-           journal "ACM {SIGNUM} Newsletter" =
-       { "{\it ACM {SIGNUM} Newslett.}" }
-       {
-           journal "IEEE Transactions on Computers" =
-       { "{\it IEEE Trans. Comput.}" }
-       {
-           journal "IEEE Transactions on Automatic Control" =
-       { "{\it IEEE Trans. Automat. Control}" }
-       {
-           journal "Proceedings of the IEEE" =
-       { "{\it Proc. IEEE}" }
-       {
-           journal "IEEE Transactions on Aerospace and Electronic Systems" =
-       { "{\it IEEE Trans. Aerospace Electron. Systems}" }
-       {
-           journal "IMA Journal of Numerical Analysis" =
-       { "{\it IMA J. Numer. Anal.}" }
-       {
-           journal "SIAM Journal on Algebraic and Discrete Methods" =
-       { "{\it SIAM J. Algebraic Discrete Methods}" }
-       {
-           journal "SIAM Journal on Applied Mathematics" =
-       { "{\it SIAM J. Appl. Math.}" }
-       {
-           journal "SIAM Journal on Computing" =
-       { "{\it SIAM J. Comput.}" }
-       {
-           journal "SIAM Journal on Matrix Analysis and Applications" =
-       { "{\it SIAM J. Matrix Anal. Appl.}" }
-       {
-           journal "SIAM Journal on Numerical Analysis" =
-       { "{\it SIAM J. Numer. Anal.}" }
-       {
-           journal "SIAM Review" =
-       { "{\it SIAM Rev.}" }
-       {
-           journal "SIAM Journal on Scientific and Statistical Computing" =
-       { "{\it SIAM J. Sci. Statist. Comput.}" }
-       {
-           journal "USSR Computational Mathematics and Mathematical Physics" =
-       { "{\it U. S. S. R. Comput. Math. and Math. Phys.}" }
-       {
-           journal "Journal of VLSI and Computer Systems" =
-       { "{\it J. VLSI Comput. Syst.}" }
-       {
-           journal "Communications of the ACM" =
-       { "{\it Commun. ACM}" }
-       %% If no match with cases needing special handling, just output journal name
-       {  journal emphasize.with.italic.correction  }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-         }
-    if$
-
-  number empty.or.unknown
-    {
-      volume empty.or.unknown
-        { "no number and no volume in " cite$ * warning$ "" * }
-        { " " * " {" * volume * "}" * }
-      if$
-    }
-    {
-      volume empty.or.unknown
-        {
-          "unusual to have number, but no volume, for " cite$ * warning$
-          " " * number *
-        }
-        { " " * volume comma " " * number * * }
-      if$
-    }
-  if$
-
-  format.day.month.year *
-}
-
-FUNCTION { format.chapter.pages }
-{
-  chapter empty.or.unknown
-    'format.pages
-    { type empty.or.unknown
-        { "Chapter" } % gnp - changed to mixed case
-        { type "t" change.case$ }
-      if$
-      chapter tie.or.space.connect
-      pages empty.or.unknown
-        {"page numbers missing in " cite$ * warning$} % gnp - added check
-        { ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.in.emphasize.booktitle }
-{ % jtb: format for collections or proceedings not appearing in a journal
-  booktitle empty.or.unknown
-  { "" }
-  { "In " format.emphasize.booktitle * }
-  if$
-}
-
-FUNCTION { format.in.booktitle }
-{ % jtb: format for proceedings appearing in a journal
-  booktitle empty.or.unknown
-  { "" }
-  { "In " booktitle * }
-  if$
-}
-
-FUNCTION { format.in.ed.booktitle }
-{
-  booktitle empty.or.unknown
-  { "" }
-  { editor empty.or.unknown
-    { "In " format.emphasize.booktitle * }
-                % jtb: swapped editor location
-    { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
-    if$
-  }
-  if$
-}
-
-FUNCTION { format.thesis.type }
-{ % call with default type on stack top
-  type empty.or.unknown
-    'skip$    % use default type
-    {
-      pop$    % discard default type
-      % NO: it is silly to have to brace protect every degree type!:  type "t" change.case$
-      type
-    }
-  if$
-}
-
-FUNCTION { format.tr.number }
-{
-  type empty.or.unknown
-%    { "Tech. Rep." }     
-    { "{T}echnical {R}eport" }     % ACM wants it explicit (Gerry 9/28)
-    'type
-  if$
-  number empty.or.unknown
-    { "t" change.case$ }
-    %% LOOKS BAD: { "." * number tie.or.space.connect }
-    %% Prefer "Research report RJ687." to "Research report. RJ687."
-    { number tie.or.space.connect }
-  if$
-}
-
-FUNCTION { format.advisor }
-{
-  advisor empty.or.unknown
-    { "" }
-    { "Advisor(s) " advisor * }
-  if$
-}
-
-FUNCTION { format.article.crossref }
-{ "See"
-  "\citeN{" * crossref * "}" *
-}
-
-FUNCTION { format.crossref.editor }
-{
-  editor #1 "{vv~}{ll}" format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { pop$ " et~al\mbox{.}" * }         % jrh: avoid spacing problems
-    { #2 <
-    'skip$
-    { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-        { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
-        { " and " * editor #2 "{vv~}{ll}" format.name$ * }
-      if$
-    }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.book.crossref }
-{
-  volume empty.or.unknown
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
-      "In "
-    }
-    { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
-      " of " *
-    }
-  if$
-  editor empty.or.unknown
-  editor field.or.null author field.or.null =
-  or
-    { key empty.or.unknown
-    { series empty.or.unknown
-        { "need editor, key, or series for " cite$ * " to crossref " *
-          crossref * warning$
-          "" *
-        }
-        { "{\em " * series * "\/}" * }
-      if$
-    }
-    { key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-  " \citeN{" * crossref * "}" *
-}
-
-FUNCTION { format.incoll.inproc.crossref }
-{ "See"
-  " \citeN{" * crossref * "}" *
-}
-
-FUNCTION { format.lab.names }
-{
-  % format.lab.names:
-  %
-  % determines "short" names for the abbreviated author information.
-  % "Long" labels are created in calc.label, using the routine my.full.label
-  % to format author and editor fields.
-  %
-  % There are 4 cases for labels.   (n=3 in the example)
-  % a) one author             Foo
-  % b) one to n               Foo, Bar and Baz
-  % c) use of "and others"    Foo, Bar et al.
-  % d) more than n            Foo et al.
-
-  's :=
-  s num.names$ 'numnames :=
-  numnames #2 >    % change number to number of others allowed before
-                   % forcing "et al".
-    { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
-    {
-      numnames #1 - 'namesleft :=
-      #2 'nameptr :=
-      s #1 "{vv~}{ll}" format.name$
-        { namesleft #0 > }
-        { nameptr numnames =
-            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-                { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
-                { " and " * s nameptr "{vv~}{ll}" format.name$ * }
-              if$
-            }
-            { ", " * s nameptr "{vv~}{ll}" format.name$ * }
-          if$
-          nameptr #1 + 'nameptr :=
-          namesleft #1 - 'namesleft :=
-        }
-      while$
-    }
-  if$
-}
-
-FUNCTION { author.key.label }
-{
-  author empty.or.unknown
-    { key empty.or.unknown
-          { "no key, author in " cite$ * warning$
-            cite$ #1 #3 substring$ }
-         'key
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { author.key.organization.label }
-{ % added - gnp. Provide label formatting by organization if author is null.
-  author empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "no key, author or organization in " cite$ * warning$
-              cite$ #1 #3 substring$ }
-            'key
-          if$
-        }
-        { organization }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { editor.key.organization.label }
-{ % added - gnp. Provide label formatting by organization if editor is null.
-  editor empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "no key, editor or organization in " cite$ * warning$
-              cite$ #1 #3 substring$ }
-            'key
-          if$
-        }
-        { organization }
-      if$
-    }
-    { editor format.lab.names }
-  if$
-}
-
-FUNCTION { author.editor.key.label }
-{
-  author empty.or.unknown
-    { editor empty.or.unknown
-          { key empty.or.unknown
-               { "no key, author, or editor in " cite$ * warning$
-                 cite$ #1 #3 substring$ }
-             'key
-           if$
-         }
-          { editor format.lab.names }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { calc.label }
-{
-  % Changed - GNP. See also author.organization.sort, editor.organization.sort
-  % Form label for BibTeX entry. The classification of which fields are used
-  % for which type of entry (book, inbook, etc.) are taken from alpha.bst.
-  % The change here from newapa is to also include organization as a
-  % citation label if author or editor is missing.
-
-  type$ "book" =
-  type$ "inbook" =
-  or
-  type$ "periodical" =
-  or
-    'author.editor.key.label
-    { type$ "proceedings" =
-        'editor.key.organization.label
-        { type$ "manual" =
-            'author.key.organization.label
-            'author.key.label
-          if$
-        }
-      if$
-    }
-  if$
-
-  author empty.or.unknown  % generate the full label citation information.
-    {
-      editor empty.or.unknown
-        {
-          organization empty.or.unknown
-            {
-              key empty.or.unknown
-                {
-                  "no author, editor, organization, or key in " cite$ * warning$
-                  "??"
-                }
-                { key }
-              if$
-            }
-            { organization }
-          if$
-        }
-        { editor my.full.label }
-      if$
-    }
-    { author my.full.label }
-  if$
-
-  % leave label on the stack, to be popped when required.
-
-  "}{" * swap$ * "}{" *
-  %  year field.or.null purify$ #-1 #4 substring$ *
-  %
-  % save the year for sort processing afterwards (adding a, b, c, etc.)
-  %
-  year field.or.null purify$ #-1 #4 substring$
-  'label.year :=
-}
-
-%
-% Change by Gerry: use number-like citations for transactions
-% 2011/03/23
-%
-%FUNCTION {output.bibitem}
-%{ newline$
-%  "\bibitem{" write$
-%  cite$ write$
-%  "}" write$
-%  newline$
-%  ""
-%  before.all 'output.state :=
-%}
-
-FUNCTION { output.bibitem }
-{
-  newline$
-  "\bibitem[\protect\citeauthoryear{" write$
-  calc.label write$
-  sort.year write$
-  "}]%" writeln
-  "        {" write$
-  cite$ write$
-  "}" writeln
-  ""
-  before.all 'output.state :=
-}
-
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url }
-{ % enter and return with stack empty
-  %% We switch now from buffered output to output of complete lines, so
-  %% that the Issue .. URL data have their own lines, and are less likely
-  %% to be line-wrapped by BibTeX's short-sighted algorithm, which wraps
-  %% lines longer than 79 characters, backtracking to what it thinks is
-  %% a break point in the string.  Any such wrapping MUST be undone to
-  %% prevent percent-newline from appearing in DOIs and URLs.  The
-  %% output data are intentionally wrapped in \showxxx{} macros at
-  %% beginning of line, and that supply their own punctuation (if they
-  %% are not defined to suppress output entirely), to make it easier for
-  %% other software to recover them from .bbl files.
-  %%
-  %% It also makes it possible to later change the macro definitions
-  %% to suppress particular output values, or alter their appearance.
-  %%
-  %% Note that it is possible for theses, technical reports, and
-  %% manuals to have ISBNs, and anything that has an ISBN may also
-  %% have an ISSN.  When there are no values for these keys, there
-  %% is no output generated for them here.
-
-  "\newblock" writeln
-  after.block 'output.state :=
-
-  output.issue
-  output.isbn
-  output.coden  % CODEN is functionally like ISSN, so output them sequentially
-  output.issn
-  output.lccn
-  output.doi    % DOI is ALWAYS last according to CrossRef DOI documentation
-  output.url    % but ACM wants URL last
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url.note }
-{ % enter with stack empty, return with empty string on stack
-  output.issue.doi.coden.isxn.lccn.url
-  note empty.or.unknown
-    { }
-    {
-      "\newblock" writeln
-      output.note
-    }
-  if$
-  ""
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url.note.check }
-{ % enter with stack empty, return with empty string on stack
-  output.issue.doi.coden.isxn.lccn.url
-  note empty.or.unknown
-    { }
-    {
-      "\newblock" writeln
-      output.note.check
-    }
-  if$
-  ""
-}
-
-FUNCTION { article }
-{
-  output.bibitem
-
-  author empty.or.unknown
-    {
-      editor empty.or.unknown
-        { "neither author and editor supplied for " cite$ * warning$ }
-        { format.editors "editor" output.check }
-      if$
-    }
-    { format.authors "author" output.check }
-  if$
-
-  author format.no.key output       % added
-  output.year.check                 % added
-  new.block
-  format.articletitle "title" output.check
-  new.block
-  howpublished output
-
-  crossref missing$
-    { format.journal.volume.number.day.month.year }
-    {
-      "cross reference in @Article{...} is unusual" warning$
-      format.article.crossref output.nonnull
-    }
-  if$
-  output
-
-  format.pages.check.without.articleno output
-  format.articleno.numpages output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { book }
-{
-  output.bibitem
-  author empty.or.unknown
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-        { "author and editor" editor either.or.check }
-        'skip$
-      if$
-    }
-  if$
-  output.year.check       % added
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { new.sentence              % jtb: start a new sentence for series/volume
-      format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check    % jtb: require address
-      fin.sentence
-      pages empty.or.unknown
-        { format.bookpages }    % use bookpages when pages empty
-        { format.pages.check "pages" tie.or.space.connect }
-      if$
-      output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { booklet }
-{
-  output.bibitem
-  format.authors output
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title "title" output.check
-  new.block
-  howpublished output
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { inbook }
-{
-  output.bibitem
-  author empty.or.unknown
-    { format.editors
-      "author and editor" output.check
-    }
-    { format.authors output.nonnull
-      crossref missing$
-    { "author and editor" editor either.or.check }
-    'skip$
-      if$
-    }
-  if$
-  output.year.check                 % added
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { new.sentence              % jtb: start a new sentence for series/volume
-      format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check    % jtb: require address
-      format.bookpages output
-      format.chapter.pages
-      "chapter and pages" output.check  % jtb: moved from before publisher
-    }
-    {
-      format.bookpages output
-      format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { incollection }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output       % added
-  output.year.check              % added
-  new.block
-  format.articletitle "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      new.sentence                % jtb: start a new sentence for series/volume
-      format.bvolume output
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check      % jtb: require address
-      format.bookpages output
-      format.chapter.pages output % gnp - was special.output.nonnull
-                                  % left out comma before page numbers
-                                  % jtb: moved from before publisher
-    }
-    {
-      format.incoll.inproc.crossref output.nonnull
-      format.chapter.pages output
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { inproceedings }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output            % added
-  output.year.check                   % added
-  new.block
-  format.articletitle "title" output.check
-  howpublished output.dot.space
-  crossref missing$
-    {
-      journal missing$          % jtb: proceedings appearing in journals
-        { format.in.emphasize.booktitle format.city "booktitle"  output.check.dot.space
-          format.series output.removenospace
-          format.editors.fml output % BV 2011/09/27 Moved dot to comma
-          format.bvolume.noseries output
-          new.sentence
-          organization output
-          publisher "publisher" output.check % jtb: require publisher (?)
-          address "address" output.check  % jtb: require address
-          format.bookpages output
-        }
-        {
-           format.in.booktitle format.city "booktitle" output.check
-           format.editors.fml output
-           new.sentence
-           format.journal.volume.number.day.month.year output
-        }
-      if$
-      format.articleno output
-      format.pages.check.without.articleno output
-    }
-    {
-      format.incoll.inproc.crossref output.nonnull
-      format.articleno output
-      format.pages.check.without.articleno output
-    }
-  if$
-  format.articleno.numpages output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { conference } { inproceedings }
-
-FUNCTION { manual }
-{
-  output.bibitem
-  author empty.or.unknown
-    { editor empty.or.unknown
-      { organization "organization" output.check
-        organization format.key output }  % if all else fails, use key
-      { format.editors "author and editor" output.check }
-      if$
-    }
-    { format.authors output.nonnull }
-    if$
-  output.year.check                 % added
-  new.block
-  format.btitle "title" output.check
-  organization address new.block.checkb
-  % jtb: back to normal style: organization, address
-  organization "organization" output.check
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { mastersthesis }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
-  new.block
-  "Master's\ thesis" format.thesis.type output new.sentence  % Added dot. BV 2011/09/27
-  school "school" output.check
-  address output
-  new.block
-  format.advisor output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { misc }
-{
-  output.bibitem
-  format.authors output
-  author format.key output            % added
-  output.year.check                   % added
-  title howpublished new.block.checkb
-  format.title output
-  new.block
-  howpublished output
-  "" output.nonnull.dot.space
-  output.day.month.year              % Gerry - appears odd if (only) the year is 'repeated' but (appears) 'valuable' if the month/day is _also_ included - 2011/09/28
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { phdthesis }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
-  new.block
- "Ph.D. Dissertation" format.thesis.type output new.sentence % Added dot. BV 2011/09/27
-  school "school" output.check
-  address output
-  new.block
-  format.advisor output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION {format.date}
-{ year empty.or.unknown
-    { month empty.or.unknown
-        {
-          ""                    % output empty date if year/month both empty
-          day empty.or.unknown
-            {  }
-            { "there's a day but no month or year in " cite$ * warning$ }
-          if$
-        }
-        { "there's a month but no year in " cite$ * warning$
-          month
-          day empty.or.unknown
-            { }
-            { " " * day * }
-          if$
-        }
-      if$
-    }
-    { month empty.or.unknown
-        {
-          year                  % output only year if month empty
-          day empty.or.unknown
-            {  }
-            { "there's a day and year but no month in " cite$ * warning$ }
-          if$
-        }
-        {
-          month " " *
-          day empty.or.unknown
-            { }
-            { day * ", " * }
-          if$
-          year *
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION {new.block.checka}
-{
-  empty.or.unknown
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION { periodical }
-{
-  output.bibitem
-  editor empty.or.unknown
-    { organization output }
-    { format.editors output.nonnull }
-  if$
-  new.block
-  title emphasize "title" output.check
-  format.date output
-  new.sentence
-  publisher output
-  address output
-  howpublished new.block.checka
-  howpublished output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { proceedings }
-{
-  output.bibitem
-  editor empty.or.unknown
-    { organization output
-      organization format.key output }  % gnp - changed from author format.key
-    { format.editors output.nonnull }
-  if$
-  % author format.key output             % gnp - removed (should be either
-  %                                        editor or organization
-  output.year.check                    % added (newapa)
-  new.block
-  format.btitle format.city "title" output.check        % jtb: added city
-  new.sentence
-  format.bvolume output
-  format.number.series output
-  new.sentence
-  organization output
-  % jtb: normal order: publisher, address
-  publisher output
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { techreport }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output             % added
-  output.year.check                    % added
-  new.block
-  format.btitle "title" output.check
-  new.block
-%   format.tr.number output               % jtb: moved month ...
-  format.tr.number output new.sentence    % Gerry  - need dot 2011/09/28
-  institution "institution" output.check
-  address output
-  new.sentence
-  format.named.pages output
-  % ACM omits year at end in transactions style
-  % format.day.month.year output.nonnull.dot.space  % jtb: ... to here (no parens)
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { unpublished }
-{
-  output.bibitem
-  format.authors
-  "author" output.check
-  author format.key output              % added
-  output.year.check                     % added
-  new.block
-  format.title "title" output.check
-  fin.sentence
-  output.day.month.year                 % UTAH
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note.check
-  fin.entry
-}
-
-FUNCTION { default.type } { misc }
-
-%%% ACM journal-style month definitions: full name if 1--5 letters, else
-%%% abbreviation of 3 or 4 characters and a dot
-
-MACRO {jan}             {"Jan."}
-
-MACRO {feb}             {"Feb."}
-
-MACRO {mar}             {"March"}
-
-MACRO {apr}             {"April"}
-
-MACRO {may}             {"May"}
-
-MACRO {jun}             {"June"}
-
-MACRO {jul}             {"July"}
-
-MACRO {aug}             {"Aug."}
-
-MACRO {sep}             {"Sept."}
-
-MACRO {oct}             {"Oct."}
-
-MACRO {nov}             {"Nov."}
-
-MACRO {dec}             {"Dec."}
-
-
-%%% ====================================================================
-%%%                 I M P O R T A N T   C H A N G E
-%%%
-%%% For the 2009 release of the official acm-*.bst files, there are to
-%%% be NO predefined journal abbreviations in those style files.
-%%%
-%%% ACM may later develop an official list of mappings of full journal
-%%% names of commonly-cited journals to ACM-preferred abbreviations, but
-%%% authors should consider that use of any of these commented-out
-%%% abbreviations is DEPRECATED unless the BibTeX file itself provides
-%%% its own @String{name = "value"} definitions.
-%%%
-%%% Use of journal (and publisher and address) @String{...}
-%%% abbreviations, as opposed to explicit value assignments such as
-%%% journal = "J. ACM" and publisher = "IEEE", is preferred in
-%%% bibliographic databases, because it makes it easier for journal
-%%% production staff to replace those definitions by publisher-preferred
-%%% abbreviations when articles are typeset for publication.
-%%%
-%%% For historical reasons, and because some of these abbreviations are
-%%% used in other (non-ACM) bibliography style files, they are preserved
-%%% here in comments.  Future releases of the acm*-.bst files are likely
-%%% to remove them entirely.
-%%% ====================================================================
-%%%
-%%% DEPRECATED: MACRO {acmcs}           {"ACM Comput. Surv."}                   % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acmlett}         {"ACM Lett. Program. Lang. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acta}            {"Acta Inf."}                           % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ai}              {"Artificial Intelligence"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {al}              {"Ada Lett."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acr}             {"Adv. Comput. Res."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {bit}             {"Bit"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cacm}            {"Commun. ACM"}                         % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cj}              {"Comput. J."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cn}              {"Comput. Netw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cl}              {"Comput. Lang."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ibmjrd}          {"IBM J. Res. and Development"}         % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ibmsj}           {"IBM Systems Journal"}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ict}             {"Inf. Contr."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieebcs}          {"IEE/BCS Softw. Eng. J."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieees}           {"IEEE Softw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeese}          {"IEEE Trans. Softw. Eng."}             % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetc}          {"IEEE Trans. Comput."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetcad}        {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetpds}        {"IEEE Trans. Parall. Distrib. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetit}         {"IEEE Trans. Inf. Theory"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ipl}             {"Inf. Process. Lett."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {icp}             {"Inf. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ist}             {"Inf. Softw. Tech."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ijsa}            {"Int. J. Supercomput. Appl."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ijpp}            {"Int. J. Parallel Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jacm}            {"J. ACM"}                              % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: % MACRO {jcss}          {"Journal of Computer and System Sciences"} % original BibTeX
-%%% DEPRECATED: MACRO {jcss}            {"J. Comput. Syst. Sci."}               % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlp}             {"J. Logic Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jfp}             {"J. Funct. Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jsmrp}           {"J. Softw. Maint. Res. Pract."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jss}             {"J. Syst. Softw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlc}             {"J. Logic and Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlsc}            {"J. Lisp Symb. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {lpls}            {"Lett. Program. Lang. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mor}             {"Math. Oper. Res."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mscs}            {"Math. Struct. Comput. Sci."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mst}             {"Math. Syst. Theor."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ngc}             {"New Gen. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {scp}             {"Sci. Comput. Program."}               % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {sicomp}          {"SIAM J. Comput."}                     % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {spe}             {"Softw. Pract. Exper."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tocs}            {"ACM Trans. Comput. Syst."}            % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tods}            {"ACM Trans. Database Syst."}           % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tog}             {"ACM Trans. Graphics"}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toms}            {"ACM Trans. Math. Softw."}             % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toois}           {"ACM Trans. Office Inf. Syst."}        % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toplas}          {"ACM Trans. Program. Lang. Syst."}     % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tcs}             {"Theor. Comput. Sci."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tr}              {"Tech. Rep."}
-%%% ====================================================================
-
-READ
-
-FUNCTION { sortify }
-{
-  purify$
-  "l" change.case$
-}
-
-FUNCTION { chop.word }
-{
-  's :=
-  'len :=
-  s #1 len substring$ =
-    { s len #1 + global.max$ substring$ }
-    's
-  if$
-}
-
-FUNCTION { sort.format.names }
-{
-  's :=
-  #1 'nameptr :=
-  ""
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 >
-          { "   " * }
-         'skip$
-      if$
-  %      s nameptr "{ff{ } }{ll{ }}{  vv{ }}{  jj{ }}" format.name$ 't :=
-      s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
-      nameptr numnames = t "others" = and
-          { " et~al" * }
-          { t sortify * }
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION { sort.format.title }
-{
-  't :=
-  "A " #2
-    "An " #3
-      "The " #4 t chop.word
-    chop.word
-  chop.word
-  sortify
-  #1 global.max$ substring$
-}
-
-FUNCTION { author.sort }
-{
-  author empty.or.unknown
-    { key empty.or.unknown
-         { "to sort, need author or key in " cite$ * warning$
-           "" }
-         { key sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { author.editor.sort }
-{
-  author empty.or.unknown
-    {
-      editor empty.or.unknown
-         {
-           key empty.or.unknown
-             { "to sort, need author, editor, or key in " cite$ * warning$
-               ""
-             }
-             { key sortify }
-           if$
-         }
-         { editor sort.format.names }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { author.organization.sort }
-{
-  % added - GNP. Stack author or organization for sorting (from alpha.bst).
-  % Unlike alpha.bst, we need entire names, not abbreviations
-
-  author empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "to sort, need author, organization, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { organization sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { editor.organization.sort }
-{
-  % added - GNP. Stack editor or organization for sorting (from alpha.bst).
-  % Unlike alpha.bst, we need entire names, not abbreviations
-
-  editor empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "to sort, need editor, organization, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { organization sortify }
-      if$
-    }
-    { editor sort.format.names }
-  if$
-}
-
-FUNCTION { presort }
-{
-  % Presort creates the bibentry's label via a call to calc.label, and then
-  % sorts the entries based on entry type. Chicago.bst adds support for
-  % including organizations as the sort key; the following is stolen from
-  % alpha.bst.
-
-  calc.label sortify % recalculate bibitem label
-  year field.or.null purify$ #-1 #4 substring$ * % add year
-  "    "
-  *
-  type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.sort
-    { type$ "proceedings" =
-        'editor.organization.sort
-        { type$ "manual" =
-            'author.organization.sort
-            'author.sort
-          if$
-        }
-      if$
-    }
-  if$
-  #1 entry.max$ substring$        % added for newapa
-  'sort.label :=                  % added for newapa
-  sort.label                      % added for newapa
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE { presort }
-
-SORT             % by label, year, author/editor, title
-
-FUNCTION { initialize.extra.label.stuff }
-{ #0 int.to.chr$ 'last.label :=
-  "" 'next.extra :=
-  #0 'last.extra.num :=
-}
-
-FUNCTION { forward.pass }
-{
-  % Pass through all entries, comparing current entry to last one.
-  % Need to concatenate year to the stack (done by calc.label) to determine
-  % if two entries are the same (see presort)
-
-  last.label
-  % OLD:calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
-  % NEW:
-  author.key.label year field.or.null purify$ #-1 #4 substring$ * % add year
-  #1 entry.max$ substring$ =     % are they equal?
-     { last.extra.num #1 + 'last.extra.num :=
-       last.extra.num int.to.chr$ 'extra.label :=
-     }
-     { "a" chr.to.int$ 'last.extra.num :=
-       "" 'extra.label :=
-       % OLD: calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
-       % NEW:
-       author.key.label year field.or.null purify$ #-1 #4 substring$ * % add year
-       #1 entry.max$ substring$ 'last.label := % assign to last.label
-     }
-  if$
-}
-
-FUNCTION { reverse.pass }
-{
-  next.extra "b" =
-    { "a" 'extra.label := }
-     'skip$
-  if$
-  label.year extra.label * 'sort.year :=
-  extra.label 'next.extra :=
-}
-
-EXECUTE {initialize.extra.label.stuff}
-
-ITERATE {forward.pass}
-
-REVERSE {reverse.pass}
-
-FUNCTION { bib.sort.order }
-{
-  sort.label
-  "    "
-  *
-  year field.or.null sortify
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE { bib.sort.order }
-
-SORT             % by sort.label, year, title --- giving final bib. order.
-
-FUNCTION { begin.bib }
-{
-  %% Set to #0 show 13-digit ISBN in preference to 10-digit ISBN.
-  %% Set to #1 to show both 10-digit and 13-digit ISBNs.
-  #1 'show-isbn-10-and-13 :=
-
-  "%%% -*-BibTeX-*-" writeln
-  "%%% Do NOT edit. File created by BibTeX with style" writeln
-  "%%% ACM-Reference-Format-Journals [18-Jan-2012]." writeln
-  "" writeln
-
-  preamble$ empty.or.unknown
-    'skip$
-    { preamble$ writeln }
-  if$
-  "\begin{thebibliography}{00}" writeln
-  ""                                                                         writeln
-  "%%% ====================================================================" writeln
-  "%%% NOTE TO THE USER: you can override these defaults by providing"       writeln
-  "%%% customized versions of any of these macros before the \bibliography"  writeln
-  "%%% command.  Each of them MUST provide its own final punctuation,"       writeln
-  "%%% except for \shownote{}, \showDOI{}, and \showURL{}.  The latter two"  writeln
-  "%%% do not use final punctuation, in order to avoid confusing it with"    writeln
-  "%%% the Web address."                                                     writeln
-  "%%%"                                                                      writeln
-  "%%% To suppress output of a particular field, define its macro to expand" writeln
-  "%%% to an empty string, or better, \unskip, like this:"                   writeln
-  "%%%"                                                                      writeln
-  "%%% \newcommand{\showDOI}[1]{\unskip}   % LaTeX syntax"                   writeln
-  "%%%"                                                                      writeln
-  "%%% \def \showDOI #1{\unskip}           % plain TeX syntax"               writeln
-  "%%%"                                                                      writeln
-  "%%% ====================================================================" writeln
-  ""                                                                         writeln
-
-  %% ACM publications do not use CODEN, ISSN, and LCCN data, so their default
-  %% macro wrappers expand to \unskip, discarding their values and unwanted
-  %% space.
-  %%
-  %% For other publications, prior definitions like these may be useful:
-  %%
-  %%     Plain TeX:
-  %%         \def \showCODEN     #1{CODEN #1.}
-  %%         \def \showISSN      #1{ISSN #1.}
-  %%         \def \showLCCN      #1{LCCN #1.}
-  %%
-  %%     LaTeX:
-  %%         \newcommand{\showCODEN}[1]{CODEN #1.}
-  %%         \newcommand{\showISSN}[1]#1{ISSN #1.}
-  %%         \newcommand{\showLCCN}[1]{LCCN #1.}
-
-  "\ifx \showCODEN    \undefined \def \showCODEN     #1{\unskip}     \fi" writeln
-  "\ifx \showDOI      \undefined \def \showDOI       #1{{\tt DOI:}\penalty0{#1}\ } \fi" writeln
-  % ACM styles omit ISBNs, but they can be included by suitable definitions of
-  % \showISBNx and \showISBNxiii before the .bbl file is read
-  "\ifx \showISBNx    \undefined \def \showISBNx     #1{\unskip}     \fi" writeln
-  "\ifx \showISBNxiii \undefined \def \showISBNxiii  #1{\unskip}     \fi" writeln
-  "\ifx \showISSN     \undefined \def \showISSN      #1{\unskip}     \fi" writeln
-  "\ifx \showLCCN     \undefined \def \showLCCN      #1{\unskip}     \fi" writeln
-  "\ifx \shownote     \undefined \def \shownote      #1{#1}          \fi" writeln % NB: final period supplied by add.period$ above
-  "\ifx \showarticletitle \undefined \def \showarticletitle #1{#1}   \fi" writeln
-  "\ifx \showURL      \undefined \def \showURL       #1{#1}          \fi" writeln
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION { end.bib }
-{
-  newline$
-  "\end{thebibliography}"
-  writeln
-}
-
-EXECUTE {end.bib}
-
-%%% End of ACM-Reference-Format-Journals.bst V1.00 - 18 January 2012
-

Added: trunk/Master/texmf-dist/bibtex/bst/acmart/ACM-Reference-Format.bst
===================================================================
--- trunk/Master/texmf-dist/bibtex/bst/acmart/ACM-Reference-Format.bst	                        (rev 0)
+++ trunk/Master/texmf-dist/bibtex/bst/acmart/ACM-Reference-Format.bst	2016-07-14 21:38:03 UTC (rev 41692)
@@ -0,0 +1,3346 @@
+%%% -*-BibTeX-*-
+%%% ====================================================================
+%%%  @BibTeX-style-file{
+%%%     author          = "Nelson H. F. Beebe, Boris Veytsman and Gerald Murray",
+%%%     version         = "1.18",
+%%%     date            = "10 July 2016",
+%%%     filename        = "ACM-Reference-Format.bst",
+%%%     email           = "beebe at math.utah.edu, beebe at acm.org,
+%%%                        beebe at computer.org, borisv at lk.net, murray at hq.acm.org", 
+%%%     codetable       = "ISO/ASCII",
+%%%     keywords        = "ACM Transactions bibliography style; BibTeX",
+%%%     license         = "public domain",
+%%%     supported       = "yes",
+%%%     abstract        = "",
+%%%  }
+%%% ====================================================================
+
+%  ACM BibTeX style, ACM-Reference-Format.bst
+%  for BibTeX version 0.99c, LaTeX version 3.141
+%  ACM extensions with code cleaned up, extended, and debugged 10--15-Nov-2008
+%  Revised 17-APRIL-2008 (Nelson)
+%  Revised 13-MARCH-2011 (Boris/Gerry)
+%  Revised 23-MARCH-2011 (Boris/Gerry)
+%  Revised 27-MARCH-2011 (Boris/Gerry)
+%  Revised 15-APRIL-2011 (Boris/Gerry)
+%  Revised 27-SEPTEMBER-2011 (Boris)
+%  Revised 10-JULY-2016 (Boris)
+%
+%
+% History (by Nelson)
+%
+% Based on 'acmtrans' (for ACM Journals)
+% Date: 28th April 2008
+%
+% 1. Avoid 'repeating' the 'month' values.
+% 2. Avoid incorrectly italicizing the volume number.
+% 3. Avoid non italicizing certain titles (book, inproceedings etc).
+% 4. NO series if there is NO volume.
+% 5. Sorting of reference with first surname.
+% 6. Article no added for Inproceedings.
+%
+% Date: 07th May 2008
+%
+% 1. Abbreviation list added
+%
+%   Citation format: [author-last-name year]
+%             [author-last-name and author-last-name year]
+%             [author-last-name, author-last-name, and author-last-name year]
+%             [author-last-name et al. year]
+%             [author-last-name]
+%             author-last-name [year]
+%             [author-last-name and author-last-name]
+%             [author-last-name et al.]
+%             [year] or [year,year]
+%             year or year,year
+%
+%   Reference list ordering: alphabetical by author or whatever passes
+%    for author in the absence of one.
+%
+% Features of the old acmtrans.bst:
+% =================================
+%
+% - all authors appear last name first.
+% - all pages are listed xx-xx, (no pp.) and are at the end of the reference
+% - publishers are identified as publisher, address
+% - conferences papers (inproceedings) may give city of conference,
+%   date of conference, and journal that the proceedings appear in.
+% - months abbreviated to max four letters (eg. Mar.)
+% - volume of a series indicated after the title of the series
+% - editors appear after edited title and are identified by a trailing "Eds."
+%   not in parentheses.  Editor names are not given in small caps.
+%   (unless there is no author line)
+% - names terminated with a period even if there is no first name.
+% - editions are indicated trailing after the work, not in parentheses.
+% - "et al." citations have a protected period to avoid bad spacing (jrh)
+% - "address" required when publisher given
+% - series (roman) and volume are in a sentence separate from (book-)title
+%
+%
+% Features of chicago.bst:
+% =======================
+%
+% - full names used in citations, but abbreviated citations are available
+%   (see above)
+% - if an entry has a "month", then the month and year are also printed
+%   as part of that bibitem.
+% - all conjunctions use "and" instead of "\&"
+% - major modification from Chicago Manual of Style (13th ed.) is that
+%   only the first author in a reference appears last name first-
+%   additional authors appear as J. Q. Public.
+% - pages are listed as "pp. xx-xx" in all entry types except
+%   article entries.
+% - book, inbook, and manual use "location: publisher" (or organization)
+%   for address and publisher. All other types list publishers separately.
+% - "pp." are used to identify page numbers for all entry types except
+%   articles.
+% - organization is used as a citation label if neither author nor editor
+%   is present (for manuals).
+% - "et al." is used for long author and editor lists, or when "others"
+%   is used.
+%
+% Modifications and bug fixes from newapa.bst:
+% ===========================================
+%
+%   - added month, year to bib entries if month is present
+%   - fixed bug with In proceedings, added necessary comma after title
+%   - all conjunctions changed to "and" from "\&"
+%   - fixed bug with author labels in my.full.label: "et al." now is
+%        generated when "others" is an author name
+%   - major modification from Chicago Manual of Style (13th ed.) is that
+%     only the first author in a reference appears last name first-
+%     additional authors appear as J. Q. Public.
+%   - pages are listed as "pp. xx-xx" in all entry types except
+%     article entries. Unnecessary (IMHO) "()" around page numbers
+%     were removed, and page numbers now don't end with a period.
+%   - created chicago.sty for use with this bibstyle (required).
+%   - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
+%     number, and /or pages. Renamed to format.journal.volume.number.
+%   - fixed bug in formatting booktitles: additional period an error if
+%     book has a volume.
+%   - fixed bug: editors usually given redundant period before next clause
+%     (format.editors.dot) removed.
+%   - added label support for organizations, if both author and editor
+%     are missing (from alpha.bst). If organization is too long, then
+%     the key field is used for abbreviated citations.
+%   - In proceedings or books of several volumes, no comma was written
+%     between the "Volume x" and the page numbers (this was intentional
+%     in newapa.bst). Fixed.
+%   - Some journals may not have volumes/numbers, only month/year (eg.
+%     IEEE Computer). Fixed bug in article style that assumed volume/number
+%     was always present.
+%
+% Original documentation for newapa.sty:
+% =====================================
+%
+% This version was made by modifying the master file made by
+% Oren Patashnik (PATASHNIK at SCORE.STANFORD.EDU), and the 'named' BibTeX
+% style of Peter F. Patel-Schneider.
+%
+% Copyright (C) 1985, all rights reserved.
+% Copying of this file is authorized only if either
+% (1) you make absolutely no changes to your copy, including name, or
+% (2) if you do make changes, you name it something other than 'newapa.bst'.
+% There are undoubtably bugs in this style.  If you make bug fixes,
+% improvements, etc.  please let me know.  My e-mail address is:
+%    spencer at cgrg.ohio.state.edu or 71160.3141 at compuserve.com
+%
+% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
+% with lots of tweaking to make it look like APA style, along with tips
+% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
+%
+%
+% Start of ACM-Reference-Format-Journals.bst
+%
+% Note: Many of the new bibentry 'fields' will only work with the 
+% 'ACM-Reference-Format-Journals.bst' file. Legacy .bib files (which will, in all probability,
+% NOT contain these new fields) will _still_ work with the ACM-Reference-Format-Journals.bst.
+% 
+%
+ENTRY
+  { address
+    advisor
+    author
+    booktitle
+    chapter
+    city        % jtb: added
+    date        % jtb: added
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    volume
+    year
+        % New keys recognized 
+        issue         % UTAH: used in, e.g., ACM SIGSAM Bulletin and ACM Communications in Computer Algebra
+        articleno
+        day           % UTAH: needed for newspapers, weeklies, bi-weeklies
+        doi           % UTAH
+        url           % UTAH
+        bookpages     % UTAH
+        numpages
+        lastaccessed  % UTAH: used only for @Misc{...}
+        coden         % UTAH
+        isbn          % UTAH
+        isbn-13       % UTAH
+        issn          % UTAH
+        lccn          % UTAH
+  }
+  {}
+  { label.year extra.label sort.year sort.label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+INTEGERS { show-isbn-10-and-13 }  % initialized below in begin.bib
+
+INTEGERS { nameptr namesleft numnames }
+
+INTEGERS { multiresult }
+
+INTEGERS { len }
+
+INTEGERS { last.extra.num }
+
+STRINGS { s t t.org u }
+
+STRINGS { last.label next.extra }
+
+STRINGS { p1 p2 p3 page.count }
+
+FUNCTION { dump.stack.1 }
+{
+    duplicate$ "STACK[top] = [" swap$ * "]" * warning$
+}
+
+FUNCTION { dump.stack.2 }
+{
+    duplicate$ "STACK[top  ] = [" swap$ * "]" * warning$
+    swap$
+    duplicate$ "STACK[top-1] = [" swap$ * "]" * warning$
+    swap$
+}
+
+FUNCTION { empty.or.unknown }
+{
+  %% Examine the top stack entry, and push 1 if it is empty, or
+  %% consists only of whitespace, or is a string beginning with two
+  %% queries (??), and otherwise, push 0.
+  %%
+  %% This function provides a replacement for empty$, with the
+  %% convenient feature that unknown values marked by two leading
+  %% queries are treated the same as missing values, and thus, do not
+  %% appear in the output .bbl file, and yet, their presence in .bib
+  %% file(s) serves to mark values which are temporarily missing, but
+  %% are expected to be filled in eventually once more data is
+  %% obtained.  The TeX User Group and BibNet bibliography archives
+  %% make extensive use of this practice.
+  %%
+  %% An empty string cannot serve the same purpose, because just as in
+  %% statistics data processing, an unknown value is not the same as an
+  %% empty value.
+  %%
+  %% At entry: stack = ... top:[string]
+  %% At exit:  stack = ... top:[0 or 1]
+
+  duplicate$ empty$
+    { pop$ #1 }
+    { #1 #2 substring$ "??" = }
+  if$
+}
+
+FUNCTION { writeln }
+{
+  %% In BibTeX style files, the sequences
+  %%
+  %%     ... "one" "two" output
+  %%     ... "one" "two" output.xxx
+  %%
+  %% ship "one" to the output file, possibly following by punctuation,
+  %% leaving the stack with
+  %%
+  %%     ... "two"
+  %%
+  %% There is thus a one-string lag in output processing that must be
+  %% carefully handled to avoid duplicating a string in the output
+  %% file.  Unless otherwise noted, all output.xxx functions leave
+  %% just one new string on the stack, and that model should be born
+  %% in mind when reading or writing function code.
+  %%
+  %% BibTeX's asynchronous buffering of output from strings from the
+  %% stack is confusing because newline$ bypasses the buffer.  It
+  %% would have been so much easier for newline to be a character
+  %% rather than a state of the output-in-progress.
+  %%
+  %% The documentation in btxhak.dvi is WRONG:  it says
+  %%
+  %%    newline$ Writes onto the bbl file what's accumulated in the
+  %%             output buffer. It writes a blank line if and only
+  %%             if the output buffer is empty. Since write$ does
+  %%             reasonable line breaking, you should use this
+  %%             function only when you want a blank line or an
+  %%             explicit line break.
+  %%
+  %%    write$   Pops the top (string) literal and writes it on the
+  %%             output buffer (which will result in stuff being
+  %%             written onto the bbl file when the buffer fills
+  %%             up).
+  %%
+  %% Examination of the BibTeX source code shows that write$ does
+  %% indeed behave as claimed, but newline$ sends a newline character
+  %% directly to the output file, leaving the stack unchanged.  The
+  %% first line "Writes onto ... buffer." is therefore wrong.
+  %%
+  %% The original BibTeX style files almost always use "write$ newline$"
+  %% in that order, so it makes sense to hide that pair in a private
+  %% function like this one, named after a statement in Pascal,
+  %% the programming language embedded in the BibTeX Web program.
+
+  write$                % output top-of-stack string
+  newline$              % immediate write of newline (not via stack)
+}
+
+FUNCTION { init.state.consts }
+{
+  #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+}
+
+FUNCTION { output.nonnull }
+{ % Stack in: ... R S T  Stack out: ... R T   File out: S<comma><space>
+  's :=
+  output.state mid.sentence =
+    {
+      ", " * write$
+    }
+    {
+      output.state after.block =
+        {
+          add.period$ writeln
+          "\newblock " write$
+        }
+        {
+          output.state before.all =
+            {
+              write$
+            }
+            {
+              add.period$ " " * write$
+            }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION { output.nonnull.dot.space }
+{ % Stack in: ... R S T  Stack out: ... R T   File out: S<dot><space>
+  's :=
+  output.state mid.sentence =           % { "<DEBUG output.nonnull.dot.space>. " * write$ }
+    {
+      ". " * write$
+    }
+    {
+      output.state after.block =
+        {
+          add.period$ writeln "\newblock " write$
+        }
+        {
+          output.state before.all =
+            {
+              write$
+            }
+            {
+              add.period$ " " * write$
+            }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION { output.nonnull.remove }
+{ % Stack in: ... R S T  Stack out: ... R T   File out: S<space>
+  's :=
+  output.state mid.sentence =
+    {
+      " " * write$
+    }
+    {
+      output.state after.block =
+        {
+          add.period$ writeln "\newblock " write$
+        }
+        {
+          output.state before.all =
+            {
+              write$
+            }
+            {
+              add.period$ " " * write$
+            }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION { output.nonnull.removenospace }
+{ % Stack in: ... R S T  Stack out: ... R T   File out: S
+  's :=
+  output.state mid.sentence =
+    {
+      "" * write$
+    }
+    {
+      output.state after.block =
+        {
+          add.period$ writeln "\newblock " write$
+        }
+        {
+          output.state before.all =
+            {
+              write$
+            }
+            {
+              add.period$ " " * write$
+            }
+          if$
+        }
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION { output }
+{ % discard top token if empty, else like output.nonnull
+  duplicate$ empty.or.unknown
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION { output.dot.space }
+{ % discard top token if empty, else like output.nonnull.dot.space
+  duplicate$ empty.or.unknown
+    'pop$
+    'output.nonnull.dot.space
+  if$
+}
+
+FUNCTION { output.removenospace }
+{ % discard top token if empty, else like output.nonnull.removenospace
+  duplicate$ empty.or.unknown
+    'pop$
+    'output.nonnull.removenospace
+  if$
+}
+
+FUNCTION { output.check }
+{ % like output, but warn if key name on top-of-stack is not set
+  't :=
+  duplicate$ empty.or.unknown
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull
+  if$
+}
+
+FUNCTION { output.check.dot.space }
+{ % like output.dot.space, but warn if key name on top-of-stack is not set
+  't :=
+  duplicate$ empty.or.unknown
+    { pop$ "empty " t * " in " * cite$ * warning$ }
+    'output.nonnull.dot.space
+  if$
+}
+
+FUNCTION { fin.block }
+{ % functionally, but not logically, identical to fin.entry
+   add.period$
+   writeln
+}
+
+FUNCTION { fin.entry }
+{
+   add.period$
+   writeln
+}
+
+FUNCTION { new.sentence }
+{ % update sentence state, with neither output nor stack change
+  output.state after.block =
+    'skip$
+    {
+      output.state before.all =
+        'skip$
+        { after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION { fin.sentence }
+{
+   add.period$
+   write$
+   new.sentence
+   ""
+}
+
+FUNCTION { new.block }
+{
+  output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION { output.coden }       % UTAH
+{ % output non-empty CODEN as one-line sentence (stack untouched)
+  coden empty.or.unknown
+    { }
+    { "\showCODEN{" coden * "}" * writeln }
+  if$
+}
+
+FUNCTION { format.articleno }
+{
+  articleno empty.or.unknown
+     { "" }
+     {
+        numpages empty.or.unknown
+          { "articleno field, but no numpages field, in " cite$ * warning$ }
+          { }
+        if$
+        "Article \bibinfo{articleno}{" articleno * "}" *
+     }
+  if$
+}
+
+FUNCTION { format.year }
+{ % push year string or "????" onto output stack
+  %% Because year is a mandatory field, we always force SOMETHING
+  %% to be output
+  "\bibinfo{year}{" 
+  year empty.or.unknown
+    { "????" }
+    { year }
+  if$
+  *  "}" *
+}
+
+FUNCTION { format.day.month }
+{ % push "day month " or "month " or "" onto output stack
+  day empty.or.unknown
+    {
+      month empty.or.unknown
+        { "" }
+        { "\bibinfo{date}{" month * "} " *}
+      if$
+    }
+    {
+      month empty.or.unknown
+        { "" }
+        { "\bibinfo{date}{" day * " " * month * "} " *}
+      if$
+    }
+  if$
+}
+
+FUNCTION { format.day.month.year }     % UTAH
+{ % if month is empty, push "" else push "(MON.)" or "(DD MON.)"
+  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
+  % acm-*.bst addition: prefix parenthesized date string with
+  % ", Article nnn "
+  articleno empty.or.unknown
+    { "" }
+    { ", " format.articleno * }
+  if$
+  " (" * format.day.month * format.year * ")" *
+}
+
+FUNCTION { output.day.month.year }     % UTAH
+{ % if month is empty value, do nothing; else output stack top and
+  % leave with new top string "(MON.)" or "(DD MON.)"
+  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
+  format.day.month.year
+  output.nonnull.remove
+}
+
+FUNCTION { strip.doi } % UTAH
+{ % Strip any Web address prefix to recover the bare DOI, leaving the
+  % result on the output stack, as recommended by CrossRef DOI
+  % documentation.
+  % For example, reduce "http://doi.acm.org/10.1145/1534530.1534545" to
+  % "10.1145/1534530.1534545".  That is later typeset and displayed as
+  % doi:10.1145/1534530.1534545 as the LAST item in the reference list
+  % entry.  Publisher Web sites wrap this with a suitable link to a real
+  % URL to resolve the DOI, and the master http://dx.doi.org/ address is
+  % preferred, since publisher-specific URLs can disappear in response
+  % to economic events.  All journals are encouraged by the DOI
+  % authorities to use that typeset format and link procedures for
+  % uniformity across all publications that include DOIs in reference
+  % lists.
+  % The numeric prefix is guaranteed to start with "10.", so we use
+  % that as a test.
+  doi #1 #3 substring$ "10." =
+    { doi }
+    {
+      doi #1 #7 substring$ "http://" =
+        {
+            doi #8 doi text.length$ #7 - substring$ 't := % get modifiable copy of rest of DOI
+
+            "INTERNAL STYLE-FILE ERROR" 's :=
+
+            % search for next "/" and assign its suffix to s
+
+            { t text.length$ }
+            {
+              t #1 #1 substring$ "/" =
+                {
+                  % save rest of string as true DOI (should be 10.xxxx/yyyy)
+                  t #2 t text.length$ #1 - substring$ 's :=
+                  "" 't :=    % empty string t terminates the loop
+                }
+                {
+                  % discard first character and continue loop: t <= substring(t,2,last)
+                  t #2 t text.length$ #1 - substring$ 't :=
+                }
+              if$
+            }
+            while$
+
+            % check for valid DOI (should be 10.xxxx/yyyy)
+            s #1 #3 substring$ "10." =
+              { }
+              { "unrecognized DOI substring " s * " in DOI value [" * doi * "]" * warning$ }
+            if$
+
+            s   % push the stripped DOI on the output stack
+
+        }
+        {
+          "unrecognized DOI value [" doi * "]" * warning$
+          doi   % push the unrecognized original DOI on the output stack
+        }
+      if$
+    }
+  if$
+}
+
+%
+% Change by BV: added standard prefix to URL
+%
+FUNCTION { output.doi } % UTAH
+{ % output non-empty DOI as one-line sentence (stack untouched)
+  doi empty.or.unknown
+    { }
+    {
+      %% NB: We want URLs at beginning of line to reduce likelihood of
+      %% BibTeX's nasty line wrapping after column 79, which then requires
+      %% manual (or automated) editing of the .bbl file to repair.
+      %% The \url{} macro strips percent-newlines, and is thus safe in
+      %% the presence of the line wrapping, but \path|...| and
+      %% \verb|...| do not.
+      "\showDOI{%" writeln
+      "\url{http://dx.doi.org/" strip.doi * "}}" * writeln
+    }
+  if$
+}
+
+FUNCTION { output.isbn }                % UTAH
+{ % output non-empty ISBN-10 and/or ISBN-13 as one-line sentences (stack untouched)
+  show-isbn-10-and-13
+    {
+      %% show both 10- and 13-digit ISBNs
+      isbn empty.or.unknown
+        { }
+        {
+          "\showISBNx{" isbn * "}" * writeln
+        }
+      if$
+      isbn-13 empty.or.unknown
+        { }
+        {
+          "\showISBNxiii{" isbn-13 * "}" * writeln
+        }
+      if$
+    }
+    {
+      %% show 10-digit ISBNs only if 13-digit ISBNs not available
+      isbn-13 empty.or.unknown
+        {
+          isbn empty.or.unknown
+            { }
+            {
+              "\showISBNx{" isbn * "}" * writeln
+            }
+          if$
+        }
+        {
+          "\showISBNxiii{" isbn-13 * "}" * writeln
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION { output.issn } % UTAH
+{ % output non-empty ISSN as one-line sentence (stack untouched)
+  issn empty.or.unknown
+    { }
+    { "\showISSN{" issn * "}" * writeln }
+  if$
+}
+
+FUNCTION { output.issue }
+{ % output non-empty issue number as a one-line sentence (stack untouched)
+  issue empty.or.unknown
+    { }
+    { "Issue " issue * "." * writeln }
+  if$
+}
+
+FUNCTION { output.lccn } % UTAH
+{ % return with stack untouched
+  lccn empty.or.unknown
+    { }
+    { "\showLCCN{" lccn * "}" * writeln }
+  if$
+}
+
+FUNCTION { output.note } % UTAH
+{ % return with stack empty
+  note empty.or.unknown
+    { }
+    { "\shownote{" note add.period$ * "}" * writeln }
+  if$
+}
+
+FUNCTION { output.note.check } % UTAH
+{ % return with stack empty
+  note empty.or.unknown
+    { "empty note in " cite$ * warning$ }
+    { "\shownote{" note add.period$ * "}" * writeln }
+  if$
+}
+
+%
+% Changes by BV 2011/04/15.  Do not output
+% url if doi is defined
+%
+FUNCTION { output.url } % UTAH
+{ % return with stack untouched
+  % output URL and associated lastaccessed fields
+  doi empty.or.unknown
+  {
+    url empty.or.unknown
+      { }
+      {
+          %% NB: We want URLs at beginning of line to reduce likelihood of
+          %% BibTeX's nasty line wrapping after column 79, which would require
+          %% manual (or automated) editing of the .bbl file to repair.  However,
+          %% the \url{} macro handles the unwrapping job automatically.
+          "\showURL{%" writeln
+          lastaccessed empty.or.unknown
+            { "" }
+            { "Retrieved " lastaccessed * " from " * }
+          if$
+
+          %% The URL field may contain a semicolon-separated list of Web
+          %% addresses, and we locate and wrap each of them in \url{...}.
+          %% The simplistic approach of putting the entire list into the
+          %% macro argument is that the semicolons are typeset in a
+          %% typewriter font, and no space follows them.
+          %%
+          %% We therefore replace the original code
+          %%    "\url{" * url * "}}" * writeln
+          %% with this character-at-a-time loop:
+
+          "\url{" *
+
+          url 't :=                       % get modifiable copy of URL list
+
+          { t text.length$ }
+          {
+            t #1 #1 substring$ ";" =
+              {                         % then split argument at separator
+                "};" * writeln
+                "\url{"
+              }
+              {                         % else concatenate nonblank character to argument
+                t #1 #1 substring$ " " =
+                  { }
+                  { t #1 #1 substring$ * }
+                if$
+              }
+            if$
+
+            t #2 t text.length$ #1 - substring$ 't :=
+          }
+          while$
+
+          "}}" * writeln
+      }
+    if$
+  }
+  { }
+  if$
+}
+
+FUNCTION { output.year.check }
+{ % warn if year empty, else output top string and leave " YEAR<label>" on stack in mid-sentence
+  year empty.or.unknown
+     { "empty year in " cite$ * warning$ }
+     { write$
+        " " year * extra.label *
+       mid.sentence 'output.state :=
+     }
+  if$
+}
+
+FUNCTION { not }
+{
+    { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION { and }
+{
+    'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION { or }
+{
+   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION { le }
+{
+  %% test whether first number is less than or equal to second number
+  %% stack in:  n1 n2
+  %% stack out: if n1 <= n2 then 1 else 0
+
+  %% "DEBUG: le " cite$ * warning$
+  > { #0 } { #1 } if$
+}
+
+FUNCTION { ge }
+{
+  %% test whether first number is greater than or equal to second number
+  %% stack in:  n1 n2
+  %% stack out: if n1 >= n2 then 1 else 0
+
+  %% "DEBUG: ge " cite$ * warning$
+  < { #0 } { #1 } if$
+}
+
+FUNCTION { is.leading.digit }
+{
+  %% test whether first character of string is a digit
+  %% stack in:  string
+  %% stack out: if first-char-is-digit then 1 else 0
+
+  #1 #1 substring$                      % replace string by string[1:1]
+  duplicate$                            % string[1:1] string[1:1]
+  chr.to.int$
+  "0" chr.to.int$ swap$ le              % "0" <= string[1:1] --> 0-or-1
+  swap$                                 % 0-or-1 string[1:1]
+  chr.to.int$
+  "9" chr.to.int$ le                    % string[1:1} <= "9" --> 0-or-1
+  and
+}
+
+FUNCTION { skip.digits }
+{
+  %% skip over leading digits in string
+  %% stack in:  string
+  %% stack out: rest-of-string leading-digits
+
+  %% "DEBUG: enter skip.digits " cite$ * warning$
+
+  %% dump.stack.1
+
+  duplicate$
+  't :=
+  't.org :=
+  "" 'u :=
+
+  { t text.length$ }
+  {
+    %% "=================DEBUG: skip.digits   t = [" t * "]" * warning$
+    t is.leading.digit
+      { t #2 t text.length$ #1 - substring$ }
+      {
+        t 'u :=
+        ""
+      }
+    if$
+    't :=
+  }
+  while$
+
+  u                                                             % rest of string
+  t.org #1 t.org text.length$ u text.length$ - substring$       % leading digits
+
+  %% "DEBUG: t.org = [" t.org * "]" * warning$
+  %% "DEBUG: u     = [" u * "]" * warning$
+
+  %% dump.stack.2
+
+  %% "DEBUG: leave skip.digits " cite$ * warning$
+}
+
+FUNCTION { skip.nondigits }
+{
+  %% skip over leading nondigits in string
+  %% stack in:  string
+  %% stack out: rest-of-string
+
+  %% "DEBUG: enter skip.nondigits " cite$ * warning$
+
+  't :=
+  "" 'u :=
+
+  { t text.length$ }
+  {
+    %% "=================DEBUG: skip.nondigits   t = [" t * "]" * warning$
+    t is.leading.digit
+      {
+        t 'u :=
+        ""
+      }
+      { t #2 t text.length$ #1 - substring$ }
+    if$
+    't :=
+  }
+  while$
+
+  u                     % rest of string
+
+  %% dump.stack.1
+  %% "DEBUG: leave skip.nondigits " cite$ * warning$
+}
+
+FUNCTION { parse.next.number }
+{
+  %% stack in:  string
+  %% stack out: rest-of-string next-numeric-part-of-string
+  %% Example:
+  %% stack in:  "123:1--123:59"
+  %% stack out: ":1--123:59" "123"
+
+  's :=
+  s skip.nondigits 's :=
+  s skip.digits
+}
+
+FUNCTION { reduce.pages.to.page.count }
+{
+  %% Stack in:  arbitrary-and-unused
+  %% Stack out: unchanged
+  %%
+  %% For the new-style pagination with article number and numpages or
+  %% pages, we expect to have BibTeX entries containing something like
+  %%     articleno = "17",
+  %%     pages     = "1--23",
+  %% with output "Article 17, 23 pages",
+  %% or
+  %%     articleno = "17",
+  %%     numpages  = "23",
+  %% with output "Article 17, 23 pages",
+  %% or
+  %%     articleno = "17",
+  %%     pages     = "17:1--17:23",
+  %% with output "Article 17, 23 pages",
+  %%
+  %% If articleno is missing or empty, then we should output "1--23",
+  %% "23" (with a warning of a missing articleno), or "17:1--17:23",
+  %% respectively.
+
+  %% "DEBUG: enter reduce.pages.to.page.count " cite$ * warning$
+
+  %% "DEBUG: pages = [" pages * "]" * warning$
+
+  pages
+  parse.next.number 'p1 :=
+  parse.next.number 'p2 :=
+  parse.next.number 'p3 :=
+  parse.next.number 'page.count :=
+
+  duplicate$
+  empty.or.unknown
+    {  }
+    {
+      duplicate$ "unexpected trailing garbage [" swap$ *
+      "] after n:p1--n:p2 in pages = [" *
+      pages *
+      "] in " *
+      cite$ *
+      warning$
+    }
+  if$
+
+  pop$
+
+  %% "DEBUG: reduce.pages.to.page.count: "
+  %% " p1 = " p1 * *
+  %% " p2 = " p2 * *
+  %% " p3 = " p3 * *
+  %% " p4 = " page.count * *
+  %% " in " cite$ * * warning$
+
+  p1 p3 =   p2 "1" =   and   numpages empty.or.unknown   and
+    { "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$ }
+    {
+      numpages empty.or.unknown
+        { pages }
+        { numpages }
+      if$
+      'page.count :=
+    }
+  if$
+
+  p1 "1" =   p3 empty.or.unknown   and   numpages empty.or.unknown   and
+    {
+      p2 'page.count :=
+      "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$
+    }
+    {
+      numpages empty.or.unknown
+        { pages }
+        { numpages }
+      if$
+      'page.count :=
+    }
+  if$
+
+  %% "DEBUG: leave reduce.pages.to.page.count " cite$ * warning$
+}
+
+FUNCTION { new.block.checkb }
+{ % issue a new.block only if at least one of top two stack strings is not empty
+  empty.or.unknown
+  swap$ empty.or.unknown
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION { field.or.null }
+{ % convert empty value to null string, else return value
+  duplicate$ empty.or.unknown
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION { emphasize }
+{ % emphasize a non-empty top string on the stack (WITHOUT italic correction)
+  duplicate$ empty.or.unknown
+    { pop$ "" }
+    { "{\em " swap$ * "}" * }
+  if$
+}
+
+FUNCTION { emphasize.with.italic.correction }
+{ % convert empty string to null string, or emphasize with a trailing italic correction
+  duplicate$ empty.or.unknown
+    { pop$ "" }
+    { "{\em " swap$ * "\/}" * }
+  if$
+}
+
+FUNCTION { comma }
+{ % convert empty string to null string, or brace string and add trailing comma
+  duplicate$ empty.or.unknown
+    { pop$ "" }
+    { "{" swap$ * "}," * }
+  if$
+}
+
+FUNCTION { format.names }
+{
+  % Format bibliographical entries with the first author last name first,
+  % and subsequent authors with initials followed by last name.
+  % All names are formatted in this routine.
+
+  's :=
+  #1 'nameptr :=               % nameptr = 1;
+  s num.names$ 'numnames :=    % numnames = num.name$(s);
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 =
+        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
+        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
+        {"\bibinfo{person}{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
+        {"\bibinfo{person}{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
+      if$
+      nameptr #1 >
+        {
+          namesleft #1 >
+            { ", " * t * }
+            {
+              numnames #2 >
+                { "," * }
+                'skip$
+              if$
+              t "{\sc others}" =
+                { " {et~al\mbox{.}}" * } % jrh: avoid spacing problems
+                { " {and} " * t * } % from Chicago Manual of Style
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=          % nameptr += 1;
+      namesleft #1 - 'namesleft :=      % namesleft =- 1;
+    }
+  while$
+}
+
+FUNCTION { my.full.label }
+{
+  's :=
+  #1 'nameptr :=               % nameptr = 1;
+  s num.names$ 'numnames :=    % numnames = num.name$(s);
+  numnames 'namesleft :=
+    { namesleft #0 > }
+
+    { s nameptr "{vv~}{ll}" format.name$ 't :=  % get the next name
+      nameptr #1 >
+        {
+          namesleft #1 >
+            { ", " * t * }
+            {
+              numnames #2 >
+                { "," * }
+                'skip$
+              if$
+              t "others" =
+                { " et~al\mbox{.}" * } % jrh: avoid spacing problems
+                { " and " * t * } % from Chicago Manual of Style
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=          % nameptr += 1;
+      namesleft #1 - 'namesleft :=      % namesleft =- 1;
+    }
+  while$
+
+}
+
+FUNCTION { format.names.fml }
+{
+  % Format names in "familiar" format, with first initial followed by
+  % last name. Like format.names, ALL names are formatted.
+  % jtb: The names are NOT put in small caps
+
+  's :=
+  #1 'nameptr :=               % nameptr = 1;
+  s num.names$ 'numnames :=    % numnames = num.name$(s);
+  numnames 'namesleft :=
+    { namesleft #0 > }
+
+    {
+      "\bibinfo{person}{" s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
+
+      nameptr #1 >
+        {
+          namesleft #1 >
+            { ", " * t * }
+            {
+              numnames #2 >
+                { "," * }
+                'skip$
+              if$
+              t "{others}" =
+                { " {et~al\mbox{.}}" * }
+                { " {and} " * t * }
+              if$
+            }
+          if$
+        }
+        't
+      if$
+      nameptr #1 + 'nameptr :=          % nameptr += 1;
+      namesleft #1 - 'namesleft :=      % namesleft =- 1;
+    }
+  while$
+}
+
+FUNCTION { format.authors }
+{
+  author empty.or.unknown
+    { "" }
+    { 
+      "\bibfield{author}{" 
+      author format.names add.period$ * "}" *} % jtb: add period if none before
+  if$
+}
+
+FUNCTION { format.key }
+{
+  empty.or.unknown
+    { key field.or.null }
+    { "" }
+  if$
+}
+
+FUNCTION { format.no.key }
+{
+  empty.or.unknown
+    { "" }
+    { "" }
+  if$
+}
+
+FUNCTION { format.editors.fml }
+{
+  % Format editor names for use in the "in" types: inbook, incollection,
+  % inproceedings: first initial, then last names. When editors are the
+  % LABEL for an entry, then format.editor is used which lists editors
+  % by last name first.
+
+  editor empty.or.unknown
+    { "" }
+    {
+      editor format.names.fml editor num.names$ #1 >
+        { " (Eds.)" * }
+        { " (Ed.)" * }
+      if$
+    }
+  if$
+}
+
+FUNCTION { format.editors }
+{ % format editor names for use in labels, last names first.
+  editor empty.or.unknown
+    { "" }
+    {
+      "\bibfield{editor}{" 
+      editor format.names
+      *  "}" *
+      editor num.names$ #1 >
+        { " (Eds.)." * }
+        { " (Ed.)." * }
+      if$
+    }
+  if$
+}
+
+FUNCTION { format.articletitle }
+{
+  title empty.or.unknown
+    { "" }
+    % Use this to preserve lettercase in titles:
+    { "\showarticletitle{" title * "}" * }
+    % Use this for downcase title style:
+    % { \showarticletitle{" title "t" change.case$ * "}" * }
+  if$
+}
+
+FUNCTION { format.title }
+{
+  title empty.or.unknown
+    { "" }
+    % Use this to preserve lettercase in titles:
+    { "\bibinfo{title}{" title * "}" * }
+    % Use this for downcase title style:
+    % { title "t" change.case$ }
+  if$
+}
+
+FUNCTION { n.dashify }
+{
+  't :=
+  ""
+    { t empty.or.unknown not }
+    {
+      t #1 #1 substring$ "-" =
+        {
+          t #1 #2 substring$ "--" = not
+            { "--" *
+              t #2 global.max$ substring$ 't :=
+            }
+            {
+              { t #1 #1 substring$ "-" = }
+              {
+                "-" *
+                t #2 global.max$ substring$ 't :=
+              }
+              while$
+            }
+          if$
+        }
+        {
+          t #1 #1 substring$ *
+          t #2 global.max$ substring$ 't :=
+        }
+      if$
+    }
+  while$
+}
+
+FUNCTION { format.btitle }
+{
+  "\bibinfo{booktitle}{"
+  edition empty.or.unknown
+  { title emphasize }
+  { title empty.or.unknown
+    { title emphasize } % jtb: what is this supposed to do ?!?
+    { "{\em " title * "\/} (" * edition "l" change.case$ * " ed.)" * } % jtb: no parens for ed.
+    if$
+  }
+  if$
+  * "}" *
+}
+
+FUNCTION { format.emphasize.booktitle }
+{ % push "" or "{\em booktitle}" or "{\em booktitle}, (second ed.)" on stack
+  "\bibinfo{booktitle}{"
+  edition empty.or.unknown
+    { booktitle emphasize }
+    { booktitle empty.or.unknown
+      { "" }
+      { "{\em " booktitle * "} (" * edition "l" change.case$ * " ed.)" * }
+      if$
+    }
+  if$
+  * "}" *
+}
+
+FUNCTION { format.city }
+{
+  % jtb: if the preceding string (the title of the conference) is non-empty,
+  % jtb: append the location, otherwise leave empty (so as to trigger the
+  % jtb: error message in output.check
+
+  duplicate$ empty.or.unknown
+    { }
+    {
+      city empty.or.unknown
+        {
+          date empty.or.unknown
+            { }
+            { " (" * date * ")" * }
+          if$
+        }
+        {
+          date empty.or.unknown
+            { " (" * city * ")" * }
+            { " (" * city * ", " * date * ")" * }
+          if$
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION { tie.or.space.connect }
+{
+  duplicate$ text.length$ #3 <
+    { "~" }
+    { " " }
+  if$
+  swap$ * *
+}
+
+FUNCTION { either.or.check }
+{
+  empty.or.unknown
+    'pop$
+    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
+  if$
+}
+
+FUNCTION { format.bvolume }
+{
+  % jtb: If there is a series, this is added and the volume trails after it.
+  % jtb: Otherwise, "Vol" is Capitalized.
+
+  volume empty.or.unknown
+    { "" }
+    {
+      "\bibinfo{volume}{"
+      series empty.or.unknown
+        { "Vol." volume tie.or.space.connect}
+        { series ", " * "Vol." volume tie.or.space.connect *}
+      if$
+      "volume and number" number either.or.check
+      * "}" *
+    }
+  if$
+}
+
+FUNCTION { format.bvolume.noseries }
+{
+  volume empty.or.unknown
+    { "" }
+    {
+      "\bibinfo{volume}{" 
+      series empty.or.unknown
+        { "Vol." volume tie.or.space.connect}
+        { "Vol." volume tie.or.space.connect}
+%        { series ", " * "Vol." volume tie.or.space.connect *}
+      if$
+      "volume and number" number either.or.check
+      * "}" *
+    }
+  if$
+}
+
+FUNCTION { format.series }
+{
+  series empty.or.unknown
+    {""}
+    {" \bibinfo{series}{{\em (" * series ")}}" *}
+  if$
+}
+
+FUNCTION { format.number.series }
+{
+  volume empty.or.unknown
+    {
+      number empty.or.unknown
+        {
+          volume empty.or.unknown
+          { "" }
+          {
+            series empty.or.unknown
+              { "" }
+              { " \bibinfo{series}{(" series * ")}" * }
+            if$
+          }
+          if$
+        }                                       %    { series field.or.null }
+        {
+          output.state mid.sentence =
+            { "Number" }                        % gnp - changed to mixed case always
+            { "Number" }
+          if$
+          number tie.or.space.connect series empty.or.unknown
+            { "there's a number but no series in " cite$ * warning$ }
+            { " in \bibinfo{series}{" * series * "}" * }
+          if$
+        }
+      if$
+    }
+    {
+      ""
+    }
+  if$
+}
+
+FUNCTION { multi.page.check }
+{
+  't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty.or.unknown not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+    { #1 'multiresult := }
+    { t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION { format.pages }
+{
+  pages empty.or.unknown
+    { "" }
+    { "\bibinfo{pages}{"
+      pages multi.page.check
+        { pages n.dashify } % gnp - removed () % jtb: removed pp.
+        { pages }
+      if$
+      * "}" *
+    }
+  if$
+}
+
+FUNCTION { format.pages.check.without.articleno }
+{ %% format pages field only if articleno is absent
+  %% Stack out: pages-specification
+  numpages missing$ pages missing$ and
+    { "page numbers missing in both pages and numpages fields in " cite$ * warning$ }
+    { }
+  if$
+
+  articleno empty.or.unknown
+    {
+      pages missing$
+        { numpages }
+        { format.pages }
+      if$
+    }
+    { "" }
+  if$
+}
+
+FUNCTION { format.pages.check }
+{
+  pages empty.or.unknown
+    { "page numbers missing in " cite$ * warning$ "" }
+    { pages n.dashify }
+  if$
+}
+
+FUNCTION { format.bookpages }
+{
+  bookpages empty.or.unknown
+    { "" }
+    { bookpages "book pages" tie.or.space.connect }
+  if$
+}
+
+FUNCTION { format.named.pages }
+{
+  pages empty.or.unknown
+    { "" }
+    { format.pages "pages" tie.or.space.connect }
+  if$
+}
+
+%
+% Changed by Boris Veytsman, 2011-03-13
+% Now the word "pages" is printed even if
+% there field pages is not empty.
+%
+
+FUNCTION { format.page.count }
+{
+  page.count empty.or.unknown
+    { "" }
+    {
+      articleno empty.or.unknown
+        { "numpages field, but no articleno field, in " cite$ * warning$ }
+        { }
+      if$
+      page.count "pages" tie.or.space.connect
+    }
+  if$
+}
+
+FUNCTION { format.articleno.numpages }
+{
+  %% There are seven possible outputs, depending on which fields are set.
+  %%
+  %% These four are handled here:
+  %%
+  %%     articleno, numpages, pages     -> "Article articleno-value, numpages-value pages"
+  %%     articleno, numpages            -> "Article articleno-value, numpages-value pages"
+  %%     articleno, pages               -> "Article articleno-value, reduced-pages-value pages"
+  %%     articleno                      -> "Article articleno-value" and warn about missing numpages
+  %%
+  %% The remaining three have already been handled by
+  %% format.pages.check.without.articleno:
+  %%
+  %%     numpages, pages                -> "pages-value"
+  %%     numpages                       -> "numpages-value"
+  %%     pages                          -> "pages-value"
+
+  articleno empty.or.unknown
+    {
+      numpages empty.or.unknown
+        { }
+        { "require articleno with numpages field in " cite$ * warning$ }
+      if$
+      ""
+    }
+    {
+      numpages empty.or.unknown
+        {
+          pages empty.or.unknown
+            {
+              "require pages or numpages fields with articleno field in " cite$ * warning$
+              "" 'page.count :=
+            }
+            { reduce.pages.to.page.count }
+          if$
+        }
+        { numpages 'page.count := }
+      if$
+
+      %% The Article number is now handled in format.day.month.year because
+      %% ACM prefers the style "Digital Libraries 12, 3, Article 5 (July 2008)"
+      %% over "Digital Libraries 12, 3 (July 2008), Article 5"
+      %% format.articleno output
+      format.page.count
+    }
+  if$
+}
+
+FUNCTION { format.journal.volume.number.day.month.year }
+{
+  % By Young (and Spencer)
+  % GNP - fixed bugs with missing volume, number, and/or pages
+  %
+  % Format journal, volume, number, pages for article types.
+  %
+  journal empty.or.unknown
+    { "no journal in " cite$ * warning$
+      "" }
+%    { journal emphasize.with.italic.correction }
+     {
+       "\bibinfo{journal}{"
+           journal "Journal of the ACM" =
+       { "{\it J. ACM}" }
+       {
+           journal "American Mathematical Society Translations" =
+       { "{\it Amer. Math. Soc. Transl.}" }
+       {
+           journal "Bulletin of the American Mathematical Society" =
+       { "{\it Bull. Amer. Math. Soc.}" }
+       {
+           journal "Proceedings of the American Mathematical Society" =
+       { "{\it Proc. Amer. Math. Soc.}" }
+       {
+           journal "Transactions of the American Mathematical Society" =
+       { "{\it Trans. Amer. Math. Soc.}" }
+       {
+           journal "Communications of the {ACM}" =
+       { "{\it Commun. {ACM}}" }
+       {
+           journal "{ACM} Computing Surveys" =
+       { "{\it Comput. Surveys}" }
+       {
+           journal "{ACM} Transactions on Mathematical Software" =
+       { "{\it {ACM} Trans. Math. Software}" }
+       {
+           journal "{ACM} {SIGNUM} Newsletter" =
+       { "{\it {ACM} {SIGNUM} Newslett.}" }
+       {
+           journal "American Journal of Sociology" =
+       { "{\it Amer. J. Sociology}" }
+       {
+           journal "Journal of the American Statistical Association" =
+       { "{\it J. Amer. Statist. Assoc.}" }
+       {
+           journal "Applied Mathematics and Computation" =
+       { "{\it Appl. Math. Comput.}" }
+       {
+           journal "American Mathematical Monthly" =
+       { "{\it Amer. Math. Monthly}" }
+       {
+           journal "British Journal of Mathematical and Statistical Psychology" =
+       { "{\it Brit. J. Math. Statist. Psych.}" }
+       {
+           journal "Canadian Mathematical Bulletin" =
+       { "{\it Canad. Math. Bull.}" }
+       {
+           journal "Journal of Computational and Applied Mathematics" =
+       { "{\it J. Comput. Appl. Math.}" }
+       {
+           journal "Journal of Computational Physics" =
+       { "{\it J. Comput. Phys.}" }
+       {
+           journal "Computers and Structures" =
+       { "{\it Comput. \& Structures}" }
+       {
+           journal "The Computer Journal" =
+       { "{\it Comput. J.}" }
+       {
+           journal "Journal of Computer and System Sciences" =
+       { "{\it J. Comput. System Sci.}" }
+       {
+           journal "Contemporary Mathematics" =
+       { "{\it Contemp. Math.}" }
+       {
+           journal "Crelle's Journal" =
+       { "{\it Crelle's J.}" }
+       {
+           journal "Giornale di Mathematiche" =
+       { "{\it Giorn. Mat.}" }
+       {
+           journal "{IEEE} Transactions on Computers" =
+       { "{\it {IEEE} Trans. Comput.}" }
+       {
+           journal "{IEEE} Transactions on Automatic Control" =
+       { "{\it {IEEE} Trans. Automat. Control}" }
+       {
+           journal "Proceedings of the {IEEE}" =
+       { "{\it Proc. {IEEE}}" }
+       {
+           journal "{IEEE} Transactions on Aerospace and Electronic Systems" =
+       { "{\it {IEEE} Trans. Aerospace Electron. Systems}" }
+       {
+           journal "{IMA} Journal of Numerical Analysis" =
+       { "{\it {IMA} J. Numer. Anal.}" }
+       {
+           journal "Information Processing Letters" =
+       { "{\it Inform. Process. Lett.}" }
+       {
+           journal "Journal of the Institute of Mathematics and its Applications" =
+       { "{\it J. Inst. Math. Appl.}" }
+       {
+           journal "International Journal of Control" =
+       { "{\it Internat. J. Control}" }
+       {
+           journal "International Journal for Numerical Methods in Engineering" =
+       { "{\it Internat. J. Numer. Methods Engrg.}" }
+       {
+           journal "International Journal of Supercomputing Applications" =
+       { "{\it Internat. J. Supercomputing Applic.}" }
+       {
+           journal "Journal of Research of the National Bureau of Standards" =
+       { "{\it J. Res. Nat. Bur. Standards}" }
+       {
+           journal "Linear Algebra and its Applications" =
+       { "{\it Linear Algebra Appl.}" }
+       {
+           journal "Journal of Mathematical Analysis and Applications" =
+       { "{\it J. Math. Anal. Appl.}" }
+       {
+           journal "Mathematische Annalen" =
+       { "{\it Math. Ann.}" }
+       {
+           journal "Journal of Mathematical Physics" =
+       { "{\it J. Math. Phys.}" }
+       {
+           journal "Mathematics of Computation" =
+       { "{\it Math. Comp.}" }
+       {
+           journal "Mathematica Scandinavica" =
+       { "{\it Math. Scand.}" }
+       {
+           journal "Mathematical Tables and Other Aids to Computation" =
+       { "{\it Math. Tables Aids Comput.}" }
+       {
+           journal "Numerische Mathematik" =
+       { "{\it Numer. Math.}" }
+       {
+           journal "Pacific Journal of Mathematics" =
+       { "{\it Pacific J. Math.}" }
+       {
+           journal "Journal of Parallel and Distributed Computing" =
+       { "{\it J. Parallel and Distrib. Comput.}" }
+       {
+           journal "Parallel Computing" =
+       { "{\it Parallel Comput.}" }
+       {
+           journal "Philosophical Magazine" =
+       { "{\it Philos. Mag.}" }
+       {
+           journal "Proceedings of the National Academy of Sciences of the USA" =
+       { "{\it Proc. Nat. Acad. Sci. U. S. A.}" }
+       {
+           journal "Quarterly Journal of Mathematics, Oxford, Series (2)" =
+       { "{\it Quart. J. Math. Oxford Ser. (2)}" }
+       {
+           journal "Quarterly of Applied Mathematics" =
+       { "{\it Quart. Appl. Math.}" }
+       {
+           journal "Review of the International Statisical Institute" =
+       { "{\it Rev. Inst. Internat. Statist.}" }
+       {
+           journal "Journal of the Society for Industrial and Applied Mathematics" =
+       { "{\it J. Soc. Indust. Appl. Math.}" }
+       {
+           journal "Journal of the Society for Industrial and Applied Mathematics, Series B, Numerical Analysis" =
+       { "{\it J. Soc. Indust. Appl. Math. Ser. B Numer. Anal.}" }
+       {
+           journal "{SIAM} Journal on Algebraic and Discrete Methods" =
+       { "{\it {SIAM} J. Algebraic Discrete Methods}" }
+       {
+           journal "{SIAM} Journal on Applied Mathematics" =
+       { "{\it {SIAM} J. Appl. Math.}" }
+       {
+           journal "{SIAM} Journal on Computing" =
+       { "{\it {SIAM} J. Comput.}" }
+       {
+           journal "{SIAM} Journal on Matrix Analysis and Applications" =
+       { "{\it {SIAM} J. Matrix Anal. Appl.}" }
+       {
+           journal "{SIAM} Journal on Numerical Analysis" =
+       { "{\it {SIAM} J. Numer. Anal.}" }
+       {
+           journal "{SIAM} Review" =
+       { "{\it {SIAM} Rev.}" }
+       {
+           journal "{SIAM} Journal on Scientific and Statistical Computing" =
+       { "{\it {SIAM} J. Sci. Statist. Comput.}" }
+       {
+           journal "Software Practice and Experience" =
+       { "{\it Software Prac. Experience}" }
+       {
+           journal "Statistical Science" =
+       { "{\it Statist. Sci.}" }
+       {
+           journal "{USSR} Computational Mathematics and Mathematical Physics" =
+       { "{\it {U. S. S. R.} Comput. Math. and Math. Phys.}" }
+       {
+           journal "Journal of {VLSI} and Computer Systems" =
+       { "{\it J. {VLSI} Comput. Syst.}" }
+       {
+           journal "Zeitschrift fur Angewandte Mathematik und Mechanik" =
+       { "{\it Z. Angew. Math. Mech.}" }
+       {
+           journal "Zeitschrift fur Angewandte Mathematik und Physik" =
+       { "{\it Z. Angew. Math. Phys.}" }
+       {
+           journal "ACM Computing Surveys" =
+       { "{\it Comput. Surveys}" }
+       {
+           journal "ACM Transactions on Mathematical Software" =
+       { "{\it ACM Trans. Math. Software}" }
+       {
+           journal "ACM {SIGNUM} Newsletter" =
+       { "{\it ACM {SIGNUM} Newslett.}" }
+       {
+           journal "IEEE Transactions on Computers" =
+       { "{\it IEEE Trans. Comput.}" }
+       {
+           journal "IEEE Transactions on Automatic Control" =
+       { "{\it IEEE Trans. Automat. Control}" }
+       {
+           journal "Proceedings of the IEEE" =
+       { "{\it Proc. IEEE}" }
+       {
+           journal "IEEE Transactions on Aerospace and Electronic Systems" =
+       { "{\it IEEE Trans. Aerospace Electron. Systems}" }
+       {
+           journal "IMA Journal of Numerical Analysis" =
+       { "{\it IMA J. Numer. Anal.}" }
+       {
+           journal "SIAM Journal on Algebraic and Discrete Methods" =
+       { "{\it SIAM J. Algebraic Discrete Methods}" }
+       {
+           journal "SIAM Journal on Applied Mathematics" =
+       { "{\it SIAM J. Appl. Math.}" }
+       {
+           journal "SIAM Journal on Computing" =
+       { "{\it SIAM J. Comput.}" }
+       {
+           journal "SIAM Journal on Matrix Analysis and Applications" =
+       { "{\it SIAM J. Matrix Anal. Appl.}" }
+       {
+           journal "SIAM Journal on Numerical Analysis" =
+       { "{\it SIAM J. Numer. Anal.}" }
+       {
+           journal "SIAM Review" =
+       { "{\it SIAM Rev.}" }
+       {
+           journal "SIAM Journal on Scientific and Statistical Computing" =
+       { "{\it SIAM J. Sci. Statist. Comput.}" }
+       {
+           journal "USSR Computational Mathematics and Mathematical Physics" =
+       { "{\it U. S. S. R. Comput. Math. and Math. Phys.}" }
+       {
+           journal "Journal of VLSI and Computer Systems" =
+       { "{\it J. VLSI Comput. Syst.}" }
+       {
+           journal "Communications of the ACM" =
+       { "{\it Commun. ACM}" }
+       %% If no match with cases needing special handling, just output journal name
+       {  journal emphasize.with.italic.correction  }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+           }
+     if$
+     * "}" *
+         }
+    if$
+
+  number empty.or.unknown
+    {
+      volume empty.or.unknown
+        { "no number and no volume in " cite$ * warning$ "" * }
+        { " " * " \bibinfo{volume}{" * volume * "}" * }
+      if$
+    }
+    {
+      volume empty.or.unknown
+        {
+          "unusual to have number, but no volume, for " cite$ * warning$
+          " \bibinfo{volume}{" * number * "}" *
+        }
+        { " \bibinfo{volume}{" * volume comma " " * number * * "}" *}
+      if$
+    }
+  if$
+
+  format.day.month.year *
+}
+
+FUNCTION { format.chapter.pages }
+{
+  chapter empty.or.unknown
+    'format.pages
+    { type empty.or.unknown
+        { "Chapter" } % gnp - changed to mixed case
+        { type "t" change.case$ }
+      if$
+      chapter tie.or.space.connect
+      pages empty.or.unknown
+        {"page numbers missing in " cite$ * warning$} % gnp - added check
+        { ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION { format.in.emphasize.booktitle }
+{ % jtb: format for collections or proceedings not appearing in a journal
+  booktitle empty.or.unknown
+  { "" }
+  { "In " format.emphasize.booktitle * }
+  if$
+}
+
+FUNCTION { format.in.booktitle }
+{ % jtb: format for proceedings appearing in a journal
+  booktitle empty.or.unknown
+  { "" }
+  { "In \bibinfo{booktitle}{" booktitle * "}" * }
+  if$
+}
+
+FUNCTION { format.in.ed.booktitle }
+{
+  booktitle empty.or.unknown
+  { "" }
+  { editor empty.or.unknown
+    { "In " format.emphasize.booktitle * }
+                % jtb: swapped editor location
+    { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
+    if$
+  }
+  if$
+}
+
+FUNCTION { format.thesis.type }
+{ % call with default type on stack top
+  type empty.or.unknown
+    'skip$    % use default type
+    {
+      pop$    % discard default type
+      % NO: it is silly to have to brace protect every degree type!:  type "t" change.case$
+      type
+    }
+  if$
+}
+
+FUNCTION { format.tr.number }
+{
+  type empty.or.unknown
+%    { "Tech. Rep." }     
+    { "{T}echnical {R}eport" }     % ACM wants it explicit (Gerry 9/28)
+    'type
+  if$
+  number empty.or.unknown
+    { "t" change.case$ }
+    %% LOOKS BAD: { "." * number tie.or.space.connect }
+    %% Prefer "Research report RJ687." to "Research report. RJ687."
+    { number tie.or.space.connect }
+  if$
+}
+
+FUNCTION { format.advisor }
+{
+  advisor empty.or.unknown
+    { "" }
+    { "Advisor(s) " advisor * }
+  if$
+}
+
+FUNCTION { format.article.crossref }
+{ "See"
+  "\citeN{" * crossref * "}" *
+}
+
+FUNCTION { format.crossref.editor }
+{
+  editor #1 "{vv~}{ll}" format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { pop$ " et~al\mbox{.}" * }         % jrh: avoid spacing problems
+    { #2 <
+    'skip$
+    { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+        { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
+        { " and " * editor #2 "{vv~}{ll}" format.name$ * }
+      if$
+    }
+      if$
+    }
+  if$
+}
+
+FUNCTION { format.book.crossref }
+{
+  volume empty.or.unknown
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
+      "In "
+    }
+    { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
+      " of " *
+    }
+  if$
+  editor empty.or.unknown
+  editor field.or.null author field.or.null =
+  or
+    { key empty.or.unknown
+    { series empty.or.unknown
+        { "need editor, key, or series for " cite$ * " to crossref " *
+          crossref * warning$
+          "" *
+        }
+        { "{\em " * series * "\/}" * }
+      if$
+    }
+    { key * }
+      if$
+    }
+    { format.crossref.editor * }
+  if$
+  " \citeN{" * crossref * "}" *
+}
+
+FUNCTION { format.incoll.inproc.crossref }
+{ "See"
+  " \citeN{" * crossref * "}" *
+}
+
+FUNCTION { format.lab.names }
+{
+  % format.lab.names:
+  %
+  % determines "short" names for the abbreviated author information.
+  % "Long" labels are created in calc.label, using the routine my.full.label
+  % to format author and editor fields.
+  %
+  % There are 4 cases for labels.   (n=3 in the example)
+  % a) one author             Foo
+  % b) one to n               Foo, Bar and Baz
+  % c) use of "and others"    Foo, Bar et al.
+  % d) more than n            Foo et al.
+
+  's :=
+  s num.names$ 'numnames :=
+  numnames #2 >    % change number to number of others allowed before
+                   % forcing "et al".
+    { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
+    {
+      numnames #1 - 'namesleft :=
+      #2 'nameptr :=
+      s #1 "{vv~}{ll}" format.name$
+        { namesleft #0 > }
+        { nameptr numnames =
+            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+                { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
+                { " and " * s nameptr "{vv~}{ll}" format.name$ * }
+              if$
+            }
+            { ", " * s nameptr "{vv~}{ll}" format.name$ * }
+          if$
+          nameptr #1 + 'nameptr :=
+          namesleft #1 - 'namesleft :=
+        }
+      while$
+    }
+  if$
+}
+
+FUNCTION { author.key.label }
+{
+  author empty.or.unknown
+    { key empty.or.unknown
+          { "no key, author in " cite$ * warning$
+            cite$ #1 #3 substring$ }
+         'key
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION { author.key.organization.label }
+{ % added - gnp. Provide label formatting by organization if author is null.
+  author empty.or.unknown
+    { organization empty.or.unknown
+        { key empty.or.unknown
+            { "no key, author or organization in " cite$ * warning$
+              cite$ #1 #3 substring$ }
+            'key
+          if$
+        }
+        { organization }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION { editor.key.organization.label }
+{ % added - gnp. Provide label formatting by organization if editor is null.
+  editor empty.or.unknown
+    { organization empty.or.unknown
+        { key empty.or.unknown
+            { "no key, editor or organization in " cite$ * warning$
+              cite$ #1 #3 substring$ }
+            'key
+          if$
+        }
+        { organization }
+      if$
+    }
+    { editor format.lab.names }
+  if$
+}
+
+FUNCTION { author.editor.key.label }
+{
+  author empty.or.unknown
+    { editor empty.or.unknown
+          { key empty.or.unknown
+               { "no key, author, or editor in " cite$ * warning$
+                 cite$ #1 #3 substring$ }
+             'key
+           if$
+         }
+          { editor format.lab.names }
+      if$
+    }
+    { author format.lab.names }
+  if$
+}
+
+FUNCTION { calc.label }
+{
+  % Changed - GNP. See also author.organization.sort, editor.organization.sort
+  % Form label for BibTeX entry. The classification of which fields are used
+  % for which type of entry (book, inbook, etc.) are taken from alpha.bst.
+  % The change here from newapa is to also include organization as a
+  % citation label if author or editor is missing.
+
+  type$ "book" =
+  type$ "inbook" =
+  or
+  type$ "periodical" =
+  or
+    'author.editor.key.label
+    { type$ "proceedings" =
+        'editor.key.organization.label
+        { type$ "manual" =
+            'author.key.organization.label
+            'author.key.label
+          if$
+        }
+      if$
+    }
+  if$
+
+  author empty.or.unknown  % generate the full label citation information.
+    {
+      editor empty.or.unknown
+        {
+          organization empty.or.unknown
+            {
+              key empty.or.unknown
+                {
+                  "no author, editor, organization, or key in " cite$ * warning$
+                  "??"
+                }
+                { key }
+              if$
+            }
+            { organization }
+          if$
+        }
+        { editor my.full.label }
+      if$
+    }
+    { author my.full.label }
+  if$
+
+  % leave label on the stack, to be popped when required.
+
+  "}{" * swap$ * "}{" *
+  %  year field.or.null purify$ #-1 #4 substring$ *
+  %
+  % save the year for sort processing afterwards (adding a, b, c, etc.)
+  %
+  year field.or.null purify$ #-1 #4 substring$
+  'label.year :=
+}
+
+
+FUNCTION { output.bibitem }
+{
+  newline$
+  "\bibitem[\protect\citeauthoryear{" write$
+  calc.label write$
+  sort.year write$
+  "}]%" writeln
+  "        {" write$
+  cite$ write$
+  "}" writeln
+  ""
+  before.all 'output.state :=
+}
+
+
+FUNCTION { output.issue.doi.coden.isxn.lccn.url }
+{ % enter and return with stack empty
+  %% We switch now from buffered output to output of complete lines, so
+  %% that the Issue .. URL data have their own lines, and are less likely
+  %% to be line-wrapped by BibTeX's short-sighted algorithm, which wraps
+  %% lines longer than 79 characters, backtracking to what it thinks is
+  %% a break point in the string.  Any such wrapping MUST be undone to
+  %% prevent percent-newline from appearing in DOIs and URLs.  The
+  %% output data are intentionally wrapped in \showxxx{} macros at
+  %% beginning of line, and that supply their own punctuation (if they
+  %% are not defined to suppress output entirely), to make it easier for
+  %% other software to recover them from .bbl files.
+  %%
+  %% It also makes it possible to later change the macro definitions
+  %% to suppress particular output values, or alter their appearance.
+  %%
+  %% Note that it is possible for theses, technical reports, and
+  %% manuals to have ISBNs, and anything that has an ISBN may also
+  %% have an ISSN.  When there are no values for these keys, there
+  %% is no output generated for them here.
+
+  "\newblock" writeln
+  after.block 'output.state :=
+
+  output.issue
+  output.isbn
+  output.coden  % CODEN is functionally like ISSN, so output them sequentially
+  output.issn
+  output.lccn
+  output.doi    % DOI is ALWAYS last according to CrossRef DOI documentation
+  output.url    % but ACM wants URL last
+}
+
+FUNCTION { output.issue.doi.coden.isxn.lccn.url.note }
+{ % enter with stack empty, return with empty string on stack
+  output.issue.doi.coden.isxn.lccn.url
+  note empty.or.unknown
+    { }
+    {
+      "\newblock" writeln
+      output.note
+    }
+  if$
+  ""
+}
+
+FUNCTION { output.issue.doi.coden.isxn.lccn.url.note.check }
+{ % enter with stack empty, return with empty string on stack
+  output.issue.doi.coden.isxn.lccn.url
+  note empty.or.unknown
+    { }
+    {
+      "\newblock" writeln
+      output.note.check
+    }
+  if$
+  ""
+}
+
+FUNCTION { article }
+{
+  output.bibitem
+
+  author empty.or.unknown
+    {
+      editor empty.or.unknown
+        { "neither author and editor supplied for " cite$ * warning$ }
+        { format.editors "editor" output.check }
+      if$
+    }
+    { format.authors "author" output.check }
+  if$
+
+  author format.no.key output       % added
+  output.year.check                 % added
+  new.block
+  format.articletitle "title" output.check
+  new.block
+  howpublished output
+
+  crossref missing$
+    { format.journal.volume.number.day.month.year }
+    {
+      "cross reference in @Article{...} is unusual" warning$
+      format.article.crossref output.nonnull
+    }
+  if$
+  output
+
+  format.pages.check.without.articleno output
+  format.articleno.numpages output
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION { book }
+{
+  output.bibitem
+  author empty.or.unknown
+    { format.editors "author and editor" output.check }
+    { format.authors output.nonnull
+      crossref missing$
+        { "author and editor" editor either.or.check }
+        'skip$
+      if$
+    }
+  if$
+  output.year.check       % added
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { new.sentence              % jtb: start a new sentence for series/volume
+      format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address "address" output.check    % jtb: require address
+      fin.sentence
+      pages empty.or.unknown
+        { format.bookpages }    % use bookpages when pages empty
+        { format.pages.check "pages" tie.or.space.connect }
+      if$
+      output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION { booklet }
+{
+  output.bibitem
+  format.authors output
+  author format.key output          % added
+  output.year.check                 % added
+  new.block
+  format.title "title" output.check
+  new.block
+  howpublished output
+  address output
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION { inbook }
+{
+  output.bibitem
+  author empty.or.unknown
+    { format.editors
+      "author and editor" output.check
+    }
+    { format.authors output.nonnull
+      crossref missing$
+    { "author and editor" editor either.or.check }
+    'skip$
+      if$
+    }
+  if$
+  output.year.check                 % added
+  new.block
+  format.btitle "title" output.check
+  crossref missing$
+    { new.sentence              % jtb: start a new sentence for series/volume
+      format.bvolume output
+      new.block
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address "address" output.check    % jtb: require address
+      format.bookpages output
+      format.chapter.pages
+      "chapter and pages" output.check  % jtb: moved from before publisher
+    }
+    {
+      format.bookpages output
+      format.chapter.pages "chapter and pages" output.check
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION { incollection }
+{
+  output.bibitem
+  format.authors "author" output.check
+  author format.key output       % added
+  output.year.check              % added
+  new.block
+  format.articletitle "title" output.check
+  new.block
+  crossref missing$
+    { format.in.ed.booktitle "booktitle" output.check
+      new.sentence                % jtb: start a new sentence for series/volume
+      format.bvolume output
+      format.number.series output
+      new.sentence
+      publisher "publisher" output.check
+      address "address" output.check      % jtb: require address
+      format.bookpages output
+      format.chapter.pages output % gnp - was special.output.nonnull
+                                  % left out comma before page numbers
+                                  % jtb: moved from before publisher
+    }
+    {
+      format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION { inproceedings }
+{
+  output.bibitem
+  format.authors "author" output.check
+  author format.key output            % added
+  output.year.check                   % added
+  new.block
+  format.articletitle "title" output.check
+  howpublished output.dot.space
+  crossref missing$
+    {
+      journal missing$          % jtb: proceedings appearing in journals
+        { format.in.emphasize.booktitle format.city "booktitle"  output.check.dot.space
+          format.series output.removenospace
+          format.editors.fml output % BV 2011/09/27 Moved dot to comma
+          format.bvolume.noseries output
+          new.sentence
+          organization output
+          publisher "publisher" output.check % jtb: require publisher (?)
+          address "address" output.check  % jtb: require address
+          format.bookpages output
+        }
+        {
+           format.in.booktitle format.city "booktitle" output.check
+           format.editors.fml output
+           new.sentence
+           format.journal.volume.number.day.month.year output
+        }
+      if$
+      format.articleno output
+      format.pages.check.without.articleno output
+    }
+    {
+      format.incoll.inproc.crossref output.nonnull
+      format.articleno output
+      format.pages.check.without.articleno output
+    }
+  if$
+  format.articleno.numpages output
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION { conference } { inproceedings }
+
+FUNCTION { manual }
+{
+  output.bibitem
+  author empty.or.unknown
+    { editor empty.or.unknown
+      { organization "organization" output.check
+        organization format.key output }  % if all else fails, use key
+      { format.editors "author and editor" output.check }
+      if$
+    }
+    { format.authors output.nonnull }
+    if$
+  output.year.check                 % added
+  new.block
+  format.btitle "title" output.check
+  organization address new.block.checkb
+  % jtb: back to normal style: organization, address
+  organization "organization" output.check
+  address output
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION { mastersthesis }
+{
+  output.bibitem
+  format.authors "author" output.check
+  author format.key output          % added
+  output.year.check                 % added
+  new.block
+  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
+  new.block
+  "Master's\ thesis" format.thesis.type output new.sentence  % Added dot. BV 2011/09/27
+  school "school" output.check
+  address output
+  new.block
+  format.advisor output
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION { misc }
+{
+  output.bibitem
+  format.authors output
+  author format.key output            % added
+  output.year.check                   % added
+  title howpublished new.block.checkb
+  format.title output
+  new.block
+  howpublished output
+  "" output.nonnull.dot.space
+  output.day.month.year              % Gerry - appears odd if (only) the year is 'repeated' but (appears) 'valuable' if the month/day is _also_ included - 2011/09/28
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION { phdthesis }
+{
+  output.bibitem
+  format.authors "author" output.check
+  author format.key output          % added
+  output.year.check                 % added
+  new.block
+  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
+  new.block
+ "Ph.D. Dissertation" format.thesis.type output new.sentence % Added dot. BV 2011/09/27
+  school "school" output.check
+  address output
+  new.block
+  format.advisor output
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION {format.date}
+{ year empty.or.unknown
+    { month empty.or.unknown
+        {
+          ""                    % output empty date if year/month both empty
+          day empty.or.unknown
+            {  }
+            { "there's a day but no month or year in " cite$ * warning$ }
+          if$
+        }
+        { "there's a month but no year in " cite$ * warning$
+          month
+          day empty.or.unknown
+            { }
+            { " " * day * }
+          if$
+        }
+      if$
+    }
+    { month empty.or.unknown
+        {
+          year                  % output only year if month empty
+          day empty.or.unknown
+            {  }
+            { "there's a day and year but no month in " cite$ * warning$ }
+          if$
+        }
+        {
+          month " " *
+          day empty.or.unknown
+            { }
+            { day * ", " * }
+          if$
+          year *
+        }
+      if$
+    }
+  if$
+}
+
+FUNCTION {new.block.checka}
+{
+  empty.or.unknown
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION { periodical }
+{
+  output.bibitem
+  editor empty.or.unknown
+    { organization output }
+    { format.editors output.nonnull }
+  if$
+  new.block
+  title emphasize "title" output.check
+  format.date output
+  new.sentence
+  publisher output
+  address output
+  howpublished new.block.checka
+  howpublished output
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION { proceedings }
+{
+  output.bibitem
+  editor empty.or.unknown
+    { organization output
+      organization format.key output }  % gnp - changed from author format.key
+    { format.editors output.nonnull }
+  if$
+  % author format.key output             % gnp - removed (should be either
+  %                                        editor or organization
+  output.year.check                    % added (newapa)
+  new.block
+  format.btitle format.city "title" output.check        % jtb: added city
+  new.sentence
+  format.bvolume output
+  format.number.series output
+  new.sentence
+  organization output
+  % jtb: normal order: publisher, address
+  publisher output
+  address output
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION { techreport }
+{
+  output.bibitem
+  format.authors "author" output.check
+  author format.key output             % added
+  output.year.check                    % added
+  new.block
+  format.btitle "title" output.check
+  new.block
+%   format.tr.number output               % jtb: moved month ...
+  format.tr.number output new.sentence    % Gerry  - need dot 2011/09/28
+  institution "institution" output.check
+  address output
+  new.sentence
+  format.named.pages output
+  % ACM omits year at end in transactions style
+  % format.day.month.year output.nonnull.dot.space  % jtb: ... to here (no parens)
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note
+  fin.entry
+}
+
+FUNCTION { unpublished }
+{
+  output.bibitem
+  format.authors
+  "author" output.check
+  author format.key output              % added
+  output.year.check                     % added
+  new.block
+  format.title "title" output.check
+  fin.sentence
+  output.day.month.year                 % UTAH
+  fin.block
+  output.issue.doi.coden.isxn.lccn.url.note.check
+  fin.entry
+}
+
+FUNCTION { default.type } { misc }
+
+%%% ACM journal-style month definitions: full name if 1--5 letters, else
+%%% abbreviation of 3 or 4 characters and a dot
+
+MACRO {jan}             {"Jan."}
+
+MACRO {feb}             {"Feb."}
+
+MACRO {mar}             {"March"}
+
+MACRO {apr}             {"April"}
+
+MACRO {may}             {"May"}
+
+MACRO {jun}             {"June"}
+
+MACRO {jul}             {"July"}
+
+MACRO {aug}             {"Aug."}
+
+MACRO {sep}             {"Sept."}
+
+MACRO {oct}             {"Oct."}
+
+MACRO {nov}             {"Nov."}
+
+MACRO {dec}             {"Dec."}
+
+
+%%% ====================================================================
+%%%                 I M P O R T A N T   C H A N G E
+%%%
+%%% For the 2009 release of the official acm-*.bst files, there are to
+%%% be NO predefined journal abbreviations in those style files.
+%%%
+%%% ACM may later develop an official list of mappings of full journal
+%%% names of commonly-cited journals to ACM-preferred abbreviations, but
+%%% authors should consider that use of any of these commented-out
+%%% abbreviations is DEPRECATED unless the BibTeX file itself provides
+%%% its own @String{name = "value"} definitions.
+%%%
+%%% Use of journal (and publisher and address) @String{...}
+%%% abbreviations, as opposed to explicit value assignments such as
+%%% journal = "J. ACM" and publisher = "IEEE", is preferred in
+%%% bibliographic databases, because it makes it easier for journal
+%%% production staff to replace those definitions by publisher-preferred
+%%% abbreviations when articles are typeset for publication.
+%%%
+%%% For historical reasons, and because some of these abbreviations are
+%%% used in other (non-ACM) bibliography style files, they are preserved
+%%% here in comments.  Future releases of the acm*-.bst files are likely
+%%% to remove them entirely.
+%%% ====================================================================
+%%%
+%%% DEPRECATED: MACRO {acmcs}           {"ACM Comput. Surv."}                   % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {acmlett}         {"ACM Lett. Program. Lang. Syst."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {acta}            {"Acta Inf."}                           % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ai}              {"Artificial Intelligence"}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {al}              {"Ada Lett."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {acr}             {"Adv. Comput. Res."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {bit}             {"Bit"}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {cacm}            {"Commun. ACM"}                         % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {cj}              {"Comput. J."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {cn}              {"Comput. Netw."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {cl}              {"Comput. Lang."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ibmjrd}          {"IBM J. Res. and Development"}         % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ibmsj}           {"IBM Systems Journal"}                 % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ict}             {"Inf. Contr."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ieebcs}          {"IEE/BCS Softw. Eng. J."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ieees}           {"IEEE Softw."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ieeese}          {"IEEE Trans. Softw. Eng."}             % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ieeetc}          {"IEEE Trans. Comput."}                 % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ieeetcad}        {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ieeetpds}        {"IEEE Trans. Parall. Distrib. Syst."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ieeetit}         {"IEEE Trans. Inf. Theory"}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ipl}             {"Inf. Process. Lett."}                 % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {icp}             {"Inf. Comput."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ist}             {"Inf. Softw. Tech."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ijsa}            {"Int. J. Supercomput. Appl."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ijpp}            {"Int. J. Parallel Program."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {jacm}            {"J. ACM"}                              % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: % MACRO {jcss}          {"Journal of Computer and System Sciences"} % original BibTeX
+%%% DEPRECATED: MACRO {jcss}            {"J. Comput. Syst. Sci."}               % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {jlp}             {"J. Logic Program."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {jfp}             {"J. Funct. Program."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {jsmrp}           {"J. Softw. Maint. Res. Pract."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {jss}             {"J. Syst. Softw."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {jlc}             {"J. Logic and Comput."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {jlsc}            {"J. Lisp Symb. Comput."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {lpls}            {"Lett. Program. Lang. Syst."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {mor}             {"Math. Oper. Res."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {mscs}            {"Math. Struct. Comput. Sci."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {mst}             {"Math. Syst. Theor."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {ngc}             {"New Gen. Comput."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {scp}             {"Sci. Comput. Program."}               % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {sicomp}          {"SIAM J. Comput."}                     % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {spe}             {"Softw. Pract. Exper."}
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {tocs}            {"ACM Trans. Comput. Syst."}            % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {tods}            {"ACM Trans. Database Syst."}           % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {tog}             {"ACM Trans. Graphics"}                 % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {toms}            {"ACM Trans. Math. Softw."}             % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {toois}           {"ACM Trans. Office Inf. Syst."}        % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {toplas}          {"ACM Trans. Program. Lang. Syst."}     % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {tcs}             {"Theor. Comput. Sci."}                 % original BibTeX
+%%% DEPRECATED:
+%%% DEPRECATED: MACRO {tr}              {"Tech. Rep."}
+%%% ====================================================================
+
+READ
+
+FUNCTION { sortify }
+{
+  purify$
+  "l" change.case$
+}
+
+FUNCTION { chop.word }
+{
+  's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+FUNCTION { sort.format.names }
+{
+  's :=
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+          { "   " * }
+         'skip$
+      if$
+  %      s nameptr "{ff{ } }{ll{ }}{  vv{ }}{  jj{ }}" format.name$ 't :=
+      s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+          { " et~al" * }
+          { t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION { sort.format.title }
+{
+  't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION { author.sort }
+{
+  author empty.or.unknown
+    { key empty.or.unknown
+         { "to sort, need author or key in " cite$ * warning$
+           "" }
+         { key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION { author.editor.sort }
+{
+  author empty.or.unknown
+    {
+      editor empty.or.unknown
+         {
+           key empty.or.unknown
+             { "to sort, need author, editor, or key in " cite$ * warning$
+               ""
+             }
+             { key sortify }
+           if$
+         }
+         { editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION { author.organization.sort }
+{
+  % added - GNP. Stack author or organization for sorting (from alpha.bst).
+  % Unlike alpha.bst, we need entire names, not abbreviations
+
+  author empty.or.unknown
+    { organization empty.or.unknown
+        { key empty.or.unknown
+            { "to sort, need author, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { organization sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION { editor.organization.sort }
+{
+  % added - GNP. Stack editor or organization for sorting (from alpha.bst).
+  % Unlike alpha.bst, we need entire names, not abbreviations
+
+  editor empty.or.unknown
+    { organization empty.or.unknown
+        { key empty.or.unknown
+            { "to sort, need editor, organization, or key in " cite$ * warning$
+              ""
+            }
+            { key sortify }
+          if$
+        }
+        { organization sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION { presort }
+{
+  % Presort creates the bibentry's label via a call to calc.label, and then
+  % sorts the entries based on entry type. Chicago.bst adds support for
+  % including organizations as the sort key; the following is stolen from
+  % alpha.bst.
+
+  calc.label sortify % recalculate bibitem label
+  year field.or.null purify$ #-1 #4 substring$ * % add year
+  "    "
+  *
+  type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+        'editor.organization.sort
+        { type$ "manual" =
+            'author.organization.sort
+            'author.sort
+          if$
+        }
+      if$
+    }
+  if$
+  #1 entry.max$ substring$        % added for newapa
+  'sort.label :=                  % added for newapa
+  sort.label                      % added for newapa
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE { presort }
+
+SORT             % by label, year, author/editor, title
+
+FUNCTION { initialize.extra.label.stuff }
+{ #0 int.to.chr$ 'last.label :=
+  "" 'next.extra :=
+  #0 'last.extra.num :=
+}
+
+FUNCTION { forward.pass }
+{
+  % Pass through all entries, comparing current entry to last one.
+  % Need to concatenate year to the stack (done by calc.label) to determine
+  % if two entries are the same (see presort)
+
+  last.label
+  % OLD:calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
+  % NEW:
+  author.key.label year field.or.null purify$ #-1 #4 substring$ * % add year
+  #1 entry.max$ substring$ =     % are they equal?
+     { last.extra.num #1 + 'last.extra.num :=
+       last.extra.num int.to.chr$ 'extra.label :=
+     }
+     { "a" chr.to.int$ 'last.extra.num :=
+       "" 'extra.label :=
+       % OLD: calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
+       % NEW:
+       author.key.label year field.or.null purify$ #-1 #4 substring$ * % add year
+       #1 entry.max$ substring$ 'last.label := % assign to last.label
+     }
+  if$
+}
+
+FUNCTION { reverse.pass }
+{
+  next.extra "b" =
+    { "a" 'extra.label := }
+     'skip$
+  if$
+  label.year extra.label * 'sort.year :=
+  extra.label 'next.extra :=
+}
+
+EXECUTE {initialize.extra.label.stuff}
+
+ITERATE {forward.pass}
+
+REVERSE {reverse.pass}
+
+FUNCTION { bib.sort.order }
+{
+  sort.label
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE { bib.sort.order }
+
+SORT             % by sort.label, year, title --- giving final bib. order.
+
+FUNCTION { begin.bib }
+{
+  %% Set to #0 show 13-digit ISBN in preference to 10-digit ISBN.
+  %% Set to #1 to show both 10-digit and 13-digit ISBNs.
+  #1 'show-isbn-10-and-13 :=
+
+  "%%% -*-BibTeX-*-" writeln
+  "%%% Do NOT edit. File created by BibTeX with style" writeln
+  "%%% ACM-Reference-Format-Journals [18-Jan-2012]." writeln
+  "" writeln
+
+  preamble$ empty.or.unknown
+    'skip$
+    { preamble$ writeln }
+  if$
+  "\begin{thebibliography}{00}" writeln
+  ""                                                                         writeln
+  "%%% ====================================================================" writeln
+  "%%% NOTE TO THE USER: you can override these defaults by providing"       writeln
+  "%%% customized versions of any of these macros before the \bibliography"  writeln
+  "%%% command.  Each of them MUST provide its own final punctuation,"       writeln
+  "%%% except for \shownote{}, \showDOI{}, and \showURL{}.  The latter two"  writeln
+  "%%% do not use final punctuation, in order to avoid confusing it with"    writeln
+  "%%% the Web address."                                                     writeln
+  "%%%"                                                                      writeln
+  "%%% To suppress output of a particular field, define its macro to expand" writeln
+  "%%% to an empty string, or better, \unskip, like this:"                   writeln
+  "%%%"                                                                      writeln
+  "%%% \newcommand{\showDOI}[1]{\unskip}   % LaTeX syntax"                   writeln
+  "%%%"                                                                      writeln
+  "%%% \def \showDOI #1{\unskip}           % plain TeX syntax"               writeln
+  "%%%"                                                                      writeln
+  "%%% ====================================================================" writeln
+  ""                                                                         writeln
+
+  %% ACM publications do not use CODEN, ISSN, and LCCN data, so their default
+  %% macro wrappers expand to \unskip, discarding their values and unwanted
+  %% space.
+  %%
+  %% For other publications, prior definitions like these may be useful:
+  %%
+  %%     Plain TeX:
+  %%         \def \showCODEN     #1{CODEN #1.}
+  %%         \def \showISSN      #1{ISSN #1.}
+  %%         \def \showLCCN      #1{LCCN #1.}
+  %%
+  %%     LaTeX:
+  %%         \newcommand{\showCODEN}[1]{CODEN #1.}
+  %%         \newcommand{\showISSN}[1]#1{ISSN #1.}
+  %%         \newcommand{\showLCCN}[1]{LCCN #1.}
+
+  "\ifx \showCODEN    \undefined \def \showCODEN     #1{\unskip}     \fi" writeln
+  "\ifx \showDOI      \undefined \def \showDOI       #1{{\tt DOI:}\penalty0{#1}\ } \fi" writeln
+  % ACM styles omit ISBNs, but they can be included by suitable definitions of
+  % \showISBNx and \showISBNxiii before the .bbl file is read
+  "\ifx \showISBNx    \undefined \def \showISBNx     #1{\unskip}     \fi" writeln
+  "\ifx \showISBNxiii \undefined \def \showISBNxiii  #1{\unskip}     \fi" writeln
+  "\ifx \showISSN     \undefined \def \showISSN      #1{\unskip}     \fi" writeln
+  "\ifx \showLCCN     \undefined \def \showLCCN      #1{\unskip}     \fi" writeln
+  "\ifx \shownote     \undefined \def \shownote      #1{#1}          \fi" writeln % NB: final period supplied by add.period$ above
+  "\ifx \showarticletitle \undefined \def \showarticletitle #1{#1}   \fi" writeln
+  "\ifx \showURL      \undefined \def \showURL       #1{#1}          \fi" writeln
+  "% The following commands are used for tagged output and should be " writeln
+  "% invisible to TeX" writeln
+  "\providecommand\bibfield[2]{#2}" writeln
+  "\providecommand\bibinfo[2]{#2}" writeln
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION { end.bib }
+{
+  newline$
+  "\end{thebibliography}"
+  writeln
+}
+
+EXECUTE {end.bib}
+
+
+


Property changes on: trunk/Master/texmf-dist/bibtex/bst/acmart/ACM-Reference-Format.bst
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Deleted: trunk/Master/texmf-dist/bibtex/bst/acmart/SIGCHI-Reference-Format.bst
===================================================================
--- trunk/Master/texmf-dist/bibtex/bst/acmart/SIGCHI-Reference-Format.bst	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/bibtex/bst/acmart/SIGCHI-Reference-Format.bst	2016-07-14 21:38:03 UTC (rev 41692)
@@ -1,3352 +0,0 @@
-%%% -*-BibTeX-*-
-%%% ====================================================================
-%%%  @BibTeX-style-file{
-%%%     author          = "Nelson H. F. Beebe, Boris Veytsman and Gerald Murray",
-%%%     version         = "1.00",
-%%%     date            = "18 January 2012",
-%%%     time            = "11:48 EST",
-%%%     filename        = "ACM-Reference-Format-Journals.bst",
-%%%     address         = "University of Utah
-%%%                        Department of Mathematics, 110 LCB
-%%%                        155 S 1400 E RM 233
-%%%                        Salt Lake City, UT 84112-0090
-%%%                        USA",
-%%%     telephone       = "+1 801 581 5254",
-%%%     FAX             = "+1 801 581 4148",
-%%%     URL             = "http://www.math.utah.edu/~beebe",
-%%%     checksum        = "available here: http://www.acm.org/publications/latex_style/CRC-journals.txt"
-%%%     email           = "beebe at math.utah.edu, beebe at acm.org,
-%%%                        beebe at computer.org, borisv at lk.net, murray at hq.acm.org", 
-%%%     codetable       = "ISO/ASCII",
-%%%     keywords        = "ACM Transactions bibliography style; BibTeX",
-%%%     license         = "public domain",
-%%%     supported       = "yes",
-%%%     abstract        = "",
-%%%     docstring       = "The checksum field, above, is produced by WinMD5Free (v1.20) 
-%%%                        available from http://www.winmd5.com/?rid=winmd5,"
-%%%  }
-%%% ====================================================================
-
-% "SIGCHI Format" BibTeX style, Forked from ACM-Reference-Format-Journals.bst
-%  Modifications 13-FEBURARY-2015 (David Ayman Shamma)
-
-% "ACM Transactions" BibTeX style, ACM-Reference-Format-Journals.bst
-%  for BibTeX version 0.99c, LaTeX version 3.141
-%  ACM extensions with code cleaned up, extended, and debugged 10--15-Nov-2008
-%  Revised 17-APRIL-2008 (Nelson)
-%  Revised 13-MARCH-2011 (Boris/Gerry)
-%  Revised 23-MARCH-2011 (Boris/Gerry)
-%  Revised 27-MARCH-2011 (Boris/Gerry)
-%  Revised 15-APRIL-2011 (Boris/Gerry)
-%  Revised 27-SEPTEMBER-2011 (Boris)
-%
-%
-% History (by Nelson)
-%
-% Based on 'acmtrans' (for ACM Journals)
-% Date: 28th April 2008
-%
-% 1. Avoid 'repeating' the 'month' values.
-% 2. Avoid incorrectly italicizing the volume number.
-% 3. Avoid non italicizing certain titles (book, inproceedings etc).
-% 4. NO series if there is NO volume.
-% 5. Sorting of reference with first surname.
-% 6. Article no added for Inproceedings.
-%
-% Date: 07th May 2008
-%
-% 1. Abbreviation list added
-%
-%   Citation format: [author-last-name year]
-%             [author-last-name and author-last-name year]
-%             [author-last-name, author-last-name, and author-last-name year]
-%             [author-last-name et al. year]
-%             [author-last-name]
-%             author-last-name [year]
-%             [author-last-name and author-last-name]
-%             [author-last-name et al.]
-%             [year] or [year,year]
-%             year or year,year
-%
-%   Reference list ordering: alphabetical by author or whatever passes
-%    for author in the absence of one.
-%
-% Features of the old acmtrans.bst:
-% =================================
-%
-% - all authors appear last name first.
-% - all pages are listed xx-xx, (no pp.) and are at the end of the reference
-% - publishers are identified as publisher, address
-% - conferences papers (inproceedings) may give city of conference,
-%   date of conference, and journal that the proceedings appear in.
-% - months abbreviated to max four letters (eg. Mar.)
-% - volume of a series indicated after the title of the series
-% - editors appear after edited title and are identified by a trailing "Eds."
-%   not in parentheses.  Editor names are not given in small caps.
-%   (unless there is no author line)
-% - names terminated with a period even if there is no first name.
-% - editions are indicated trailing after the work, not in parentheses.
-% - "et al." citations have a protected period to avoid bad spacing (jrh)
-% - "address" required when publisher given
-% - series (roman) and volume are in a sentence separate from (book-)title
-%
-%
-% Features of chicago.bst:
-% =======================
-%
-% - full names used in citations, but abbreviated citations are available
-%   (see above)
-% - if an entry has a "month", then the month and year are also printed
-%   as part of that bibitem.
-% - all conjunctions use "and" instead of "\&"
-% - major modification from Chicago Manual of Style (13th ed.) is that
-%   only the first author in a reference appears last name first-
-%   additional authors appear as J. Q. Public.
-% - pages are listed as "pp. xx-xx" in all entry types except
-%   article entries.
-% - book, inbook, and manual use "location: publisher" (or organization)
-%   for address and publisher. All other types list publishers separately.
-% - "pp." are used to identify page numbers for all entry types except
-%   articles.
-% - organization is used as a citation label if neither author nor editor
-%   is present (for manuals).
-% - "et al." is used for long author and editor lists, or when "others"
-%   is used.
-%
-% Modifications and bug fixes from newapa.bst:
-% ===========================================
-%
-%   - added month, year to bib entries if month is present
-%   - fixed bug with In proceedings, added necessary comma after title
-%   - all conjunctions changed to "and" from "\&"
-%   - fixed bug with author labels in my.full.label: "et al." now is
-%        generated when "others" is an author name
-%   - major modification from Chicago Manual of Style (13th ed.) is that
-%     only the first author in a reference appears last name first-
-%     additional authors appear as J. Q. Public.
-%   - pages are listed as "pp. xx-xx" in all entry types except
-%     article entries. Unnecessary (IMHO) "()" around page numbers
-%     were removed, and page numbers now don't end with a period.
-%   - created chicago.sty for use with this bibstyle (required).
-%   - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
-%     number, and /or pages. Renamed to format.journal.volume.number.
-%   - fixed bug in formatting booktitles: additional period an error if
-%     book has a volume.
-%   - fixed bug: editors usually given redundant period before next clause
-%     (format.editors.dot) removed.
-%   - added label support for organizations, if both author and editor
-%     are missing (from alpha.bst). If organization is too long, then
-%     the key field is used for abbreviated citations.
-%   - In proceedings or books of several volumes, no comma was written
-%     between the "Volume x" and the page numbers (this was intentional
-%     in newapa.bst). Fixed.
-%   - Some journals may not have volumes/numbers, only month/year (eg.
-%     IEEE Computer). Fixed bug in article style that assumed volume/number
-%     was always present.
-%
-% Original documentation for newapa.sty:
-% =====================================
-%
-% This version was made by modifying the master file made by
-% Oren Patashnik (PATASHNIK at SCORE.STANFORD.EDU), and the 'named' BibTeX
-% style of Peter F. Patel-Schneider.
-%
-% Copyright (C) 1985, all rights reserved.
-% Copying of this file is authorized only if either
-% (1) you make absolutely no changes to your copy, including name, or
-% (2) if you do make changes, you name it something other than 'newapa.bst'.
-% There are undoubtably bugs in this style.  If you make bug fixes,
-% improvements, etc.  please let me know.  My e-mail address is:
-%    spencer at cgrg.ohio.state.edu or 71160.3141 at compuserve.com
-%
-% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
-% with lots of tweaking to make it look like APA style, along with tips
-% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
-%
-%
-% Start of ACM-Reference-Format-Journals.bst
-%
-% Note: Many of the new bibentry 'fields' will only work with the 
-% 'ACM-Reference-Format-Journals.bst' file. Legacy .bib files (which will, in all probability,
-% NOT contain these new fields) will _still_ work with the ACM-Reference-Format-Journals.bst.
-% 
-%
-ENTRY
-  { address
-    advisor
-    author
-    booktitle
-    chapter
-    city        % jtb: added
-    date        % jtb: added
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-        % New keys recognized 
-        issue         % UTAH: used in, e.g., ACM SIGSAM Bulletin and ACM Communications in Computer Algebra
-        articleno
-        day           % UTAH: needed for newspapers, weeklies, bi-weeklies
-        doi           % UTAH
-        url           % UTAH
-        bookpages     % UTAH
-        numpages
-        lastaccessed  % UTAH: used only for @Misc{...}
-        coden         % UTAH
-        isbn          % UTAH
-        isbn-13       % UTAH
-        issn          % UTAH
-        lccn          % UTAH
-  }
-  {}
-  { label.year extra.label sort.year sort.label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-INTEGERS { show-isbn-10-and-13 }  % initialized below in begin.bib
-
-INTEGERS { nameptr namesleft numnames }
-
-INTEGERS { multiresult }
-
-INTEGERS { len }
-
-INTEGERS { last.extra.num }
-
-STRINGS { s t t.org u }
-
-STRINGS { last.label next.extra }
-
-STRINGS { p1 p2 p3 page.count }
-
-FUNCTION { dump.stack.1 }
-{
-    duplicate$ "STACK[top] = [" swap$ * "]" * warning$
-}
-
-FUNCTION { dump.stack.2 }
-{
-    duplicate$ "STACK[top  ] = [" swap$ * "]" * warning$
-    swap$
-    duplicate$ "STACK[top-1] = [" swap$ * "]" * warning$
-    swap$
-}
-
-FUNCTION { empty.or.unknown }
-{
-  %% Examine the top stack entry, and push 1 if it is empty, or
-  %% consists only of whitespace, or is a string beginning with two
-  %% queries (??), and otherwise, push 0.
-  %%
-  %% This function provides a replacement for empty$, with the
-  %% convenient feature that unknown values marked by two leading
-  %% queries are treated the same as missing values, and thus, do not
-  %% appear in the output .bbl file, and yet, their presence in .bib
-  %% file(s) serves to mark values which are temporarily missing, but
-  %% are expected to be filled in eventually once more data is
-  %% obtained.  The TeX User Group and BibNet bibliography archives
-  %% make extensive use of this practice.
-  %%
-  %% An empty string cannot serve the same purpose, because just as in
-  %% statistics data processing, an unknown value is not the same as an
-  %% empty value.
-  %%
-  %% At entry: stack = ... top:[string]
-  %% At exit:  stack = ... top:[0 or 1]
-
-  duplicate$ empty$
-    { pop$ #1 }
-    { #1 #2 substring$ "??" = }
-  if$
-}
-
-FUNCTION { writeln }
-{
-  %% In BibTeX style files, the sequences
-  %%
-  %%     ... "one" "two" output
-  %%     ... "one" "two" output.xxx
-  %%
-  %% ship "one" to the output file, possibly following by punctuation,
-  %% leaving the stack with
-  %%
-  %%     ... "two"
-  %%
-  %% There is thus a one-string lag in output processing that must be
-  %% carefully handled to avoid duplicating a string in the output
-  %% file.  Unless otherwise noted, all output.xxx functions leave
-  %% just one new string on the stack, and that model should be born
-  %% in mind when reading or writing function code.
-  %%
-  %% BibTeX's asynchronous buffering of output from strings from the
-  %% stack is confusing because newline$ bypasses the buffer.  It
-  %% would have been so much easier for newline to be a character
-  %% rather than a state of the output-in-progress.
-  %%
-  %% The documentation in btxhak.dvi is WRONG:  it says
-  %%
-  %%    newline$ Writes onto the bbl file what's accumulated in the
-  %%             output buffer. It writes a blank line if and only
-  %%             if the output buffer is empty. Since write$ does
-  %%             reasonable line breaking, you should use this
-  %%             function only when you want a blank line or an
-  %%             explicit line break.
-  %%
-  %%    write$   Pops the top (string) literal and writes it on the
-  %%             output buffer (which will result in stuff being
-  %%             written onto the bbl file when the buffer fills
-  %%             up).
-  %%
-  %% Examination of the BibTeX source code shows that write$ does
-  %% indeed behave as claimed, but newline$ sends a newline character
-  %% directly to the output file, leaving the stack unchanged.  The
-  %% first line "Writes onto ... buffer." is therefore wrong.
-  %%
-  %% The original BibTeX style files almost always use "write$ newline$"
-  %% in that order, so it makes sense to hide that pair in a private
-  %% function like this one, named after a statement in Pascal,
-  %% the programming language embedded in the BibTeX Web program.
-
-  write$                % output top-of-stack string
-  newline$              % immediate write of newline (not via stack)
-}
-
-FUNCTION { init.state.consts }
-{
-  #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-}
-
-FUNCTION { output.nonnull }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<comma><space>
-  's :=
-  output.state mid.sentence =
-    {
-      ", " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln
-          "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.dot.space }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<dot><space>
-  's :=
-  output.state mid.sentence =           % { "<DEBUG output.nonnull.dot.space>. " * write$ }
-    {
-      ". " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.remove }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<space>
-  's :=
-  output.state mid.sentence =
-    {
-      " " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.removenospace }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S
-  's :=
-  output.state mid.sentence =
-    {
-      "" * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output }
-{ % discard top token if empty, else like output.nonnull
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION { output.dot.space }
-{ % discard top token if empty, else like output.nonnull.dot.space
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull.dot.space
-  if$
-}
-
-FUNCTION { output.removenospace }
-{ % discard top token if empty, else like output.nonnull.removenospace
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull.removenospace
-  if$
-}
-
-FUNCTION { output.check }
-{ % like output, but warn if key name on top-of-stack is not set
-  't :=
-  duplicate$ empty.or.unknown
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull
-  if$
-}
-
-FUNCTION { output.check.dot.space }
-{ % like output.dot.space, but warn if key name on top-of-stack is not set
-  't :=
-  duplicate$ empty.or.unknown
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull.dot.space
-  if$
-}
-
-FUNCTION { fin.block }
-{ % functionally, but not logically, identical to fin.entry
-   add.period$
-   writeln
-}
-
-FUNCTION { fin.entry }
-{
-   add.period$
-   writeln
-}
-
-FUNCTION { new.sentence }
-{ % update sentence state, with neither output nor stack change
-  output.state after.block =
-    'skip$
-    {
-      output.state before.all =
-        'skip$
-        { after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION { fin.sentence }
-{
-   add.period$
-   write$
-   new.sentence
-   ""
-}
-
-FUNCTION { new.block }
-{
-  output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION { output.coden }       % UTAH
-{ % output non-empty CODEN as one-line sentence (stack untouched)
-  coden empty.or.unknown
-    { }
-    { "\showCODEN{" coden * "}" * writeln }
-  if$
-}
-
-FUNCTION { format.articleno }
-{
-  articleno empty.or.unknown
-     { "" }
-     {
-        numpages empty.or.unknown
-          { "articleno field, but no numpages field, in " cite$ * warning$ }
-          { }
-        if$
-        "Article " articleno *
-     }
-  if$
-}
-
-FUNCTION { format.year }
-{ % push year string or "????" onto output stack
-  %% Because year is a mandatory field, we always force SOMETHING
-  %% to be output
-  year empty.or.unknown
-    { "????" }
-    { year }
-  if$
-}
-
-FUNCTION { format.day.month }
-{ % push "day month " or "month " or "" onto output stack
-  day empty.or.unknown
-    {
-      month empty.or.unknown
-        { "" }
-        { month " " *}
-      if$
-    }
-    {
-      month empty.or.unknown
-        { "" }
-        { day " " * month * " " *}
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.day.month.year }     % UTAH
-{ % if month is empty, push "" else push "(MON.)" or "(DD MON.)"
-  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
-  % acm-*.bst addition: prefix parenthesized date string with
-  % ", Article nnn "
-  articleno empty.or.unknown
-    { "" }
-    { ", " format.articleno * }
-  if$
-  " (" * format.day.month * format.year * ")" *
-}
-
-FUNCTION { output.day.month.year }     % UTAH
-{ % if month is empty value, do nothing; else output stack top and
-  % leave with new top string "(MON.)" or "(DD MON.)"
-  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
-  format.day.month.year
-  output.nonnull.remove
-}
-
-FUNCTION { strip.doi } % UTAH
-{ % Strip any Web address prefix to recover the bare DOI, leaving the
-  % result on the output stack, as recommended by CrossRef DOI
-  % documentation.
-  % For example, reduce "http://doi.acm.org/10.1145/1534530.1534545" to
-  % "10.1145/1534530.1534545".  That is later typeset and displayed as
-  % doi:10.1145/1534530.1534545 as the LAST item in the reference list
-  % entry.  Publisher Web sites wrap this with a suitable link to a real
-  % URL to resolve the DOI, and the master http://dx.doi.org/ address is
-  % preferred, since publisher-specific URLs can disappear in response
-  % to economic events.  All journals are encouraged by the DOI
-  % authorities to use that typeset format and link procedures for
-  % uniformity across all publications that include DOIs in reference
-  % lists.
-  % The numeric prefix is guaranteed to start with "10.", so we use
-  % that as a test.
-  doi #1 #3 substring$ "10." =
-    { doi }
-    {
-      doi #1 #7 substring$ "http://" =
-        {
-            doi #8 doi text.length$ #7 - substring$ 't := % get modifiable copy of rest of DOI
-
-            "INTERNAL STYLE-FILE ERROR" 's :=
-
-            % search for next "/" and assign its suffix to s
-
-            { t text.length$ }
-            {
-              t #1 #1 substring$ "/" =
-                {
-                  % save rest of string as true DOI (should be 10.xxxx/yyyy)
-                  t #2 t text.length$ #1 - substring$ 's :=
-                  "" 't :=    % empty string t terminates the loop
-                }
-                {
-                  % discard first character and continue loop: t <= substring(t,2,last)
-                  t #2 t text.length$ #1 - substring$ 't :=
-                }
-              if$
-            }
-            while$
-
-            % check for valid DOI (should be 10.xxxx/yyyy)
-            s #1 #3 substring$ "10." =
-              { }
-              { "unrecognized DOI substring " s * " in DOI value [" * doi * "]" * warning$ }
-            if$
-
-            s   % push the stripped DOI on the output stack
-
-        }
-        {
-          "unrecognized DOI value [" doi * "]" * warning$
-          doi   % push the unrecognized original DOI on the output stack
-        }
-      if$
-    }
-  if$
-}
-
-%
-% Change by BV: added standard prefix to URL
-%
-FUNCTION { output.doi } % UTAH
-{ % output non-empty DOI as one-line sentence (stack untouched)
-  doi empty.or.unknown
-    { }
-    {
-      %% NB: We want URLs at beginning of line to reduce likelihood of
-      %% BibTeX's nasty line wrapping after column 79, which then requires
-      %% manual (or automated) editing of the .bbl file to repair.
-      %% The \url{} macro strips percent-newlines, and is thus safe in
-      %% the presence of the line wrapping, but \path|...| and
-      %% \verb|...| do not.
-      "\showDOI{%" writeln
-      "\url{http://dx.doi.org/" strip.doi * "}}" * writeln
-    }
-  if$
-}
-
-FUNCTION { output.isbn }                % UTAH
-{ % output non-empty ISBN-10 and/or ISBN-13 as one-line sentences (stack untouched)
-  show-isbn-10-and-13
-    {
-      %% show both 10- and 13-digit ISBNs
-      isbn empty.or.unknown
-        { }
-        {
-          "\showISBNx{" isbn * "}" * writeln
-        }
-      if$
-      isbn-13 empty.or.unknown
-        { }
-        {
-          "\showISBNxiii{" isbn-13 * "}" * writeln
-        }
-      if$
-    }
-    {
-      %% show 10-digit ISBNs only if 13-digit ISBNs not available
-      isbn-13 empty.or.unknown
-        {
-          isbn empty.or.unknown
-            { }
-            {
-              "\showISBNx{" isbn * "}" * writeln
-            }
-          if$
-        }
-        {
-          "\showISBNxiii{" isbn-13 * "}" * writeln
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION { output.issn } % UTAH
-{ % output non-empty ISSN as one-line sentence (stack untouched)
-  issn empty.or.unknown
-    { }
-    { "\showISSN{" issn * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.issue }
-{ % output non-empty issue number as a one-line sentence (stack untouched)
-  issue empty.or.unknown
-    { }
-    { "Issue " issue * "." * writeln }
-  if$
-}
-
-FUNCTION { output.lccn } % UTAH
-{ % return with stack untouched
-  lccn empty.or.unknown
-    { }
-    { "\showLCCN{" lccn * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.note } % UTAH
-{ % return with stack empty
-  note empty.or.unknown
-    { }
-    { "\shownote{" note add.period$ * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.note.check } % UTAH
-{ % return with stack empty
-  note empty.or.unknown
-    { "empty note in " cite$ * warning$ }
-    { "\shownote{" note add.period$ * "}" * writeln }
-  if$
-}
-
-%
-% Changes by BV 2011/04/15.  Do not output
-% url if doi is defined
-%
-FUNCTION { output.url } % UTAH
-{ % return with stack untouched
-  % output URL and associated lastaccessed fields
-  doi empty.or.unknown
-  {
-    url empty.or.unknown
-      { }
-      {
-          %% NB: We want URLs at beginning of line to reduce likelihood of
-          %% BibTeX's nasty line wrapping after column 79, which would require
-          %% manual (or automated) editing of the .bbl file to repair.  However,
-          %% the \url{} macro handles the unwrapping job automatically.
-          "\showURL{%" writeln
-          lastaccessed empty.or.unknown
-            { "" }
-            { "Retrieved " lastaccessed * " from " * }
-          if$
-
-          %% The URL field may contain a semicolon-separated list of Web
-          %% addresses, and we locate and wrap each of them in \url{...}.
-          %% The simplistic approach of putting the entire list into the
-          %% macro argument is that the semicolons are typeset in a
-          %% typewriter font, and no space follows them.
-          %%
-          %% We therefore replace the original code
-          %%    "\url{" * url * "}}" * writeln
-          %% with this character-at-a-time loop:
-
-          "\url{" *
-
-          url 't :=                       % get modifiable copy of URL list
-
-          { t text.length$ }
-          {
-            t #1 #1 substring$ ";" =
-              {                         % then split argument at separator
-                "};" * writeln
-                "\url{"
-              }
-              {                         % else concatenate nonblank character to argument
-                t #1 #1 substring$ " " =
-                  { }
-                  { t #1 #1 substring$ * }
-                if$
-              }
-            if$
-
-            t #2 t text.length$ #1 - substring$ 't :=
-          }
-          while$
-
-          "}}" * writeln
-      }
-    if$
-  }
-  { }
-  if$
-}
-
-FUNCTION { output.year.check }
-{ % warn if year empty, else output top string and leave " YEAR<label>" on stack in mid-sentence
-  year empty.or.unknown
-     { "empty year in " cite$ * warning$ }
-     { write$
-        " " year * extra.label *
-       mid.sentence 'output.state :=
-     }
-  if$
-}
-
-FUNCTION { not }
-{
-    { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION { and }
-{
-    'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION { or }
-{
-   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION { le }
-{
-  %% test whether first number is less than or equal to second number
-  %% stack in:  n1 n2
-  %% stack out: if n1 <= n2 then 1 else 0
-
-  %% "DEBUG: le " cite$ * warning$
-  > { #0 } { #1 } if$
-}
-
-FUNCTION { ge }
-{
-  %% test whether first number is greater than or equal to second number
-  %% stack in:  n1 n2
-  %% stack out: if n1 >= n2 then 1 else 0
-
-  %% "DEBUG: ge " cite$ * warning$
-  < { #0 } { #1 } if$
-}
-
-FUNCTION { is.leading.digit }
-{
-  %% test whether first character of string is a digit
-  %% stack in:  string
-  %% stack out: if first-char-is-digit then 1 else 0
-
-  #1 #1 substring$                      % replace string by string[1:1]
-  duplicate$                            % string[1:1] string[1:1]
-  chr.to.int$
-  "0" chr.to.int$ swap$ le              % "0" <= string[1:1] --> 0-or-1
-  swap$                                 % 0-or-1 string[1:1]
-  chr.to.int$
-  "9" chr.to.int$ le                    % string[1:1} <= "9" --> 0-or-1
-  and
-}
-
-FUNCTION { skip.digits }
-{
-  %% skip over leading digits in string
-  %% stack in:  string
-  %% stack out: rest-of-string leading-digits
-
-  %% "DEBUG: enter skip.digits " cite$ * warning$
-
-  %% dump.stack.1
-
-  duplicate$
-  't :=
-  't.org :=
-  "" 'u :=
-
-  { t text.length$ }
-  {
-    %% "=================DEBUG: skip.digits   t = [" t * "]" * warning$
-    t is.leading.digit
-      { t #2 t text.length$ #1 - substring$ }
-      {
-        t 'u :=
-        ""
-      }
-    if$
-    't :=
-  }
-  while$
-
-  u                                                             % rest of string
-  t.org #1 t.org text.length$ u text.length$ - substring$       % leading digits
-
-  %% "DEBUG: t.org = [" t.org * "]" * warning$
-  %% "DEBUG: u     = [" u * "]" * warning$
-
-  %% dump.stack.2
-
-  %% "DEBUG: leave skip.digits " cite$ * warning$
-}
-
-FUNCTION { skip.nondigits }
-{
-  %% skip over leading nondigits in string
-  %% stack in:  string
-  %% stack out: rest-of-string
-
-  %% "DEBUG: enter skip.nondigits " cite$ * warning$
-
-  't :=
-  "" 'u :=
-
-  { t text.length$ }
-  {
-    %% "=================DEBUG: skip.nondigits   t = [" t * "]" * warning$
-    t is.leading.digit
-      {
-        t 'u :=
-        ""
-      }
-      { t #2 t text.length$ #1 - substring$ }
-    if$
-    't :=
-  }
-  while$
-
-  u                     % rest of string
-
-  %% dump.stack.1
-  %% "DEBUG: leave skip.nondigits " cite$ * warning$
-}
-
-FUNCTION { parse.next.number }
-{
-  %% stack in:  string
-  %% stack out: rest-of-string next-numeric-part-of-string
-  %% Example:
-  %% stack in:  "123:1--123:59"
-  %% stack out: ":1--123:59" "123"
-
-  's :=
-  s skip.nondigits 's :=
-  s skip.digits
-}
-
-FUNCTION { reduce.pages.to.page.count }
-{
-  %% Stack in:  arbitrary-and-unused
-  %% Stack out: unchanged
-  %%
-  %% For the new-style pagination with article number and numpages or
-  %% pages, we expect to have BibTeX entries containing something like
-  %%     articleno = "17",
-  %%     pages     = "1--23",
-  %% with output "Article 17, 23 pages",
-  %% or
-  %%     articleno = "17",
-  %%     numpages  = "23",
-  %% with output "Article 17, 23 pages",
-  %% or
-  %%     articleno = "17",
-  %%     pages     = "17:1--17:23",
-  %% with output "Article 17, 23 pages",
-  %%
-  %% If articleno is missing or empty, then we should output "1--23",
-  %% "23" (with a warning of a missing articleno), or "17:1--17:23",
-  %% respectively.
-
-  %% "DEBUG: enter reduce.pages.to.page.count " cite$ * warning$
-
-  %% "DEBUG: pages = [" pages * "]" * warning$
-
-  pages
-  parse.next.number 'p1 :=
-  parse.next.number 'p2 :=
-  parse.next.number 'p3 :=
-  parse.next.number 'page.count :=
-
-  duplicate$
-  empty.or.unknown
-    {  }
-    {
-      duplicate$ "unexpected trailing garbage [" swap$ *
-      "] after n:p1--n:p2 in pages = [" *
-      pages *
-      "] in " *
-      cite$ *
-      warning$
-    }
-  if$
-
-  pop$
-
-  %% "DEBUG: reduce.pages.to.page.count: "
-  %% " p1 = " p1 * *
-  %% " p2 = " p2 * *
-  %% " p3 = " p3 * *
-  %% " p4 = " page.count * *
-  %% " in " cite$ * * warning$
-
-  p1 p3 =   p2 "1" =   and   numpages empty.or.unknown   and
-    { "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$ }
-    {
-      numpages empty.or.unknown
-        { pages }
-        { numpages }
-      if$
-      'page.count :=
-    }
-  if$
-
-  p1 "1" =   p3 empty.or.unknown   and   numpages empty.or.unknown   and
-    {
-      p2 'page.count :=
-      "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$
-    }
-    {
-      numpages empty.or.unknown
-        { pages }
-        { numpages }
-      if$
-      'page.count :=
-    }
-  if$
-
-  %% "DEBUG: leave reduce.pages.to.page.count " cite$ * warning$
-}
-
-FUNCTION { new.block.checkb }
-{ % issue a new.block only if at least one of top two stack strings is not empty
-  empty.or.unknown
-  swap$ empty.or.unknown
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION { field.or.null }
-{ % convert empty value to null string, else return value
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION { emphasize }
-{ % emphasize a non-empty top string on the stack (WITHOUT italic correction)
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{\em " swap$ * "}" * }
-  if$
-}
-
-FUNCTION { emphasize.with.italic.correction }
-{ % convert empty string to null string, or emphasize with a trailing italic correction
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{\em " swap$ * "\/}" * }
-  if$
-}
-
-FUNCTION { comma }
-{ % convert empty string to null string, or brace string and add trailing comma
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{" swap$ * "}," * }
-  if$
-}
-
-FUNCTION { format.names }
-{
-  % Format bibliographical entries with the first author last name first,
-  % and subsequent authors with initials followed by last name.
-  % All names are formatted in this routine.
-
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 =
-        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
-        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
-        {"{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
-        {"{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
-      if$
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "{\sc others}" =
-                { " {et~al\mbox{.}}" * } % jrh: avoid spacing problems
-                { " {and} " * t * } % from Chicago Manual of Style
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-}
-
-FUNCTION { my.full.label }
-{
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-
-    { s nameptr "{vv~}{ll}" format.name$ 't :=  % get the next name
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "others" =
-                { " et~al\mbox{.}" * } % jrh: avoid spacing problems
-                { " and " * t * } % from Chicago Manual of Style
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-
-}
-
-FUNCTION { format.names.fml }
-{
-  % Format names in "familiar" format, with first initial followed by
-  % last name. Like format.names, ALL names are formatted.
-  % jtb: The names are NOT put in small caps
-
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-
-    {
-      "{" s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
-
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "{others}" =
-                { " {et~al\mbox{.}}" * }
-                { " {and} " * t * }
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-}
-
-FUNCTION { format.authors }
-{
-  author empty.or.unknown
-    { "" }
-    { author format.names add.period$} % jtb: add period if none before
-  if$
-}
-
-FUNCTION { format.key }
-{
-  empty.or.unknown
-    { key field.or.null }
-    { "" }
-  if$
-}
-
-FUNCTION { format.no.key }
-{
-  empty.or.unknown
-    { "" }
-    { "" }
-  if$
-}
-
-FUNCTION { format.editors.fml }
-{
-  % Format editor names for use in the "in" types: inbook, incollection,
-  % inproceedings: first initial, then last names. When editors are the
-  % LABEL for an entry, then format.editor is used which lists editors
-  % by last name first.
-
-  editor empty.or.unknown
-    { "" }
-    {
-      editor format.names.fml editor num.names$ #1 >
-        { " (Eds.)" * }
-        { " (Ed.)" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.editors }
-{ % format editor names for use in labels, last names first.
-  editor empty.or.unknown
-    { "" }
-    {
-      editor format.names
-      editor num.names$ #1 >
-        { " (Eds.)." * }
-        { " (Ed.)." * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.articletitle }
-{
-  title empty.or.unknown
-    { "" }
-    % Use this to preserve lettercase in titles:
-    { "\showarticletitle{" title * "}" * }
-    % Use this for downcase title style:
-    % { \showarticletitle{" title "t" change.case$ * "}" * }
-  if$
-}
-
-FUNCTION { format.title }
-{
-  title empty.or.unknown
-    { "" }
-    % Use this to preserve lettercase in titles:
-    { title }
-    % Use this for downcase title style:
-    % { title "t" change.case$ }
-  if$
-}
-
-FUNCTION { n.dashify }
-{
-  't :=
-  ""
-    { t empty.or.unknown not }
-    {
-      t #1 #1 substring$ "-" =
-        {
-          t #1 #2 substring$ "--" = not
-            { "--" *
-              t #2 global.max$ substring$ 't :=
-            }
-            {
-              { t #1 #1 substring$ "-" = }
-              {
-                "-" *
-                t #2 global.max$ substring$ 't :=
-              }
-              while$
-            }
-          if$
-        }
-        {
-          t #1 #1 substring$ *
-          t #2 global.max$ substring$ 't :=
-        }
-      if$
-    }
-  while$
-}
-
-FUNCTION { format.btitle }
-{
-  edition empty.or.unknown
-  { title emphasize }
-  { title empty.or.unknown
-    { title emphasize } % jtb: what is this supposed to do ?!?
-    { "{\em " title * "\/} (" * edition "l" change.case$ * " ed.)" * } % jtb: no parens for ed.
-    if$
-  }
-  if$
-}
-
-FUNCTION { format.emphasize.booktitle }
-{ % push "" or "{\em booktitle}" or "{\em booktitle}, (second ed.)" on stack
-  edition empty.or.unknown
-    { booktitle emphasize }
-    { booktitle empty.or.unknown
-      { "" }
-      { "{\em " booktitle * "} (" * edition "l" change.case$ * " ed.)" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.city }
-{
-  % jtb: if the preceding string (the title of the conference) is non-empty,
-  % jtb: append the location, otherwise leave empty (so as to trigger the
-  % jtb: error message in output.check
-
-  duplicate$ empty.or.unknown
-    { }
-    {
-      city empty.or.unknown
-        {
-          date empty.or.unknown
-            { }
-            { " (" * date * ")" * }
-          if$
-        }
-        {
-          date empty.or.unknown
-            { " (" * city * ")" * }
-            { " (" * city * ", " * date * ")" * }
-          if$
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION { tie.or.space.connect }
-{
-  duplicate$ text.length$ #3 <
-    { "~" }
-    { " " }
-  if$
-  swap$ * *
-}
-
-FUNCTION { either.or.check }
-{
-  empty.or.unknown
-    'pop$
-    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
-  if$
-}
-
-FUNCTION { format.bvolume }
-{
-  % jtb: If there is a series, this is added and the volume trails after it.
-  % jtb: Otherwise, "Vol" is Capitalized.
-
-  volume empty.or.unknown
-    { "" }
-    {
-      series empty.or.unknown
-        { "Vol." volume tie.or.space.connect}
-        { series ", " * "Vol." volume tie.or.space.connect *}
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION { format.bvolume.noseries }
-{
-  volume empty.or.unknown
-    { "" }
-    {
-      series empty.or.unknown
-        { "Vol." volume tie.or.space.connect}
-        { "Vol." volume tie.or.space.connect}
-%        { series ", " * "Vol." volume tie.or.space.connect *}
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION { format.series }
-{
-  series empty.or.unknown
-    {""}
-    {" {\em (" * series ")}" *}
-  if$
-}
-
-FUNCTION { format.number.series }
-{
-  volume empty.or.unknown
-    {
-      number empty.or.unknown
-        {
-          volume empty.or.unknown
-          { "" }
-          {
-            series empty.or.unknown
-              { "" }
-              { " (" series * ")" * }
-            if$
-          }
-          if$
-        }                                       %    { series field.or.null }
-        {
-          output.state mid.sentence =
-            { "Number" }                        % gnp - changed to mixed case always
-            { "Number" }
-          if$
-          number tie.or.space.connect series empty.or.unknown
-            { "there's a number but no series in " cite$ * warning$ }
-            { " in " * series * }
-          if$
-        }
-      if$
-    }
-    {
-      ""
-    }
-  if$
-}
-
-FUNCTION { multi.page.check }
-{
-  't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty.or.unknown not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
-    { #1 'multiresult := }
-    { t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION { format.pages }
-{
-  pages empty.or.unknown
-    { "" }
-    {
-      pages multi.page.check
-        { pages n.dashify } % gnp - removed () % jtb: removed pp.
-        { pages }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.pages.check.without.articleno }
-{ %% format pages field only if articleno is absent
-  %% Stack out: pages-specification
-  numpages missing$ pages missing$ and
-    { "page numbers missing in both pages and numpages fields in " cite$ * warning$ }
-    { }
-  if$
-
-  articleno empty.or.unknown
-    {
-      pages missing$
-        { numpages }
-        { format.pages }
-      if$
-    }
-    { "" }
-  if$
-}
-
-FUNCTION { format.pages.check }
-{
-  pages empty.or.unknown
-    { "page numbers missing in " cite$ * warning$ "" }
-    { pages n.dashify }
-  if$
-}
-
-FUNCTION { format.bookpages }
-{
-  bookpages empty.or.unknown
-    { "" }
-    { bookpages "book pages" tie.or.space.connect }
-  if$
-}
-
-FUNCTION { format.named.pages }
-{
-  pages empty.or.unknown
-    { "" }
-    { format.pages "pages" tie.or.space.connect }
-  if$
-}
-
-%
-% Changed by Boris Veytsman, 2011-03-13
-% Now the word "pages" is printed even if
-% there field pages is not empty.
-%
-
-FUNCTION { format.page.count }
-{
-  page.count empty.or.unknown
-    { "" }
-    {
-      articleno empty.or.unknown
-        { "numpages field, but no articleno field, in " cite$ * warning$ }
-        { }
-      if$
-      page.count "pages" tie.or.space.connect
-    }
-  if$
-}
-
-FUNCTION { format.articleno.numpages }
-{
-  %% There are seven possible outputs, depending on which fields are set.
-  %%
-  %% These four are handled here:
-  %%
-  %%     articleno, numpages, pages     -> "Article articleno-value, numpages-value pages"
-  %%     articleno, numpages            -> "Article articleno-value, numpages-value pages"
-  %%     articleno, pages               -> "Article articleno-value, reduced-pages-value pages"
-  %%     articleno                      -> "Article articleno-value" and warn about missing numpages
-  %%
-  %% The remaining three have already been handled by
-  %% format.pages.check.without.articleno:
-  %%
-  %%     numpages, pages                -> "pages-value"
-  %%     numpages                       -> "numpages-value"
-  %%     pages                          -> "pages-value"
-
-  articleno empty.or.unknown
-    {
-      numpages empty.or.unknown
-        { }
-        { "require articleno with numpages field in " cite$ * warning$ }
-      if$
-      ""
-    }
-    {
-      numpages empty.or.unknown
-        {
-          pages empty.or.unknown
-            {
-              "require pages or numpages fields with articleno field in " cite$ * warning$
-              "" 'page.count :=
-            }
-            { reduce.pages.to.page.count }
-          if$
-        }
-        { numpages 'page.count := }
-      if$
-
-      %% The Article number is now handled in format.day.month.year because
-      %% ACM prefers the style "Digital Libraries 12, 3, Article 5 (July 2008)"
-      %% over "Digital Libraries 12, 3 (July 2008), Article 5"
-      %% format.articleno output
-      format.page.count
-    }
-  if$
-}
-
-FUNCTION { format.journal.volume.number.day.month.year }
-{
-  % By Young (and Spencer)
-  % GNP - fixed bugs with missing volume, number, and/or pages
-  %
-  % Format journal, volume, number, pages for article types.
-  %
-  journal empty.or.unknown
-    { "no journal in " cite$ * warning$
-      "" }
-%    { journal emphasize.with.italic.correction }
-     {
-           journal "Journal of the ACM" =
-       { "{\it J. ACM}" }
-       {
-           journal "American Mathematical Society Translations" =
-       { "{\it Amer. Math. Soc. Transl.}" }
-       {
-           journal "Bulletin of the American Mathematical Society" =
-       { "{\it Bull. Amer. Math. Soc.}" }
-       {
-           journal "Proceedings of the American Mathematical Society" =
-       { "{\it Proc. Amer. Math. Soc.}" }
-       {
-           journal "Transactions of the American Mathematical Society" =
-       { "{\it Trans. Amer. Math. Soc.}" }
-       {
-           journal "Communications of the {ACM}" =
-       { "{\it Commun. {ACM}}" }
-       {
-           journal "{ACM} Computing Surveys" =
-       { "{\it Comput. Surveys}" }
-       {
-           journal "{ACM} Transactions on Mathematical Software" =
-       { "{\it {ACM} Trans. Math. Software}" }
-       {
-           journal "{ACM} {SIGNUM} Newsletter" =
-       { "{\it {ACM} {SIGNUM} Newslett.}" }
-       {
-           journal "American Journal of Sociology" =
-       { "{\it Amer. J. Sociology}" }
-       {
-           journal "Journal of the American Statistical Association" =
-       { "{\it J. Amer. Statist. Assoc.}" }
-       {
-           journal "Applied Mathematics and Computation" =
-       { "{\it Appl. Math. Comput.}" }
-       {
-           journal "American Mathematical Monthly" =
-       { "{\it Amer. Math. Monthly}" }
-       {
-           journal "British Journal of Mathematical and Statistical Psychology" =
-       { "{\it Brit. J. Math. Statist. Psych.}" }
-       {
-           journal "Canadian Mathematical Bulletin" =
-       { "{\it Canad. Math. Bull.}" }
-       {
-           journal "Journal of Computational and Applied Mathematics" =
-       { "{\it J. Comput. Appl. Math.}" }
-       {
-           journal "Journal of Computational Physics" =
-       { "{\it J. Comput. Phys.}" }
-       {
-           journal "Computers and Structures" =
-       { "{\it Comput. \& Structures}" }
-       {
-           journal "The Computer Journal" =
-       { "{\it Comput. J.}" }
-       {
-           journal "Journal of Computer and System Sciences" =
-       { "{\it J. Comput. System Sci.}" }
-       {
-           journal "Contemporary Mathematics" =
-       { "{\it Contemp. Math.}" }
-       {
-           journal "Crelle's Journal" =
-       { "{\it Crelle's J.}" }
-       {
-           journal "Giornale di Mathematiche" =
-       { "{\it Giorn. Mat.}" }
-       {
-           journal "{IEEE} Transactions on Computers" =
-       { "{\it {IEEE} Trans. Comput.}" }
-       {
-           journal "{IEEE} Transactions on Automatic Control" =
-       { "{\it {IEEE} Trans. Automat. Control}" }
-       {
-           journal "Proceedings of the {IEEE}" =
-       { "{\it Proc. {IEEE}}" }
-       {
-           journal "{IEEE} Transactions on Aerospace and Electronic Systems" =
-       { "{\it {IEEE} Trans. Aerospace Electron. Systems}" }
-       {
-           journal "{IMA} Journal of Numerical Analysis" =
-       { "{\it {IMA} J. Numer. Anal.}" }
-       {
-           journal "Information Processing Letters" =
-       { "{\it Inform. Process. Lett.}" }
-       {
-           journal "Journal of the Institute of Mathematics and its Applications" =
-       { "{\it J. Inst. Math. Appl.}" }
-       {
-           journal "International Journal of Control" =
-       { "{\it Internat. J. Control}" }
-       {
-           journal "International Journal for Numerical Methods in Engineering" =
-       { "{\it Internat. J. Numer. Methods Engrg.}" }
-       {
-           journal "International Journal of Supercomputing Applications" =
-       { "{\it Internat. J. Supercomputing Applic.}" }
-       {
-           journal "Journal of Research of the National Bureau of Standards" =
-       { "{\it J. Res. Nat. Bur. Standards}" }
-       {
-           journal "Linear Algebra and its Applications" =
-       { "{\it Linear Algebra Appl.}" }
-       {
-           journal "Journal of Mathematical Analysis and Applications" =
-       { "{\it J. Math. Anal. Appl.}" }
-       {
-           journal "Mathematische Annalen" =
-       { "{\it Math. Ann.}" }
-       {
-           journal "Journal of Mathematical Physics" =
-       { "{\it J. Math. Phys.}" }
-       {
-           journal "Mathematics of Computation" =
-       { "{\it Math. Comp.}" }
-       {
-           journal "Mathematica Scandinavica" =
-       { "{\it Math. Scand.}" }
-       {
-           journal "Mathematical Tables and Other Aids to Computation" =
-       { "{\it Math. Tables Aids Comput.}" }
-       {
-           journal "Numerische Mathematik" =
-       { "{\it Numer. Math.}" }
-       {
-           journal "Pacific Journal of Mathematics" =
-       { "{\it Pacific J. Math.}" }
-       {
-           journal "Journal of Parallel and Distributed Computing" =
-       { "{\it J. Parallel and Distrib. Comput.}" }
-       {
-           journal "Parallel Computing" =
-       { "{\it Parallel Comput.}" }
-       {
-           journal "Philosophical Magazine" =
-       { "{\it Philos. Mag.}" }
-       {
-           journal "Proceedings of the National Academy of Sciences of the USA" =
-       { "{\it Proc. Nat. Acad. Sci. U. S. A.}" }
-       {
-           journal "Quarterly Journal of Mathematics, Oxford, Series (2)" =
-       { "{\it Quart. J. Math. Oxford Ser. (2)}" }
-       {
-           journal "Quarterly of Applied Mathematics" =
-       { "{\it Quart. Appl. Math.}" }
-       {
-           journal "Review of the International Statisical Institute" =
-       { "{\it Rev. Inst. Internat. Statist.}" }
-       {
-           journal "Journal of the Society for Industrial and Applied Mathematics" =
-       { "{\it J. Soc. Indust. Appl. Math.}" }
-       {
-           journal "Journal of the Society for Industrial and Applied Mathematics, Series B, Numerical Analysis" =
-       { "{\it J. Soc. Indust. Appl. Math. Ser. B Numer. Anal.}" }
-       {
-           journal "{SIAM} Journal on Algebraic and Discrete Methods" =
-       { "{\it {SIAM} J. Algebraic Discrete Methods}" }
-       {
-           journal "{SIAM} Journal on Applied Mathematics" =
-       { "{\it {SIAM} J. Appl. Math.}" }
-       {
-           journal "{SIAM} Journal on Computing" =
-       { "{\it {SIAM} J. Comput.}" }
-       {
-           journal "{SIAM} Journal on Matrix Analysis and Applications" =
-       { "{\it {SIAM} J. Matrix Anal. Appl.}" }
-       {
-           journal "{SIAM} Journal on Numerical Analysis" =
-       { "{\it {SIAM} J. Numer. Anal.}" }
-       {
-           journal "{SIAM} Review" =
-       { "{\it {SIAM} Rev.}" }
-       {
-           journal "{SIAM} Journal on Scientific and Statistical Computing" =
-       { "{\it {SIAM} J. Sci. Statist. Comput.}" }
-       {
-           journal "Software Practice and Experience" =
-       { "{\it Software Prac. Experience}" }
-       {
-           journal "Statistical Science" =
-       { "{\it Statist. Sci.}" }
-       {
-           journal "{USSR} Computational Mathematics and Mathematical Physics" =
-       { "{\it {U. S. S. R.} Comput. Math. and Math. Phys.}" }
-       {
-           journal "Journal of {VLSI} and Computer Systems" =
-       { "{\it J. {VLSI} Comput. Syst.}" }
-       {
-           journal "Zeitschrift fur Angewandte Mathematik und Mechanik" =
-       { "{\it Z. Angew. Math. Mech.}" }
-       {
-           journal "Zeitschrift fur Angewandte Mathematik und Physik" =
-       { "{\it Z. Angew. Math. Phys.}" }
-       {
-           journal "ACM Computing Surveys" =
-       { "{\it Comput. Surveys}" }
-       {
-           journal "ACM Transactions on Mathematical Software" =
-       { "{\it ACM Trans. Math. Software}" }
-       {
-           journal "ACM {SIGNUM} Newsletter" =
-       { "{\it ACM {SIGNUM} Newslett.}" }
-       {
-           journal "IEEE Transactions on Computers" =
-       { "{\it IEEE Trans. Comput.}" }
-       {
-           journal "IEEE Transactions on Automatic Control" =
-       { "{\it IEEE Trans. Automat. Control}" }
-       {
-           journal "Proceedings of the IEEE" =
-       { "{\it Proc. IEEE}" }
-       {
-           journal "IEEE Transactions on Aerospace and Electronic Systems" =
-       { "{\it IEEE Trans. Aerospace Electron. Systems}" }
-       {
-           journal "IMA Journal of Numerical Analysis" =
-       { "{\it IMA J. Numer. Anal.}" }
-       {
-           journal "SIAM Journal on Algebraic and Discrete Methods" =
-       { "{\it SIAM J. Algebraic Discrete Methods}" }
-       {
-           journal "SIAM Journal on Applied Mathematics" =
-       { "{\it SIAM J. Appl. Math.}" }
-       {
-           journal "SIAM Journal on Computing" =
-       { "{\it SIAM J. Comput.}" }
-       {
-           journal "SIAM Journal on Matrix Analysis and Applications" =
-       { "{\it SIAM J. Matrix Anal. Appl.}" }
-       {
-           journal "SIAM Journal on Numerical Analysis" =
-       { "{\it SIAM J. Numer. Anal.}" }
-       {
-           journal "SIAM Review" =
-       { "{\it SIAM Rev.}" }
-       {
-           journal "SIAM Journal on Scientific and Statistical Computing" =
-       { "{\it SIAM J. Sci. Statist. Comput.}" }
-       {
-           journal "USSR Computational Mathematics and Mathematical Physics" =
-       { "{\it U. S. S. R. Comput. Math. and Math. Phys.}" }
-       {
-           journal "Journal of VLSI and Computer Systems" =
-       { "{\it J. VLSI Comput. Syst.}" }
-       {
-           journal "Communications of the ACM" =
-       { "{\it Commun. ACM}" }
-       %% If no match with cases needing special handling, just output journal name
-       {  journal emphasize.with.italic.correction  }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-         }
-    if$
-
-  number empty.or.unknown
-    {
-      volume empty.or.unknown
-        { "no number and no volume in " cite$ * warning$ "" * }
-        { " " * " {" * volume * "}" * }
-      if$
-    }
-    {
-      volume empty.or.unknown
-        {
-          "unusual to have number, but no volume, for " cite$ * warning$
-          " " * number *
-        }
-        { " " * volume comma " " * number * * }
-      if$
-    }
-  if$
-
-  format.day.month.year *
-}
-
-FUNCTION { format.chapter.pages }
-{
-  chapter empty.or.unknown
-    'format.pages
-    { type empty.or.unknown
-        { "Chapter" } % gnp - changed to mixed case
-        { type "t" change.case$ }
-      if$
-      chapter tie.or.space.connect
-      pages empty.or.unknown
-        {"page numbers missing in " cite$ * warning$} % gnp - added check
-        { ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.in.emphasize.booktitle }
-{ % jtb: format for collections or proceedings not appearing in a journal
-  booktitle empty.or.unknown
-  { "" }
-  { "In " format.emphasize.booktitle * }
-  if$
-}
-
-FUNCTION { format.in.booktitle }
-{ % jtb: format for proceedings appearing in a journal
-  booktitle empty.or.unknown
-  { "" }
-  { "In " booktitle * }
-  if$
-}
-
-FUNCTION { format.in.ed.booktitle }
-{
-  booktitle empty.or.unknown
-  { "" }
-  { editor empty.or.unknown
-    { "In " format.emphasize.booktitle * }
-                % jtb: swapped editor location
-    { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
-    if$
-  }
-  if$
-}
-
-FUNCTION { format.thesis.type }
-{ % call with default type on stack top
-  type empty.or.unknown
-    'skip$    % use default type
-    {
-      pop$    % discard default type
-      % NO: it is silly to have to brace protect every degree type!:  type "t" change.case$
-      type
-    }
-  if$
-}
-
-FUNCTION { format.tr.number }
-{
-  type empty.or.unknown
-%    { "Tech. Rep." }     
-    { "{T}echnical {R}eport" }     % ACM wants it explicit (Gerry 9/28)
-    'type
-  if$
-  number empty.or.unknown
-    { "t" change.case$ }
-    %% LOOKS BAD: { "." * number tie.or.space.connect }
-    %% Prefer "Research report RJ687." to "Research report. RJ687."
-    { number tie.or.space.connect }
-  if$
-}
-
-FUNCTION { format.advisor }
-{
-  advisor empty.or.unknown
-    { "" }
-    { "Advisor(s) " advisor * }
-  if$
-}
-
-FUNCTION { format.article.crossref }
-{ "See"
-  "\citeN{" * crossref * "}" *
-}
-
-FUNCTION { format.crossref.editor }
-{
-  editor #1 "{vv~}{ll}" format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { pop$ " et~al\mbox{.}" * }         % jrh: avoid spacing problems
-    { #2 <
-    'skip$
-    { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-        { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
-        { " and " * editor #2 "{vv~}{ll}" format.name$ * }
-      if$
-    }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.book.crossref }
-{
-  volume empty.or.unknown
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
-      "In "
-    }
-    { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
-      " of " *
-    }
-  if$
-  editor empty.or.unknown
-  editor field.or.null author field.or.null =
-  or
-    { key empty.or.unknown
-    { series empty.or.unknown
-        { "need editor, key, or series for " cite$ * " to crossref " *
-          crossref * warning$
-          "" *
-        }
-        { "{\em " * series * "\/}" * }
-      if$
-    }
-    { key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-  " \citeN{" * crossref * "}" *
-}
-
-FUNCTION { format.incoll.inproc.crossref }
-{ "See"
-  " \citeN{" * crossref * "}" *
-}
-
-FUNCTION { format.lab.names }
-{
-  % format.lab.names:
-  %
-  % determines "short" names for the abbreviated author information.
-  % "Long" labels are created in calc.label, using the routine my.full.label
-  % to format author and editor fields.
-  %
-  % There are 4 cases for labels.   (n=3 in the example)
-  % a) one author             Foo
-  % b) one to n               Foo, Bar and Baz
-  % c) use of "and others"    Foo, Bar et al.
-  % d) more than n            Foo et al.
-
-  's :=
-  s num.names$ 'numnames :=
-  numnames #2 >    % change number to number of others allowed before
-                   % forcing "et al".
-    { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
-    {
-      numnames #1 - 'namesleft :=
-      #2 'nameptr :=
-      s #1 "{vv~}{ll}" format.name$
-        { namesleft #0 > }
-        { nameptr numnames =
-            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-                { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
-                { " and " * s nameptr "{vv~}{ll}" format.name$ * }
-              if$
-            }
-            { ", " * s nameptr "{vv~}{ll}" format.name$ * }
-          if$
-          nameptr #1 + 'nameptr :=
-          namesleft #1 - 'namesleft :=
-        }
-      while$
-    }
-  if$
-}
-
-FUNCTION { author.key.label }
-{
-  author empty.or.unknown
-    { key empty.or.unknown
-          { "no key, author in " cite$ * warning$
-            cite$ #1 #3 substring$ }
-         'key
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { author.key.organization.label }
-{ % added - gnp. Provide label formatting by organization if author is null.
-  author empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "no key, author or organization in " cite$ * warning$
-              cite$ #1 #3 substring$ }
-            'key
-          if$
-        }
-        { organization }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { editor.key.organization.label }
-{ % added - gnp. Provide label formatting by organization if editor is null.
-  editor empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "no key, editor or organization in " cite$ * warning$
-              cite$ #1 #3 substring$ }
-            'key
-          if$
-        }
-        { organization }
-      if$
-    }
-    { editor format.lab.names }
-  if$
-}
-
-FUNCTION { author.editor.key.label }
-{
-  author empty.or.unknown
-    { editor empty.or.unknown
-          { key empty.or.unknown
-               { "no key, author, or editor in " cite$ * warning$
-                 cite$ #1 #3 substring$ }
-             'key
-           if$
-         }
-          { editor format.lab.names }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { calc.label }
-{
-  % Changed - GNP. See also author.organization.sort, editor.organization.sort
-  % Form label for BibTeX entry. The classification of which fields are used
-  % for which type of entry (book, inbook, etc.) are taken from alpha.bst.
-  % The change here from newapa is to also include organization as a
-  % citation label if author or editor is missing.
-
-  type$ "book" =
-  type$ "inbook" =
-  or
-  type$ "periodical" =
-  or
-    'author.editor.key.label
-    { type$ "proceedings" =
-        'editor.key.organization.label
-        { type$ "manual" =
-            'author.key.organization.label
-            'author.key.label
-          if$
-        }
-      if$
-    }
-  if$
-
-  author empty.or.unknown  % generate the full label citation information.
-    {
-      editor empty.or.unknown
-        {
-          organization empty.or.unknown
-            {
-              key empty.or.unknown
-                {
-                  "no author, editor, organization, or key in " cite$ * warning$
-                  "??"
-                }
-                { key }
-              if$
-            }
-            { organization }
-          if$
-        }
-        { editor my.full.label }
-      if$
-    }
-    { author my.full.label }
-  if$
-
-  % leave label on the stack, to be popped when required.
-
-  "}{" * swap$ * "}{" *
-  %  year field.or.null purify$ #-1 #4 substring$ *
-  %
-  % save the year for sort processing afterwards (adding a, b, c, etc.)
-  %
-  year field.or.null purify$ #-1 #4 substring$
-  'label.year :=
-}
-
-%
-% Change by Gerry: use number-like citations for transactions
-% 2011/03/23
-% Reverting: Ayman
-FUNCTION {output.bibitem}
-{ newline$
-  "\bibitem{" write$
-  cite$ write$
-  "}" write$
-  newline$
-  ""
-  before.all 'output.state :=
-}
-
-% FUNCTION { output.bibitem }
-% {
-%   newline$
-%   "\bibitem[\protect\citeauthoryear{" write$
-%   calc.label write$
-%   sort.year write$
-%   "}]%" writeln
-%   "        {" write$
-%   cite$ write$
-%   "}" writeln
-%   ""
-%   before.all 'output.state :=
-% }
-
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url }
-{ % enter and return with stack empty
-  %% We switch now from buffered output to output of complete lines, so
-  %% that the Issue .. URL data have their own lines, and are less likely
-  %% to be line-wrapped by BibTeX's short-sighted algorithm, which wraps
-  %% lines longer than 79 characters, backtracking to what it thinks is
-  %% a break point in the string.  Any such wrapping MUST be undone to
-  %% prevent percent-newline from appearing in DOIs and URLs.  The
-  %% output data are intentionally wrapped in \showxxx{} macros at
-  %% beginning of line, and that supply their own punctuation (if they
-  %% are not defined to suppress output entirely), to make it easier for
-  %% other software to recover them from .bbl files.
-  %%
-  %% It also makes it possible to later change the macro definitions
-  %% to suppress particular output values, or alter their appearance.
-  %%
-  %% Note that it is possible for theses, technical reports, and
-  %% manuals to have ISBNs, and anything that has an ISBN may also
-  %% have an ISSN.  When there are no values for these keys, there
-  %% is no output generated for them here.
-
-  "\newblock" writeln
-  after.block 'output.state :=
-
-  output.issue
-  output.isbn
-  output.coden  % CODEN is functionally like ISSN, so output them sequentially
-  output.issn
-  output.lccn
-  output.doi    % DOI is ALWAYS last according to CrossRef DOI documentation
-  output.url    % but ACM wants URL last
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url.note }
-{ % enter with stack empty, return with empty string on stack
-  output.issue.doi.coden.isxn.lccn.url
-  note empty.or.unknown
-    { }
-    {
-      "\newblock" writeln
-      output.note
-    }
-  if$
-  ""
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url.note.check }
-{ % enter with stack empty, return with empty string on stack
-  output.issue.doi.coden.isxn.lccn.url
-  note empty.or.unknown
-    { }
-    {
-      "\newblock" writeln
-      output.note.check
-    }
-  if$
-  ""
-}
-
-FUNCTION { article }
-{
-  output.bibitem
-
-  author empty.or.unknown
-    {
-      editor empty.or.unknown
-        { "neither author and editor supplied for " cite$ * warning$ }
-        { format.editors "editor" output.check }
-      if$
-    }
-    { format.authors "author" output.check }
-  if$
-
-  author format.no.key output       % added
-  output.year.check                 % added
-  new.block
-  format.articletitle "title" output.check
-  new.block
-  howpublished output
-
-  crossref missing$
-    { format.journal.volume.number.day.month.year }
-    {
-      "cross reference in @Article{...} is unusual" warning$
-      format.article.crossref output.nonnull
-    }
-  if$
-  output
-
-  format.pages.check.without.articleno output
-  format.articleno.numpages output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { book }
-{
-  output.bibitem
-  author empty.or.unknown
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-        { "author and editor" editor either.or.check }
-        'skip$
-      if$
-    }
-  if$
-  output.year.check       % added
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { new.sentence              % jtb: start a new sentence for series/volume
-      format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check    % jtb: require address
-      fin.sentence
-      pages empty.or.unknown
-        { format.bookpages }    % use bookpages when pages empty
-        { format.pages.check "pages" tie.or.space.connect }
-      if$
-      output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { booklet }
-{
-  output.bibitem
-  format.authors output
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title "title" output.check
-  new.block
-  howpublished output
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { inbook }
-{
-  output.bibitem
-  author empty.or.unknown
-    { format.editors
-      "author and editor" output.check
-    }
-    { format.authors output.nonnull
-      crossref missing$
-    { "author and editor" editor either.or.check }
-    'skip$
-      if$
-    }
-  if$
-  output.year.check                 % added
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { new.sentence              % jtb: start a new sentence for series/volume
-      format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check    % jtb: require address
-      format.bookpages output
-      format.chapter.pages
-      "chapter and pages" output.check  % jtb: moved from before publisher
-    }
-    {
-      format.bookpages output
-      format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { incollection }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output       % added
-  output.year.check              % added
-  new.block
-  format.articletitle "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      new.sentence                % jtb: start a new sentence for series/volume
-      format.bvolume output
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check      % jtb: require address
-      format.bookpages output
-      format.chapter.pages output % gnp - was special.output.nonnull
-                                  % left out comma before page numbers
-                                  % jtb: moved from before publisher
-    }
-    {
-      format.incoll.inproc.crossref output.nonnull
-      format.chapter.pages output
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { inproceedings }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output            % added
-  output.year.check                   % added
-  new.block
-  format.articletitle "title" output.check
-  howpublished output.dot.space
-  crossref missing$
-    {
-      journal missing$          % jtb: proceedings appearing in journals
-        { format.in.emphasize.booktitle format.city "booktitle"  output.check.dot.space
-          format.series output.removenospace
-          format.editors.fml output % BV 2011/09/27 Moved dot to comma
-          format.bvolume.noseries output
-          new.sentence
-          organization output
-          publisher "publisher" output.check % jtb: require publisher (?)
-          address "address" output.check  % jtb: require address
-          format.bookpages output
-        }
-        {
-           format.in.booktitle format.city "booktitle" output.check
-           format.editors.fml output
-           new.sentence
-           format.journal.volume.number.day.month.year output
-        }
-      if$
-      format.articleno output
-      format.pages.check.without.articleno output
-    }
-    {
-      format.incoll.inproc.crossref output.nonnull
-      format.articleno output
-      format.pages.check.without.articleno output
-    }
-  if$
-  format.articleno.numpages output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { conference } { inproceedings }
-
-FUNCTION { manual }
-{
-  output.bibitem
-  author empty.or.unknown
-    { editor empty.or.unknown
-      { organization "organization" output.check
-        organization format.key output }  % if all else fails, use key
-      { format.editors "author and editor" output.check }
-      if$
-    }
-    { format.authors output.nonnull }
-    if$
-  output.year.check                 % added
-  new.block
-  format.btitle "title" output.check
-  organization address new.block.checkb
-  % jtb: back to normal style: organization, address
-  organization "organization" output.check
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { mastersthesis }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
-  new.block
-  "Master's\ thesis" format.thesis.type output new.sentence  % Added dot. BV 2011/09/27
-  school "school" output.check
-  address output
-  new.block
-  format.advisor output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { misc }
-{
-  output.bibitem
-  format.authors output
-  author format.key output            % added
-  output.year.check                   % added
-  title howpublished new.block.checkb
-  format.title output
-  new.block
-  howpublished output
-  "" output.nonnull.dot.space
-  output.day.month.year              % Gerry - appears odd if (only) the year is 'repeated' but (appears) 'valuable' if the month/day is _also_ included - 2011/09/28
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { phdthesis }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
-  new.block
- "Ph.D. Dissertation" format.thesis.type output new.sentence % Added dot. BV 2011/09/27
-  school "school" output.check
-  address output
-  new.block
-  format.advisor output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION {format.date}
-{ year empty.or.unknown
-    { month empty.or.unknown
-        {
-          ""                    % output empty date if year/month both empty
-          day empty.or.unknown
-            {  }
-            { "there's a day but no month or year in " cite$ * warning$ }
-          if$
-        }
-        { "there's a month but no year in " cite$ * warning$
-          month
-          day empty.or.unknown
-            { }
-            { " " * day * }
-          if$
-        }
-      if$
-    }
-    { month empty.or.unknown
-        {
-          year                  % output only year if month empty
-          day empty.or.unknown
-            {  }
-            { "there's a day and year but no month in " cite$ * warning$ }
-          if$
-        }
-        {
-          month " " *
-          day empty.or.unknown
-            { }
-            { day * ", " * }
-          if$
-          year *
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION {new.block.checka}
-{
-  empty.or.unknown
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION { periodical }
-{
-  output.bibitem
-  editor empty.or.unknown
-    { organization output }
-    { format.editors output.nonnull }
-  if$
-  new.block
-  title emphasize "title" output.check
-  format.date output
-  new.sentence
-  publisher output
-  address output
-  howpublished new.block.checka
-  howpublished output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { proceedings }
-{
-  output.bibitem
-  editor empty.or.unknown
-    { organization output
-      organization format.key output }  % gnp - changed from author format.key
-    { format.editors output.nonnull }
-  if$
-  % author format.key output             % gnp - removed (should be either
-  %                                        editor or organization
-  output.year.check                    % added (newapa)
-  new.block
-  format.btitle format.city "title" output.check        % jtb: added city
-  new.sentence
-  format.bvolume output
-  format.number.series output
-  new.sentence
-  organization output
-  % jtb: normal order: publisher, address
-  publisher output
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { techreport }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output             % added
-  output.year.check                    % added
-  new.block
-  format.btitle "title" output.check
-  new.block
-%   format.tr.number output               % jtb: moved month ...
-  format.tr.number output new.sentence    % Gerry  - need dot 2011/09/28
-  institution "institution" output.check
-  address output
-  new.sentence
-  format.named.pages output
-  % ACM omits year at end in transactions style
-  % format.day.month.year output.nonnull.dot.space  % jtb: ... to here (no parens)
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { unpublished }
-{
-  output.bibitem
-  format.authors
-  "author" output.check
-  author format.key output              % added
-  output.year.check                     % added
-  new.block
-  format.title "title" output.check
-  fin.sentence
-  output.day.month.year                 % UTAH
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note.check
-  fin.entry
-}
-
-FUNCTION { default.type } { misc }
-
-%%% ACM journal-style month definitions: full name if 1--5 letters, else
-%%% abbreviation of 3 or 4 characters and a dot
-
-MACRO {jan}             {"Jan."}
-
-MACRO {feb}             {"Feb."}
-
-MACRO {mar}             {"March"}
-
-MACRO {apr}             {"April"}
-
-MACRO {may}             {"May"}
-
-MACRO {jun}             {"June"}
-
-MACRO {jul}             {"July"}
-
-MACRO {aug}             {"Aug."}
-
-MACRO {sep}             {"Sept."}
-
-MACRO {oct}             {"Oct."}
-
-MACRO {nov}             {"Nov."}
-
-MACRO {dec}             {"Dec."}
-
-
-%%% ====================================================================
-%%%                 I M P O R T A N T   C H A N G E
-%%%
-%%% For the 2009 release of the official acm-*.bst files, there are to
-%%% be NO predefined journal abbreviations in those style files.
-%%%
-%%% ACM may later develop an official list of mappings of full journal
-%%% names of commonly-cited journals to ACM-preferred abbreviations, but
-%%% authors should consider that use of any of these commented-out
-%%% abbreviations is DEPRECATED unless the BibTeX file itself provides
-%%% its own @String{name = "value"} definitions.
-%%%
-%%% Use of journal (and publisher and address) @String{...}
-%%% abbreviations, as opposed to explicit value assignments such as
-%%% journal = "J. ACM" and publisher = "IEEE", is preferred in
-%%% bibliographic databases, because it makes it easier for journal
-%%% production staff to replace those definitions by publisher-preferred
-%%% abbreviations when articles are typeset for publication.
-%%%
-%%% For historical reasons, and because some of these abbreviations are
-%%% used in other (non-ACM) bibliography style files, they are preserved
-%%% here in comments.  Future releases of the acm*-.bst files are likely
-%%% to remove them entirely.
-%%% ====================================================================
-%%%
-%%% DEPRECATED: MACRO {acmcs}           {"ACM Comput. Surv."}                   % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acmlett}         {"ACM Lett. Program. Lang. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acta}            {"Acta Inf."}                           % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ai}              {"Artificial Intelligence"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {al}              {"Ada Lett."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acr}             {"Adv. Comput. Res."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {bit}             {"Bit"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cacm}            {"Commun. ACM"}                         % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cj}              {"Comput. J."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cn}              {"Comput. Netw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cl}              {"Comput. Lang."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ibmjrd}          {"IBM J. Res. and Development"}         % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ibmsj}           {"IBM Systems Journal"}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ict}             {"Inf. Contr."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieebcs}          {"IEE/BCS Softw. Eng. J."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieees}           {"IEEE Softw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeese}          {"IEEE Trans. Softw. Eng."}             % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetc}          {"IEEE Trans. Comput."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetcad}        {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetpds}        {"IEEE Trans. Parall. Distrib. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetit}         {"IEEE Trans. Inf. Theory"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ipl}             {"Inf. Process. Lett."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {icp}             {"Inf. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ist}             {"Inf. Softw. Tech."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ijsa}            {"Int. J. Supercomput. Appl."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ijpp}            {"Int. J. Parallel Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jacm}            {"J. ACM"}                              % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: % MACRO {jcss}          {"Journal of Computer and System Sciences"} % original BibTeX
-%%% DEPRECATED: MACRO {jcss}            {"J. Comput. Syst. Sci."}               % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlp}             {"J. Logic Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jfp}             {"J. Funct. Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jsmrp}           {"J. Softw. Maint. Res. Pract."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jss}             {"J. Syst. Softw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlc}             {"J. Logic and Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlsc}            {"J. Lisp Symb. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {lpls}            {"Lett. Program. Lang. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mor}             {"Math. Oper. Res."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mscs}            {"Math. Struct. Comput. Sci."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mst}             {"Math. Syst. Theor."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ngc}             {"New Gen. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {scp}             {"Sci. Comput. Program."}               % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {sicomp}          {"SIAM J. Comput."}                     % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {spe}             {"Softw. Pract. Exper."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tocs}            {"ACM Trans. Comput. Syst."}            % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tods}            {"ACM Trans. Database Syst."}           % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tog}             {"ACM Trans. Graphics"}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toms}            {"ACM Trans. Math. Softw."}             % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toois}           {"ACM Trans. Office Inf. Syst."}        % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toplas}          {"ACM Trans. Program. Lang. Syst."}     % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tcs}             {"Theor. Comput. Sci."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tr}              {"Tech. Rep."}
-%%% ====================================================================
-
-READ
-
-FUNCTION { sortify }
-{
-  purify$
-  "l" change.case$
-}
-
-FUNCTION { chop.word }
-{
-  's :=
-  'len :=
-  s #1 len substring$ =
-    { s len #1 + global.max$ substring$ }
-    's
-  if$
-}
-
-FUNCTION { sort.format.names }
-{
-  's :=
-  #1 'nameptr :=
-  ""
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 >
-          { "   " * }
-         'skip$
-      if$
-  %      s nameptr "{ff{ } }{ll{ }}{  vv{ }}{  jj{ }}" format.name$ 't :=
-      s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
-      nameptr numnames = t "others" = and
-          { " et~al" * }
-          { t sortify * }
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION { sort.format.title }
-{
-  't :=
-  "A " #2
-    "An " #3
-      "The " #4 t chop.word
-    chop.word
-  chop.word
-  sortify
-  #1 global.max$ substring$
-}
-
-FUNCTION { author.sort }
-{
-  author empty.or.unknown
-    { key empty.or.unknown
-         { "to sort, need author or key in " cite$ * warning$
-           "" }
-         { key sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { author.editor.sort }
-{
-  author empty.or.unknown
-    {
-      editor empty.or.unknown
-         {
-           key empty.or.unknown
-             { "to sort, need author, editor, or key in " cite$ * warning$
-               ""
-             }
-             { key sortify }
-           if$
-         }
-         { editor sort.format.names }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { author.organization.sort }
-{
-  % added - GNP. Stack author or organization for sorting (from alpha.bst).
-  % Unlike alpha.bst, we need entire names, not abbreviations
-
-  author empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "to sort, need author, organization, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { organization sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { editor.organization.sort }
-{
-  % added - GNP. Stack editor or organization for sorting (from alpha.bst).
-  % Unlike alpha.bst, we need entire names, not abbreviations
-
-  editor empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "to sort, need editor, organization, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { organization sortify }
-      if$
-    }
-    { editor sort.format.names }
-  if$
-}
-
-FUNCTION { presort }
-{
-  % Presort creates the bibentry's label via a call to calc.label, and then
-  % sorts the entries based on entry type. Chicago.bst adds support for
-  % including organizations as the sort key; the following is stolen from
-  % alpha.bst.
-
-  calc.label sortify % recalculate bibitem label
-  year field.or.null purify$ #-1 #4 substring$ * % add year
-  "    "
-  *
-  type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.sort
-    { type$ "proceedings" =
-        'editor.organization.sort
-        { type$ "manual" =
-            'author.organization.sort
-            'author.sort
-          if$
-        }
-      if$
-    }
-  if$
-  #1 entry.max$ substring$        % added for newapa
-  'sort.label :=                  % added for newapa
-  sort.label                      % added for newapa
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE { presort }
-
-SORT             % by label, year, author/editor, title
-
-FUNCTION { initialize.extra.label.stuff }
-{ #0 int.to.chr$ 'last.label :=
-  "" 'next.extra :=
-  #0 'last.extra.num :=
-}
-
-FUNCTION { forward.pass }
-{
-  % Pass through all entries, comparing current entry to last one.
-  % Need to concatenate year to the stack (done by calc.label) to determine
-  % if two entries are the same (see presort)
-
-  last.label
-  % OLD:calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
-  % NEW:
-  author.key.label year field.or.null purify$ #-1 #4 substring$ * % add year
-  #1 entry.max$ substring$ =     % are they equal?
-     { last.extra.num #1 + 'last.extra.num :=
-       last.extra.num int.to.chr$ 'extra.label :=
-     }
-     { "a" chr.to.int$ 'last.extra.num :=
-       "" 'extra.label :=
-       % OLD: calc.label year field.or.null purify$ #-1 #4 substring$ * % add year
-       % NEW:
-       author.key.label year field.or.null purify$ #-1 #4 substring$ * % add year
-       #1 entry.max$ substring$ 'last.label := % assign to last.label
-     }
-  if$
-}
-
-FUNCTION { reverse.pass }
-{
-  next.extra "b" =
-    { "a" 'extra.label := }
-     'skip$
-  if$
-  label.year extra.label * 'sort.year :=
-  extra.label 'next.extra :=
-}
-
-EXECUTE {initialize.extra.label.stuff}
-
-ITERATE {forward.pass}
-
-REVERSE {reverse.pass}
-
-FUNCTION { bib.sort.order }
-{
-  sort.label
-  "    "
-  *
-  year field.or.null sortify
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE { bib.sort.order }
-
-SORT             % by sort.label, year, title --- giving final bib. order.
-
-FUNCTION { begin.bib }
-{
-  %% Set to #0 show 13-digit ISBN in preference to 10-digit ISBN.
-  %% Set to #1 to show both 10-digit and 13-digit ISBNs.
-  #1 'show-isbn-10-and-13 :=
-
-  "%%% -*-BibTeX-*-" writeln
-  "%%% Do NOT edit. File created by BibTeX with style" writeln
-  "%%% ACM-Reference-Format-Journals [18-Jan-2012]." writeln
-  "" writeln
-
-  preamble$ empty.or.unknown
-    'skip$
-    { preamble$ writeln }
-  if$
-  "\begin{thebibliography}{00}" writeln
-  ""                                                                         writeln
-  "%%% ====================================================================" writeln
-  "%%% NOTE TO THE USER: you can override these defaults by providing"       writeln
-  "%%% customized versions of any of these macros before the \bibliography"  writeln
-  "%%% command.  Each of them MUST provide its own final punctuation,"       writeln
-  "%%% except for \shownote{}, \showDOI{}, and \showURL{}.  The latter two"  writeln
-  "%%% do not use final punctuation, in order to avoid confusing it with"    writeln
-  "%%% the Web address."                                                     writeln
-  "%%%"                                                                      writeln
-  "%%% To suppress output of a particular field, define its macro to expand" writeln
-  "%%% to an empty string, or better, \unskip, like this:"                   writeln
-  "%%%"                                                                      writeln
-  "%%% \newcommand{\showDOI}[1]{\unskip}   % LaTeX syntax"                   writeln
-  "%%%"                                                                      writeln
-  "%%% \def \showDOI #1{\unskip}           % plain TeX syntax"               writeln
-  "%%%"                                                                      writeln
-  "%%% ====================================================================" writeln
-  ""                                                                         writeln
-
-  %% ACM publications do not use CODEN, ISSN, and LCCN data, so their default
-  %% macro wrappers expand to \unskip, discarding their values and unwanted
-  %% space.
-  %%
-  %% For other publications, prior definitions like these may be useful:
-  %%
-  %%     Plain TeX:
-  %%         \def \showCODEN     #1{CODEN #1.}
-  %%         \def \showISSN      #1{ISSN #1.}
-  %%         \def \showLCCN      #1{LCCN #1.}
-  %%
-  %%     LaTeX:
-  %%         \newcommand{\showCODEN}[1]{CODEN #1.}
-  %%         \newcommand{\showISSN}[1]#1{ISSN #1.}
-  %%         \newcommand{\showLCCN}[1]{LCCN #1.}
-
-  "\ifx \showCODEN    \undefined \def \showCODEN     #1{\unskip}     \fi" writeln
-  "\ifx \showDOI      \undefined \def \showDOI       #1{{\tt DOI:}\penalty0{#1}\ } \fi" writeln
-  % ACM styles omit ISBNs, but they can be included by suitable definitions of
-  % \showISBNx and \showISBNxiii before the .bbl file is read
-  "\ifx \showISBNx    \undefined \def \showISBNx     #1{\unskip}     \fi" writeln
-  "\ifx \showISBNxiii \undefined \def \showISBNxiii  #1{\unskip}     \fi" writeln
-  "\ifx \showISSN     \undefined \def \showISSN      #1{\unskip}     \fi" writeln
-  "\ifx \showLCCN     \undefined \def \showLCCN      #1{\unskip}     \fi" writeln
-  "\ifx \shownote     \undefined \def \shownote      #1{#1}          \fi" writeln % NB: final period supplied by add.period$ above
-  "\ifx \showarticletitle \undefined \def \showarticletitle #1{#1}   \fi" writeln
-  "\ifx \showURL      \undefined \def \showURL       #1{#1}          \fi" writeln
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION { end.bib }
-{
-  newline$
-  "\end{thebibliography}"
-  writeln
-}
-
-EXECUTE {end.bib}
-
-%%% End of ACM-Reference-Format-Journals.bst V1.00 - 18 January 2012
-

Deleted: trunk/Master/texmf-dist/bibtex/bst/acmart/acm-abbrv.bst
===================================================================
--- trunk/Master/texmf-dist/bibtex/bst/acmart/acm-abbrv.bst	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/bibtex/bst/acmart/acm-abbrv.bst	2016-07-14 21:38:03 UTC (rev 41692)
@@ -1,3311 +0,0 @@
-%%% -*-BibTeX-*-
-%%% ====================================================================
-%%%  @BibTeX-style-file{
-%%%     author          = "Nelson H. F. Beebe and many others",
-%%%     version         = "1.03",
-%%%     date            = "15 April 2011",
-%%%     time            = "23:40:53 EDT",
-%%%     filename        = "acm-abbrv.bst",
-%%%     address         = "University of Utah
-%%%                        Department of Mathematics, 110 LCB
-%%%                        155 S 1400 E RM 233
-%%%                        Salt Lake City, UT 84112-0090
-%%%                        USA",
-%%%     telephone       = "+1 801 581 5254",
-%%%     FAX             = "+1 801 581 4148",
-%%%     URL             = "http://www.math.utah.edu/~beebe",
-%%%     checksum        = "62819 3311 12013 90137",
-%%%     email           = "beebe at math.utah.edu, beebe at acm.org,
-%%%                        beebe at computer.org",
-%%%     codetable       = "ISO/ASCII",
-%%%     keywords        = "ACM abbrv bibliography style; BibTeX",
-%%%     license         = "public domain",
-%%%     supported       = "yes",
-%%%     abstract        = "",
-%%%     docstring       = "The checksum field above contains a CRC-16
-%%%                        checksum as the first value, followed by the
-%%%                        equivalent of the standard UNIX wc (word
-%%%                        count) utility output of lines, words, and
-%%%                        characters.  This is produced by Robert
-%%%                        Solovay's checksum utility.",
-%%%  }
-%%% ====================================================================
-
-% "ACM abbrv" BibTeX style, derived by minimal modifications from acm-plain.bst
-% "ACM Transactions" BibTeX style, acmtrans-v2.bst
-%  for BibTeX version 0.99c, LaTeX version 3.141
-%  ACM extensions with code cleaned up, extended, and debugged 10--15-Nov-2008
-%  Revised 28-MARCH-1996
-%  Revised 30-JUNE-1995
-%  Revised 15-JAN-1996
-%  Revised 17-APRIL-2008
-%  Revised 13-MARCH-2011
-%  Revised 27-MARCH-2011
-%  Revised 15-APRIL-2011
-%
-% Hacked by John T. Boyland at University of California, Berkeley
-% (with assistance by John R. Hauser)
-% Hacked by Andrew W. Appel and Rebecca L. Davies at Princeton University,
-% based on a "chicago.bst" by Glenn Paulley at U. Waterloo,
-% which was based on "newapa.bst" found at ymir.claremont.edu.
-%
-% Version 2.2
-% Johny Sebatian and Sanjeev Sharma
-% Aptara corp (c) 2008
-%
-% History
-%
-% Date: 28th April 2008
-%
-% 1. Avoid 'repeating' the 'month' values.
-% 2. Avoid incorrectly italicizing the volume number.
-% 3. Avoid non italicizing certain titles (book, inproceedings etc).
-% 4. NO series if there is NO volume.
-% 5. Sorting of reference with first surname.
-% 6. Article no added for Inproceedings.
-%
-% Date: 07th May 2008
-%
-% 1. Abbreviation list added
-%
-%   Citation format: [author-last-name year]
-%             [author-last-name and author-last-name year]
-%             [author-last-name, author-last-name, and author-last-name year]
-%             [author-last-name et al. year]
-%             [author-last-name]
-%             author-last-name [year]
-%             [author-last-name and author-last-name]
-%             [author-last-name et al.]
-%             [year] or [year,year]
-%             year or year,year
-%
-%   Reference list ordering: alphabetical by author or whatever passes
-%    for author in the absence of one.
-%
-% This BibTeX style has support for abbreviated author lists and for
-%    year-only citations.  This is done by having the citations
-%    actually look like
-%
-%    \citeauthoryear{full-author-info}{abbrev-author-info}{year}
-%
-% The LaTeX style has to have the following (or similar)
-%
-%     \let\@internalcite\cite
-%     \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
-%     \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite}
-%     \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
-%     \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite}
-%     \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite}
-%
-% These TeX macro definitions are found in acmtrans.sty. Additional
-% commands to manipulate different components of a citation can be defined
-% so that, for example, you can list author's names without parentheses
-% if using a citation as a noun or object in a sentence.
-%
-% Features of acmtrans.bst:
-% ========================
-%
-% - all authors appear last name first.
-% - all pages are listed xx-xx, (no pp.) and are at the end of the reference
-% - publishers are identified as publisher, address
-% - conferences papers (inproceedings) may give city of conference,
-%   date of conference, and journal that the proceedings appear in.
-% - months abbreviated to max four letters (eg. Mar.)
-% - volume of a series indicated after the title of the series
-% - editors appear after edited title and are identified by a trailing "Eds."
-%   not in parentheses.  Editor names are not given in small caps.
-%   (unless there is no author line)
-% - names terminated with a period even if there is no first name.
-% - editions are indicated trailing after the work, not in parentheses.
-% - "et al." citations have a protected period to avoid bad spacing (jrh)
-% - "address" required when publisher given
-% - series (roman) and volume are in a sentence separate from (book-)title
-%
-%
-% Features of chicago.bst:
-% =======================
-%
-% - full names used in citations, but abbreviated citations are available
-%   (see above)
-% - if an entry has a "month", then the month and year are also printed
-%   as part of that bibitem.
-% - all conjunctions use "and" instead of "\&"
-% - major modification from Chicago Manual of Style (13th ed.) is that
-%   only the first author in a reference appears last name first-
-%   additional authors appear as J. Q. Public.
-% - pages are listed as "pp. xx-xx" in all entry types except
-%   article entries.
-% - book, inbook, and manual use "location: publisher" (or organization)
-%   for address and publisher. All other types list publishers separately.
-% - "pp." are used to identify page numbers for all entry types except
-%   articles.
-% - organization is used as a citation label if neither author nor editor
-%   is present (for manuals).
-% - "et al." is used for long author and editor lists, or when "others"
-%   is used.
-%
-% Modifications and bug fixes from newapa.bst:
-% ===========================================
-%
-%   - added month, year to bib entries if month is present
-%   - fixed bug with In proceedings, added necessary comma after title
-%   - all conjunctions changed to "and" from "\&"
-%   - fixed bug with author labels in my.full.label: "et al." now is
-%        generated when "others" is an author name
-%   - major modification from Chicago Manual of Style (13th ed.) is that
-%     only the first author in a reference appears last name first-
-%     additional authors appear as J. Q. Public.
-%   - pages are listed as "pp. xx-xx" in all entry types except
-%     article entries. Unnecessary (IMHO) "()" around page numbers
-%     were removed, and page numbers now don't end with a period.
-%   - created chicago.sty for use with this bibstyle (required).
-%   - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
-%     number, and /or pages. Renamed to format.journal.volume.number.
-%   - fixed bug in formatting booktitles: additional period an error if
-%     book has a volume.
-%   - fixed bug: editors usually given redundant period before next clause
-%     (format.editors.dot) removed.
-%   - added label support for organizations, if both author and editor
-%     are missing (from alpha.bst). If organization is too long, then
-%     the key field is used for abbreviated citations.
-%   - In proceedings or books of several volumes, no comma was written
-%     between the "Volume x" and the page numbers (this was intentional
-%     in newapa.bst). Fixed.
-%   - Some journals may not have volumes/numbers, only month/year (eg.
-%     IEEE Computer). Fixed bug in article style that assumed volume/number
-%     was always present.
-%
-% Original documentation for newapa.sty:
-% =====================================
-%
-% This version was made by modifying the master file made by
-% Oren Patashnik (PATASHNIK at SCORE.STANFORD.EDU), and the 'named' BibTeX
-% style of Peter F. Patel-Schneider.
-%
-% Copyright (C) 1985, all rights reserved.
-% Copying of this file is authorized only if either
-% (1) you make absolutely no changes to your copy, including name, or
-% (2) if you do make changes, you name it something other than 'newapa.bst'.
-% There are undoubtably bugs in this style.  If you make bug fixes,
-% improvements, etc.  please let me know.  My e-mail address is:
-%    spencer at cgrg.ohio.state.edu or 71160.3141 at compuserve.com
-%
-% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
-% with lots of tweaking to make it look like APA style, along with tips
-% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
-
-ENTRY
-  { address
-    advisor
-    author
-    booktitle
-    chapter
-    city        % jtb: added
-    date        % jtb: added
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-        % New keys recognized for acmtrans-v2.bst
-        issue         % UTAH: used in, e.g., ACM SIGSAM Bulletin and ACM Communications in Computer Algebra
-        articleno
-        day           % UTAH: needed for newspapers, weeklies, bi-weeklies
-        doi           % UTAH
-        url           % UTAH
-        bookpages     % UTAH
-        numpages
-        lastaccessed  % UTAH: used only for @Misc{...}
-        coden         % UTAH
-        isbn          % UTAH
-        isbn-13       % UTAH
-        issn          % UTAH
-        lccn          % UTAH
-  }
-  {}
-  { label label.year extra.label sort.year sort.label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-INTEGERS { show-isbn-10-and-13 }  % initialized below in begin.bib
-
-INTEGERS { nameptr namesleft numnames }
-
-INTEGERS { multiresult }
-
-INTEGERS { len }
-
-INTEGERS { last.extra.num }
-
-STRINGS { s t t.org u }
-
-STRINGS { last.label next.extra }
-
-STRINGS { p1 p2 p3 page.count }
-
-FUNCTION { dump.stack.1 }
-{
-    duplicate$ "STACK[top] = [" swap$ * "]" * warning$
-}
-
-FUNCTION { dump.stack.2 }
-{
-    duplicate$ "STACK[top  ] = [" swap$ * "]" * warning$
-    swap$
-    duplicate$ "STACK[top-1] = [" swap$ * "]" * warning$
-    swap$
-}
-
-FUNCTION { empty.or.unknown }
-{
-  %% Examine the top stack entry, and push 1 if it is empty, or
-  %% consists only of whitespace, or is a string beginning with two
-  %% queries (??), and otherwise, push 0.
-  %%
-  %% This function provides a replacement for empty$, with the
-  %% convenient feature that unknown values marked by two leading
-  %% queries are treated the same as missing values, and thus, do not
-  %% appear in the output .bbl file, and yet, their presence in .bib
-  %% file(s) serves to mark values which are temporarily missing, but
-  %% are expected to be filled in eventually once more data is
-  %% obtained.  The TeX User Group and BibNet bibliography archives
-  %% make extensive use of this practice.
-  %%
-  %% An empty string cannot serve the same purpose, because just as in
-  %% statistics data processing, an unknown value is not the same as an
-  %% empty value.
-  %%
-  %% At entry: stack = ... top:[string]
-  %% At exit:  stack = ... top:[0 or 1]
-
-  duplicate$ empty$
-    { pop$ #1 }
-    { #1 #2 substring$ "??" = }
-  if$
-}
-
-FUNCTION { writeln }
-{
-  %% In BibTeX style files, the sequences
-  %%
-  %%     ... "one" "two" output
-  %%     ... "one" "two" output.xxx
-  %%
-  %% ship "one" to the output file, possibly following by punctuation,
-  %% leaving the stack with
-  %%
-  %%     ... "two"
-  %%
-  %% There is thus a one-string lag in output processing that must be
-  %% carefully handled to avoid duplicating a string in the output
-  %% file.  Unless otherwise noted, all output.xxx functions leave
-  %% just one new string on the stack, and that model should be born
-  %% in mind when reading or writing function code.
-  %%
-  %% BibTeX's asynchronous buffering of output from strings from the
-  %% stack is confusing because newline$ bypasses the buffer.  It
-  %% would have been so much easier for newline to be a character
-  %% rather than a state of the output-in-progress.
-  %%
-  %% The documentation in btxhak.dvi is WRONG:  it says
-  %%
-  %%    newline$ Writes onto the bbl file what's accumulated in the
-  %%             output buffer. It writes a blank line if and only
-  %%             if the output buffer is empty. Since write$ does
-  %%             reasonable line breaking, you should use this
-  %%             function only when you want a blank line or an
-  %%             explicit line break.
-  %%
-  %%    write$   Pops the top (string) literal and writes it on the
-  %%             output buffer (which will result in stuff being
-  %%             written onto the bbl file when the buffer fills
-  %%             up).
-  %%
-  %% Examination of the BibTeX source code shows that write$ does
-  %% indeed behave as claimed, but newline$ sends a newline character
-  %% directly to the output file, leaving the stack unchanged.  The
-  %% first line "Writes onto ... buffer." is therefore wrong.
-  %%
-  %% The original BibTeX style files almost always use "write$ newline$"
-  %% in that order, so it makes sense to hide that pair in a private
-  %% function like this one, named after a statement in Pascal,
-  %% the programming language embedded in the BibTeX Web program.
-
-  write$                % output top-of-stack string
-  newline$              % immediate write of newline (not via stack)
-}
-
-FUNCTION { init.state.consts }
-{
-  #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-}
-
-FUNCTION { output.nonnull }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<comma><space>
-  's :=
-  output.state mid.sentence =
-    {
-      ", " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln
-          "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.dot.space }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<dot><space>
-  's :=
-  output.state mid.sentence =           % { "<DEBUG output.nonnull.dot.space>. " * write$ }
-    {
-      ". " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.remove }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<space>
-  's :=
-  output.state mid.sentence =
-    {
-      " " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.removenospace }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S
-  's :=
-  output.state mid.sentence =
-    {
-      "" * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output }
-{ % discard top token if empty, else like output.nonnull
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION { output.dot.space }
-{ % discard top token if empty, else like output.nonnull.dot.space
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull.dot.space
-  if$
-}
-
-FUNCTION { output.removenospace }
-{ % discard top token if empty, else like output.nonnull.removenospace
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull.removenospace
-  if$
-}
-
-FUNCTION { output.check }
-{ % like output, but warn if key name on top-of-stack is not set
-  't :=
-  duplicate$ empty.or.unknown
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull
-  if$
-}
-
-FUNCTION { output.check.dot.space }
-{ % like output.dot.space, but warn if key name on top-of-stack is not set
-  't :=
-  duplicate$ empty.or.unknown
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull.dot.space
-  if$
-}
-
-FUNCTION { fin.block }
-{ % functionally, but not logically, identical to fin.entry
-   add.period$
-   writeln
-}
-
-FUNCTION { fin.entry }
-{
-   add.period$
-   writeln
-}
-
-FUNCTION { new.sentence }
-{ % update sentence state, with neither output nor stack change
-  output.state after.block =
-    'skip$
-    {
-      output.state before.all =
-        'skip$
-        { after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION { fin.sentence }
-{
-   add.period$
-   write$
-   new.sentence
-   ""
-}
-
-FUNCTION { new.block }
-{
-  output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION { output.coden }       % UTAH
-{ % output non-empty CODEN as one-line sentence (stack untouched)
-  coden empty.or.unknown
-    { }
-    { "\showCODEN{" coden * "}" * writeln }
-  if$
-}
-
-FUNCTION { format.articleno }
-{
-  articleno empty.or.unknown
-     { "" }
-     {
-        numpages empty.or.unknown
-          { "articleno field, but no numpages field, in " cite$ * warning$ }
-          { }
-        if$
-        "Article " articleno *
-     }
-  if$
-}
-
-FUNCTION { format.year }
-{ % push year string or "????" onto output stack
-  %% Because year is a mandatory field, we always force SOMETHING
-  %% to be output
-  year empty.or.unknown
-    { "????" }
-    { year }
-  if$
-}
-
-FUNCTION { format.day.month }
-{ % push "day month " or "month " or "" onto output stack
-  day empty.or.unknown
-    {
-      month empty.or.unknown
-        { "" }
-        { month " " *}
-      if$
-    }
-    {
-      month empty.or.unknown
-        { "" }
-        { day " " * month * " " *}
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.day.month.year }     % UTAH
-{ % if month is empty, push "" else push "(MON.)" or "(DD MON.)"
-  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
-  % acm-*.bst addition: prefix parenthesized date string with
-  % ", Article nnn "
-  articleno empty.or.unknown
-    { "" }
-    { ", " format.articleno * }
-  if$
-  " (" * format.day.month * format.year * ")" *
-}
-
-FUNCTION { output.day.month.year }     % UTAH
-{ % if month is empty value, do nothing; else output stack top and
-  % leave with new top string "(MON.)" or "(DD MON.)"
-  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
-  format.day.month.year
-  output.nonnull.remove
-}
-
-FUNCTION { strip.doi } % UTAH
-{ % Strip any Web address prefix to recover the bare DOI, leaving the
-  % result on the output stack, as recommended by CrossRef DOI
-  % documentation.
-  % For example, reduce "http://doi.acm.org/10.1145/1534530.1534545" to
-  % "10.1145/1534530.1534545".  That is later typeset and displayed as
-  % doi:10.1145/1534530.1534545 as the LAST item in the reference list
-  % entry.  Publisher Web sites wrap this with a suitable link to a real
-  % URL to resolve the DOI, and the master http://dx.doi.org/ address is
-  % preferred, since publisher-specific URLs can disappear in response
-  % to economic events.  All journals are encouraged by the DOI
-  % authorities to use that typeset format and link procedures for
-  % uniformity across all publications that include DOIs in reference
-  % lists.
-  % The numeric prefix is guaranteed to start with "10.", so we use
-  % that as a test.
-  doi #1 #3 substring$ "10." =
-    { doi }
-    {
-      doi #1 #7 substring$ "http://" =
-        {
-            doi #8 doi text.length$ #7 - substring$ 't := % get modifiable copy of rest of DOI
-
-            "INTERNAL STYLE-FILE ERROR" 's :=
-
-            % search for next "/" and assign its suffix to s
-
-            { t text.length$ }
-            {
-              t #1 #1 substring$ "/" =
-                {
-                  % save rest of string as true DOI (should be 10.xxxx/yyyy)
-                  t #2 t text.length$ #1 - substring$ 's :=
-                  "" 't :=    % empty string t terminates the loop
-                }
-                {
-                  % discard first character and continue loop: t <= substring(t,2,last)
-                  t #2 t text.length$ #1 - substring$ 't :=
-                }
-              if$
-            }
-            while$
-
-            % check for valid DOI (should be 10.xxxx/yyyy)
-            s #1 #3 substring$ "10." =
-              { }
-              { "unrecognized DOI substring " s * " in DOI value [" * doi * "]" * warning$ }
-            if$
-
-            s   % push the stripped DOI on the output stack
-
-        }
-        {
-          "unrecognized DOI value [" doi * "]" * warning$
-          doi   % push the unrecognized original DOI on the output stack
-        }
-      if$
-    }
-  if$
-}
-
-%
-% Change by BV: added standard prefix to URL
-%
-FUNCTION { output.doi } % UTAH
-{ % output non-empty DOI as one-line sentence (stack untouched)
-  doi empty.or.unknown
-    { }
-    {
-      %% NB: We want URLs at beginning of line to reduce likelihood of
-      %% BibTeX's nasty line wrapping after column 79, which then requires
-      %% manual (or automated) editing of the .bbl file to repair.
-      %% The \url{} macro strips percent-newlines, and is thus safe in
-      %% the presence of the line wrapping, but \path|...| and
-      %% \verb|...| do not.
-      "\showDOI{%" writeln
-      "\url{http://dx.doi.org/" strip.doi * "}}" * writeln
-    }
-  if$
-}
-
-FUNCTION { output.isbn }                % UTAH
-{ % output non-empty ISBN-10 and/or ISBN-13 as one-line sentences (stack untouched)
-  show-isbn-10-and-13
-    {
-      %% show both 10- and 13-digit ISBNs
-      isbn empty.or.unknown
-        { }
-        {
-          "\showISBNx{" isbn * "}" * writeln
-        }
-      if$
-      isbn-13 empty.or.unknown
-        { }
-        {
-          "\showISBNxiii{" isbn-13 * "}" * writeln
-        }
-      if$
-    }
-    {
-      %% show 10-digit ISBNs only if 13-digit ISBNs not available
-      isbn-13 empty.or.unknown
-        {
-          isbn empty.or.unknown
-            { }
-            {
-              "\showISBNx{" isbn * "}" * writeln
-            }
-          if$
-        }
-        {
-          "\showISBNxiii{" isbn-13 * "}" * writeln
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION { output.issn } % UTAH
-{ % output non-empty ISSN as one-line sentence (stack untouched)
-  issn empty.or.unknown
-    { }
-    { "\showISSN{" issn * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.issue }
-{ % output non-empty issue number as a one-line sentence (stack untouched)
-  issue empty.or.unknown
-     { }
-     { "Issue " issue * "." * writeln }
-  if$
-}
-
-FUNCTION { output.lccn } % UTAH
-{ % return with stack untouched
-  lccn empty.or.unknown
-    { }
-    { "\showLCCN{" lccn * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.note } % UTAH
-{ % return with stack empty
-  note empty.or.unknown
-    { }
-    { "\shownote{" note add.period$ * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.note.check } % UTAH
-{ % return with stack empty
-  note empty.or.unknown
-    { "empty note in " cite$ * warning$ }
-    { "\shownote{" note add.period$ * "}" * writeln }
-  if$
-}
-
-
-%
-% Changes by BV 2011/04/15.  Do not output
-% url if doi is defined
-%
-FUNCTION { output.url } % UTAH
-{ % return with stack untouched
-  % output URL and associated lastaccessed fields
-  doi empty.or.unknown
-  {
-    url empty.or.unknown
-      { }
-      {
-          %% NB: We want URLs at beginning of line to reduce likelihood of
-          %% BibTeX's nasty line wrapping after column 79, which would require
-          %% manual (or automated) editing of the .bbl file to repair.  However,
-          %% the \url{} macro handles the unwrapping job automatically.
-          "\showURL{%" writeln
-          lastaccessed empty.or.unknown
-            { "" }
-            { "Retrieved " lastaccessed * " from " * }
-          if$
-
-          %% The URL field may contain a semicolon-separated list of Web
-          %% addresses, and we locate and wrap each of them in \url{...}.
-          %% The simplistic approach of putting the entire list into the
-          %% macro argument is that the semicolons are typeset in a
-          %% typewriter font, and no space follows them.
-          %%
-          %% We therefore replace the original code
-          %%    "\url{" * url * "}}" * writeln
-          %% with this character-at-a-time loop:
-
-          "\url{" *
-
-          url 't :=                       % get modifiable copy of URL list
-
-          { t text.length$ }
-          {
-            t #1 #1 substring$ ";" =
-              {                         % then split argument at separator
-                "};" * writeln
-                "\url{"
-              }
-              {                         % else concatenate nonblank character to argument
-                t #1 #1 substring$ " " =
-                  { }
-                  { t #1 #1 substring$ * }
-                if$
-              }
-            if$
-
-            t #2 t text.length$ #1 - substring$ 't :=
-          }
-          while$
-
-          "}}" * writeln
-      }
-    if$
-  }
-  { }
-  if$
-}
-
-FUNCTION { output.year.check }
-{ % warn if year empty, else output top string and leave " YEAR<label>" on stack in mid-sentence
-  year empty.or.unknown
-     { "empty year in " cite$ * warning$ }
-     { write$
-        " " year * extra.label *
-       mid.sentence 'output.state :=
-     }
-  if$
-}
-
-FUNCTION { not }
-{
-    { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION { and }
-{
-    'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION { or }
-{
-   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION { le }
-{
-  %% test whether first number is less than or equal to second number
-  %% stack in:  n1 n2
-  %% stack out: if n1 <= n2 then 1 else 0
-
-  %% "DEBUG: le " cite$ * warning$
-  > { #0 } { #1 } if$
-}
-
-FUNCTION { ge }
-{
-  %% test whether first number is greater than or equal to second number
-  %% stack in:  n1 n2
-  %% stack out: if n1 >= n2 then 1 else 0
-
-  %% "DEBUG: ge " cite$ * warning$
-  < { #0 } { #1 } if$
-}
-
-FUNCTION { is.leading.digit }
-{
-  %% test whether first character of string is a digit
-  %% stack in:  string
-  %% stack out: if first-char-is-digit then 1 else 0
-
-  #1 #1 substring$                      % replace string by string[1:1]
-  duplicate$                            % string[1:1] string[1:1]
-  chr.to.int$
-  "0" chr.to.int$ swap$ le              % "0" <= string[1:1] --> 0-or-1
-  swap$                                 % 0-or-1 string[1:1]
-  chr.to.int$
-  "9" chr.to.int$ le                    % string[1:1} <= "9" --> 0-or-1
-  and
-}
-
-FUNCTION { skip.digits }
-{
-  %% skip over leading digits in string
-  %% stack in:  string
-  %% stack out: rest-of-string leading-digits
-
-  duplicate$
-  't :=
-  't.org :=
-  "" 'u :=
-
-  { t text.length$ }
-  {
-    %% "=================DEBUG: skip.digits   t = [" t * "]" * warning$
-    t is.leading.digit
-      { t #2 t text.length$ #1 - substring$ }
-      {
-        t 'u :=
-        ""
-      }
-    if$
-    't :=
-  }
-  while$
-
-  u                                                             % rest of string
-  t.org #1 t.org text.length$ u text.length$ - substring$       % leading digits
-}
-
-FUNCTION { skip.nondigits }
-{
-  %% skip over leading nondigits in string
-  %% stack in:  string
-  %% stack out: rest-of-string
-
-  't :=
-  "" 'u :=
-
-  { t text.length$ }
-  {
-    t is.leading.digit
-      {
-        t 'u :=
-        ""
-      }
-      { t #2 t text.length$ #1 - substring$ }
-    if$
-    't :=
-  }
-  while$
-
-  u                     % rest of string
-}
-
-FUNCTION { parse.next.number }
-{
-  %% stack in:  string
-  %% stack out: rest-of-string next-numeric-part-of-string
-  %% Example:
-  %% stack in:  "123:1--123:59"
-  %% stack out: ":1--123:59" "123"
-
-  's :=
-  s skip.nondigits 's :=
-  s skip.digits
-}
-
-FUNCTION { reduce.pages.to.page.count }
-{
-  %% Stack in:  arbitrary-and-unused
-  %% Stack out: unchanged
-  %%
-  %% For the new-style pagination with article number and numpages or
-  %% pages, we expect to have BibTeX entries containing something like
-  %%     articleno = "17",
-  %%     pages     = "1--23",
-  %% with output "Article 17, 23 pages",
-  %% or
-  %%     articleno = "17",
-  %%     numpages  = "23",
-  %% with output "Article 17, 23 pages",
-  %% or
-  %%     articleno = "17",
-  %%     pages     = "17:1--17:23",
-  %% with output "Article 17, 23 pages",
-  %%
-  %% If articleno is missing or empty, then we should output "1--23",
-  %% "23" (with a warning of a missing articleno), or "17:1--17:23",
-  %% respectively.
-
-  %% "DEBUG: enter reduce.pages.to.page.count " cite$ * warning$
-
-  %% "DEBUG: pages = [" pages * "]" * warning$
-
-  pages
-  parse.next.number 'p1 :=
-  parse.next.number 'p2 :=
-  parse.next.number 'p3 :=
-  parse.next.number 'page.count :=
-
-  duplicate$
-  empty.or.unknown
-    {  }
-    {
-      duplicate$ "unexpected trailing garbage [" swap$ *
-      "] after n:p1--n:p2 in pages = [" *
-      pages *
-      "] in " *
-      cite$ *
-      warning$
-    }
-  if$
-
-  pop$
-
-  %% "DEBUG: reduce.pages.to.page.count: "
-  %% " p1 = " p1 * *
-  %% " p2 = " p2 * *
-  %% " p3 = " p3 * *
-  %% " p4 = " page.count * *
-  %% " in " cite$ * * warning$
-
-  p1 p3 =   p2 "1" =   and   numpages empty.or.unknown   and
-    { "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$ }
-    {
-      numpages empty.or.unknown
-        { pages }
-        { numpages }
-      if$
-      'page.count :=
-    }
-  if$
-
-  p1 "1" =   p3 empty.or.unknown   and   numpages empty.or.unknown   and
-    {
-      p2 'page.count :=
-      "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$
-    }
-    {
-      numpages empty.or.unknown
-        { pages }
-        { numpages }
-      if$
-      'page.count :=
-    }
-  if$
-
-  %% "DEBUG: leave reduce.pages.to.page.count " cite$ * warning$
-}
-
-FUNCTION { new.block.checkb }
-{ % issue a new.block only if at least one of top two stack strings is not empty
-  empty.or.unknown
-  swap$ empty.or.unknown
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION { field.or.null }
-{ % convert empty value to null string, else return value
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION { emphasize }
-{ % emphasize a non-empty top string on the stack (WITHOUT italic correction)
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{\em " swap$ * "}" * }
-  if$
-}
-
-FUNCTION { emphasize.with.italic.correction }
-{ % convert empty string to null string, or emphasize with a trailing italic correction
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{\em " swap$ * "\/}" * }
-  if$
-}
-
-FUNCTION { comma }
-{ % convert empty string to null string, or brace string and add trailing comma
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{" swap$ * "}," * }
-  if$
-}
-
-FUNCTION { format.names }
-{
-  % Format bibliographical entries with the first author last name first,
-  % and subsequent authors with initials followed by last name.
-  % All names are formatted in this routine.
-
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 =
-        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
-        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
-        {"{" s nameptr "{f. }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
-        {"{" s nameptr "{f. }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
-      if$
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "others" =
-                { " {et~al\mbox{.}}" * } % jrh: avoid spacing problems
-                { " {and} " * t * } % from Chicago Manual of Style
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-}
-
-FUNCTION { my.full.label }
-{
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-
-    { s nameptr "{vv~}{ll}" format.name$ 't :=  % get the next name
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "others" =
-                { " et~al\mbox{.}" * } % jrh: avoid spacing problems
-                { " and " * t * } % from Chicago Manual of Style
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-
-}
-
-FUNCTION { format.names.fml }
-{
-  % Format names in "familiar" format, with first initial followed by
-  % last name. Like format.names, ALL names are formatted.
-  % jtb: The names are NOT put in small caps
-
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-
-    {
-      "{" s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
-
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "{others}" =
-                { " {et~al\mbox{.}}" * }
-                { " {and} " * t * }
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-}
-
-FUNCTION { format.authors }
-{
-  author empty.or.unknown
-    { "" }
-    { author format.names add.period$} % jtb: add period if none before
-  if$
-}
-
-FUNCTION { format.key }
-{
-  empty.or.unknown
-    { key field.or.null }
-    { "" }
-  if$
-}
-
-FUNCTION { format.no.key }
-{
-  empty.or.unknown
-    { "" }
-    { "" }
-  if$
-}
-
-FUNCTION { format.editors.fml }
-{
-  % Format editor names for use in the "in" types: inbook, incollection,
-  % inproceedings: first initial, then last names. When editors are the
-  % LABEL for an entry, then format.editor is used which lists editors
-  % by last name first.
-
-  editor empty.or.unknown
-    { "" }
-    {
-      editor format.names.fml editor num.names$ #1 >
-        { " (Eds.)" * }
-        { " (Ed.)" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.editors }
-{ % format editor names for use in labels, last names first.
-  editor empty.or.unknown
-    { "" }
-    {
-      editor format.names
-      editor num.names$ #1 >
-        { " (Eds.)." * }
-        { " (Ed.)." * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.articletitle }
-{
-  title empty.or.unknown
-    { "" }
-    % Use this to preserve lettercase in titles:
-    { "\showarticletitle{" title * "}" * }
-    % Use this for downcase title style:
-    % { \showarticletitle{" title "t" change.case$ * "}" * }
-  if$
-}
-
-FUNCTION { format.title }
-{
-  title empty.or.unknown
-    { "" }
-    % Use this to preserve lettercase in titles:
-    { title }
-    % Use this for downcase title style:
-    % { title "t" change.case$ }
-  if$
-}
-
-FUNCTION { n.dashify }
-{
-  't :=
-  ""
-    { t empty.or.unknown not }
-    {
-      t #1 #1 substring$ "-" =
-        {
-          t #1 #2 substring$ "--" = not
-            { "--" *
-              t #2 global.max$ substring$ 't :=
-            }
-            {
-              { t #1 #1 substring$ "-" = }
-              {
-                "-" *
-                t #2 global.max$ substring$ 't :=
-              }
-              while$
-            }
-          if$
-        }
-        {
-          t #1 #1 substring$ *
-          t #2 global.max$ substring$ 't :=
-        }
-      if$
-    }
-  while$
-}
-
-FUNCTION { format.btitle }
-{
-  edition empty.or.unknown
-  { title emphasize }
-  { title empty.or.unknown
-    { title emphasize } % jtb: what is this supposed to do ?!?
-    { "{\em " title * "\/} (" * edition "l" change.case$ * " ed.)" * } % jtb: no parens for ed.
-    if$
-  }
-  if$
-}
-
-FUNCTION { format.emphasize.booktitle }
-{ % push "" or "{\em booktitle}" or "{\em booktitle}, (second ed.)" on stack
-  edition empty.or.unknown
-    { booktitle emphasize }
-    { booktitle empty.or.unknown
-      { "" }
-      { "{\em " booktitle * "} (" * edition "l" change.case$ * " ed.)" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.city }
-{
-  % jtb: if the preceding string (the title of the conference) is non-empty,
-  % jtb: append the location, otherwise leave empty (so as to trigger the
-  % jtb: error message in output.check
-
-  duplicate$ empty.or.unknown
-    { }
-    {
-      city empty.or.unknown
-        {
-          date empty.or.unknown
-            { }
-            { " (" * date * ")" * }
-          if$
-        }
-        {
-          date empty.or.unknown
-            { " (" * city * ")" * }
-            { " (" * city * ", " * date * ")" * }
-          if$
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION { tie.or.space.connect }
-{
-  duplicate$ text.length$ #3 <
-    { "~" }
-    { " " }
-  if$
-  swap$ * *
-}
-
-FUNCTION { either.or.check }
-{
-  empty.or.unknown
-    'pop$
-    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
-  if$
-}
-
-FUNCTION { format.bvolume }
-{
-  % jtb: If there is a series, this is added and the volume trails after it.
-  % jtb: Otherwise, "Vol" is Capitalized.
-
-  volume empty.or.unknown
-    { "" }
-    {
-      series empty.or.unknown
-        { "Vol." volume tie.or.space.connect}
-        { series ", " * "Vol." volume tie.or.space.connect *}
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION { format.bvolume.noseries }
-{
-  volume empty.or.unknown
-    { "" }
-    {
-      series empty.or.unknown
-        { "Vol." volume tie.or.space.connect}
-        { "Vol." volume tie.or.space.connect}
-%        { series ", " * "Vol." volume tie.or.space.connect *}
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION { format.series }
-{
-  series empty.or.unknown
-    {""}
-    {" {\em (" * series ")}" *}
-  if$
-}
-
-FUNCTION { format.number.series }
-{
-  volume empty.or.unknown
-    {
-      number empty.or.unknown
-        {
-          volume empty.or.unknown
-          { "" }
-          {
-            series empty.or.unknown
-              { "" }
-              { " (" series * ")" * }
-            if$
-          }
-          if$
-        }                                       %    { series field.or.null }
-        {
-          output.state mid.sentence =
-            { "Number" }                        % gnp - changed to mixed case always
-            { "Number" }
-          if$
-          number tie.or.space.connect series empty.or.unknown
-            { "there's a number but no series in " cite$ * warning$ }
-            { " in " * series * }
-          if$
-        }
-      if$
-    }
-    {
-      ""
-    }
-  if$
-}
-
-FUNCTION { multi.page.check }
-{
-  't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty.or.unknown not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
-    { #1 'multiresult := }
-    { t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION { format.pages }
-{
-  pages empty.or.unknown
-    { "" }
-    {
-      pages multi.page.check
-        { pages n.dashify } % gnp - removed () % jtb: removed pp.
-        { pages }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.pages.check.without.articleno }
-{ %% format pages field only if articleno is absent
-  %% Stack out: pages-specification
-  numpages missing$ pages missing$ and
-    { "page numbers missing in both pages and numpages fields in " cite$ * warning$ }
-    { }
-  if$
-
-  articleno empty.or.unknown
-    {
-      pages missing$
-        { numpages }
-        { format.pages }
-      if$
-    }
-    { "" }
-  if$
-}
-
-FUNCTION { format.pages.check }
-{
-  pages empty.or.unknown
-    { "page numbers missing in " cite$ * warning$ "" }
-    { pages n.dashify }
-  if$
-}
-
-FUNCTION { format.bookpages }
-{
-  bookpages empty.or.unknown
-    { "" }
-    { bookpages "book pages" tie.or.space.connect }
-  if$
-}
-
-FUNCTION { format.named.pages }
-{
-  pages empty.or.unknown
-    { "" }
-    { format.pages "pages" tie.or.space.connect }
-  if$
-}
-
-%
-% Changed by Boris Veytsman, 2011-03-13
-% Now the word "pages" is printed even if
-% there field pages is not empty.
-%
-
-FUNCTION { format.page.count }
-{
-  page.count empty.or.unknown
-    { "" }
-    {
-      articleno empty.or.unknown
-        { "numpages field, but no articleno field, in " cite$ * warning$ }
-        { }
-      if$
-      page.count "pages" tie.or.space.connect
-    }
-  if$
-}
-
-FUNCTION { format.articleno.numpages }
-{
-  %% There are seven possible outputs, depending on which fields are set.
-  %%
-  %% These four are handled here:
-  %%
-  %%     articleno, numpages, pages     -> "Article articleno-value, numpages-value pages"
-  %%     articleno, numpages            -> "Article articleno-value, numpages-value pages"
-  %%     articleno, pages               -> "Article articleno-value, reduced-pages-value pages"
-  %%     articleno                      -> "Article articleno-value" and warn about missing numpages
-  %%
-  %% The remaining three have already been handled by
-  %% format.pages.check.without.articleno:
-  %%
-  %%     numpages, pages                -> "pages-value"
-  %%     numpages                       -> "numpages-value"
-  %%     pages                          -> "pages-value"
-
-  articleno empty.or.unknown
-    {
-      numpages empty.or.unknown
-        { }
-        { "require articleno with numpages field in " cite$ * warning$ }
-      if$
-      ""
-    }
-    {
-      numpages empty.or.unknown
-        {
-          pages empty.or.unknown
-            {
-              "require pages or numpages fields with articleno field in " cite$ * warning$
-              "" 'page.count :=
-            }
-            { reduce.pages.to.page.count }
-          if$
-        }
-        { numpages 'page.count := }
-      if$
-
-      %% The Article number is now handled in format.day.month.year because
-      %% ACM prefers the style "Digital Libraries 12, 3, Article 5 (July 2008)"
-      %% over "Digital Libraries 12, 3 (July 2008), Article 5"
-      %% format.articleno output
-      format.page.count
-    }
-  if$
-}
-
-FUNCTION { format.journal.volume.number.day.month.year }
-{
-  % By Young (and Spencer)
-  % GNP - fixed bugs with missing volume, number, and/or pages
-  %
-  % Format journal, volume, number, pages for article types.
-  %
-  journal empty.or.unknown
-    { "no journal in " cite$ * warning$
-      "" }
-%    { journal emphasize.with.italic.correction }
-     {
-           journal "Journal of the ACM" =
-       { "{\it J. ACM}" }
-       {
-           journal "American Mathematical Society Translations" =
-       { "{\it Amer. Math. Soc. Transl.}" }
-       {
-           journal "Bulletin of the American Mathematical Society" =
-       { "{\it Bull. Amer. Math. Soc.}" }
-       {
-           journal "Proceedings of the American Mathematical Society" =
-       { "{\it Proc. Amer. Math. Soc.}" }
-       {
-           journal "Transactions of the American Mathematical Society" =
-       { "{\it Trans. Amer. Math. Soc.}" }
-       {
-           journal "Communications of the {ACM}" =
-       { "{\it Commun. {ACM}}" }
-       {
-           journal "{ACM} Computing Surveys" =
-       { "{\it Comput. Surveys}" }
-       {
-           journal "{ACM} Transactions on Mathematical Software" =
-       { "{\it {ACM} Trans. Math. Software}" }
-       {
-           journal "{ACM} {SIGNUM} Newsletter" =
-       { "{\it {ACM} {SIGNUM} Newslett.}" }
-       {
-           journal "American Journal of Sociology" =
-       { "{\it Amer. J. Sociology}" }
-       {
-           journal "Journal of the American Statistical Association" =
-       { "{\it J. Amer. Statist. Assoc.}" }
-       {
-           journal "Applied Mathematics and Computation" =
-       { "{\it Appl. Math. Comput.}" }
-       {
-           journal "American Mathematical Monthly" =
-       { "{\it Amer. Math. Monthly}" }
-       {
-           journal "British Journal of Mathematical and Statistical Psychology" =
-       { "{\it Brit. J. Math. Statist. Psych.}" }
-       {
-           journal "Canadian Mathematical Bulletin" =
-       { "{\it Canad. Math. Bull.}" }
-       {
-           journal "Journal of Computational and Applied Mathematics" =
-       { "{\it J. Comput. Appl. Math.}" }
-       {
-           journal "Journal of Computational Physics" =
-       { "{\it J. Comput. Phys.}" }
-       {
-           journal "Computers and Structures" =
-       { "{\it Comput. \& Structures}" }
-       {
-           journal "The Computer Journal" =
-       { "{\it Comput. J.}" }
-       {
-           journal "Journal of Computer and System Sciences" =
-       { "{\it J. Comput. System Sci.}" }
-       {
-           journal "Contemporary Mathematics" =
-       { "{\it Contemp. Math.}" }
-       {
-           journal "Crelle's Journal" =
-       { "{\it Crelle's J.}" }
-       {
-           journal "Giornale di Mathematiche" =
-       { "{\it Giorn. Mat.}" }
-       {
-           journal "{IEEE} Transactions on Computers" =
-       { "{\it {IEEE} Trans. Comput.}" }
-       {
-           journal "{IEEE} Transactions on Automatic Control" =
-       { "{\it {IEEE} Trans. Automat. Control}" }
-       {
-           journal "Proceedings of the {IEEE}" =
-       { "{\it Proc. {IEEE}}" }
-       {
-           journal "{IEEE} Transactions on Aerospace and Electronic Systems" =
-       { "{\it {IEEE} Trans. Aerospace Electron. Systems}" }
-       {
-           journal "{IMA} Journal of Numerical Analysis" =
-       { "{\it {IMA} J. Numer. Anal.}" }
-       {
-           journal "Information Processing Letters" =
-       { "{\it Inform. Process. Lett.}" }
-       {
-           journal "Journal of the Institute of Mathematics and its Applications" =
-       { "{\it J. Inst. Math. Appl.}" }
-       {
-           journal "International Journal of Control" =
-       { "{\it Internat. J. Control}" }
-       {
-           journal "International Journal for Numerical Methods in Engineering" =
-       { "{\it Internat. J. Numer. Methods Engrg.}" }
-       {
-           journal "International Journal of Supercomputing Applications" =
-       { "{\it Internat. J. Supercomputing Applic.}" }
-       {
-           journal "Journal of Research of the National Bureau of Standards" =
-       { "{\it J. Res. Nat. Bur. Standards}" }
-       {
-           journal "Linear Algebra and its Applications" =
-       { "{\it Linear Algebra Appl.}" }
-       {
-           journal "Journal of Mathematical Analysis and Applications" =
-       { "{\it J. Math. Anal. Appl.}" }
-       {
-           journal "Mathematische Annalen" =
-       { "{\it Math. Ann.}" }
-       {
-           journal "Journal of Mathematical Physics" =
-       { "{\it J. Math. Phys.}" }
-       {
-           journal "Mathematics of Computation" =
-       { "{\it Math. Comp.}" }
-       {
-           journal "Mathematica Scandinavica" =
-       { "{\it Math. Scand.}" }
-       {
-           journal "Mathematical Tables and Other Aids to Computation" =
-       { "{\it Math. Tables Aids Comput.}" }
-       {
-           journal "Numerische Mathematik" =
-       { "{\it Numer. Math.}" }
-       {
-           journal "Pacific Journal of Mathematics" =
-       { "{\it Pacific J. Math.}" }
-       {
-           journal "Journal of Parallel and Distributed Computing" =
-       { "{\it J. Parallel and Distrib. Comput.}" }
-       {
-           journal "Parallel Computing" =
-       { "{\it Parallel Comput.}" }
-       {
-           journal "Philosophical Magazine" =
-       { "{\it Philos. Mag.}" }
-       {
-           journal "Proceedings of the National Academy of Sciences of the USA" =
-       { "{\it Proc. Nat. Acad. Sci. U. S. A.}" }
-       {
-           journal "Quarterly Journal of Mathematics, Oxford, Series (2)" =
-       { "{\it Quart. J. Math. Oxford Ser. (2)}" }
-       {
-           journal "Quarterly of Applied Mathematics" =
-       { "{\it Quart. Appl. Math.}" }
-       {
-           journal "Review of the International Statisical Institute" =
-       { "{\it Rev. Inst. Internat. Statist.}" }
-       {
-           journal "Journal of the Society for Industrial and Applied Mathematics" =
-       { "{\it J. Soc. Indust. Appl. Math.}" }
-       {
-           journal "Journal of the Society for Industrial and Applied Mathematics, Series B, Numerical Analysis" =
-       { "{\it J. Soc. Indust. Appl. Math. Ser. B Numer. Anal.}" }
-       {
-           journal "{SIAM} Journal on Algebraic and Discrete Methods" =
-       { "{\it {SIAM} J. Algebraic Discrete Methods}" }
-       {
-           journal "{SIAM} Journal on Applied Mathematics" =
-       { "{\it {SIAM} J. Appl. Math.}" }
-       {
-           journal "{SIAM} Journal on Computing" =
-       { "{\it {SIAM} J. Comput.}" }
-       {
-           journal "{SIAM} Journal on Matrix Analysis and Applications" =
-       { "{\it {SIAM} J. Matrix Anal. Appl.}" }
-       {
-           journal "{SIAM} Journal on Numerical Analysis" =
-       { "{\it {SIAM} J. Numer. Anal.}" }
-       {
-           journal "{SIAM} Review" =
-       { "{\it {SIAM} Rev.}" }
-       {
-           journal "{SIAM} Journal on Scientific and Statistical Computing" =
-       { "{\it {SIAM} J. Sci. Statist. Comput.}" }
-       {
-           journal "Software Practice and Experience" =
-       { "{\it Software Prac. Experience}" }
-       {
-           journal "Statistical Science" =
-       { "{\it Statist. Sci.}" }
-       {
-           journal "{USSR} Computational Mathematics and Mathematical Physics" =
-       { "{\it {U. S. S. R.} Comput. Math. and Math. Phys.}" }
-       {
-           journal "Journal of {VLSI} and Computer Systems" =
-       { "{\it J. {VLSI} Comput. Syst.}" }
-       {
-           journal "Zeitschrift fur Angewandte Mathematik und Mechanik" =
-       { "{\it Z. Angew. Math. Mech.}" }
-       {
-           journal "Zeitschrift fur Angewandte Mathematik und Physik" =
-       { "{\it Z. Angew. Math. Phys.}" }
-       {
-           journal "ACM Computing Surveys" =
-       { "{\it Comput. Surveys}" }
-       {
-           journal "ACM Transactions on Mathematical Software" =
-       { "{\it ACM Trans. Math. Software}" }
-       {
-           journal "ACM {SIGNUM} Newsletter" =
-       { "{\it ACM {SIGNUM} Newslett.}" }
-       {
-           journal "IEEE Transactions on Computers" =
-       { "{\it IEEE Trans. Comput.}" }
-       {
-           journal "IEEE Transactions on Automatic Control" =
-       { "{\it IEEE Trans. Automat. Control}" }
-       {
-           journal "Proceedings of the IEEE" =
-       { "{\it Proc. IEEE}" }
-       {
-           journal "IEEE Transactions on Aerospace and Electronic Systems" =
-       { "{\it IEEE Trans. Aerospace Electron. Systems}" }
-       {
-           journal "IMA Journal of Numerical Analysis" =
-       { "{\it IMA J. Numer. Anal.}" }
-       {
-           journal "SIAM Journal on Algebraic and Discrete Methods" =
-       { "{\it SIAM J. Algebraic Discrete Methods}" }
-       {
-           journal "SIAM Journal on Applied Mathematics" =
-       { "{\it SIAM J. Appl. Math.}" }
-       {
-           journal "SIAM Journal on Computing" =
-       { "{\it SIAM J. Comput.}" }
-       {
-           journal "SIAM Journal on Matrix Analysis and Applications" =
-       { "{\it SIAM J. Matrix Anal. Appl.}" }
-       {
-           journal "SIAM Journal on Numerical Analysis" =
-       { "{\it SIAM J. Numer. Anal.}" }
-       {
-           journal "SIAM Review" =
-       { "{\it SIAM Rev.}" }
-       {
-           journal "SIAM Journal on Scientific and Statistical Computing" =
-       { "{\it SIAM J. Sci. Statist. Comput.}" }
-       {
-           journal "USSR Computational Mathematics and Mathematical Physics" =
-       { "{\it U. S. S. R. Comput. Math. and Math. Phys.}" }
-       {
-           journal "Journal of VLSI and Computer Systems" =
-       { "{\it J. VLSI Comput. Syst.}" }
-       {
-           journal "Communications of the ACM" =
-       { "{\it Commun. ACM}" }
-       %% If no match with cases needing special handling, just output journal name
-       {  journal emphasize.with.italic.correction  }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-         }
-    if$
-
-  number empty.or.unknown
-    {
-      volume empty.or.unknown
-        { "no number and no volume in " cite$ * warning$ "" * }
-        { " " * " {" * volume * "}" * }
-      if$
-    }
-    {
-      volume empty.or.unknown
-        {
-          "unusual to have number, but no volume, for " cite$ * warning$
-          " " * number *
-        }
-        { " " * volume comma " " * number * * }
-      if$
-    }
-  if$
-
-  format.day.month.year *
-}
-
-FUNCTION { format.chapter.pages }
-{
-  chapter empty.or.unknown
-    'format.pages
-    { type empty.or.unknown
-        { "Chapter" } % gnp - changed to mixed case
-        { type "t" change.case$ }
-      if$
-      chapter tie.or.space.connect
-      pages empty.or.unknown
-        {"page numbers missing in " cite$ * warning$} % gnp - added check
-        { ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.in.emphasize.booktitle }
-{ % jtb: format for collections or proceedings not appearing in a journal
-  booktitle empty.or.unknown
-  { "" }
-  { "In " format.emphasize.booktitle * }
-  if$
-}
-
-FUNCTION { format.in.booktitle }
-{ % jtb: format for proceedings appearing in a journal
-  booktitle empty.or.unknown
-  { "" }
-  { "In " booktitle * }
-  if$
-}
-
-FUNCTION { format.in.ed.booktitle }
-{
-  booktitle empty.or.unknown
-  { "" }
-  { editor empty.or.unknown
-    { "In " format.emphasize.booktitle * }
-                % jtb: swapped editor location
-    { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
-    if$
-  }
-  if$
-}
-
-FUNCTION { format.thesis.type }
-{ % call with default type on stack top
-  type empty.or.unknown
-    'skip$    % use default type
-    {
-      pop$    % discard default type
-      % NO: it is silly to have to brace protect every degree type!:  type "t" change.case$
-      type
-    }
-  if$
-}
-
-FUNCTION { format.tr.number }
-{
-  type empty.or.unknown
-    { "Tech. Rep." }
-    'type
-  if$
-  number empty.or.unknown
-    { "t" change.case$ }
-    %% LOOKS BAD: { "." * number tie.or.space.connect }
-    %% Prefer "Research report RJ687." to "Research report. RJ687."
-    { number tie.or.space.connect }
-  if$
-}
-
-FUNCTION { format.advisor }
-{
-  advisor empty.or.unknown
-    { "" }
-    { "Advisor(s) " advisor * }
-  if$
-}
-
-FUNCTION { format.article.crossref }
-{ "See"
-  "\cite{" * crossref * "}" *
-}
-
-FUNCTION { format.crossref.editor }
-{
-  editor #1 "{vv~}{ll}" format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { pop$ " et~al\mbox{.}" * }         % jrh: avoid spacing problems
-    { #2 <
-    'skip$
-    { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-        { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
-        { " and " * editor #2 "{vv~}{ll}" format.name$ * }
-      if$
-    }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.book.crossref }
-{
-  volume empty.or.unknown
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
-      "In "
-    }
-    { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
-      " of " *
-    }
-  if$
-  editor empty.or.unknown
-  editor field.or.null author field.or.null =
-  or
-    { key empty.or.unknown
-    { series empty.or.unknown
-        { "need editor, key, or series for " cite$ * " to crossref " *
-          crossref * warning$
-          "" *
-        }
-        { "{\em " * series * "\/}" * }
-      if$
-    }
-    { key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION { format.incoll.inproc.crossref }
-{ "See"
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION { format.lab.names }
-{
-  % format.lab.names:
-  %
-  % determines "short" names for the abbreviated author information.
-  % "Long" labels are created in calc.label, using the routine my.full.label
-  % to format author and editor fields.
-  %
-  % There are 4 cases for labels.   (n=3 in the example)
-  % a) one author             Foo
-  % b) one to n               Foo, Bar and Baz
-  % c) use of "and others"    Foo, Bar et al.
-  % d) more than n            Foo et al.
-
-  's :=
-  s num.names$ 'numnames :=
-  numnames #2 >    % change number to number of others allowed before
-                   % forcing "et al".
-    { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
-    {
-      numnames #1 - 'namesleft :=
-      #2 'nameptr :=
-      s #1 "{vv~}{ll}" format.name$
-        { namesleft #0 > }
-        { nameptr numnames =
-            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-                { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
-                { " and " * s nameptr "{vv~}{ll}" format.name$ * }
-              if$
-            }
-            { ", " * s nameptr "{vv~}{ll}" format.name$ * }
-          if$
-          nameptr #1 + 'nameptr :=
-          namesleft #1 - 'namesleft :=
-        }
-      while$
-    }
-  if$
-}
-
-FUNCTION { author.key.label }
-{
-  author empty.or.unknown
-    { key empty.or.unknown
-          { "no key, author in " cite$ * warning$
-            cite$ #1 #3 substring$ }
-         'key
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { author.key.organization.label }
-{ % added - gnp. Provide label formatting by organization if author is null.
-  author empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "no key, author or organization in " cite$ * warning$
-              cite$ #1 #3 substring$ }
-            'key
-          if$
-        }
-        { organization }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { editor.key.organization.label }
-{ % added - gnp. Provide label formatting by organization if editor is null.
-  editor empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "no key, editor or organization in " cite$ * warning$
-              cite$ #1 #3 substring$ }
-            'key
-          if$
-        }
-        { organization }
-      if$
-    }
-    { editor format.lab.names }
-  if$
-}
-
-FUNCTION { author.editor.key.label }
-{
-  author empty.or.unknown
-    { editor empty.or.unknown
-          { key empty.or.unknown
-               { "no key, author, or editor in " cite$ * warning$
-                 cite$ #1 #3 substring$ }
-             'key
-           if$
-         }
-          { editor format.lab.names }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { calc.label }
-{
-  % Changed - GNP. See also author.organization.sort, editor.organization.sort
-  % Form label for BibTeX entry. The classification of which fields are used
-  % for which type of entry (book, inbook, etc.) are taken from alpha.bst.
-  % The change here from newapa is to also include organization as a
-  % citation label if author or editor is missing.
-
-  type$ "book" =
-  type$ "inbook" =
-  or
-  type$ "periodical" =
-  or
-    'author.editor.key.label
-    { type$ "proceedings" =
-        'editor.key.organization.label
-        { type$ "manual" =
-            'author.key.organization.label
-            'author.key.label
-          if$
-        }
-      if$
-    }
-  if$
-
-  author empty.or.unknown  % generate the full label citation information.
-    {
-      editor empty.or.unknown
-        {
-          organization empty.or.unknown
-            {
-              key empty.or.unknown
-                {
-                  "no author, editor, organization, or key in " cite$ * warning$
-                  "??"
-                }
-                { key }
-              if$
-            }
-            { organization }
-          if$
-        }
-        { editor my.full.label }
-      if$
-    }
-    { author my.full.label }
-  if$
-
-  % leave label on the stack, to be popped when required.
-
-  "}{" * swap$ * "}{" *
-  %  year field.or.null purify$ #-1 #4 substring$ *
-  %
-  % save the year for sort processing afterwards (adding a, b, c, etc.)
-  %
-  year field.or.null purify$ #-1 #4 substring$
-  'label.year :=
-}
-
-FUNCTION { output.bibitem }
-{
-  newline$
-  %% acmtrans.bst alphanumeric style:
-  %%: "\bibitem[\protect\citeauthoryear{" write$
-  %%: calc.label write$
-  %%: sort.year write$
-  %%: "}]%" writeln
-  %%: "        {" write$
-  %%: cite$ write$
-  %%: "}" writeln
-  %% acm-plain.bst numeric style:
-  newline$
-  "\bibitem{" write$
-  cite$ write$
-  "}" write$
-  newline$
-  ""
-  before.all 'output.state :=
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url }
-{ % enter and return with stack empty
-  %% We switch now from buffered output to output of complete lines, so
-  %% that the Issue .. URL data have their own lines, and are less likely
-  %% to be line-wrapped by BibTeX's short-sighted algorithm, which wraps
-  %% lines longer than 79 characters, backtracking to what it thinks is
-  %% a break point in the string.  Any such wrapping MUST be undone to
-  %% prevent percent-newline from appearing in DOIs and URLs.  The
-  %% output data are intentionally wrapped in \showxxx{} macros at
-  %% beginning of line, and that supply their own punctuation (if they
-  %% are not defined to suppress output entirely), to make it easier for
-  %% other software to recover them from .bbl files.
-  %%
-  %% It also makes it possible to later change the macro definitions
-  %% to suppress particular output values, or alter their appearance.
-  %%
-  %% Note that it is possible for theses, technical reports, and
-  %% manuals to have ISBNs, and anything that has an ISBN may also
-  %% have an ISSN.  When there are no values for these keys, there
-  %% is no output generated for them here.
-
-  "\newblock" writeln
-  after.block 'output.state :=
-
-  output.issue
-  output.isbn
-  output.coden  % CODEN is functionally like ISSN, so output them sequentially
-  output.issn
-  output.lccn
-  output.doi    % DOI is ALWAYS last according to CrossRef DOI documentation
-  output.url    % but ACM wants URL last
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url.note }
-{ % enter with stack empty, return with empty string on stack
-  output.issue.doi.coden.isxn.lccn.url
-  note empty.or.unknown
-    { }
-    {
-      "\newblock" writeln
-      output.note
-    }
-  if$
-  ""
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url.note.check }
-{ % enter with stack empty, return with empty string on stack
-  output.issue.doi.coden.isxn.lccn.url
-  note empty.or.unknown
-    { }
-    {
-      "\newblock" writeln
-      output.note.check
-    }
-  if$
-  ""
-}
-
-FUNCTION { article }
-{
-  output.bibitem
-
-  author empty.or.unknown
-    {
-      editor empty.or.unknown
-        { "neither author and editor supplied for " cite$ * warning$ }
-        { format.editors "editor" output.check }
-      if$
-    }
-    { format.authors "author" output.check }
-  if$
-
-  author format.no.key output       % added
-  output.year.check                 % added
-  new.block
-  format.articletitle "title" output.check
-  new.block
-  howpublished output
-
-  crossref missing$
-    { format.journal.volume.number.day.month.year }
-    {
-      "cross reference in @Article{...} is unusual" warning$
-      format.article.crossref output.nonnull
-    }
-  if$
-  output
-
-  format.pages.check.without.articleno output
-  format.articleno.numpages output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { book }
-{
-  output.bibitem
-  author empty.or.unknown
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-        { "author and editor" editor either.or.check }
-        'skip$
-      if$
-    }
-  if$
-  output.year.check       % added
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { new.sentence              % jtb: start a new sentence for series/volume
-      format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check    % jtb: require address
-      fin.sentence
-      pages empty.or.unknown
-        { format.bookpages }    % use bookpages when pages empty
-        { format.pages.check "pages" tie.or.space.connect }
-      if$
-      output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { booklet }
-{
-  output.bibitem
-  format.authors output
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title "title" output.check
-  new.block
-  howpublished output
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { inbook }
-{
-  output.bibitem
-  author empty.or.unknown
-    { format.editors
-      "author and editor" output.check
-    }
-    { format.authors output.nonnull
-      crossref missing$
-    { "author and editor" editor either.or.check }
-    'skip$
-      if$
-    }
-  if$
-  output.year.check                 % added
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { new.sentence              % jtb: start a new sentence for series/volume
-      format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check    % jtb: require address
-      format.bookpages output
-      format.chapter.pages
-      "chapter and pages" output.check  % jtb: moved from before publisher
-    }
-    {
-      format.bookpages output
-      format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { incollection }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output       % added
-  output.year.check              % added
-  new.block
-  format.articletitle "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      new.sentence                % jtb: start a new sentence for series/volume
-      format.bvolume output
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check      % jtb: require address
-      format.bookpages output
-      format.chapter.pages output % gnp - was special.output.nonnull
-                                  % left out comma before page numbers
-                                  % jtb: moved from before publisher
-    }
-    {
-      format.incoll.inproc.crossref output.nonnull
-      format.chapter.pages output
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { inproceedings }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output            % added
-  output.year.check                   % added
-  new.block
-  format.articletitle "title" output.check
-  howpublished output.dot.space
-  crossref missing$
-    {
-      journal missing$          % jtb: proceedings appearing in journals
-        { format.in.emphasize.booktitle format.city "booktitle"  output.check.dot.space
-          format.series output.removenospace
-          format.editors.fml output.dot.space
-          format.bvolume.noseries output
-          new.sentence
-          organization output
-          publisher "publisher" output.check % jtb: require publisher (?)
-          address "address" output.check  % jtb: require address
-          format.bookpages output
-        }
-        {
-          format.in.booktitle format.city "booktitle" output.check
-          format.editors.fml output
-          new.sentence
-          format.journal.volume.number.day.month.year output
-        }
-      if$
-      format.articleno output
-      format.pages.check.without.articleno output
-    }
-    {
-      format.incoll.inproc.crossref output.nonnull
-      format.articleno output
-      format.pages.check.without.articleno output
-    }
-  if$
-  format.articleno.numpages output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { conference } { inproceedings }
-
-FUNCTION { manual }
-{
-  output.bibitem
-  author empty.or.unknown
-    { editor empty.or.unknown
-      { organization "organization" output.check
-        organization format.key output }  % if all else fails, use key
-      { format.editors "author and editor" output.check }
-      if$
-    }
-    { format.authors output.nonnull }
-    if$
-  output.year.check                 % added
-  new.block
-  format.btitle "title" output.check
-  organization address new.block.checkb
-  % jtb: back to normal style: organization, address
-  organization "organization" output.check
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { mastersthesis }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
-  new.block
-  "M.S.\ thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  new.block
-  format.advisor output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { misc }
-{
-  output.bibitem
-  format.authors output
-  author format.key output            % added
-  output.year.check                   % added
-  title howpublished new.block.checkb
-  format.title output
-  new.block
-  howpublished output
-  "" output.nonnull.dot.space
-  output.day.month.year
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { phdthesis }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
-  new.block
-  "Ph.D. thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  new.block
-  format.advisor output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION {format.date}
-{ year empty.or.unknown
-    { month empty.or.unknown
-        {
-          ""                    % output empty date if year/month both empty
-          day empty.or.unknown
-            {  }
-            { "there's a day but no month or year in " cite$ * warning$ }
-          if$
-        }
-        { "there's a month but no year in " cite$ * warning$
-          month
-          day empty.or.unknown
-            { }
-            { " " * day * }
-          if$
-        }
-      if$
-    }
-    { month empty.or.unknown
-        {
-          year                  % output only year if month empty
-          day empty.or.unknown
-            {  }
-            { "there's a day and year but no month in " cite$ * warning$ }
-          if$
-        }
-        {
-          month " " *
-          day empty.or.unknown
-            { }
-            { day * ", " * }
-          if$
-          year *
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION {new.block.checka}
-{
-  empty.or.unknown
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION { periodical }
-{
-  output.bibitem
-  editor empty.or.unknown
-    { organization output }
-    { format.editors output.nonnull }
-  if$
-  new.block
-  title emphasize "title" output.check
-  format.date output
-  new.sentence
-  publisher output
-  address output
-  howpublished new.block.checka
-  howpublished output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { proceedings }
-{
-  output.bibitem
-  editor empty.or.unknown
-    { organization output
-      organization format.key output }  % gnp - changed from author format.key
-    { format.editors output.nonnull }
-  if$
-  % author format.key output             % gnp - removed (should be either
-  %                                        editor or organization
-  output.year.check                    % added (newapa)
-  new.block
-  format.btitle format.city "title" output.check        % jtb: added city
-  new.sentence
-  format.bvolume output
-  format.number.series output
-  new.sentence
-  organization output
-  % jtb: normal order: publisher, address
-  publisher output
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { techreport }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output             % added
-  output.year.check                    % added
-  new.block
-  format.btitle "title" output.check
-  new.block
-  format.tr.number output               % jtb: moved month ...
-  institution "institution" output.check
-  address output
-  new.sentence
-  format.named.pages output
-  % ACM omits year at end in transactions style
-  % format.day.month.year output.nonnull.dot.space  % jtb: ... to here (no parens)
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { unpublished }
-{
-  output.bibitem
-  format.authors
-  "author" output.check
-  author format.key output              % added
-  output.year.check                     % added
-  new.block
-  format.title "title" output.check
-  fin.sentence
-  output.day.month.year                 % UTAH
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note.check
-  fin.entry
-}
-
-FUNCTION { default.type } { misc }
-
-%%% ACM journal-style month definitions: full name if 1--5 letters, else
-%%% abbreviation of 3 or 4 characters and a dot
-
-MACRO {jan}             {"Jan."}
-
-MACRO {feb}             {"Feb."}
-
-MACRO {mar}             {"Mar."}
-
-MACRO {apr}             {"Apr."}
-
-MACRO {may}             {"May"}
-
-MACRO {jun}             {"June"}
-
-MACRO {jul}             {"July"}
-
-MACRO {aug}             {"Aug."}
-
-MACRO {sep}             {"Sept."}
-
-MACRO {oct}             {"Oct."}
-
-MACRO {nov}             {"Nov."}
-
-MACRO {dec}             {"Dec."}
-
-%%% ====================================================================
-%%%                 I M P O R T A N T   C H A N G E
-%%%
-%%% For the 2009 release of the official acm-*.bst files, there are to
-%%% be NO predefined journal abbreviations in those style files.
-%%%
-%%% ACM may later develop an official list of mappings of full journal
-%%% names of commonly-cited journals to ACM-preferred abbreviations, but
-%%% authors should consider that use of any of these commented-out
-%%% abbreviations is DEPRECATED unless the BibTeX file itself provides
-%%% its own @String{name = "value"} definitions.
-%%%
-%%% Use of journal (and publisher and address) @String{...}
-%%% abbreviations, as opposed to explicit value assignments such as
-%%% journal = "J. ACM" and publisher = "IEEE", is preferred in
-%%% bibliographic databases, because it makes it easier for journal
-%%% production staff to replace those definitions by publisher-preferred
-%%% abbreviations when articles are typeset for publication.
-%%%
-%%% For historical reasons, and because some of these abbreviations are
-%%% used in other (non-ACM) bibliography style files, they are preserved
-%%% here in comments.  Future releases of the acm*-.bst files are likely
-%%% to remove them entirely.
-%%% ====================================================================
-%%%
-%%% DEPRECATED: MACRO {acmcs}           {"ACM Comput. Surv."}                   % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acmlett}         {"ACM Lett. Program. Lang. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acta}            {"Acta Inf."}                           % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ai}              {"Artificial Intelligence"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {al}              {"Ada Lett."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acr}             {"Adv. Comput. Res."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {bit}             {"Bit"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cacm}            {"Commun. ACM"}                         % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cj}              {"Comput. J."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cn}              {"Comput. Netw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cl}              {"Comput. Lang."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ibmjrd}          {"IBM J. Res. and Development"}         % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ibmsj}           {"IBM Systems Journal"}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ict}             {"Inf. Contr."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieebcs}          {"IEE/BCS Softw. Eng. J."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieees}           {"IEEE Softw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeese}          {"IEEE Trans. Softw. Eng."}             % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetc}          {"IEEE Trans. Comput."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetcad}        {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetpds}        {"IEEE Trans. Parall. Distrib. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetit}         {"IEEE Trans. Inf. Theory"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ipl}             {"Inf. Process. Lett."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {icp}             {"Inf. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ist}             {"Inf. Softw. Tech."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ijsa}            {"Int. J. Supercomput. Appl."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ijpp}            {"Int. J. Parallel Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jacm}            {"J. ACM"}                              % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: % MACRO {jcss}          {"Journal of Computer and System Sciences"} % original BibTeX
-%%% DEPRECATED: MACRO {jcss}            {"J. Comput. Syst. Sci."}               % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlp}             {"J. Logic Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jfp}             {"J. Funct. Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jsmrp}           {"J. Softw. Maint. Res. Pract."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jss}             {"J. Syst. Softw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlc}             {"J. Logic and Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlsc}            {"J. Lisp Symb. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {lpls}            {"Lett. Program. Lang. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mor}             {"Math. Oper. Res."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mscs}            {"Math. Struct. Comput. Sci."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mst}             {"Math. Syst. Theor."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ngc}             {"New Gen. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {scp}             {"Sci. Comput. Program."}               % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {sicomp}          {"SIAM J. Comput."}                     % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {spe}             {"Softw. Pract. Exper."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tocs}            {"ACM Trans. Comput. Syst."}            % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tods}            {"ACM Trans. Database Syst."}           % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tog}             {"ACM Trans. Graphics"}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toms}            {"ACM Trans. Math. Softw."}             % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toois}           {"ACM Trans. Office Inf. Syst."}        % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toplas}          {"ACM Trans. Program. Lang. Syst."}     % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tcs}             {"Theor. Comput. Sci."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tr}              {"Tech. Rep."}
-%%% ====================================================================
-
-READ
-
-FUNCTION { sortify }
-{
-  purify$
-  "l" change.case$
-}
-
-FUNCTION { chop.word }
-{
-  's :=
-  'len :=
-  s #1 len substring$ =
-    { s len #1 + global.max$ substring$ }
-    's
-  if$
-}
-
-FUNCTION { sort.format.names }
-{
-  's :=
-  #1 'nameptr :=
-  ""
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 >
-          { "   " * }
-         'skip$
-      if$
-  %      s nameptr "{ff{ } }{ll{ }}{  vv{ }}{  jj{ }}" format.name$ 't :=
-      s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
-      nameptr numnames = t "others" = and
-          { " et~al" * }
-          { t sortify * }
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION { sort.format.title }
-{
-  't :=
-  "A " #2
-    "An " #3
-      "The " #4 t chop.word
-    chop.word
-  chop.word
-  sortify
-  #1 global.max$ substring$
-}
-
-FUNCTION { author.sort }
-{
-  author empty.or.unknown
-    { key empty.or.unknown
-         { "to sort, need author or key in " cite$ * warning$
-           "" }
-         { key sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { author.editor.sort }
-{
-  author empty.or.unknown
-    {
-      editor empty.or.unknown
-         {
-           key empty.or.unknown
-             { "to sort, need author, editor, or key in " cite$ * warning$
-               ""
-             }
-             { key sortify }
-           if$
-         }
-         { editor sort.format.names }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { author.organization.sort }
-{
-  % added - GNP. Stack author or organization for sorting (from alpha.bst).
-  % Unlike alpha.bst, we need entire names, not abbreviations
-
-  author empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "to sort, need author, organization, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { organization sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { editor.organization.sort }
-{
-  % added - GNP. Stack editor or organization for sorting (from alpha.bst).
-  % Unlike alpha.bst, we need entire names, not abbreviations
-
-  editor empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "to sort, need editor, organization, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { organization sortify }
-      if$
-    }
-    { editor sort.format.names }
-  if$
-}
-
-FUNCTION { presort }
-{
-  % Presort creates the bibentry's label via a call to calc.label, and then
-  % sorts the entries based on entry type. Chicago.bst adds support for
-  % including organizations as the sort key; the following is stolen from
-  % alpha.bst.
-
-  %%: calc.label sortify % recalculate bibitem label
-  %%: year field.or.null purify$ #-1 #4 substring$ * % add year
-  %% "    "
-  %% *
-  type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.sort
-    { type$ "proceedings" =
-        'editor.organization.sort
-        { type$ "manual" =
-            'author.organization.sort
-            'author.sort
-          if$
-        }
-      if$
-    }
-  if$
-  "    "
-  *
-  year field.or.null sortify
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE { presort }
-
-SORT             % by label, year, author/editor, title
-
-STRINGS { longest.label }
-
-INTEGERS { number.label longest.label.width }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
-  #1 'number.label :=
-  #0 'longest.label.width :=
-}
-
-FUNCTION {longest.label.pass}
-{ number.label int.to.str$ 'label :=
-  number.label #1 + 'number.label :=
-  label width$ longest.label.width >
-    { label 'longest.label :=
-      label width$ 'longest.label.width :=
-    }
-    'skip$
-  if$
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {longest.label.pass}
-
-FUNCTION { initialize.extra.label.stuff }
-{ #0 int.to.chr$ 'last.label :=
-  "" 'next.extra :=
-  #0 'last.extra.num :=
-}
-
-EXECUTE {initialize.extra.label.stuff}
-
-FUNCTION { begin.bib }
-{
-  %% Set to #0 show 13-digit ISBN in preference to 10-digit ISBN.
-  %% Set to #1 to show both 10-digit and 13-digit ISBNs.
-  #1 'show-isbn-10-and-13 :=
-
-  "%%% -*-BibTeX-*-" writeln
-  "%%% Do NOT edit. File created by BibTeX with style acmtrans-v2 [15-Nov-2008]." writeln
-  "" writeln
-
-  preamble$ empty.or.unknown
-    'skip$
-    { preamble$ writeln }
-  if$
-  "\begin{thebibliography}{" longest.label * "}" * writeln
-  ""                                                                         writeln
-  "%%% ====================================================================" writeln
-  "%%% NOTE TO THE USER: you can override these defaults by providing"       writeln
-  "%%% customized versions of any of these macros before the \bibliography"  writeln
-  "%%% command.  Each of them MUST provide its own final punctuation,"       writeln
-  "%%% except for \shownote{}, \showDOI{}, and \showURL{}.  The latter two"  writeln
-  "%%% do not use final punctuation, in order to avoid confusing it with"    writeln
-  "%%% the Web address."                                                     writeln
-  "%%%"                                                                      writeln
-  "%%% To suppress output of a particular field, define its macro to expand" writeln
-  "%%% to an empty string, or better, \unskip, like this:"                   writeln
-  "%%%"                                                                      writeln
-  "%%% \newcommand{\showDOI}[1]{\unskip}   % LaTeX syntax"                   writeln
-  "%%%"                                                                      writeln
-  "%%% \def \showDOI #1{\unskip}           % plain TeX syntax"               writeln
-  "%%%"                                                                      writeln
-  "%%% ====================================================================" writeln
-  ""                                                                         writeln
-
-  %% ACM publications do not use CODEN, ISSN, and LCCN data, so their default
-  %% macro wrappers expand to \unskip, discarding their values and unwanted
-  %% space.
-  %%
-  %% For other publications, prior definitions like these may be useful:
-  %%
-  %%     Plain TeX:
-  %%         \def \showCODEN     #1{CODEN #1.}
-  %%         \def \showISSN      #1{ISSN #1.}
-  %%         \def \showLCCN      #1{LCCN #1.}
-  %%
-  %%     LaTeX:
-  %%         \newcommand{\showCODEN}[1]{CODEN #1.}
-  %%         \newcommand{\showISSN}[1]#1{ISSN #1.}
-  %%         \newcommand{\showLCCN}[1]{LCCN #1.}
-
-  "\ifx \showCODEN    \undefined \def \showCODEN     #1{\unskip}     \fi" writeln
-  "\ifx \showDOI      \undefined \def \showDOI       #1{{\tt DOI:}\penalty0{#1}\ } \fi" writeln
-  % ACM styles omit ISBNs, but they can be included by suitable definitions of
-  % \showISBNx and \showISBNxiii before the .bbl file is read
-  "\ifx \showISBNx    \undefined \def \showISBNx     #1{\unskip}     \fi" writeln
-  "\ifx \showISBNxiii \undefined \def \showISBNxiii  #1{\unskip}     \fi" writeln
-  "\ifx \showISSN     \undefined \def \showISSN      #1{\unskip}     \fi" writeln
-  "\ifx \showLCCN     \undefined \def \showLCCN      #1{\unskip}     \fi" writeln
-  "\ifx \shownote     \undefined \def \shownote      #1{#1}          \fi" writeln % NB: final period supplied by add.period$ above
-  "\ifx \showarticletitle \undefined \def \showarticletitle #1{#1}   \fi" writeln
-  "\ifx \showURL      \undefined \def \showURL       #1{#1}          \fi" writeln
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION { end.bib }
-{
-  newline$
-  "\end{thebibliography}"
-  writeln
-}
-
-EXECUTE {end.bib}

Deleted: trunk/Master/texmf-dist/bibtex/bst/acmart/acm-alpha.bst
===================================================================
--- trunk/Master/texmf-dist/bibtex/bst/acmart/acm-alpha.bst	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/bibtex/bst/acmart/acm-alpha.bst	2016-07-14 21:38:03 UTC (rev 41692)
@@ -1,3339 +0,0 @@
-%%% -*-BibTeX-*-
-%%% ====================================================================
-%%%  @BibTeX-style-file{
-%%%     author          = "Nelson H. F. Beebe and many others",
-%%%     version         = "1.03",
-%%%     date            = "15 April 2011",
-%%%     time            = "23:52:46 EDT",
-%%%     filename        = "acm-alpha.bst",
-%%%     address         = "University of Utah
-%%%                        Department of Mathematics, 110 LCB
-%%%                        155 S 1400 E RM 233
-%%%                        Salt Lake City, UT 84112-0090
-%%%                        USA",
-%%%     telephone       = "+1 801 581 5254",
-%%%     FAX             = "+1 801 581 4148",
-%%%     URL             = "http://www.math.utah.edu/~beebe",
-%%%     checksum        = "47407 3339 11966 90008",
-%%%     email           = "beebe at math.utah.edu, beebe at acm.org,
-%%%                        beebe at computer.org",
-%%%     codetable       = "ISO/ASCII",
-%%%     keywords        = "ACM alpha bibliography style; BibTeX",
-%%%     license         = "public domain",
-%%%     supported       = "yes",
-%%%     abstract        = "",
-%%%     docstring       = "The checksum field above contains a CRC-16
-%%%                        checksum as the first value, followed by the
-%%%                        equivalent of the standard UNIX wc (word
-%%%                        count) utility output of lines, words, and
-%%%                        characters.  This is produced by Robert
-%%%                        Solovay's checksum utility.",
-%%%  }
-%%% ====================================================================
-
-% "ACM alpha" BibTeX style, derived by minimal modifications from acm-trans.bst
-% "ACM Transactions" BibTeX style, acmtrans-v2.bst
-%  for BibTeX version 0.99c, LaTeX version 3.141
-%  ACM extensions with code cleaned up, extended, and debugged 10--15-Nov-2008
-%  Revised 28-MARCH-1996
-%  Revised 30-JUNE-1995
-%  Revised 15-JAN-1996
-%  Revised 17-APRIL-2008
-%  Revised 13-MARCH-2011
-%  Revised 15-APRIL-2011
-%
-% Hacked by John T. Boyland at University of California, Berkeley
-% (with assistance by John R. Hauser)
-% Hacked by Andrew W. Appel and Rebecca L. Davies at Princeton University,
-% based on a "chicago.bst" by Glenn Paulley at U. Waterloo,
-% which was based on "newapa.bst" found at ymir.claremont.edu.
-%
-% Version 2.2
-% Johny Sebatian and Sanjeev Sharma
-% Aptara corp (c) 2008
-%
-% History
-%
-% Date: 28th April 2008
-%
-% 1. Avoid 'repeating' the 'month' values.
-% 2. Avoid incorrectly italicizing the volume number.
-% 3. Avoid non italicizing certain titles (book, inproceedings etc).
-% 4. NO series if there is NO volume.
-% 5. Sorting of reference with first surname.
-% 6. Article no added for Inproceedings.
-%
-% Date: 07th May 2008
-%
-% 1. Abbreviation list added
-%
-%   Citation format: [author-last-name year]
-%             [author-last-name and author-last-name year]
-%             [author-last-name, author-last-name, and author-last-name year]
-%             [author-last-name et al. year]
-%             [author-last-name]
-%             author-last-name [year]
-%             [author-last-name and author-last-name]
-%             [author-last-name et al.]
-%             [year] or [year,year]
-%             year or year,year
-%
-%   Reference list ordering: alphabetical by author or whatever passes
-%    for author in the absence of one.
-%
-% This BibTeX style has support for abbreviated author lists and for
-%    year-only citations.  This is done by having the citations
-%    actually look like
-%
-%    \citeauthoryear{full-author-info}{abbrev-author-info}{year}
-%
-% The LaTeX style has to have the following (or similar)
-%
-%     \let\@internalcite\cite
-%     \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
-%     \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite}
-%     \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
-%     \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite}
-%     \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite}
-%
-% These TeX macro definitions are found in acmtrans.sty. Additional
-% commands to manipulate different components of a citation can be defined
-% so that, for example, you can list author's names without parentheses
-% if using a citation as a noun or object in a sentence.
-%
-% Features of acmtrans.bst:
-% ========================
-%
-% - all authors appear last name first.
-% - all pages are listed xx-xx, (no pp.) and are at the end of the reference
-% - publishers are identified as publisher, address
-% - conferences papers (inproceedings) may give city of conference,
-%   date of conference, and journal that the proceedings appear in.
-% - months abbreviated to max four letters (eg. Mar.)
-% - volume of a series indicated after the title of the series
-% - editors appear after edited title and are identified by a trailing "Eds."
-%   not in parentheses.  Editor names are not given in small caps.
-%   (unless there is no author line)
-% - names terminated with a period even if there is no first name.
-% - editions are indicated trailing after the work, not in parentheses.
-% - "et al." citations have a protected period to avoid bad spacing (jrh)
-% - "address" required when publisher given
-% - series (roman) and volume are in a sentence separate from (book-)title
-%
-%
-% Features of chicago.bst:
-% =======================
-%
-% - full names used in citations, but abbreviated citations are available
-%   (see above)
-% - if an entry has a "month", then the month and year are also printed
-%   as part of that bibitem.
-% - all conjunctions use "and" instead of "\&"
-% - major modification from Chicago Manual of Style (13th ed.) is that
-%   only the first author in a reference appears last name first-
-%   additional authors appear as J. Q. Public.
-% - pages are listed as "pp. xx-xx" in all entry types except
-%   article entries.
-% - book, inbook, and manual use "location: publisher" (or organization)
-%   for address and publisher. All other types list publishers separately.
-% - "pp." are used to identify page numbers for all entry types except
-%   articles.
-% - organization is used as a citation label if neither author nor editor
-%   is present (for manuals).
-% - "et al." is used for long author and editor lists, or when "others"
-%   is used.
-%
-% Modifications and bug fixes from newapa.bst:
-% ===========================================
-%
-%   - added month, year to bib entries if month is present
-%   - fixed bug with In proceedings, added necessary comma after title
-%   - all conjunctions changed to "and" from "\&"
-%   - fixed bug with author labels in my.full.label: "et al." now is
-%        generated when "others" is an author name
-%   - major modification from Chicago Manual of Style (13th ed.) is that
-%     only the first author in a reference appears last name first-
-%     additional authors appear as J. Q. Public.
-%   - pages are listed as "pp. xx-xx" in all entry types except
-%     article entries. Unnecessary (IMHO) "()" around page numbers
-%     were removed, and page numbers now don't end with a period.
-%   - created chicago.sty for use with this bibstyle (required).
-%   - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
-%     number, and /or pages. Renamed to format.journal.volume.number.
-%   - fixed bug in formatting booktitles: additional period an error if
-%     book has a volume.
-%   - fixed bug: editors usually given redundant period before next clause
-%     (format.editors.dot) removed.
-%   - added label support for organizations, if both author and editor
-%     are missing (from alpha.bst). If organization is too long, then
-%     the key field is used for abbreviated citations.
-%   - In proceedings or books of several volumes, no comma was written
-%     between the "Volume x" and the page numbers (this was intentional
-%     in newapa.bst). Fixed.
-%   - Some journals may not have volumes/numbers, only month/year (eg.
-%     IEEE Computer). Fixed bug in article style that assumed volume/number
-%     was always present.
-%
-% Original documentation for newapa.sty:
-% =====================================
-%
-% This version was made by modifying the master file made by
-% Oren Patashnik (PATASHNIK at SCORE.STANFORD.EDU), and the 'named' BibTeX
-% style of Peter F. Patel-Schneider.
-%
-% Copyright (C) 1985, all rights reserved.
-% Copying of this file is authorized only if either
-% (1) you make absolutely no changes to your copy, including name, or
-% (2) if you do make changes, you name it something other than 'newapa.bst'.
-% There are undoubtably bugs in this style.  If you make bug fixes,
-% improvements, etc.  please let me know.  My e-mail address is:
-%    spencer at cgrg.ohio.state.edu or 71160.3141 at compuserve.com
-%
-% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
-% with lots of tweaking to make it look like APA style, along with tips
-% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
-
-ENTRY
-  { address
-    advisor
-    author
-    booktitle
-    chapter
-    city        % jtb: added
-    date        % jtb: added
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-        % New keys recognized for acmtrans-v2.bst
-        issue         % UTAH: used in, e.g., ACM SIGSAM Bulletin and ACM Communications in Computer Algebra
-        articleno
-        day           % UTAH: needed for newspapers, weeklies, bi-weeklies
-        doi           % UTAH
-        url           % UTAH
-        bookpages     % UTAH
-        numpages
-        lastaccessed  % UTAH: used only for @Misc{...}
-        coden         % UTAH
-        isbn          % UTAH
-        isbn-13       % UTAH
-        issn          % UTAH
-        lccn          % UTAH
-  }
-  {}
-  { label label.year extra.label sort.year sort.label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-INTEGERS { show-isbn-10-and-13 }  % initialized below in begin.bib
-
-INTEGERS { nameptr namesleft numnames }
-
-INTEGERS { multiresult }
-
-INTEGERS { len }
-
-STRINGS { s t t.org u }
-
-STRINGS { last.label }
-
-STRINGS { p1 p2 p3 page.count }
-
-FUNCTION { dump.stack.1 }
-{
-    duplicate$ "STACK[top] = [" swap$ * "]" * warning$
-}
-
-FUNCTION { dump.stack.2 }
-{
-    duplicate$ "STACK[top  ] = [" swap$ * "]" * warning$
-    swap$
-    duplicate$ "STACK[top-1] = [" swap$ * "]" * warning$
-    swap$
-}
-
-FUNCTION { empty.or.unknown }
-{
-  %% Examine the top stack entry, and push 1 if it is empty, or
-  %% consists only of whitespace, or is a string beginning with two
-  %% queries (??), and otherwise, push 0.
-  %%
-  %% This function provides a replacement for empty$, with the
-  %% convenient feature that unknown values marked by two leading
-  %% queries are treated the same as missing values, and thus, do not
-  %% appear in the output .bbl file, and yet, their presence in .bib
-  %% file(s) serves to mark values which are temporarily missing, but
-  %% are expected to be filled in eventually once more data is
-  %% obtained.  The TeX User Group and BibNet bibliography archives
-  %% make extensive use of this practice.
-  %%
-  %% An empty string cannot serve the same purpose, because just as in
-  %% statistics data processing, an unknown value is not the same as an
-  %% empty value.
-  %%
-  %% At entry: stack = ... top:[string]
-  %% At exit:  stack = ... top:[0 or 1]
-
-  duplicate$ empty$
-    { pop$ #1 }
-    { #1 #2 substring$ "??" = }
-  if$
-}
-
-FUNCTION { writeln }
-{
-  %% In BibTeX style files, the sequences
-  %%
-  %%     ... "one" "two" output
-  %%     ... "one" "two" output.xxx
-  %%
-  %% ship "one" to the output file, possibly following by punctuation,
-  %% leaving the stack with
-  %%
-  %%     ... "two"
-  %%
-  %% There is thus a one-string lag in output processing that must be
-  %% carefully handled to avoid duplicating a string in the output
-  %% file.  Unless otherwise noted, all output.xxx functions leave
-  %% just one new string on the stack, and that model should be born
-  %% in mind when reading or writing function code.
-  %%
-  %% BibTeX's asynchronous buffering of output from strings from the
-  %% stack is confusing because newline$ bypasses the buffer.  It
-  %% would have been so much easier for newline to be a character
-  %% rather than a state of the output-in-progress.
-  %%
-  %% The documentation in btxhak.dvi is WRONG:  it says
-  %%
-  %%    newline$ Writes onto the bbl file what's accumulated in the
-  %%             output buffer. It writes a blank line if and only
-  %%             if the output buffer is empty. Since write$ does
-  %%             reasonable line breaking, you should use this
-  %%             function only when you want a blank line or an
-  %%             explicit line break.
-  %%
-  %%    write$   Pops the top (string) literal and writes it on the
-  %%             output buffer (which will result in stuff being
-  %%             written onto the bbl file when the buffer fills
-  %%             up).
-  %%
-  %% Examination of the BibTeX source code shows that write$ does
-  %% indeed behave as claimed, but newline$ sends a newline character
-  %% directly to the output file, leaving the stack unchanged.  The
-  %% first line "Writes onto ... buffer." is therefore wrong.
-  %%
-  %% The original BibTeX style files almost always use "write$ newline$"
-  %% in that order, so it makes sense to hide that pair in a private
-  %% function like this one, named after a statement in Pascal,
-  %% the programming language embedded in the BibTeX Web program.
-
-  write$                % output top-of-stack string
-  newline$              % immediate write of newline (not via stack)
-}
-
-FUNCTION { init.state.consts }
-{
-  #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-}
-
-FUNCTION { output.nonnull }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<comma><space>
-  's :=
-  output.state mid.sentence =
-    {
-      ", " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln
-          "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.dot.space }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<dot><space>
-  's :=
-  output.state mid.sentence =           % { "<DEBUG output.nonnull.dot.space>. " * write$ }
-    {
-      ". " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.remove }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<space>
-  's :=
-  output.state mid.sentence =
-    {
-      " " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.removenospace }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S
-  's :=
-  output.state mid.sentence =
-    {
-      "" * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output }
-{ % discard top token if empty, else like output.nonnull
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION { output.dot.space }
-{ % discard top token if empty, else like output.nonnull.dot.space
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull.dot.space
-  if$
-}
-
-FUNCTION { output.removenospace }
-{ % discard top token if empty, else like output.nonnull.removenospace
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull.removenospace
-  if$
-}
-
-FUNCTION { output.check }
-{ % like output, but warn if key name on top-of-stack is not set
-  't :=
-  duplicate$ empty.or.unknown
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull
-  if$
-}
-
-FUNCTION { output.check.dot.space }
-{ % like output.dot.space, but warn if key name on top-of-stack is not set
-  't :=
-  duplicate$ empty.or.unknown
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull.dot.space
-  if$
-}
-
-FUNCTION { fin.block }
-{ % functionally, but not logically, identical to fin.entry
-   add.period$
-   writeln
-}
-
-FUNCTION { fin.entry }
-{
-   add.period$
-   writeln
-}
-
-FUNCTION { new.sentence }
-{ % update sentence state, with neither output nor stack change
-  output.state after.block =
-    'skip$
-    {
-      output.state before.all =
-        'skip$
-        { after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION { fin.sentence }
-{
-   add.period$
-   write$
-   new.sentence
-   ""
-}
-
-FUNCTION { new.block }
-{
-  output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION { output.coden }       % UTAH
-{ % output non-empty CODEN as one-line sentence (stack untouched)
-  coden empty.or.unknown
-    { }
-    { "\showCODEN{" coden * "}" * writeln }
-  if$
-}
-
-FUNCTION { format.articleno }
-{
-  articleno empty.or.unknown
-     { "" }
-     {
-        numpages empty.or.unknown
-          { "articleno field, but no numpages field, in " cite$ * warning$ }
-          { }
-        if$
-        "Article " articleno *
-     }
-  if$
-}
-
-FUNCTION { format.year }
-{ % push year string or "????" onto output stack
-  %% Because year is a mandatory field, we always force SOMETHING
-  %% to be output
-  year empty.or.unknown
-    { "????" }
-    { year }
-  if$
-}
-
-FUNCTION { format.day.month }
-{ % push "day month " or "month " or "" onto output stack
-  day empty.or.unknown
-    {
-      month empty.or.unknown
-        { "" }
-        { month " " *}
-      if$
-    }
-    {
-      month empty.or.unknown
-        { "" }
-        { day " " * month * " " *}
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.day.month.year }     % UTAH
-{ % if month is empty, push "" else push "(MON.)" or "(DD MON.)"
-  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
-  % acm-*.bst addition: prefix parenthesized date string with
-  % ", Article nnn "
-  articleno empty.or.unknown
-    { "" }
-    { ", " format.articleno * }
-  if$
-  " (" * format.day.month * format.year * ")" *
-}
-
-FUNCTION { output.day.month.year }     % UTAH
-{ % if month is empty value, do nothing; else output stack top and
-  % leave with new top string "(MON.)" or "(DD MON.)"
-  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
-  format.day.month.year
-  output.nonnull.remove
-}
-
-FUNCTION { strip.doi } % UTAH
-{ % Strip any Web address prefix to recover the bare DOI, leaving the
-  % result on the output stack, as recommended by CrossRef DOI
-  % documentation.
-  % For example, reduce "http://doi.acm.org/10.1145/1534530.1534545" to
-  % "10.1145/1534530.1534545".  That is later typeset and displayed as
-  % doi:10.1145/1534530.1534545 as the LAST item in the reference list
-  % entry.  Publisher Web sites wrap this with a suitable link to a real
-  % URL to resolve the DOI, and the master http://dx.doi.org/ address is
-  % preferred, since publisher-specific URLs can disappear in response
-  % to economic events.  All journals are encouraged by the DOI
-  % authorities to use that typeset format and link procedures for
-  % uniformity across all publications that include DOIs in reference
-  % lists.
-  % The numeric prefix is guaranteed to start with "10.", so we use
-  % that as a test.
-  doi #1 #3 substring$ "10." =
-    { doi }
-    {
-      doi #1 #7 substring$ "http://" =
-        {
-            doi #8 doi text.length$ #7 - substring$ 't := % get modifiable copy of rest of DOI
-
-            "INTERNAL STYLE-FILE ERROR" 's :=
-
-            % search for next "/" and assign its suffix to s
-
-            { t text.length$ }
-            {
-              t #1 #1 substring$ "/" =
-                {
-                  % save rest of string as true DOI (should be 10.xxxx/yyyy)
-                  t #2 t text.length$ #1 - substring$ 's :=
-                  "" 't :=    % empty string t terminates the loop
-                }
-                {
-                  % discard first character and continue loop: t <= substring(t,2,last)
-                  t #2 t text.length$ #1 - substring$ 't :=
-                }
-              if$
-            }
-            while$
-
-            % check for valid DOI (should be 10.xxxx/yyyy)
-            s #1 #3 substring$ "10." =
-              { }
-              { "unrecognized DOI substring " s * " in DOI value [" * doi * "]" * warning$ }
-            if$
-
-            s   % push the stripped DOI on the output stack
-
-        }
-        {
-          "unrecognized DOI value [" doi * "]" * warning$
-          doi   % push the unrecognized original DOI on the output stack
-        }
-      if$
-    }
-  if$
-}
-
-%
-% Change by BV: added standard prefix to URL
-%
-FUNCTION { output.doi } % UTAH
-{ % output non-empty DOI as one-line sentence (stack untouched)
-  doi empty.or.unknown
-    { }
-    {
-      %% NB: We want URLs at beginning of line to reduce likelihood of
-      %% BibTeX's nasty line wrapping after column 79, which then requires
-      %% manual (or automated) editing of the .bbl file to repair.
-      %% The \url{} macro strips percent-newlines, and is thus safe in
-      %% the presence of the line wrapping, but \path|...| and
-      %% \verb|...| do not.
-      "\showDOI{%" writeln
-      "\url{http://dx.doi.org/" strip.doi * "}}" * writeln
-    }
-  if$
-}
-
-FUNCTION { output.isbn }                % UTAH
-{ % output non-empty ISBN-10 and/or ISBN-13 as one-line sentences (stack untouched)
-  show-isbn-10-and-13
-    {
-      %% show both 10- and 13-digit ISBNs
-      isbn empty.or.unknown
-        { }
-        {
-          "\showISBNx{" isbn * "}" * writeln
-        }
-      if$
-      isbn-13 empty.or.unknown
-        { }
-        {
-          "\showISBNxiii{" isbn-13 * "}" * writeln
-        }
-      if$
-    }
-    {
-      %% show 10-digit ISBNs only if 13-digit ISBNs not available
-      isbn-13 empty.or.unknown
-        {
-          isbn empty.or.unknown
-            { }
-            {
-              "\showISBNx{" isbn * "}" * writeln
-            }
-          if$
-        }
-        {
-          "\showISBNxiii{" isbn-13 * "}" * writeln
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION { output.issn } % UTAH
-{ % output non-empty ISSN as one-line sentence (stack untouched)
-  issn empty.or.unknown
-    { }
-    { "\showISSN{" issn * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.issue }
-{ % output non-empty issue number as a one-line sentence (stack untouched)
-  issue empty.or.unknown
-    { }
-    { "Issue " issue * "." * writeln }
-  if$
-}
-
-FUNCTION { output.lccn } % UTAH
-{ % return with stack untouched
-  lccn empty.or.unknown
-    { }
-    { "\showLCCN{" lccn * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.note } % UTAH
-{ % return with stack empty
-  note empty.or.unknown
-    { }
-    { "\shownote{" note add.period$ * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.note.check } % UTAH
-{ % return with stack empty
-  note empty.or.unknown
-    { "empty note in " cite$ * warning$ }
-    { "\shownote{" note add.period$ * "}" * writeln }
-  if$
-}
-
-%
-% Changes by BV 2011/04/15.  Do not output
-% url if doi is defined
-%
-FUNCTION { output.url } % UTAH
-{ % return with stack untouched
-  % output URL and associated lastaccessed fields
-  doi empty.or.unknown
-  {
-    url empty.or.unknown
-      { }
-      {
-          %% NB: We want URLs at beginning of line to reduce likelihood of
-          %% BibTeX's nasty line wrapping after column 79, which would require
-          %% manual (or automated) editing of the .bbl file to repair.  However,
-          %% the \url{} macro handles the unwrapping job automatically.
-          "\showURL{%" writeln
-          lastaccessed empty.or.unknown
-            { "" }
-            { "Retrieved " lastaccessed * " from " * }
-          if$
-
-          %% The URL field may contain a semicolon-separated list of Web
-          %% addresses, and we locate and wrap each of them in \url{...}.
-          %% The simplistic approach of putting the entire list into the
-          %% macro argument is that the semicolons are typeset in a
-          %% typewriter font, and no space follows them.
-          %%
-          %% We therefore replace the original code
-          %%    "\url{" * url * "}}" * writeln
-          %% with this character-at-a-time loop:
-
-          "\url{" *
-
-          url 't :=                       % get modifiable copy of URL list
-
-          { t text.length$ }
-          {
-            t #1 #1 substring$ ";" =
-              {                         % then split argument at separator
-                "};" * writeln
-                "\url{"
-              }
-              {                         % else concatenate nonblank character to argument
-                t #1 #1 substring$ " " =
-                  { }
-                  { t #1 #1 substring$ * }
-                if$
-              }
-            if$
-
-            t #2 t text.length$ #1 - substring$ 't :=
-          }
-          while$
-
-          "}}" * writeln
-      }
-    if$
-  }
-  { }
-  if$
-}
-
-FUNCTION { output.year.check }
-{ % warn if year empty, else output top string and leave " YEAR<label>" on stack in mid-sentence
-  year empty.or.unknown
-     { "empty year in " cite$ * warning$ }
-     { write$
-        " " year * extra.label *
-       mid.sentence 'output.state :=
-     }
-  if$
-}
-
-FUNCTION { not }
-{
-    { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION { and }
-{
-    'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION { or }
-{
-   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION { le }
-{
-  %% test whether first number is less than or equal to second number
-  %% stack in:  n1 n2
-  %% stack out: if n1 <= n2 then 1 else 0
-
-  %% "DEBUG: le " cite$ * warning$
-  > { #0 } { #1 } if$
-}
-
-FUNCTION { ge }
-{
-  %% test whether first number is greater than or equal to second number
-  %% stack in:  n1 n2
-  %% stack out: if n1 >= n2 then 1 else 0
-
-  %% "DEBUG: ge " cite$ * warning$
-  < { #0 } { #1 } if$
-}
-
-FUNCTION { is.leading.digit }
-{
-  %% test whether first character of string is a digit
-  %% stack in:  string
-  %% stack out: if first-char-is-digit then 1 else 0
-
-  #1 #1 substring$                      % replace string by string[1:1]
-  duplicate$                            % string[1:1] string[1:1]
-  chr.to.int$
-  "0" chr.to.int$ swap$ le              % "0" <= string[1:1] --> 0-or-1
-  swap$                                 % 0-or-1 string[1:1]
-  chr.to.int$
-  "9" chr.to.int$ le                    % string[1:1} <= "9" --> 0-or-1
-  and
-}
-
-FUNCTION { skip.digits }
-{
-  %% skip over leading digits in string
-  %% stack in:  string
-  %% stack out: rest-of-string leading-digits
-
-  %% "DEBUG: enter skip.digits " cite$ * warning$
-
-  %% dump.stack.1
-
-  duplicate$
-  't :=
-  't.org :=
-  "" 'u :=
-
-  { t text.length$ }
-  {
-    %% "=================DEBUG: skip.digits   t = [" t * "]" * warning$
-    t is.leading.digit
-      { t #2 t text.length$ #1 - substring$ }
-      {
-        t 'u :=
-        ""
-      }
-    if$
-    't :=
-  }
-  while$
-
-  u                                                             % rest of string
-  t.org #1 t.org text.length$ u text.length$ - substring$       % leading digits
-
-  %% "DEBUG: t.org = [" t.org * "]" * warning$
-  %% "DEBUG: u     = [" u * "]" * warning$
-
-  %% dump.stack.2
-
-  %% "DEBUG: leave skip.digits " cite$ * warning$
-}
-
-FUNCTION { skip.nondigits }
-{
-  %% skip over leading nondigits in string
-  %% stack in:  string
-  %% stack out: rest-of-string
-
-  %% "DEBUG: enter skip.nondigits " cite$ * warning$
-
-  't :=
-  "" 'u :=
-
-  { t text.length$ }
-  {
-    %% "=================DEBUG: skip.nondigits   t = [" t * "]" * warning$
-    t is.leading.digit
-      {
-        t 'u :=
-        ""
-      }
-      { t #2 t text.length$ #1 - substring$ }
-    if$
-    't :=
-  }
-  while$
-
-  u                     % rest of string
-
-  %% dump.stack.1
-  %% "DEBUG: leave skip.nondigits " cite$ * warning$
-}
-
-FUNCTION { parse.next.number }
-{
-  %% stack in:  string
-  %% stack out: rest-of-string next-numeric-part-of-string
-  %% Example:
-  %% stack in:  "123:1--123:59"
-  %% stack out: ":1--123:59" "123"
-
-  's :=
-  s skip.nondigits 's :=
-  s skip.digits
-}
-
-FUNCTION { reduce.pages.to.page.count }
-{
-  %% Stack in:  arbitrary-and-unused
-  %% Stack out: unchanged
-  %%
-  %% For the new-style pagination with article number and numpages or
-  %% pages, we expect to have BibTeX entries containing something like
-  %%     articleno = "17",
-  %%     pages     = "1--23",
-  %% with output "Article 17, 23 pages",
-  %% or
-  %%     articleno = "17",
-  %%     numpages  = "23",
-  %% with output "Article 17, 23 pages",
-  %% or
-  %%     articleno = "17",
-  %%     pages     = "17:1--17:23",
-  %% with output "Article 17, 23 pages",
-  %%
-  %% If articleno is missing or empty, then we should output "1--23",
-  %% "23" (with a warning of a missing articleno), or "17:1--17:23",
-  %% respectively.
-
-  %% "DEBUG: enter reduce.pages.to.page.count " cite$ * warning$
-
-  %% "DEBUG: pages = [" pages * "]" * warning$
-
-  pages
-  parse.next.number 'p1 :=
-  parse.next.number 'p2 :=
-  parse.next.number 'p3 :=
-  parse.next.number 'page.count :=
-
-  duplicate$
-  empty.or.unknown
-    {  }
-    {
-      duplicate$ "unexpected trailing garbage [" swap$ *
-      "] after n:p1--n:p2 in pages = [" *
-      pages *
-      "] in " *
-      cite$ *
-      warning$
-    }
-  if$
-
-  pop$
-
-  %% "DEBUG: reduce.pages.to.page.count: "
-  %% " p1 = " p1 * *
-  %% " p2 = " p2 * *
-  %% " p3 = " p3 * *
-  %% " p4 = " page.count * *
-  %% " in " cite$ * * warning$
-
-  p1 p3 =   p2 "1" =   and   numpages empty.or.unknown   and
-    { "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$ }
-    {
-      numpages empty.or.unknown
-        { pages }
-        { numpages }
-      if$
-      'page.count :=
-    }
-  if$
-
-  p1 "1" =   p3 empty.or.unknown   and   numpages empty.or.unknown   and
-    {
-      p2 'page.count :=
-      "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$
-    }
-    {
-      numpages empty.or.unknown
-        { pages }
-        { numpages }
-      if$
-      'page.count :=
-    }
-  if$
-
-  %% "DEBUG: leave reduce.pages.to.page.count " cite$ * warning$
-}
-
-FUNCTION { new.block.checkb }
-{ % issue a new.block only if at least one of top two stack strings is not empty
-  empty.or.unknown
-  swap$ empty.or.unknown
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION { field.or.null }
-{ % convert empty value to null string, else return value
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION { emphasize }
-{ % emphasize a non-empty top string on the stack (WITHOUT italic correction)
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{\em " swap$ * "}" * }
-  if$
-}
-
-FUNCTION { emphasize.with.italic.correction }
-{ % convert empty string to null string, or emphasize with a trailing italic correction
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{\em " swap$ * "\/}" * }
-  if$
-}
-
-FUNCTION { comma }
-{ % convert empty string to null string, or brace string and add trailing comma
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{" swap$ * "}," * }
-  if$
-}
-
-FUNCTION { format.names }
-{
-  % Format bibliographical entries with the first author last name first,
-  % and subsequent authors with initials followed by last name.
-  % All names are formatted in this routine.
-
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 =
-        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
-        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
-        {"{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
-        {"{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
-      if$
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "{\sc others}" =
-                { " {et~al\mbox{.}}" * } % jrh: avoid spacing problems
-                { " {and} " * t * } % from Chicago Manual of Style
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-}
-
-FUNCTION { my.full.label }
-{
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-
-    { s nameptr "{vv~}{ll}" format.name$ 't :=  % get the next name
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "others" =
-                { " et~al\mbox{.}" * } % jrh: avoid spacing problems
-                { " and " * t * } % from Chicago Manual of Style
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-
-}
-
-FUNCTION { format.names.fml }
-{
-  % Format names in "familiar" format, with first initial followed by
-  % last name. Like format.names, ALL names are formatted.
-  % jtb: The names are NOT put in small caps
-
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-
-    {
-      "{" s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
-
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "{others}" =
-                { " {et~al\mbox{.}}" * }
-                { " {and} " * t * }
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-}
-
-FUNCTION { format.authors }
-{
-  author empty.or.unknown
-    { "" }
-    { author format.names add.period$} % jtb: add period if none before
-  if$
-}
-
-FUNCTION { format.key }
-{
-  empty.or.unknown
-    { key field.or.null }
-    { "" }
-  if$
-}
-
-FUNCTION { format.no.key }
-{
-  empty.or.unknown
-    { "" }
-    { "" }
-  if$
-}
-
-FUNCTION { format.editors.fml }
-{
-  % Format editor names for use in the "in" types: inbook, incollection,
-  % inproceedings: first initial, then last names. When editors are the
-  % LABEL for an entry, then format.editor is used which lists editors
-  % by last name first.
-
-  editor empty.or.unknown
-    { "" }
-    {
-      editor format.names.fml editor num.names$ #1 >
-        { " (Eds.)" * }
-        { " (Ed.)" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.editors }
-{ % format editor names for use in labels, last names first.
-  editor empty.or.unknown
-    { "" }
-    {
-      editor format.names
-      editor num.names$ #1 >
-        { " (Eds.)." * }
-        { " (Ed.)." * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.articletitle }
-{
-  title empty.or.unknown
-    { "" }
-    % Use this to preserve lettercase in titles:
-    { "\showarticletitle{" title * "}" * }
-    % Use this for downcase title style:
-    % { \showarticletitle{" title "t" change.case$ * "}" * }
-  if$
-}
-
-FUNCTION { format.title }
-{
-  title empty.or.unknown
-    { "" }
-    % Use this to preserve lettercase in titles:
-    { title }
-    % Use this for downcase title style:
-    % { title "t" change.case$ }
-  if$
-}
-
-FUNCTION { n.dashify }
-{
-  't :=
-  ""
-    { t empty.or.unknown not }
-    {
-      t #1 #1 substring$ "-" =
-        {
-          t #1 #2 substring$ "--" = not
-            { "--" *
-              t #2 global.max$ substring$ 't :=
-            }
-            {
-              { t #1 #1 substring$ "-" = }
-              {
-                "-" *
-                t #2 global.max$ substring$ 't :=
-              }
-              while$
-            }
-          if$
-        }
-        {
-          t #1 #1 substring$ *
-          t #2 global.max$ substring$ 't :=
-        }
-      if$
-    }
-  while$
-}
-
-FUNCTION { format.btitle }
-{
-  edition empty.or.unknown
-  { title emphasize }
-  { title empty.or.unknown
-    { title emphasize } % jtb: what is this supposed to do ?!?
-    { "{\em " title * "\/} (" * edition "l" change.case$ * " ed.)" * } % jtb: no parens for ed.
-    if$
-  }
-  if$
-}
-
-FUNCTION { format.emphasize.booktitle }
-{ % push "" or "{\em booktitle}" or "{\em booktitle}, (second ed.)" on stack
-  edition empty.or.unknown
-    { booktitle emphasize }
-    { booktitle empty.or.unknown
-      { "" }
-      { "{\em " booktitle * "} (" * edition "l" change.case$ * " ed.)" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.city }
-{
-  % jtb: if the preceding string (the title of the conference) is non-empty,
-  % jtb: append the location, otherwise leave empty (so as to trigger the
-  % jtb: error message in output.check
-
-  duplicate$ empty.or.unknown
-    { }
-    {
-      city empty.or.unknown
-        {
-          date empty.or.unknown
-            { }
-            { " (" * date * ")" * }
-          if$
-        }
-        {
-          date empty.or.unknown
-            { " (" * city * ")" * }
-            { " (" * city * ", " * date * ")" * }
-          if$
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION { tie.or.space.connect }
-{
-  duplicate$ text.length$ #3 <
-    { "~" }
-    { " " }
-  if$
-  swap$ * *
-}
-
-FUNCTION { either.or.check }
-{
-  empty.or.unknown
-    'pop$
-    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
-  if$
-}
-
-FUNCTION { format.bvolume }
-{
-  % jtb: If there is a series, this is added and the volume trails after it.
-  % jtb: Otherwise, "Vol" is Capitalized.
-
-  volume empty.or.unknown
-    { "" }
-    {
-      series empty.or.unknown
-        { "Vol." volume tie.or.space.connect}
-        { series ", " * "Vol." volume tie.or.space.connect *}
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION { format.bvolume.noseries }
-{
-  volume empty.or.unknown
-    { "" }
-    {
-      series empty.or.unknown
-        { "Vol." volume tie.or.space.connect}
-        { "Vol." volume tie.or.space.connect}
-%        { series ", " * "Vol." volume tie.or.space.connect *}
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION { format.series }
-{
-  series empty.or.unknown
-    {""}
-    {" {\em (" * series ")}" *}
-  if$
-}
-
-FUNCTION { format.number.series }
-{
-  volume empty.or.unknown
-    {
-      number empty.or.unknown
-        {
-          volume empty.or.unknown
-          { "" }
-          {
-            series empty.or.unknown
-              { "" }
-              { " (" series * ")" * }
-            if$
-          }
-          if$
-        }                                       %    { series field.or.null }
-        {
-          output.state mid.sentence =
-            { "Number" }                        % gnp - changed to mixed case always
-            { "Number" }
-          if$
-          number tie.or.space.connect series empty.or.unknown
-            { "there's a number but no series in " cite$ * warning$ }
-            { " in " * series * }
-          if$
-        }
-      if$
-    }
-    {
-      ""
-    }
-  if$
-}
-
-FUNCTION { multi.page.check }
-{
-  't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty.or.unknown not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
-    { #1 'multiresult := }
-    { t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION { format.pages }
-{
-  pages empty.or.unknown
-    { "" }
-    {
-      pages multi.page.check
-        { pages n.dashify } % gnp - removed () % jtb: removed pp.
-        { pages }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.pages.check.without.articleno }
-{ %% format pages field only if articleno is absent
-  %% Stack out: pages-specification
-  numpages missing$ pages missing$ and
-    { "page numbers missing in both pages and numpages fields in " cite$ * warning$ }
-    { }
-  if$
-
-  articleno empty.or.unknown
-    {
-      pages missing$
-        { numpages }
-        { format.pages }
-      if$
-    }
-    { "" }
-  if$
-}
-
-FUNCTION { format.pages.check }
-{
-  pages empty.or.unknown
-    { "page numbers missing in " cite$ * warning$ "" }
-    { pages n.dashify }
-  if$
-}
-
-FUNCTION { format.bookpages }
-{
-  bookpages empty.or.unknown
-    { "" }
-    { bookpages "book pages" tie.or.space.connect }
-  if$
-}
-
-FUNCTION { format.named.pages }
-{
-  pages empty.or.unknown
-    { "" }
-    { format.pages "pages" tie.or.space.connect }
-  if$
-}
-
-%
-% Changed by Boris Veytsman, 2011-03-13
-% Now the word "pages" is printed even if
-% there field pages is not empty.
-%
-
-FUNCTION { format.page.count }
-{
-  page.count empty.or.unknown
-    { "" }
-    {
-      articleno empty.or.unknown
-        { "numpages field, but no articleno field, in " cite$ * warning$ }
-        { }
-      if$
-      page.count "pages" tie.or.space.connect
-    }
-  if$
-}
-
-FUNCTION { format.articleno.numpages }
-{
-  %% There are seven possible outputs, depending on which fields are set.
-  %%
-  %% These four are handled here:
-  %%
-  %%     articleno, numpages, pages     -> "Article articleno-value, numpages-value pages"
-  %%     articleno, numpages            -> "Article articleno-value, numpages-value pages"
-  %%     articleno, pages               -> "Article articleno-value, reduced-pages-value pages"
-  %%     articleno                      -> "Article articleno-value" and warn about missing numpages
-  %%
-  %% The remaining three have already been handled by
-  %% format.pages.check.without.articleno:
-  %%
-  %%     numpages, pages                -> "pages-value"
-  %%     numpages                       -> "numpages-value"
-  %%     pages                          -> "pages-value"
-
-  articleno empty.or.unknown
-    {
-      numpages empty.or.unknown
-        { }
-        { "require articleno with numpages field in " cite$ * warning$ }
-      if$
-      ""
-    }
-    {
-      numpages empty.or.unknown
-        {
-          pages empty.or.unknown
-            {
-              "require pages or numpages fields with articleno field in " cite$ * warning$
-              "" 'page.count :=
-            }
-            { reduce.pages.to.page.count }
-          if$
-        }
-        { numpages 'page.count := }
-      if$
-
-      %% The Article number is now handled in format.day.month.year because
-      %% ACM prefers the style "Digital Libraries 12, 3, Article 5 (July 2008)"
-      %% over "Digital Libraries 12, 3 (July 2008), Article 5"
-      %% format.articleno output
-      format.page.count
-    }
-  if$
-}
-
-FUNCTION { format.journal.volume.number.day.month.year }
-{
-  % By Young (and Spencer)
-  % GNP - fixed bugs with missing volume, number, and/or pages
-  %
-  % Format journal, volume, number, pages for article types.
-  %
-  journal empty.or.unknown
-    { "no journal in " cite$ * warning$
-      "" }
-%    { journal emphasize.with.italic.correction }
-     {
-           journal "Journal of the ACM" =
-       { "{\it J. ACM}" }
-       {
-           journal "American Mathematical Society Translations" =
-       { "{\it Amer. Math. Soc. Transl.}" }
-       {
-           journal "Bulletin of the American Mathematical Society" =
-       { "{\it Bull. Amer. Math. Soc.}" }
-       {
-           journal "Proceedings of the American Mathematical Society" =
-       { "{\it Proc. Amer. Math. Soc.}" }
-       {
-           journal "Transactions of the American Mathematical Society" =
-       { "{\it Trans. Amer. Math. Soc.}" }
-       {
-           journal "Communications of the {ACM}" =
-       { "{\it Commun. {ACM}}" }
-       {
-           journal "{ACM} Computing Surveys" =
-       { "{\it Comput. Surveys}" }
-       {
-           journal "{ACM} Transactions on Mathematical Software" =
-       { "{\it {ACM} Trans. Math. Software}" }
-       {
-           journal "{ACM} {SIGNUM} Newsletter" =
-       { "{\it {ACM} {SIGNUM} Newslett.}" }
-       {
-           journal "American Journal of Sociology" =
-       { "{\it Amer. J. Sociology}" }
-       {
-           journal "Journal of the American Statistical Association" =
-       { "{\it J. Amer. Statist. Assoc.}" }
-       {
-           journal "Applied Mathematics and Computation" =
-       { "{\it Appl. Math. Comput.}" }
-       {
-           journal "American Mathematical Monthly" =
-       { "{\it Amer. Math. Monthly}" }
-       {
-           journal "British Journal of Mathematical and Statistical Psychology" =
-       { "{\it Brit. J. Math. Statist. Psych.}" }
-       {
-           journal "Canadian Mathematical Bulletin" =
-       { "{\it Canad. Math. Bull.}" }
-       {
-           journal "Journal of Computational and Applied Mathematics" =
-       { "{\it J. Comput. Appl. Math.}" }
-       {
-           journal "Journal of Computational Physics" =
-       { "{\it J. Comput. Phys.}" }
-       {
-           journal "Computers and Structures" =
-       { "{\it Comput. \& Structures}" }
-       {
-           journal "The Computer Journal" =
-       { "{\it Comput. J.}" }
-       {
-           journal "Journal of Computer and System Sciences" =
-       { "{\it J. Comput. System Sci.}" }
-       {
-           journal "Contemporary Mathematics" =
-       { "{\it Contemp. Math.}" }
-       {
-           journal "Crelle's Journal" =
-       { "{\it Crelle's J.}" }
-       {
-           journal "Giornale di Mathematiche" =
-       { "{\it Giorn. Mat.}" }
-       {
-           journal "{IEEE} Transactions on Computers" =
-       { "{\it {IEEE} Trans. Comput.}" }
-       {
-           journal "{IEEE} Transactions on Automatic Control" =
-       { "{\it {IEEE} Trans. Automat. Control}" }
-       {
-           journal "Proceedings of the {IEEE}" =
-       { "{\it Proc. {IEEE}}" }
-       {
-           journal "{IEEE} Transactions on Aerospace and Electronic Systems" =
-       { "{\it {IEEE} Trans. Aerospace Electron. Systems}" }
-       {
-           journal "{IMA} Journal of Numerical Analysis" =
-       { "{\it {IMA} J. Numer. Anal.}" }
-       {
-           journal "Information Processing Letters" =
-       { "{\it Inform. Process. Lett.}" }
-       {
-           journal "Journal of the Institute of Mathematics and its Applications" =
-       { "{\it J. Inst. Math. Appl.}" }
-       {
-           journal "International Journal of Control" =
-       { "{\it Internat. J. Control}" }
-       {
-           journal "International Journal for Numerical Methods in Engineering" =
-       { "{\it Internat. J. Numer. Methods Engrg.}" }
-       {
-           journal "International Journal of Supercomputing Applications" =
-       { "{\it Internat. J. Supercomputing Applic.}" }
-       {
-           journal "Journal of Research of the National Bureau of Standards" =
-       { "{\it J. Res. Nat. Bur. Standards}" }
-       {
-           journal "Linear Algebra and its Applications" =
-       { "{\it Linear Algebra Appl.}" }
-       {
-           journal "Journal of Mathematical Analysis and Applications" =
-       { "{\it J. Math. Anal. Appl.}" }
-       {
-           journal "Mathematische Annalen" =
-       { "{\it Math. Ann.}" }
-       {
-           journal "Journal of Mathematical Physics" =
-       { "{\it J. Math. Phys.}" }
-       {
-           journal "Mathematics of Computation" =
-       { "{\it Math. Comp.}" }
-       {
-           journal "Mathematica Scandinavica" =
-       { "{\it Math. Scand.}" }
-       {
-           journal "Mathematical Tables and Other Aids to Computation" =
-       { "{\it Math. Tables Aids Comput.}" }
-       {
-           journal "Numerische Mathematik" =
-       { "{\it Numer. Math.}" }
-       {
-           journal "Pacific Journal of Mathematics" =
-       { "{\it Pacific J. Math.}" }
-       {
-           journal "Journal of Parallel and Distributed Computing" =
-       { "{\it J. Parallel and Distrib. Comput.}" }
-       {
-           journal "Parallel Computing" =
-       { "{\it Parallel Comput.}" }
-       {
-           journal "Philosophical Magazine" =
-       { "{\it Philos. Mag.}" }
-       {
-           journal "Proceedings of the National Academy of Sciences of the USA" =
-       { "{\it Proc. Nat. Acad. Sci. U. S. A.}" }
-       {
-           journal "Quarterly Journal of Mathematics, Oxford, Series (2)" =
-       { "{\it Quart. J. Math. Oxford Ser. (2)}" }
-       {
-           journal "Quarterly of Applied Mathematics" =
-       { "{\it Quart. Appl. Math.}" }
-       {
-           journal "Review of the International Statisical Institute" =
-       { "{\it Rev. Inst. Internat. Statist.}" }
-       {
-           journal "Journal of the Society for Industrial and Applied Mathematics" =
-       { "{\it J. Soc. Indust. Appl. Math.}" }
-       {
-           journal "Journal of the Society for Industrial and Applied Mathematics, Series B, Numerical Analysis" =
-       { "{\it J. Soc. Indust. Appl. Math. Ser. B Numer. Anal.}" }
-       {
-           journal "{SIAM} Journal on Algebraic and Discrete Methods" =
-       { "{\it {SIAM} J. Algebraic Discrete Methods}" }
-       {
-           journal "{SIAM} Journal on Applied Mathematics" =
-       { "{\it {SIAM} J. Appl. Math.}" }
-       {
-           journal "{SIAM} Journal on Computing" =
-       { "{\it {SIAM} J. Comput.}" }
-       {
-           journal "{SIAM} Journal on Matrix Analysis and Applications" =
-       { "{\it {SIAM} J. Matrix Anal. Appl.}" }
-       {
-           journal "{SIAM} Journal on Numerical Analysis" =
-       { "{\it {SIAM} J. Numer. Anal.}" }
-       {
-           journal "{SIAM} Review" =
-       { "{\it {SIAM} Rev.}" }
-       {
-           journal "{SIAM} Journal on Scientific and Statistical Computing" =
-       { "{\it {SIAM} J. Sci. Statist. Comput.}" }
-       {
-           journal "Software Practice and Experience" =
-       { "{\it Software Prac. Experience}" }
-       {
-           journal "Statistical Science" =
-       { "{\it Statist. Sci.}" }
-       {
-           journal "{USSR} Computational Mathematics and Mathematical Physics" =
-       { "{\it {U. S. S. R.} Comput. Math. and Math. Phys.}" }
-       {
-           journal "Journal of {VLSI} and Computer Systems" =
-       { "{\it J. {VLSI} Comput. Syst.}" }
-       {
-           journal "Zeitschrift fur Angewandte Mathematik und Mechanik" =
-       { "{\it Z. Angew. Math. Mech.}" }
-       {
-           journal "Zeitschrift fur Angewandte Mathematik und Physik" =
-       { "{\it Z. Angew. Math. Phys.}" }
-       {
-           journal "ACM Computing Surveys" =
-       { "{\it Comput. Surveys}" }
-       {
-           journal "ACM Transactions on Mathematical Software" =
-       { "{\it ACM Trans. Math. Software}" }
-       {
-           journal "ACM {SIGNUM} Newsletter" =
-       { "{\it ACM {SIGNUM} Newslett.}" }
-       {
-           journal "IEEE Transactions on Computers" =
-       { "{\it IEEE Trans. Comput.}" }
-       {
-           journal "IEEE Transactions on Automatic Control" =
-       { "{\it IEEE Trans. Automat. Control}" }
-       {
-           journal "Proceedings of the IEEE" =
-       { "{\it Proc. IEEE}" }
-       {
-           journal "IEEE Transactions on Aerospace and Electronic Systems" =
-       { "{\it IEEE Trans. Aerospace Electron. Systems}" }
-       {
-           journal "IMA Journal of Numerical Analysis" =
-       { "{\it IMA J. Numer. Anal.}" }
-       {
-           journal "SIAM Journal on Algebraic and Discrete Methods" =
-       { "{\it SIAM J. Algebraic Discrete Methods}" }
-       {
-           journal "SIAM Journal on Applied Mathematics" =
-       { "{\it SIAM J. Appl. Math.}" }
-       {
-           journal "SIAM Journal on Computing" =
-       { "{\it SIAM J. Comput.}" }
-       {
-           journal "SIAM Journal on Matrix Analysis and Applications" =
-       { "{\it SIAM J. Matrix Anal. Appl.}" }
-       {
-           journal "SIAM Journal on Numerical Analysis" =
-       { "{\it SIAM J. Numer. Anal.}" }
-       {
-           journal "SIAM Review" =
-       { "{\it SIAM Rev.}" }
-       {
-           journal "SIAM Journal on Scientific and Statistical Computing" =
-       { "{\it SIAM J. Sci. Statist. Comput.}" }
-       {
-           journal "USSR Computational Mathematics and Mathematical Physics" =
-       { "{\it U. S. S. R. Comput. Math. and Math. Phys.}" }
-       {
-           journal "Journal of VLSI and Computer Systems" =
-       { "{\it J. VLSI Comput. Syst.}" }
-       {
-           journal "Communications of the ACM" =
-       { "{\it Commun. ACM}" }
-       %% If no match with cases needing special handling, just output journal name
-       {  journal emphasize.with.italic.correction  }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-         }
-    if$
-
-  number empty.or.unknown
-    {
-      volume empty.or.unknown
-        { "no number and no volume in " cite$ * warning$ "" * }
-        { " " * " {" * volume * "}" * }
-      if$
-    }
-    {
-      volume empty.or.unknown
-        {
-          "unusual to have number, but no volume, for " cite$ * warning$
-          " " * number *
-        }
-        { " " * volume comma " " * number * * }
-      if$
-    }
-  if$
-
-  format.day.month.year *
-}
-
-FUNCTION { format.chapter.pages }
-{
-  chapter empty.or.unknown
-    'format.pages
-    { type empty.or.unknown
-        { "Chapter" } % gnp - changed to mixed case
-        { type "t" change.case$ }
-      if$
-      chapter tie.or.space.connect
-      pages empty.or.unknown
-        {"page numbers missing in " cite$ * warning$} % gnp - added check
-        { ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.in.emphasize.booktitle }
-{ % jtb: format for collections or proceedings not appearing in a journal
-  booktitle empty.or.unknown
-  { "" }
-  { "In " format.emphasize.booktitle * }
-  if$
-}
-
-FUNCTION { format.in.booktitle }
-{ % jtb: format for proceedings appearing in a journal
-  booktitle empty.or.unknown
-  { "" }
-  { "In " booktitle * }
-  if$
-}
-
-FUNCTION { format.in.ed.booktitle }
-{
-  booktitle empty.or.unknown
-  { "" }
-  { editor empty.or.unknown
-    { "In " format.emphasize.booktitle * }
-                % jtb: swapped editor location
-    { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
-    if$
-  }
-  if$
-}
-
-FUNCTION { format.thesis.type }
-{ % call with default type on stack top
-  type empty.or.unknown
-    'skip$    % use default type
-    {
-      pop$    % discard default type
-      % NO: it is silly to have to brace protect every degree type!:  type "t" change.case$
-      type
-    }
-  if$
-}
-
-FUNCTION { format.tr.number }
-{
-  type empty.or.unknown
-    { "Tech. Rep." }
-    'type
-  if$
-  number empty.or.unknown
-    { "t" change.case$ }
-    %% LOOKS BAD: { "." * number tie.or.space.connect }
-    %% Prefer "Research report RJ687." to "Research report. RJ687."
-    { number tie.or.space.connect }
-  if$
-}
-
-FUNCTION { format.advisor }
-{
-  advisor empty.or.unknown
-    { "" }
-    { "Advisor(s) " advisor * }
-  if$
-}
-
-FUNCTION { format.article.crossref }
-{ "See"
-  "\cite{" * crossref * "}" *
-}
-
-FUNCTION { format.crossref.editor }
-{
-  editor #1 "{vv~}{ll}" format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { pop$ " et~al\mbox{.}" * }         % jrh: avoid spacing problems
-    { #2 <
-    'skip$
-    { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-        { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
-        { " and " * editor #2 "{vv~}{ll}" format.name$ * }
-      if$
-    }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.book.crossref }
-{
-  volume empty.or.unknown
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
-      "In "
-    }
-    { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
-      " of " *
-    }
-  if$
-  editor empty.or.unknown
-  editor field.or.null author field.or.null =
-  or
-    { key empty.or.unknown
-    { series empty.or.unknown
-        { "need editor, key, or series for " cite$ * " to crossref " *
-          crossref * warning$
-          "" *
-        }
-        { "{\em " * series * "\/}" * }
-      if$
-    }
-    { key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION { format.incoll.inproc.crossref }
-{ "See"
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION { output.bibitem }
-{
-  newline$
-  "\bibitem[" write$
-  label write$
-  "]%" writeln
-  "        {" write$
-  cite$ write$
-  "}" writeln
-  ""
-  before.all 'output.state :=
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url }
-{ % enter and return with stack empty
-  %% We switch now from buffered output to output of complete lines, so
-  %% that the Issue .. URL data have their own lines, and are less likely
-  %% to be line-wrapped by BibTeX's short-sighted algorithm, which wraps
-  %% lines longer than 79 characters, backtracking to what it thinks is
-  %% a break point in the string.  Any such wrapping MUST be undone to
-  %% prevent percent-newline from appearing in DOIs and URLs.  The
-  %% output data are intentionally wrapped in \showxxx{} macros at
-  %% beginning of line, and that supply their own punctuation (if they
-  %% are not defined to suppress output entirely), to make it easier for
-  %% other software to recover them from .bbl files.
-  %%
-  %% It also makes it possible to later change the macro definitions
-  %% to suppress particular output values, or alter their appearance.
-  %%
-  %% Note that it is possible for theses, technical reports, and
-  %% manuals to have ISBNs, and anything that has an ISBN may also
-  %% have an ISSN.  When there are no values for these keys, there
-  %% is no output generated for them here.
-
-  "\newblock" writeln
-  after.block 'output.state :=
-
-  output.issue
-  output.isbn
-  output.coden  % CODEN is functionally like ISSN, so output them sequentially
-  output.issn
-  output.lccn
-  output.doi    % DOI is ALWAYS last according to CrossRef DOI documentation
-  output.url    % but ACM wants URL last
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url.note }
-{ % enter with stack empty, return with empty string on stack
-  output.issue.doi.coden.isxn.lccn.url
-  note empty.or.unknown
-    { }
-    {
-      "\newblock" writeln
-      output.note
-    }
-  if$
-  ""
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url.note.check }
-{ % enter with stack empty, return with empty string on stack
-  output.issue.doi.coden.isxn.lccn.url
-  note empty.or.unknown
-    { }
-    {
-      "\newblock" writeln
-      output.note.check
-    }
-  if$
-  ""
-}
-
-FUNCTION { article }
-{
-  output.bibitem
-
-  author empty.or.unknown
-    {
-      editor empty.or.unknown
-        { "neither author and editor supplied for " cite$ * warning$ }
-        { format.editors "editor" output.check }
-      if$
-    }
-    { format.authors "author" output.check }
-  if$
-
-  author format.no.key output       % added
-  output.year.check                 % added
-  new.block
-  format.articletitle "title" output.check
-  new.block
-  howpublished output
-
-  crossref missing$
-    { format.journal.volume.number.day.month.year }
-    {
-      "cross reference in @Article{...} is unusual" warning$
-      format.article.crossref output.nonnull
-    }
-  if$
-  output
-
-  format.pages.check.without.articleno output
-  format.articleno.numpages output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { book }
-{
-  output.bibitem
-  author empty.or.unknown
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-        { "author and editor" editor either.or.check }
-        'skip$
-      if$
-    }
-  if$
-  output.year.check       % added
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { new.sentence              % jtb: start a new sentence for series/volume
-      format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check    % jtb: require address
-      fin.sentence
-      pages empty.or.unknown
-        { format.bookpages }    % use bookpages when pages empty
-        { format.pages.check "pages" tie.or.space.connect }
-      if$
-      output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { booklet }
-{
-  output.bibitem
-  format.authors output
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title "title" output.check
-  new.block
-  howpublished output
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { inbook }
-{
-  output.bibitem
-  author empty.or.unknown
-    { format.editors
-      "author and editor" output.check
-    }
-    { format.authors output.nonnull
-      crossref missing$
-    { "author and editor" editor either.or.check }
-    'skip$
-      if$
-    }
-  if$
-  output.year.check                 % added
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { new.sentence              % jtb: start a new sentence for series/volume
-      format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check    % jtb: require address
-      format.bookpages output
-      format.chapter.pages
-      "chapter and pages" output.check  % jtb: moved from before publisher
-    }
-    {
-      format.bookpages output
-      format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { incollection }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output       % added
-  output.year.check              % added
-  new.block
-  format.articletitle "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      new.sentence                % jtb: start a new sentence for series/volume
-      format.bvolume output
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check      % jtb: require address
-      format.bookpages output
-      format.chapter.pages output % gnp - was special.output.nonnull
-                                  % left out comma before page numbers
-                                  % jtb: moved from before publisher
-    }
-    {
-      format.incoll.inproc.crossref output.nonnull
-      format.chapter.pages output
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { inproceedings }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output            % added
-  output.year.check                   % added
-  new.block
-  format.articletitle "title" output.check
-  howpublished output.dot.space
-  crossref missing$
-    {
-      journal missing$          % jtb: proceedings appearing in journals
-        { format.in.emphasize.booktitle format.city "booktitle"  output.check.dot.space
-          format.series output.removenospace
-          format.editors.fml output.dot.space
-          format.bvolume.noseries output
-          new.sentence
-          organization output
-          publisher "publisher" output.check % jtb: require publisher (?)
-          address "address" output.check  % jtb: require address
-          format.bookpages output
-        }
-        {
-           format.in.booktitle format.city "booktitle" output.check
-           format.editors.fml output
-           new.sentence
-           format.journal.volume.number.day.month.year output
-        }
-      if$
-      format.articleno output
-      format.pages.check.without.articleno output
-    }
-    {
-      format.incoll.inproc.crossref output.nonnull
-      format.articleno output
-      format.pages.check.without.articleno output
-    }
-  if$
-  format.articleno.numpages output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { conference } { inproceedings }
-
-FUNCTION { manual }
-{
-  output.bibitem
-  author empty.or.unknown
-    { editor empty.or.unknown
-      { organization "organization" output.check
-        organization format.key output }  % if all else fails, use key
-      { format.editors "author and editor" output.check }
-      if$
-    }
-    { format.authors output.nonnull }
-    if$
-  output.year.check                 % added
-  new.block
-  format.btitle "title" output.check
-  organization address new.block.checkb
-  % jtb: back to normal style: organization, address
-  organization "organization" output.check
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { mastersthesis }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
-  new.block
-  "M.S.\ thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  new.block
-  format.advisor output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { misc }
-{
-  output.bibitem
-  format.authors output
-  author format.key output            % added
-  output.year.check                   % added
-  title howpublished new.block.checkb
-  format.title output
-  new.block
-  howpublished output
-  "" output.nonnull.dot.space
-  output.day.month.year
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { phdthesis }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
-  new.block
-  "Ph.D. thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  new.block
-  format.advisor output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION {format.date}
-{ year empty.or.unknown
-    { month empty.or.unknown
-        {
-          ""                    % output empty date if year/month both empty
-          day empty.or.unknown
-            {  }
-            { "there's a day but no month or year in " cite$ * warning$ }
-          if$
-        }
-        { "there's a month but no year in " cite$ * warning$
-          month
-          day empty.or.unknown
-            { }
-            { " " * day * }
-          if$
-        }
-      if$
-    }
-    { month empty.or.unknown
-        {
-          year                  % output only year if month empty
-          day empty.or.unknown
-            {  }
-            { "there's a day and year but no month in " cite$ * warning$ }
-          if$
-        }
-        {
-          month " " *
-          day empty.or.unknown
-            { }
-            { day * ", " * }
-          if$
-          year *
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION {new.block.checka}
-{
-  empty.or.unknown
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION { periodical }
-{
-  output.bibitem
-  editor empty.or.unknown
-    { organization output }
-    { format.editors output.nonnull }
-  if$
-  new.block
-  title emphasize "title" output.check
-  format.date output
-  new.sentence
-  publisher output
-  address output
-  howpublished new.block.checka
-  howpublished output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { proceedings }
-{
-  output.bibitem
-  editor empty.or.unknown
-    { organization output
-      organization format.key output }  % gnp - changed from author format.key
-    { format.editors output.nonnull }
-  if$
-  % author format.key output             % gnp - removed (should be either
-  %                                        editor or organization
-  output.year.check                    % added (newapa)
-  new.block
-  format.btitle format.city "title" output.check        % jtb: added city
-  new.sentence
-  format.bvolume output
-  format.number.series output
-  new.sentence
-  organization output
-  % jtb: normal order: publisher, address
-  publisher output
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { techreport }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output             % added
-  output.year.check                    % added
-  new.block
-  format.btitle "title" output.check
-  new.block
-  format.tr.number output               % jtb: moved month ...
-  institution "institution" output.check
-  address output
-  new.sentence
-  format.named.pages output
-  % ACM omits year at end in transactions style
-  % format.day.month.year output.nonnull.dot.space  % jtb: ... to here (no parens)
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { unpublished }
-{
-  output.bibitem
-  format.authors
-  "author" output.check
-  author format.key output              % added
-  output.year.check                     % added
-  new.block
-  format.title "title" output.check
-  fin.sentence
-  output.day.month.year                 % UTAH
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note.check
-  fin.entry
-}
-
-FUNCTION { default.type } { misc }
-
-MACRO {jan} {"January"}
-
-MACRO {feb} {"February"}
-
-MACRO {mar} {"March"}
-
-MACRO {apr} {"April"}
-
-MACRO {may} {"May"}
-
-MACRO {jun} {"June"}
-
-MACRO {jul} {"July"}
-
-MACRO {aug} {"August"}
-
-MACRO {sep} {"September"}
-
-MACRO {oct} {"October"}
-
-MACRO {nov} {"November"}
-
-MACRO {dec} {"December"}
-
-%%% ====================================================================
-%%%                 I M P O R T A N T   C H A N G E
-%%%
-%%% For the 2009 release of the official acm-*.bst files, there are to
-%%% be NO predefined journal abbreviations in those style files.
-%%%
-%%% ACM may later develop an official list of mappings of full journal
-%%% names of commonly-cited journals to ACM-preferred abbreviations, but
-%%% authors should consider that use of any of these commented-out
-%%% abbreviations is DEPRECATED unless the BibTeX file itself provides
-%%% its own @String{name = "value"} definitions.
-%%%
-%%% Use of journal (and publisher and address) @String{...}
-%%% abbreviations, as opposed to explicit value assignments such as
-%%% journal = "J. ACM" and publisher = "IEEE", is preferred in
-%%% bibliographic databases, because it makes it easier for journal
-%%% production staff to replace those definitions by publisher-preferred
-%%% abbreviations when articles are typeset for publication.
-%%%
-%%% For historical reasons, and because some of these abbreviations are
-%%% used in other (non-ACM) bibliography style files, they are preserved
-%%% here in comments.  Future releases of the acm*-.bst files are likely
-%%% to remove them entirely.
-%%% ====================================================================
-%%%
-%%% DEPRECATED: MACRO {acmcs}           {"ACM Comput. Surv."}                   % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acmlett}         {"ACM Lett. Program. Lang. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acta}            {"Acta Inf."}                           % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ai}              {"Artificial Intelligence"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {al}              {"Ada Lett."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acr}             {"Adv. Comput. Res."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {bit}             {"Bit"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cacm}            {"Commun. ACM"}                         % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cj}              {"Comput. J."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cn}              {"Comput. Netw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cl}              {"Comput. Lang."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ibmjrd}          {"IBM J. Res. and Development"}         % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ibmsj}           {"IBM Systems Journal"}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ict}             {"Inf. Contr."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieebcs}          {"IEE/BCS Softw. Eng. J."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieees}           {"IEEE Softw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeese}          {"IEEE Trans. Softw. Eng."}             % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetc}          {"IEEE Trans. Comput."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetcad}        {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetpds}        {"IEEE Trans. Parall. Distrib. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetit}         {"IEEE Trans. Inf. Theory"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ipl}             {"Inf. Process. Lett."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {icp}             {"Inf. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ist}             {"Inf. Softw. Tech."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ijsa}            {"Int. J. Supercomput. Appl."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ijpp}            {"Int. J. Parallel Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jacm}            {"J. ACM"}                              % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: % MACRO {jcss}          {"Journal of Computer and System Sciences"} % original BibTeX
-%%% DEPRECATED: MACRO {jcss}            {"J. Comput. Syst. Sci."}               % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlp}             {"J. Logic Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jfp}             {"J. Funct. Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jsmrp}           {"J. Softw. Maint. Res. Pract."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jss}             {"J. Syst. Softw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlc}             {"J. Logic and Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlsc}            {"J. Lisp Symb. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {lpls}            {"Lett. Program. Lang. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mor}             {"Math. Oper. Res."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mscs}            {"Math. Struct. Comput. Sci."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mst}             {"Math. Syst. Theor."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ngc}             {"New Gen. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {scp}             {"Sci. Comput. Program."}               % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {sicomp}          {"SIAM J. Comput."}                     % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {spe}             {"Softw. Pract. Exper."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tocs}            {"ACM Trans. Comput. Syst."}            % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tods}            {"ACM Trans. Database Syst."}           % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tog}             {"ACM Trans. Graphics"}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toms}            {"ACM Trans. Math. Softw."}             % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toois}           {"ACM Trans. Office Inf. Syst."}        % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toplas}          {"ACM Trans. Program. Lang. Syst."}     % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tcs}             {"Theor. Comput. Sci."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tr}              {"Tech. Rep."}
-%%% ====================================================================
-
-READ
-
-INTEGERS { et.al.char.used }
-
-FUNCTION {initialize.et.al.char.used}
-{ #0 'et.al.char.used :=
-}
-
-EXECUTE {initialize.et.al.char.used}
-
-FUNCTION {format.lab.names}
-{ 's :=
-  s num.names$ 'numnames :=
-  numnames #1 >
-    { numnames #4 >
-        { #3 'namesleft := }
-        { numnames 'namesleft := }
-      if$
-      #1 'nameptr :=
-      ""
-        { namesleft #0 > }
-        { nameptr numnames =
-            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-                { "{\etalchar{+}}" *
-                  #1 'et.al.char.used :=
-                }
-                { s nameptr "{v{}}{l{}}" format.name$ * }
-              if$
-            }
-            { s nameptr "{v{}}{l{}}" format.name$ * }
-          if$
-          nameptr #1 + 'nameptr :=
-          namesleft #1 - 'namesleft :=
-        }
-      while$
-      numnames #4 >
-        { "{\etalchar{+}}" *
-          #1 'et.al.char.used :=
-        }
-        'skip$
-      if$
-    }
-    { s #1 "{v{}}{l{}}" format.name$
-      duplicate$ text.length$ #2 <
-        { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ }
-        'skip$
-      if$
-    }
-  if$
-}
-
-FUNCTION { author.key.label }
-{
-  author empty.or.unknown
-    { key empty.or.unknown
-          { "no key, author in " cite$ * warning$
-            cite$ #1 #3 substring$ }
-         'key
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { author.key.organization.label }
-{ % added - gnp. Provide label formatting by organization if author is null.
-  author empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "no key, author or organization in " cite$ * warning$
-              cite$ #1 #3 substring$ }
-            'key
-          if$
-        }
-        { organization }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { editor.key.organization.label }
-{ % added - gnp. Provide label formatting by organization if editor is null.
-  editor empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "no key, editor or organization in " cite$ * warning$
-              cite$ #1 #3 substring$ }
-            'key
-          if$
-        }
-        { organization }
-      if$
-    }
-    { editor format.lab.names }
-  if$
-}
-
-FUNCTION { author.editor.key.label }
-{
-  author empty.or.unknown
-    { editor empty.or.unknown
-          { key empty.or.unknown
-               { "no key, author, or editor in " cite$ * warning$
-                 cite$ #1 #3 substring$ }
-             'key
-           if$
-         }
-          { editor format.lab.names }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { sortify }
-{
-  purify$
-  "l" change.case$
-}
-
-FUNCTION { calc.label }
-{
-  type$ "book" =
-  type$ "inbook" =
-  or
-  type$ "periodical" =
-  or
-    'author.editor.key.label
-    { type$ "proceedings" =
-        'editor.key.organization.label
-        { type$ "manual" =
-            'author.key.organization.label
-            'author.key.label
-          if$
-        }
-      if$
-    }
-  if$
-  duplicate$
-  year field.or.null purify$ #-1 #2 substring$
-  *
-  'label :=
-  year field.or.null purify$ #-1 #4 substring$
-  *
-  sortify 'sort.label :=
-}
-
-FUNCTION { chop.word }
-{
-  's :=
-  'len :=
-  s #1 len substring$ =
-    { s len #1 + global.max$ substring$ }
-    's
-  if$
-}
-
-FUNCTION { sort.format.names }
-{
-  's :=
-  #1 'nameptr :=
-  ""
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 >
-          { "   " * }
-         'skip$
-      if$
-  %      s nameptr "{ff{ } }{ll{ }}{  vv{ }}{  jj{ }}" format.name$ 't :=
-      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
-      nameptr numnames = t "others" = and
-          { " et~al" * }
-          { t sortify * }
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION { sort.format.title }
-{
-  't :=
-  "A " #2
-    "An " #3
-      "The " #4 t chop.word
-    chop.word
-  chop.word
-  sortify
-  #1 global.max$ substring$
-}
-
-FUNCTION { author.sort }
-{
-  author empty.or.unknown
-    { key empty.or.unknown
-         { "to sort, need author or key in " cite$ * warning$
-           "" }
-         { key sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { author.editor.sort }
-{
-  author empty.or.unknown
-    {
-      editor empty.or.unknown
-         {
-           key empty.or.unknown
-             { "to sort, need author, editor, or key in " cite$ * warning$
-               ""
-             }
-             { key sortify }
-           if$
-         }
-         { editor sort.format.names }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { author.organization.sort }
-{
-  % added - GNP. Stack author or organization for sorting (from alpha.bst).
-  % Unlike alpha.bst, we need entire names, not abbreviations
-
-  author empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "to sort, need author, organization, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { organization sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { editor.organization.sort }
-{
-  % added - GNP. Stack editor or organization for sorting (from alpha.bst).
-  % Unlike alpha.bst, we need entire names, not abbreviations
-
-  editor empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "to sort, need editor, organization, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { organization sortify }
-      if$
-    }
-    { editor sort.format.names }
-  if$
-}
-
-FUNCTION {presort}
-{ calc.label
-  sort.label
-  "    "
-  *
-  type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.sort
-    { type$ "proceedings" =
-        'editor.organization.sort
-        { type$ "manual" =
-            'author.organization.sort
-            'author.sort
-          if$
-        }
-      if$
-    }
-  if$
-  *
-  "    "
-  *
-  year field.or.null sortify
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE { presort }
-
-SORT             % by label, year, author/editor, title
-
-STRINGS { longest.label last.sort.label next.extra }
-
-INTEGERS { longest.label.width last.extra.num }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
-  #0 int.to.chr$ 'last.sort.label :=
-  "" 'next.extra :=
-  #0 'longest.label.width :=
-  #0 'last.extra.num :=
-  "NOT-YET-SET" 'last.label :=
-}
-
-FUNCTION { forward.pass }
-{ % Pass through all entries, comparing current entry to last one.
-  % Need to concatenate year to the stack (done by calc.label) to determine
-  % if two entries are the same (see presort)
-  last.label                            % push last.label on stack
-  calc.label                            % set label and sort.label
-  label                                 % push \bibitem label on stack
-  year field.or.null purify$
-  #-1 #4 substring$ *                   % add year to \bibitem label on stack
-  #1 entry.max$ substring$ =            % are last.label and modified \bibitem label equal?
-  {
-    last.extra.num #1 +
-    'last.extra.num :=
-    last.extra.num int.to.chr$ 'extra.label :=
-  }
-  {
-    "a" chr.to.int$
-    'last.extra.num :=
-    "" 'extra.label :=
-    calc.label
-    label                               % push \bibitem label on stack
-    year field.or.null purify$
-    #-1 #4 substring$ *                 % add year to \bibitem label on stack
-    #1 entry.max$ substring$ 'last.label :=
-  }
-  if$
-}
-
-FUNCTION {reverse.pass}
-{ next.extra "b" =
-    { "a" 'extra.label := }
-    'skip$
-  if$
-  label extra.label * 'label :=
-  label width$ longest.label.width >
-    { label 'longest.label :=
-      label width$ 'longest.label.width :=
-    }
-    'skip$
-  if$
-  extra.label 'next.extra :=
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {forward.pass}
-
-REVERSE {reverse.pass}
-
-FUNCTION { bib.sort.order }
-{
-  sort.label
-  "    "
-  *
-  year field.or.null sortify
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE { bib.sort.order }
-
-SORT             % by sort.label, year, title --- giving final bib. order.
-
-FUNCTION { begin.bib }
-{
-  %% Set to #0 show 13-digit ISBN in preference to 10-digit ISBN.
-  %% Set to #1 to show both 10-digit and 13-digit ISBNs.
-  #1 'show-isbn-10-and-13 :=
-
-  "%%% -*-BibTeX-*-" writeln
-  "%%% Do NOT edit. File created by BibTeX with style acmtrans-v2 [15-Nov-2008]." writeln
-  "" writeln
-
-  et.al.char.used
-    { "\ifx \etalchar \undefined \newcommand{\etalchar}[1]{$^{#1}$} \fi" write$ newline$ }
-    'skip$
-  if$
-
-  preamble$ empty.or.unknown
-    'skip$
-    { preamble$ writeln }
-  if$
-  "\begin{thebibliography}{" longest.label * "}" * writeln
-  ""                                                                         writeln
-  "%%% ====================================================================" writeln
-  "%%% NOTE TO THE USER: you can override these defaults by providing"       writeln
-  "%%% customized versions of any of these macros before the \bibliography"  writeln
-  "%%% command.  Each of them MUST provide its own final punctuation,"       writeln
-  "%%% except for \shownote{}, \showDOI{}, and \showURL{}.  The latter two"  writeln
-  "%%% do not use final punctuation, in order to avoid confusing it with"    writeln
-  "%%% the Web address."                                                     writeln
-  "%%%"                                                                      writeln
-  "%%% To suppress output of a particular field, define its macro to expand" writeln
-  "%%% to an empty string, or better, \unskip, like this:"                   writeln
-  "%%%"                                                                      writeln
-  "%%% \newcommand{\showDOI}[1]{\unskip}   % LaTeX syntax"                   writeln
-  "%%%"                                                                      writeln
-  "%%% \def \showDOI #1{\unskip}           % plain TeX syntax"               writeln
-  "%%%"                                                                      writeln
-  "%%% ====================================================================" writeln
-  ""                                                                         writeln
-
-  %% ACM publications do not use CODEN, ISSN, and LCCN data, so their default
-  %% macro wrappers expand to \unskip, discarding their values and unwanted
-  %% space.
-  %%
-  %% For other publications, prior definitions like these may be useful:
-  %%
-  %%     Plain TeX:
-  %%         \def \showCODEN     #1{CODEN #1.}
-  %%         \def \showISSN      #1{ISSN #1.}
-  %%         \def \showLCCN      #1{LCCN #1.}
-  %%
-  %%     LaTeX:
-  %%         \newcommand{\showCODEN}[1]{CODEN #1.}
-  %%         \newcommand{\showISSN}[1]#1{ISSN #1.}
-  %%         \newcommand{\showLCCN}[1]{LCCN #1.}
-
-  "\ifx \showCODEN    \undefined \def \showCODEN     #1{\unskip}     \fi" writeln
-  "\ifx \showDOI      \undefined \def \showDOI       #1{{\tt DOI:}\penalty0{#1}\ } \fi" writeln
-  % ACM styles omit ISBNs, but they can be included by suitable definitions of
-  % \showISBNx and \showISBNxiii before the .bbl file is read
-  "\ifx \showISBNx    \undefined \def \showISBNx     #1{\unskip}     \fi" writeln
-  "\ifx \showISBNxiii \undefined \def \showISBNxiii  #1{\unskip}     \fi" writeln
-  "\ifx \showISSN     \undefined \def \showISSN      #1{\unskip}     \fi" writeln
-  "\ifx \showLCCN     \undefined \def \showLCCN      #1{\unskip}     \fi" writeln
-  "\ifx \shownote     \undefined \def \shownote      #1{#1}          \fi" writeln % NB: final period supplied by add.period$ above
-  "\ifx \showarticletitle \undefined \def \showarticletitle #1{#1}   \fi" writeln
-  "\ifx \showURL      \undefined \def \showURL       #1{#1}          \fi" writeln
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION { end.bib }
-{
-  newline$
-  "\end{thebibliography}"
-  writeln
-}
-
-EXECUTE {end.bib}

Deleted: trunk/Master/texmf-dist/bibtex/bst/acmart/acm-plain.bst
===================================================================
--- trunk/Master/texmf-dist/bibtex/bst/acmart/acm-plain.bst	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/bibtex/bst/acmart/acm-plain.bst	2016-07-14 21:38:03 UTC (rev 41692)
@@ -1,3311 +0,0 @@
-%%% -*-BibTeX-*-
-%%% ====================================================================
-%%%  @BibTeX-style-file{
-%%%     author          = "Nelson H. F. Beebe and many others",
-%%%     version         = "1.03",
-%%%     date            = "15 April 2011",
-%%%     time            = "23:53:39 EDT",
-%%%     filename        = "acm-plain.bst",
-%%%     address         = "University of Utah
-%%%                        Department of Mathematics, 110 LCB
-%%%                        155 S 1400 E RM 233
-%%%                        Salt Lake City, UT 84112-0090
-%%%                        USA",
-%%%     telephone       = "+1 801 581 5254",
-%%%     FAX             = "+1 801 581 4148",
-%%%     URL             = "http://www.math.utah.edu/~beebe",
-%%%     checksum        = "43736 3311 12014 90145",
-%%%     email           = "beebe at math.utah.edu, beebe at acm.org,
-%%%                        beebe at computer.org",
-%%%     codetable       = "ISO/ASCII",
-%%%     keywords        = "ACM plain bibliography style; BibTeX",
-%%%     license         = "public domain",
-%%%     supported       = "yes",
-%%%     abstract        = "",
-%%%     docstring       = "The checksum field above contains a CRC-16
-%%%                        checksum as the first value, followed by the
-%%%                        equivalent of the standard UNIX wc (word
-%%%                        count) utility output of lines, words, and
-%%%                        characters.  This is produced by Robert
-%%%                        Solovay's checksum utility.",
-%%%  }
-%%% ====================================================================
-
-% "ACM plain" BibTeX style, derived by minimal modifications from acm-trans.bst
-% "ACM Transactions" BibTeX style, acmtrans-v2.bst
-%  for BibTeX version 0.99c, LaTeX version 3.141
-%  ACM extensions with code cleaned up, extended, and debugged 10--15-Nov-2008
-%  Revised 28-MARCH-1996
-%  Revised 30-JUNE-1995
-%  Revised 15-JAN-1996
-%  Revised 17-APRIL-2008
-%  Revised 13-MARCH-2011
-%  Revised 27-MARCH-2011
-%  Revised 15-APRIL-2011
-%
-% Hacked by John T. Boyland at University of California, Berkeley
-% (with assistance by John R. Hauser)
-% Hacked by Andrew W. Appel and Rebecca L. Davies at Princeton University,
-% based on a "chicago.bst" by Glenn Paulley at U. Waterloo,
-% which was based on "newapa.bst" found at ymir.claremont.edu.
-%
-% Version 2.2
-% Johny Sebatian and Sanjeev Sharma
-% Aptara corp (c) 2008
-%
-% History
-%
-% Date: 28th April 2008
-%
-% 1. Avoid 'repeating' the 'month' values.
-% 2. Avoid incorrectly italicizing the volume number.
-% 3. Avoid non italicizing certain titles (book, inproceedings etc).
-% 4. NO series if there is NO volume.
-% 5. Sorting of reference with first surname.
-% 6. Article no added for Inproceedings.
-%
-% Date: 07th May 2008
-%
-% 1. Abbreviation list added
-%
-%   Citation format: [author-last-name year]
-%             [author-last-name and author-last-name year]
-%             [author-last-name, author-last-name, and author-last-name year]
-%             [author-last-name et al. year]
-%             [author-last-name]
-%             author-last-name [year]
-%             [author-last-name and author-last-name]
-%             [author-last-name et al.]
-%             [year] or [year,year]
-%             year or year,year
-%
-%   Reference list ordering: alphabetical by author or whatever passes
-%    for author in the absence of one.
-%
-% This BibTeX style has support for abbreviated author lists and for
-%    year-only citations.  This is done by having the citations
-%    actually look like
-%
-%    \citeauthoryear{full-author-info}{abbrev-author-info}{year}
-%
-% The LaTeX style has to have the following (or similar)
-%
-%     \let\@internalcite\cite
-%     \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
-%     \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite}
-%     \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
-%     \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite}
-%     \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite}
-%
-% These TeX macro definitions are found in acmtrans.sty. Additional
-% commands to manipulate different components of a citation can be defined
-% so that, for example, you can list author's names without parentheses
-% if using a citation as a noun or object in a sentence.
-%
-% Features of acmtrans.bst:
-% ========================
-%
-% - all authors appear last name first.
-% - all pages are listed xx-xx, (no pp.) and are at the end of the reference
-% - publishers are identified as publisher, address
-% - conferences papers (inproceedings) may give city of conference,
-%   date of conference, and journal that the proceedings appear in.
-% - months abbreviated to max four letters (eg. Mar.)
-% - volume of a series indicated after the title of the series
-% - editors appear after edited title and are identified by a trailing "Eds."
-%   not in parentheses.  Editor names are not given in small caps.
-%   (unless there is no author line)
-% - names terminated with a period even if there is no first name.
-% - editions are indicated trailing after the work, not in parentheses.
-% - "et al." citations have a protected period to avoid bad spacing (jrh)
-% - "address" required when publisher given
-% - series (roman) and volume are in a sentence separate from (book-)title
-%
-%
-% Features of chicago.bst:
-% =======================
-%
-% - full names used in citations, but abbreviated citations are available
-%   (see above)
-% - if an entry has a "month", then the month and year are also printed
-%   as part of that bibitem.
-% - all conjunctions use "and" instead of "\&"
-% - major modification from Chicago Manual of Style (13th ed.) is that
-%   only the first author in a reference appears last name first-
-%   additional authors appear as J. Q. Public.
-% - pages are listed as "pp. xx-xx" in all entry types except
-%   article entries.
-% - book, inbook, and manual use "location: publisher" (or organization)
-%   for address and publisher. All other types list publishers separately.
-% - "pp." are used to identify page numbers for all entry types except
-%   articles.
-% - organization is used as a citation label if neither author nor editor
-%   is present (for manuals).
-% - "et al." is used for long author and editor lists, or when "others"
-%   is used.
-%
-% Modifications and bug fixes from newapa.bst:
-% ===========================================
-%
-%   - added month, year to bib entries if month is present
-%   - fixed bug with In proceedings, added necessary comma after title
-%   - all conjunctions changed to "and" from "\&"
-%   - fixed bug with author labels in my.full.label: "et al." now is
-%        generated when "others" is an author name
-%   - major modification from Chicago Manual of Style (13th ed.) is that
-%     only the first author in a reference appears last name first-
-%     additional authors appear as J. Q. Public.
-%   - pages are listed as "pp. xx-xx" in all entry types except
-%     article entries. Unnecessary (IMHO) "()" around page numbers
-%     were removed, and page numbers now don't end with a period.
-%   - created chicago.sty for use with this bibstyle (required).
-%   - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
-%     number, and /or pages. Renamed to format.journal.volume.number.
-%   - fixed bug in formatting booktitles: additional period an error if
-%     book has a volume.
-%   - fixed bug: editors usually given redundant period before next clause
-%     (format.editors.dot) removed.
-%   - added label support for organizations, if both author and editor
-%     are missing (from alpha.bst). If organization is too long, then
-%     the key field is used for abbreviated citations.
-%   - In proceedings or books of several volumes, no comma was written
-%     between the "Volume x" and the page numbers (this was intentional
-%     in newapa.bst). Fixed.
-%   - Some journals may not have volumes/numbers, only month/year (eg.
-%     IEEE Computer). Fixed bug in article style that assumed volume/number
-%     was always present.
-%
-% Original documentation for newapa.sty:
-% =====================================
-%
-% This version was made by modifying the master file made by
-% Oren Patashnik (PATASHNIK at SCORE.STANFORD.EDU), and the 'named' BibTeX
-% style of Peter F. Patel-Schneider.
-%
-% Copyright (C) 1985, all rights reserved.
-% Copying of this file is authorized only if either
-% (1) you make absolutely no changes to your copy, including name, or
-% (2) if you do make changes, you name it something other than 'newapa.bst'.
-% There are undoubtably bugs in this style.  If you make bug fixes,
-% improvements, etc.  please let me know.  My e-mail address is:
-%    spencer at cgrg.ohio.state.edu or 71160.3141 at compuserve.com
-%
-% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
-% with lots of tweaking to make it look like APA style, along with tips
-% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
-
-ENTRY
-  { address
-    advisor
-    author
-    booktitle
-    chapter
-    city        % jtb: added
-    date        % jtb: added
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-        % New keys recognized for acmtrans-v2.bst
-        issue         % UTAH: used in, e.g., ACM SIGSAM Bulletin and ACM Communications in Computer Algebra
-        articleno
-        day           % UTAH: needed for newspapers, weeklies, bi-weeklies
-        doi           % UTAH
-        url           % UTAH
-        bookpages     % UTAH
-        numpages
-        lastaccessed  % UTAH: used only for @Misc{...}
-        coden         % UTAH
-        isbn          % UTAH
-        isbn-13       % UTAH
-        issn          % UTAH
-        lccn          % UTAH
-  }
-  {}
-  { label label.year extra.label sort.year sort.label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-INTEGERS { show-isbn-10-and-13 }  % initialized below in begin.bib
-
-INTEGERS { nameptr namesleft numnames }
-
-INTEGERS { multiresult }
-
-INTEGERS { len }
-
-INTEGERS { last.extra.num }
-
-STRINGS { s t t.org u }
-
-STRINGS { last.label next.extra }
-
-STRINGS { p1 p2 p3 page.count }
-
-FUNCTION { dump.stack.1 }
-{
-    duplicate$ "STACK[top] = [" swap$ * "]" * warning$
-}
-
-FUNCTION { dump.stack.2 }
-{
-    duplicate$ "STACK[top  ] = [" swap$ * "]" * warning$
-    swap$
-    duplicate$ "STACK[top-1] = [" swap$ * "]" * warning$
-    swap$
-}
-
-FUNCTION { empty.or.unknown }
-{
-  %% Examine the top stack entry, and push 1 if it is empty, or
-  %% consists only of whitespace, or is a string beginning with two
-  %% queries (??), and otherwise, push 0.
-  %%
-  %% This function provides a replacement for empty$, with the
-  %% convenient feature that unknown values marked by two leading
-  %% queries are treated the same as missing values, and thus, do not
-  %% appear in the output .bbl file, and yet, their presence in .bib
-  %% file(s) serves to mark values which are temporarily missing, but
-  %% are expected to be filled in eventually once more data is
-  %% obtained.  The TeX User Group and BibNet bibliography archives
-  %% make extensive use of this practice.
-  %%
-  %% An empty string cannot serve the same purpose, because just as in
-  %% statistics data processing, an unknown value is not the same as an
-  %% empty value.
-  %%
-  %% At entry: stack = ... top:[string]
-  %% At exit:  stack = ... top:[0 or 1]
-
-  duplicate$ empty$
-    { pop$ #1 }
-    { #1 #2 substring$ "??" = }
-  if$
-}
-
-FUNCTION { writeln }
-{
-  %% In BibTeX style files, the sequences
-  %%
-  %%     ... "one" "two" output
-  %%     ... "one" "two" output.xxx
-  %%
-  %% ship "one" to the output file, possibly following by punctuation,
-  %% leaving the stack with
-  %%
-  %%     ... "two"
-  %%
-  %% There is thus a one-string lag in output processing that must be
-  %% carefully handled to avoid duplicating a string in the output
-  %% file.  Unless otherwise noted, all output.xxx functions leave
-  %% just one new string on the stack, and that model should be born
-  %% in mind when reading or writing function code.
-  %%
-  %% BibTeX's asynchronous buffering of output from strings from the
-  %% stack is confusing because newline$ bypasses the buffer.  It
-  %% would have been so much easier for newline to be a character
-  %% rather than a state of the output-in-progress.
-  %%
-  %% The documentation in btxhak.dvi is WRONG:  it says
-  %%
-  %%    newline$ Writes onto the bbl file what's accumulated in the
-  %%             output buffer. It writes a blank line if and only
-  %%             if the output buffer is empty. Since write$ does
-  %%             reasonable line breaking, you should use this
-  %%             function only when you want a blank line or an
-  %%             explicit line break.
-  %%
-  %%    write$   Pops the top (string) literal and writes it on the
-  %%             output buffer (which will result in stuff being
-  %%             written onto the bbl file when the buffer fills
-  %%             up).
-  %%
-  %% Examination of the BibTeX source code shows that write$ does
-  %% indeed behave as claimed, but newline$ sends a newline character
-  %% directly to the output file, leaving the stack unchanged.  The
-  %% first line "Writes onto ... buffer." is therefore wrong.
-  %%
-  %% The original BibTeX style files almost always use "write$ newline$"
-  %% in that order, so it makes sense to hide that pair in a private
-  %% function like this one, named after a statement in Pascal,
-  %% the programming language embedded in the BibTeX Web program.
-
-  write$                % output top-of-stack string
-  newline$              % immediate write of newline (not via stack)
-}
-
-FUNCTION { init.state.consts }
-{
-  #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-}
-
-FUNCTION { output.nonnull }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<comma><space>
-  's :=
-  output.state mid.sentence =
-    {
-      ", " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln
-          "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.dot.space }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<dot><space>
-  's :=
-  output.state mid.sentence =           % { "<DEBUG output.nonnull.dot.space>. " * write$ }
-    {
-      ". " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.remove }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<space>
-  's :=
-  output.state mid.sentence =
-    {
-      " " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.removenospace }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S
-  's :=
-  output.state mid.sentence =
-    {
-      "" * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output }
-{ % discard top token if empty, else like output.nonnull
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION { output.dot.space }
-{ % discard top token if empty, else like output.nonnull.dot.space
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull.dot.space
-  if$
-}
-
-FUNCTION { output.removenospace }
-{ % discard top token if empty, else like output.nonnull.removenospace
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull.removenospace
-  if$
-}
-
-FUNCTION { output.check }
-{ % like output, but warn if key name on top-of-stack is not set
-  't :=
-  duplicate$ empty.or.unknown
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull
-  if$
-}
-
-FUNCTION { output.check.dot.space }
-{ % like output.dot.space, but warn if key name on top-of-stack is not set
-  't :=
-  duplicate$ empty.or.unknown
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull.dot.space
-  if$
-}
-
-FUNCTION { fin.block }
-{ % functionally, but not logically, identical to fin.entry
-   add.period$
-   writeln
-}
-
-FUNCTION { fin.entry }
-{
-   add.period$
-   writeln
-}
-
-FUNCTION { new.sentence }
-{ % update sentence state, with neither output nor stack change
-  output.state after.block =
-    'skip$
-    {
-      output.state before.all =
-        'skip$
-        { after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION { fin.sentence }
-{
-   add.period$
-   write$
-   new.sentence
-   ""
-}
-
-FUNCTION { new.block }
-{
-  output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION { output.coden }       % UTAH
-{ % output non-empty CODEN as one-line sentence (stack untouched)
-  coden empty.or.unknown
-    { }
-    { "\showCODEN{" coden * "}" * writeln }
-  if$
-}
-
-FUNCTION { format.articleno }
-{
-  articleno empty.or.unknown
-     { "" }
-     {
-        numpages empty.or.unknown
-          { "articleno field, but no numpages field, in " cite$ * warning$ }
-          { }
-        if$
-        "Article " articleno *
-     }
-  if$
-}
-
-FUNCTION { format.year }
-{ % push year string or "????" onto output stack
-  %% Because year is a mandatory field, we always force SOMETHING
-  %% to be output
-  year empty.or.unknown
-    { "????" }
-    { year }
-  if$
-}
-
-FUNCTION { format.day.month }
-{ % push "day month " or "month " or "" onto output stack
-  day empty.or.unknown
-    {
-      month empty.or.unknown
-        { "" }
-        { month " " *}
-      if$
-    }
-    {
-      month empty.or.unknown
-        { "" }
-        { day " " * month * " " *}
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.day.month.year }     % UTAH
-{ % if month is empty, push "" else push "(MON.)" or "(DD MON.)"
-  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
-  % acm-*.bst addition: prefix parenthesized date string with
-  % ", Article nnn "
-  articleno empty.or.unknown
-    { "" }
-    { ", " format.articleno * }
-  if$
-  " (" * format.day.month * format.year * ")" *
-}
-
-FUNCTION { output.day.month.year }     % UTAH
-{ % if month is empty value, do nothing; else output stack top and
-  % leave with new top string "(MON.)" or "(DD MON.)"
-  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
-  format.day.month.year
-  output.nonnull.remove
-}
-
-FUNCTION { strip.doi } % UTAH
-{ % Strip any Web address prefix to recover the bare DOI, leaving the
-  % result on the output stack, as recommended by CrossRef DOI
-  % documentation.
-  % For example, reduce "http://doi.acm.org/10.1145/1534530.1534545" to
-  % "10.1145/1534530.1534545".  That is later typeset and displayed as
-  % doi:10.1145/1534530.1534545 as the LAST item in the reference list
-  % entry.  Publisher Web sites wrap this with a suitable link to a real
-  % URL to resolve the DOI, and the master http://dx.doi.org/ address is
-  % preferred, since publisher-specific URLs can disappear in response
-  % to economic events.  All journals are encouraged by the DOI
-  % authorities to use that typeset format and link procedures for
-  % uniformity across all publications that include DOIs in reference
-  % lists.
-  % The numeric prefix is guaranteed to start with "10.", so we use
-  % that as a test.
-  doi #1 #3 substring$ "10." =
-    { doi }
-    {
-      doi #1 #7 substring$ "http://" =
-        {
-            doi #8 doi text.length$ #7 - substring$ 't := % get modifiable copy of rest of DOI
-
-            "INTERNAL STYLE-FILE ERROR" 's :=
-
-            % search for next "/" and assign its suffix to s
-
-            { t text.length$ }
-            {
-              t #1 #1 substring$ "/" =
-                {
-                  % save rest of string as true DOI (should be 10.xxxx/yyyy)
-                  t #2 t text.length$ #1 - substring$ 's :=
-                  "" 't :=    % empty string t terminates the loop
-                }
-                {
-                  % discard first character and continue loop: t <= substring(t,2,last)
-                  t #2 t text.length$ #1 - substring$ 't :=
-                }
-              if$
-            }
-            while$
-
-            % check for valid DOI (should be 10.xxxx/yyyy)
-            s #1 #3 substring$ "10." =
-              { }
-              { "unrecognized DOI substring " s * " in DOI value [" * doi * "]" * warning$ }
-            if$
-
-            s   % push the stripped DOI on the output stack
-
-        }
-        {
-          "unrecognized DOI value [" doi * "]" * warning$
-          doi   % push the unrecognized original DOI on the output stack
-        }
-      if$
-    }
-  if$
-}
-
-%
-% Change by BV: added standard prefix to URL
-%
-FUNCTION { output.doi } % UTAH
-{ % output non-empty DOI as one-line sentence (stack untouched)
-  doi empty.or.unknown
-    { }
-    {
-      %% NB: We want URLs at beginning of line to reduce likelihood of
-      %% BibTeX's nasty line wrapping after column 79, which then requires
-      %% manual (or automated) editing of the .bbl file to repair.
-      %% The \url{} macro strips percent-newlines, and is thus safe in
-      %% the presence of the line wrapping, but \path|...| and
-      %% \verb|...| do not.
-      "\showDOI{%" writeln
-      "\url{http://dx.doi.org/" strip.doi * "}}" * writeln
-    }
-  if$
-}
-
-FUNCTION { output.isbn }                % UTAH
-{ % output non-empty ISBN-10 and/or ISBN-13 as one-line sentences (stack untouched)
-  show-isbn-10-and-13
-    {
-      %% show both 10- and 13-digit ISBNs
-      isbn empty.or.unknown
-        { }
-        {
-          "\showISBNx{" isbn * "}" * writeln
-        }
-      if$
-      isbn-13 empty.or.unknown
-        { }
-        {
-          "\showISBNxiii{" isbn-13 * "}" * writeln
-        }
-      if$
-    }
-    {
-      %% show 10-digit ISBNs only if 13-digit ISBNs not available
-      isbn-13 empty.or.unknown
-        {
-          isbn empty.or.unknown
-            { }
-            {
-              "\showISBNx{" isbn * "}" * writeln
-            }
-          if$
-        }
-        {
-          "\showISBNxiii{" isbn-13 * "}" * writeln
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION { output.issn } % UTAH
-{ % output non-empty ISSN as one-line sentence (stack untouched)
-  issn empty.or.unknown
-    { }
-    { "\showISSN{" issn * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.issue }
-{ % output non-empty issue number as a one-line sentence (stack untouched)
-  issue empty.or.unknown
-     { }
-     { "Issue " issue * "." * writeln }
-  if$
-}
-
-FUNCTION { output.lccn } % UTAH
-{ % return with stack untouched
-  lccn empty.or.unknown
-    { }
-    { "\showLCCN{" lccn * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.note } % UTAH
-{ % return with stack empty
-  note empty.or.unknown
-    { }
-    { "\shownote{" note add.period$ * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.note.check } % UTAH
-{ % return with stack empty
-  note empty.or.unknown
-    { "empty note in " cite$ * warning$ }
-    { "\shownote{" note add.period$ * "}" * writeln }
-  if$
-}
-
-%
-% Changes by BV 2011/04/15.  Do not output
-% url if doi is defined
-%
-FUNCTION { output.url } % UTAH
-{ % return with stack untouched
-  % output URL and associated lastaccessed fields
-  doi empty.or.unknown
-  {
-    url empty.or.unknown
-      { }
-      {
-          %% NB: We want URLs at beginning of line to reduce likelihood of
-          %% BibTeX's nasty line wrapping after column 79, which would require
-          %% manual (or automated) editing of the .bbl file to repair.  However,
-          %% the \url{} macro handles the unwrapping job automatically.
-          "\showURL{%" writeln
-          lastaccessed empty.or.unknown
-            { "" }
-            { "Retrieved " lastaccessed * " from " * }
-          if$
-
-          %% The URL field may contain a semicolon-separated list of Web
-          %% addresses, and we locate and wrap each of them in \url{...}.
-          %% The simplistic approach of putting the entire list into the
-          %% macro argument is that the semicolons are typeset in a
-          %% typewriter font, and no space follows them.
-          %%
-          %% We therefore replace the original code
-          %%    "\url{" * url * "}}" * writeln
-          %% with this character-at-a-time loop:
-
-          "\url{" *
-
-          url 't :=                       % get modifiable copy of URL list
-
-          { t text.length$ }
-          {
-            t #1 #1 substring$ ";" =
-              {                         % then split argument at separator
-                "};" * writeln
-                "\url{"
-              }
-              {                         % else concatenate nonblank character to argument
-                t #1 #1 substring$ " " =
-                  { }
-                  { t #1 #1 substring$ * }
-                if$
-              }
-            if$
-
-            t #2 t text.length$ #1 - substring$ 't :=
-          }
-          while$
-
-          "}}" * writeln
-      }
-    if$
-  }
-  { }
-  if$
-}
-
-FUNCTION { output.year.check }
-{ % warn if year empty, else output top string and leave " YEAR<label>" on stack in mid-sentence
-  year empty.or.unknown
-     { "empty year in " cite$ * warning$ }
-     { write$
-        " " year * extra.label *
-       mid.sentence 'output.state :=
-     }
-  if$
-}
-
-FUNCTION { not }
-{
-    { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION { and }
-{
-    'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION { or }
-{
-   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION { le }
-{
-  %% test whether first number is less than or equal to second number
-  %% stack in:  n1 n2
-  %% stack out: if n1 <= n2 then 1 else 0
-
-  %% "DEBUG: le " cite$ * warning$
-  > { #0 } { #1 } if$
-}
-
-FUNCTION { ge }
-{
-  %% test whether first number is greater than or equal to second number
-  %% stack in:  n1 n2
-  %% stack out: if n1 >= n2 then 1 else 0
-
-  %% "DEBUG: ge " cite$ * warning$
-  < { #0 } { #1 } if$
-}
-
-FUNCTION { is.leading.digit }
-{
-  %% test whether first character of string is a digit
-  %% stack in:  string
-  %% stack out: if first-char-is-digit then 1 else 0
-
-  #1 #1 substring$                      % replace string by string[1:1]
-  duplicate$                            % string[1:1] string[1:1]
-  chr.to.int$
-  "0" chr.to.int$ swap$ le              % "0" <= string[1:1] --> 0-or-1
-  swap$                                 % 0-or-1 string[1:1]
-  chr.to.int$
-  "9" chr.to.int$ le                    % string[1:1} <= "9" --> 0-or-1
-  and
-}
-
-FUNCTION { skip.digits }
-{
-  %% skip over leading digits in string
-  %% stack in:  string
-  %% stack out: rest-of-string leading-digits
-
-  duplicate$
-  't :=
-  't.org :=
-  "" 'u :=
-
-  { t text.length$ }
-  {
-    %% "=================DEBUG: skip.digits   t = [" t * "]" * warning$
-    t is.leading.digit
-      { t #2 t text.length$ #1 - substring$ }
-      {
-        t 'u :=
-        ""
-      }
-    if$
-    't :=
-  }
-  while$
-
-  u                                                             % rest of string
-  t.org #1 t.org text.length$ u text.length$ - substring$       % leading digits
-}
-
-FUNCTION { skip.nondigits }
-{
-  %% skip over leading nondigits in string
-  %% stack in:  string
-  %% stack out: rest-of-string
-
-  't :=
-  "" 'u :=
-
-  { t text.length$ }
-  {
-    t is.leading.digit
-      {
-        t 'u :=
-        ""
-      }
-      { t #2 t text.length$ #1 - substring$ }
-    if$
-    't :=
-  }
-  while$
-
-  u                     % rest of string
-}
-
-FUNCTION { parse.next.number }
-{
-  %% stack in:  string
-  %% stack out: rest-of-string next-numeric-part-of-string
-  %% Example:
-  %% stack in:  "123:1--123:59"
-  %% stack out: ":1--123:59" "123"
-
-  's :=
-  s skip.nondigits 's :=
-  s skip.digits
-}
-
-FUNCTION { reduce.pages.to.page.count }
-{
-  %% Stack in:  arbitrary-and-unused
-  %% Stack out: unchanged
-  %%
-  %% For the new-style pagination with article number and numpages or
-  %% pages, we expect to have BibTeX entries containing something like
-  %%     articleno = "17",
-  %%     pages     = "1--23",
-  %% with output "Article 17, 23 pages",
-  %% or
-  %%     articleno = "17",
-  %%     numpages  = "23",
-  %% with output "Article 17, 23 pages",
-  %% or
-  %%     articleno = "17",
-  %%     pages     = "17:1--17:23",
-  %% with output "Article 17, 23 pages",
-  %%
-  %% If articleno is missing or empty, then we should output "1--23",
-  %% "23" (with a warning of a missing articleno), or "17:1--17:23",
-  %% respectively.
-
-  %% "DEBUG: enter reduce.pages.to.page.count " cite$ * warning$
-
-  %% "DEBUG: pages = [" pages * "]" * warning$
-
-  pages
-  parse.next.number 'p1 :=
-  parse.next.number 'p2 :=
-  parse.next.number 'p3 :=
-  parse.next.number 'page.count :=
-
-  duplicate$
-  empty.or.unknown
-    {  }
-    {
-      duplicate$ "unexpected trailing garbage [" swap$ *
-      "] after n:p1--n:p2 in pages = [" *
-      pages *
-      "] in " *
-      cite$ *
-      warning$
-    }
-  if$
-
-  pop$
-
-  %% "DEBUG: reduce.pages.to.page.count: "
-  %% " p1 = " p1 * *
-  %% " p2 = " p2 * *
-  %% " p3 = " p3 * *
-  %% " p4 = " page.count * *
-  %% " in " cite$ * * warning$
-
-  p1 p3 =   p2 "1" =   and   numpages empty.or.unknown   and
-    { "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$ }
-    {
-      numpages empty.or.unknown
-        { pages }
-        { numpages }
-      if$
-      'page.count :=
-    }
-  if$
-
-  p1 "1" =   p3 empty.or.unknown   and   numpages empty.or.unknown   and
-    {
-      p2 'page.count :=
-      "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$
-    }
-    {
-      numpages empty.or.unknown
-        { pages }
-        { numpages }
-      if$
-      'page.count :=
-    }
-  if$
-
-  %% "DEBUG: leave reduce.pages.to.page.count " cite$ * warning$
-}
-
-FUNCTION { new.block.checkb }
-{ % issue a new.block only if at least one of top two stack strings is not empty
-  empty.or.unknown
-  swap$ empty.or.unknown
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION { field.or.null }
-{ % convert empty value to null string, else return value
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION { emphasize }
-{ % emphasize a non-empty top string on the stack (WITHOUT italic correction)
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{\em " swap$ * "}" * }
-  if$
-}
-
-FUNCTION { emphasize.with.italic.correction }
-{ % convert empty string to null string, or emphasize with a trailing italic correction
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{\em " swap$ * "\/}" * }
-  if$
-}
-
-FUNCTION { comma }
-{ % convert empty string to null string, or brace string and add trailing comma
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{" swap$ * "}," * }
-  if$
-}
-
-FUNCTION { format.names }
-{
-  % Format bibliographical entries with the first author last name first,
-  % and subsequent authors with initials followed by last name.
-  % All names are formatted in this routine.
-
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 =
-        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
-        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
-        {"{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
-        {"{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
-      if$
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "{\sc others}" =
-                { " {et~al\mbox{.}}" * } % jrh: avoid spacing problems
-                { " {and} " * t * } % from Chicago Manual of Style
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-}
-
-FUNCTION { my.full.label }
-{
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-
-    { s nameptr "{vv~}{ll}" format.name$ 't :=  % get the next name
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "others" =
-                { " et~al\mbox{.}" * } % jrh: avoid spacing problems
-                { " and " * t * } % from Chicago Manual of Style
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-
-}
-
-FUNCTION { format.names.fml }
-{
-  % Format names in "familiar" format, with first initial followed by
-  % last name. Like format.names, ALL names are formatted.
-  % jtb: The names are NOT put in small caps
-
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-
-    {
-      "{" s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
-
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "{others}" =
-                { " {et~al\mbox{.}}" * }
-                { " {and} " * t * }
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-}
-
-FUNCTION { format.authors }
-{
-  author empty.or.unknown
-    { "" }
-    { author format.names add.period$} % jtb: add period if none before
-  if$
-}
-
-FUNCTION { format.key }
-{
-  empty.or.unknown
-    { key field.or.null }
-    { "" }
-  if$
-}
-
-FUNCTION { format.no.key }
-{
-  empty.or.unknown
-    { "" }
-    { "" }
-  if$
-}
-
-FUNCTION { format.editors.fml }
-{
-  % Format editor names for use in the "in" types: inbook, incollection,
-  % inproceedings: first initial, then last names. When editors are the
-  % LABEL for an entry, then format.editor is used which lists editors
-  % by last name first.
-
-  editor empty.or.unknown
-    { "" }
-    {
-      editor format.names.fml editor num.names$ #1 >
-        { " (Eds.)" * }
-        { " (Ed.)" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.editors }
-{ % format editor names for use in labels, last names first.
-  editor empty.or.unknown
-    { "" }
-    {
-      editor format.names
-      editor num.names$ #1 >
-        { " (Eds.)." * }
-        { " (Ed.)." * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.articletitle }
-{
-  title empty.or.unknown
-    { "" }
-    % Use this to preserve lettercase in titles:
-    { "\showarticletitle{" title * "}" * }
-    % Use this for downcase title style:
-    % { \showarticletitle{" title "t" change.case$ * "}" * }
-  if$
-}
-
-FUNCTION { format.title }
-{
-  title empty.or.unknown
-    { "" }
-    % Use this to preserve lettercase in titles:
-    { title }
-    % Use this for downcase title style:
-    % { title "t" change.case$ }
-  if$
-}
-
-FUNCTION { n.dashify }
-{
-  't :=
-  ""
-    { t empty.or.unknown not }
-    {
-      t #1 #1 substring$ "-" =
-        {
-          t #1 #2 substring$ "--" = not
-            { "--" *
-              t #2 global.max$ substring$ 't :=
-            }
-            {
-              { t #1 #1 substring$ "-" = }
-              {
-                "-" *
-                t #2 global.max$ substring$ 't :=
-              }
-              while$
-            }
-          if$
-        }
-        {
-          t #1 #1 substring$ *
-          t #2 global.max$ substring$ 't :=
-        }
-      if$
-    }
-  while$
-}
-
-FUNCTION { format.btitle }
-{
-  edition empty.or.unknown
-  { title emphasize }
-  { title empty.or.unknown
-    { title emphasize } % jtb: what is this supposed to do ?!?
-    { "{\em " title * "\/} (" * edition "l" change.case$ * " ed.)" * } % jtb: no parens for ed.
-    if$
-  }
-  if$
-}
-
-FUNCTION { format.emphasize.booktitle }
-{ % push "" or "{\em booktitle}" or "{\em booktitle}, (second ed.)" on stack
-  edition empty.or.unknown
-    { booktitle emphasize }
-    { booktitle empty.or.unknown
-      { "" }
-      { "{\em " booktitle * "} (" * edition "l" change.case$ * " ed.)" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.city }
-{
-  % jtb: if the preceding string (the title of the conference) is non-empty,
-  % jtb: append the location, otherwise leave empty (so as to trigger the
-  % jtb: error message in output.check
-
-  duplicate$ empty.or.unknown
-    { }
-    {
-      city empty.or.unknown
-        {
-          date empty.or.unknown
-            { }
-            { " (" * date * ")" * }
-          if$
-        }
-        {
-          date empty.or.unknown
-            { " (" * city * ")" * }
-            { " (" * city * ", " * date * ")" * }
-          if$
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION { tie.or.space.connect }
-{
-  duplicate$ text.length$ #3 <
-    { "~" }
-    { " " }
-  if$
-  swap$ * *
-}
-
-FUNCTION { either.or.check }
-{
-  empty.or.unknown
-    'pop$
-    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
-  if$
-}
-
-FUNCTION { format.bvolume }
-{
-  % jtb: If there is a series, this is added and the volume trails after it.
-  % jtb: Otherwise, "Vol" is Capitalized.
-
-  volume empty.or.unknown
-    { "" }
-    {
-      series empty.or.unknown
-        { "Vol." volume tie.or.space.connect}
-        { series ", " * "Vol." volume tie.or.space.connect *}
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION { format.bvolume.noseries }
-{
-  volume empty.or.unknown
-    { "" }
-    {
-      series empty.or.unknown
-        { "Vol." volume tie.or.space.connect}
-        { "Vol." volume tie.or.space.connect}
-%        { series ", " * "Vol." volume tie.or.space.connect *}
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION { format.series }
-{
-  series empty.or.unknown
-    {""}
-    {" {\em (" * series ")}" *}
-  if$
-}
-
-FUNCTION { format.number.series }
-{
-  volume empty.or.unknown
-    {
-      number empty.or.unknown
-        {
-          volume empty.or.unknown
-          { "" }
-          {
-            series empty.or.unknown
-              { "" }
-              { " (" series * ")" * }
-            if$
-          }
-          if$
-        }                                       %    { series field.or.null }
-        {
-          output.state mid.sentence =
-            { "Number" }                        % gnp - changed to mixed case always
-            { "Number" }
-          if$
-          number tie.or.space.connect series empty.or.unknown
-            { "there's a number but no series in " cite$ * warning$ }
-            { " in " * series * }
-          if$
-        }
-      if$
-    }
-    {
-      ""
-    }
-  if$
-}
-
-FUNCTION { multi.page.check }
-{
-  't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty.or.unknown not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
-    { #1 'multiresult := }
-    { t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION { format.pages }
-{
-  pages empty.or.unknown
-    { "" }
-    {
-      pages multi.page.check
-        { pages n.dashify } % gnp - removed () % jtb: removed pp.
-        { pages }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.pages.check.without.articleno }
-{ %% format pages field only if articleno is absent
-  %% Stack out: pages-specification
-  numpages missing$ pages missing$ and
-    { "page numbers missing in both pages and numpages fields in " cite$ * warning$ }
-    { }
-  if$
-
-  articleno empty.or.unknown
-    {
-      pages missing$
-        { numpages }
-        { format.pages }
-      if$
-    }
-    { "" }
-  if$
-}
-
-FUNCTION { format.pages.check }
-{
-  pages empty.or.unknown
-    { "page numbers missing in " cite$ * warning$ "" }
-    { pages n.dashify }
-  if$
-}
-
-FUNCTION { format.bookpages }
-{
-  bookpages empty.or.unknown
-    { "" }
-    { bookpages "book pages" tie.or.space.connect }
-  if$
-}
-
-FUNCTION { format.named.pages }
-{
-  pages empty.or.unknown
-    { "" }
-    { format.pages "pages" tie.or.space.connect }
-  if$
-}
-
-%
-% Changed by Boris Veytsman, 2011-03-13
-% Now the word "pages" is printed even if
-% there field pages is not empty.
-%
-
-FUNCTION { format.page.count }
-{
-  page.count empty.or.unknown
-    { "" }
-    {
-      articleno empty.or.unknown
-        { "numpages field, but no articleno field, in " cite$ * warning$ }
-        { }
-      if$
-      page.count "pages" tie.or.space.connect
-    }
-  if$
-}
-
-FUNCTION { format.articleno.numpages }
-{
-  %% There are seven possible outputs, depending on which fields are set.
-  %%
-  %% These four are handled here:
-  %%
-  %%     articleno, numpages, pages     -> "Article articleno-value, numpages-value pages"
-  %%     articleno, numpages            -> "Article articleno-value, numpages-value pages"
-  %%     articleno, pages               -> "Article articleno-value, reduced-pages-value pages"
-  %%     articleno                      -> "Article articleno-value" and warn about missing numpages
-  %%
-  %% The remaining three have already been handled by
-  %% format.pages.check.without.articleno:
-  %%
-  %%     numpages, pages                -> "pages-value"
-  %%     numpages                       -> "numpages-value"
-  %%     pages                          -> "pages-value"
-
-  articleno empty.or.unknown
-    {
-      numpages empty.or.unknown
-        { }
-        { "require articleno with numpages field in " cite$ * warning$ }
-      if$
-      ""
-    }
-    {
-      numpages empty.or.unknown
-        {
-          pages empty.or.unknown
-            {
-              "require pages or numpages fields with articleno field in " cite$ * warning$
-              "" 'page.count :=
-            }
-            { reduce.pages.to.page.count }
-          if$
-        }
-        { numpages 'page.count := }
-      if$
-
-      %% The Article number is now handled in format.day.month.year because
-      %% ACM prefers the style "Digital Libraries 12, 3, Article 5 (July 2008)"
-      %% over "Digital Libraries 12, 3 (July 2008), Article 5"
-      %% format.articleno output
-      format.page.count
-    }
-  if$
-}
-
-FUNCTION { format.journal.volume.number.day.month.year }
-{
-  % By Young (and Spencer)
-  % GNP - fixed bugs with missing volume, number, and/or pages
-  %
-  % Format journal, volume, number, pages for article types.
-  %
-  journal empty.or.unknown
-    { "no journal in " cite$ * warning$
-      "" }
-%    { journal emphasize.with.italic.correction }
-     {
-           journal "Journal of the ACM" =
-       { "{\it J. ACM}" }
-       {
-           journal "American Mathematical Society Translations" =
-       { "{\it Amer. Math. Soc. Transl.}" }
-       {
-           journal "Bulletin of the American Mathematical Society" =
-       { "{\it Bull. Amer. Math. Soc.}" }
-       {
-           journal "Proceedings of the American Mathematical Society" =
-       { "{\it Proc. Amer. Math. Soc.}" }
-       {
-           journal "Transactions of the American Mathematical Society" =
-       { "{\it Trans. Amer. Math. Soc.}" }
-       {
-           journal "Communications of the {ACM}" =
-       { "{\it Commun. {ACM}}" }
-       {
-           journal "{ACM} Computing Surveys" =
-       { "{\it Comput. Surveys}" }
-       {
-           journal "{ACM} Transactions on Mathematical Software" =
-       { "{\it {ACM} Trans. Math. Software}" }
-       {
-           journal "{ACM} {SIGNUM} Newsletter" =
-       { "{\it {ACM} {SIGNUM} Newslett.}" }
-       {
-           journal "American Journal of Sociology" =
-       { "{\it Amer. J. Sociology}" }
-       {
-           journal "Journal of the American Statistical Association" =
-       { "{\it J. Amer. Statist. Assoc.}" }
-       {
-           journal "Applied Mathematics and Computation" =
-       { "{\it Appl. Math. Comput.}" }
-       {
-           journal "American Mathematical Monthly" =
-       { "{\it Amer. Math. Monthly}" }
-       {
-           journal "British Journal of Mathematical and Statistical Psychology" =
-       { "{\it Brit. J. Math. Statist. Psych.}" }
-       {
-           journal "Canadian Mathematical Bulletin" =
-       { "{\it Canad. Math. Bull.}" }
-       {
-           journal "Journal of Computational and Applied Mathematics" =
-       { "{\it J. Comput. Appl. Math.}" }
-       {
-           journal "Journal of Computational Physics" =
-       { "{\it J. Comput. Phys.}" }
-       {
-           journal "Computers and Structures" =
-       { "{\it Comput. \& Structures}" }
-       {
-           journal "The Computer Journal" =
-       { "{\it Comput. J.}" }
-       {
-           journal "Journal of Computer and System Sciences" =
-       { "{\it J. Comput. System Sci.}" }
-       {
-           journal "Contemporary Mathematics" =
-       { "{\it Contemp. Math.}" }
-       {
-           journal "Crelle's Journal" =
-       { "{\it Crelle's J.}" }
-       {
-           journal "Giornale di Mathematiche" =
-       { "{\it Giorn. Mat.}" }
-       {
-           journal "{IEEE} Transactions on Computers" =
-       { "{\it {IEEE} Trans. Comput.}" }
-       {
-           journal "{IEEE} Transactions on Automatic Control" =
-       { "{\it {IEEE} Trans. Automat. Control}" }
-       {
-           journal "Proceedings of the {IEEE}" =
-       { "{\it Proc. {IEEE}}" }
-       {
-           journal "{IEEE} Transactions on Aerospace and Electronic Systems" =
-       { "{\it {IEEE} Trans. Aerospace Electron. Systems}" }
-       {
-           journal "{IMA} Journal of Numerical Analysis" =
-       { "{\it {IMA} J. Numer. Anal.}" }
-       {
-           journal "Information Processing Letters" =
-       { "{\it Inform. Process. Lett.}" }
-       {
-           journal "Journal of the Institute of Mathematics and its Applications" =
-       { "{\it J. Inst. Math. Appl.}" }
-       {
-           journal "International Journal of Control" =
-       { "{\it Internat. J. Control}" }
-       {
-           journal "International Journal for Numerical Methods in Engineering" =
-       { "{\it Internat. J. Numer. Methods Engrg.}" }
-       {
-           journal "International Journal of Supercomputing Applications" =
-       { "{\it Internat. J. Supercomputing Applic.}" }
-       {
-           journal "Journal of Research of the National Bureau of Standards" =
-       { "{\it J. Res. Nat. Bur. Standards}" }
-       {
-           journal "Linear Algebra and its Applications" =
-       { "{\it Linear Algebra Appl.}" }
-       {
-           journal "Journal of Mathematical Analysis and Applications" =
-       { "{\it J. Math. Anal. Appl.}" }
-       {
-           journal "Mathematische Annalen" =
-       { "{\it Math. Ann.}" }
-       {
-           journal "Journal of Mathematical Physics" =
-       { "{\it J. Math. Phys.}" }
-       {
-           journal "Mathematics of Computation" =
-       { "{\it Math. Comp.}" }
-       {
-           journal "Mathematica Scandinavica" =
-       { "{\it Math. Scand.}" }
-       {
-           journal "Mathematical Tables and Other Aids to Computation" =
-       { "{\it Math. Tables Aids Comput.}" }
-       {
-           journal "Numerische Mathematik" =
-       { "{\it Numer. Math.}" }
-       {
-           journal "Pacific Journal of Mathematics" =
-       { "{\it Pacific J. Math.}" }
-       {
-           journal "Journal of Parallel and Distributed Computing" =
-       { "{\it J. Parallel and Distrib. Comput.}" }
-       {
-           journal "Parallel Computing" =
-       { "{\it Parallel Comput.}" }
-       {
-           journal "Philosophical Magazine" =
-       { "{\it Philos. Mag.}" }
-       {
-           journal "Proceedings of the National Academy of Sciences of the USA" =
-       { "{\it Proc. Nat. Acad. Sci. U. S. A.}" }
-       {
-           journal "Quarterly Journal of Mathematics, Oxford, Series (2)" =
-       { "{\it Quart. J. Math. Oxford Ser. (2)}" }
-       {
-           journal "Quarterly of Applied Mathematics" =
-       { "{\it Quart. Appl. Math.}" }
-       {
-           journal "Review of the International Statisical Institute" =
-       { "{\it Rev. Inst. Internat. Statist.}" }
-       {
-           journal "Journal of the Society for Industrial and Applied Mathematics" =
-       { "{\it J. Soc. Indust. Appl. Math.}" }
-       {
-           journal "Journal of the Society for Industrial and Applied Mathematics, Series B, Numerical Analysis" =
-       { "{\it J. Soc. Indust. Appl. Math. Ser. B Numer. Anal.}" }
-       {
-           journal "{SIAM} Journal on Algebraic and Discrete Methods" =
-       { "{\it {SIAM} J. Algebraic Discrete Methods}" }
-       {
-           journal "{SIAM} Journal on Applied Mathematics" =
-       { "{\it {SIAM} J. Appl. Math.}" }
-       {
-           journal "{SIAM} Journal on Computing" =
-       { "{\it {SIAM} J. Comput.}" }
-       {
-           journal "{SIAM} Journal on Matrix Analysis and Applications" =
-       { "{\it {SIAM} J. Matrix Anal. Appl.}" }
-       {
-           journal "{SIAM} Journal on Numerical Analysis" =
-       { "{\it {SIAM} J. Numer. Anal.}" }
-       {
-           journal "{SIAM} Review" =
-       { "{\it {SIAM} Rev.}" }
-       {
-           journal "{SIAM} Journal on Scientific and Statistical Computing" =
-       { "{\it {SIAM} J. Sci. Statist. Comput.}" }
-       {
-           journal "Software Practice and Experience" =
-       { "{\it Software Prac. Experience}" }
-       {
-           journal "Statistical Science" =
-       { "{\it Statist. Sci.}" }
-       {
-           journal "{USSR} Computational Mathematics and Mathematical Physics" =
-       { "{\it {U. S. S. R.} Comput. Math. and Math. Phys.}" }
-       {
-           journal "Journal of {VLSI} and Computer Systems" =
-       { "{\it J. {VLSI} Comput. Syst.}" }
-       {
-           journal "Zeitschrift fur Angewandte Mathematik und Mechanik" =
-       { "{\it Z. Angew. Math. Mech.}" }
-       {
-           journal "Zeitschrift fur Angewandte Mathematik und Physik" =
-       { "{\it Z. Angew. Math. Phys.}" }
-       {
-           journal "ACM Computing Surveys" =
-       { "{\it Comput. Surveys}" }
-       {
-           journal "ACM Transactions on Mathematical Software" =
-       { "{\it ACM Trans. Math. Software}" }
-       {
-           journal "ACM {SIGNUM} Newsletter" =
-       { "{\it ACM {SIGNUM} Newslett.}" }
-       {
-           journal "IEEE Transactions on Computers" =
-       { "{\it IEEE Trans. Comput.}" }
-       {
-           journal "IEEE Transactions on Automatic Control" =
-       { "{\it IEEE Trans. Automat. Control}" }
-       {
-           journal "Proceedings of the IEEE" =
-       { "{\it Proc. IEEE}" }
-       {
-           journal "IEEE Transactions on Aerospace and Electronic Systems" =
-       { "{\it IEEE Trans. Aerospace Electron. Systems}" }
-       {
-           journal "IMA Journal of Numerical Analysis" =
-       { "{\it IMA J. Numer. Anal.}" }
-       {
-           journal "SIAM Journal on Algebraic and Discrete Methods" =
-       { "{\it SIAM J. Algebraic Discrete Methods}" }
-       {
-           journal "SIAM Journal on Applied Mathematics" =
-       { "{\it SIAM J. Appl. Math.}" }
-       {
-           journal "SIAM Journal on Computing" =
-       { "{\it SIAM J. Comput.}" }
-       {
-           journal "SIAM Journal on Matrix Analysis and Applications" =
-       { "{\it SIAM J. Matrix Anal. Appl.}" }
-       {
-           journal "SIAM Journal on Numerical Analysis" =
-       { "{\it SIAM J. Numer. Anal.}" }
-       {
-           journal "SIAM Review" =
-       { "{\it SIAM Rev.}" }
-       {
-           journal "SIAM Journal on Scientific and Statistical Computing" =
-       { "{\it SIAM J. Sci. Statist. Comput.}" }
-       {
-           journal "USSR Computational Mathematics and Mathematical Physics" =
-       { "{\it U. S. S. R. Comput. Math. and Math. Phys.}" }
-       {
-           journal "Journal of VLSI and Computer Systems" =
-       { "{\it J. VLSI Comput. Syst.}" }
-       {
-           journal "Communications of the ACM" =
-       { "{\it Commun. ACM}" }
-       %% If no match with cases needing special handling, just output journal name
-       {  journal emphasize.with.italic.correction  }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-         }
-    if$
-
-  number empty.or.unknown
-    {
-      volume empty.or.unknown
-        { "no number and no volume in " cite$ * warning$ "" * }
-        { " " * " {" * volume * "}" * }
-      if$
-    }
-    {
-      volume empty.or.unknown
-        {
-          "unusual to have number, but no volume, for " cite$ * warning$
-          " " * number *
-        }
-        { " " * volume comma " " * number * * }
-      if$
-    }
-  if$
-
-  format.day.month.year *
-}
-
-FUNCTION { format.chapter.pages }
-{
-  chapter empty.or.unknown
-    'format.pages
-    { type empty.or.unknown
-        { "Chapter" } % gnp - changed to mixed case
-        { type "t" change.case$ }
-      if$
-      chapter tie.or.space.connect
-      pages empty.or.unknown
-        {"page numbers missing in " cite$ * warning$} % gnp - added check
-        { ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.in.emphasize.booktitle }
-{ % jtb: format for collections or proceedings not appearing in a journal
-  booktitle empty.or.unknown
-  { "" }
-  { "In " format.emphasize.booktitle * }
-  if$
-}
-
-FUNCTION { format.in.booktitle }
-{ % jtb: format for proceedings appearing in a journal
-  booktitle empty.or.unknown
-  { "" }
-  { "In " booktitle * }
-  if$
-}
-
-FUNCTION { format.in.ed.booktitle }
-{
-  booktitle empty.or.unknown
-  { "" }
-  { editor empty.or.unknown
-    { "In " format.emphasize.booktitle * }
-                % jtb: swapped editor location
-    { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
-    if$
-  }
-  if$
-}
-
-FUNCTION { format.thesis.type }
-{ % call with default type on stack top
-  type empty.or.unknown
-    'skip$    % use default type
-    {
-      pop$    % discard default type
-      % NO: it is silly to have to brace protect every degree type!:  type "t" change.case$
-      type
-    }
-  if$
-}
-
-FUNCTION { format.tr.number }
-{
-  type empty.or.unknown
-    { "Tech. Rep." }
-    'type
-  if$
-  number empty.or.unknown
-    { "t" change.case$ }
-    %% LOOKS BAD: { "." * number tie.or.space.connect }
-    %% Prefer "Research report RJ687." to "Research report. RJ687."
-    { number tie.or.space.connect }
-  if$
-}
-
-FUNCTION { format.advisor }
-{
-  advisor empty.or.unknown
-    { "" }
-    { "Advisor(s) " advisor * }
-  if$
-}
-
-FUNCTION { format.article.crossref }
-{ "See"
-  "\cite{" * crossref * "}" *
-}
-
-FUNCTION { format.crossref.editor }
-{
-  editor #1 "{vv~}{ll}" format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { pop$ " et~al\mbox{.}" * }         % jrh: avoid spacing problems
-    { #2 <
-    'skip$
-    { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-        { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
-        { " and " * editor #2 "{vv~}{ll}" format.name$ * }
-      if$
-    }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.book.crossref }
-{
-  volume empty.or.unknown
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
-      "In "
-    }
-    { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
-      " of " *
-    }
-  if$
-  editor empty.or.unknown
-  editor field.or.null author field.or.null =
-  or
-    { key empty.or.unknown
-    { series empty.or.unknown
-        { "need editor, key, or series for " cite$ * " to crossref " *
-          crossref * warning$
-          "" *
-        }
-        { "{\em " * series * "\/}" * }
-      if$
-    }
-    { key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION { format.incoll.inproc.crossref }
-{ "See"
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION { format.lab.names }
-{
-  % format.lab.names:
-  %
-  % determines "short" names for the abbreviated author information.
-  % "Long" labels are created in calc.label, using the routine my.full.label
-  % to format author and editor fields.
-  %
-  % There are 4 cases for labels.   (n=3 in the example)
-  % a) one author             Foo
-  % b) one to n               Foo, Bar and Baz
-  % c) use of "and others"    Foo, Bar et al.
-  % d) more than n            Foo et al.
-
-  's :=
-  s num.names$ 'numnames :=
-  numnames #2 >    % change number to number of others allowed before
-                   % forcing "et al".
-    { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
-    {
-      numnames #1 - 'namesleft :=
-      #2 'nameptr :=
-      s #1 "{vv~}{ll}" format.name$
-        { namesleft #0 > }
-        { nameptr numnames =
-            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-                { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
-                { " and " * s nameptr "{vv~}{ll}" format.name$ * }
-              if$
-            }
-            { ", " * s nameptr "{vv~}{ll}" format.name$ * }
-          if$
-          nameptr #1 + 'nameptr :=
-          namesleft #1 - 'namesleft :=
-        }
-      while$
-    }
-  if$
-}
-
-FUNCTION { author.key.label }
-{
-  author empty.or.unknown
-    { key empty.or.unknown
-          { "no key, author in " cite$ * warning$
-            cite$ #1 #3 substring$ }
-         'key
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { author.key.organization.label }
-{ % added - gnp. Provide label formatting by organization if author is null.
-  author empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "no key, author or organization in " cite$ * warning$
-              cite$ #1 #3 substring$ }
-            'key
-          if$
-        }
-        { organization }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { editor.key.organization.label }
-{ % added - gnp. Provide label formatting by organization if editor is null.
-  editor empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "no key, editor or organization in " cite$ * warning$
-              cite$ #1 #3 substring$ }
-            'key
-          if$
-        }
-        { organization }
-      if$
-    }
-    { editor format.lab.names }
-  if$
-}
-
-FUNCTION { author.editor.key.label }
-{
-  author empty.or.unknown
-    { editor empty.or.unknown
-          { key empty.or.unknown
-               { "no key, author, or editor in " cite$ * warning$
-                 cite$ #1 #3 substring$ }
-             'key
-           if$
-         }
-          { editor format.lab.names }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { calc.label }
-{
-  % Changed - GNP. See also author.organization.sort, editor.organization.sort
-  % Form label for BibTeX entry. The classification of which fields are used
-  % for which type of entry (book, inbook, etc.) are taken from alpha.bst.
-  % The change here from newapa is to also include organization as a
-  % citation label if author or editor is missing.
-
-  type$ "book" =
-  type$ "inbook" =
-  or
-  type$ "periodical" =
-  or
-    'author.editor.key.label
-    { type$ "proceedings" =
-        'editor.key.organization.label
-        { type$ "manual" =
-            'author.key.organization.label
-            'author.key.label
-          if$
-        }
-      if$
-    }
-  if$
-
-  author empty.or.unknown  % generate the full label citation information.
-    {
-      editor empty.or.unknown
-        {
-          organization empty.or.unknown
-            {
-              key empty.or.unknown
-                {
-                  "no author, editor, organization, or key in " cite$ * warning$
-                  "??"
-                }
-                { key }
-              if$
-            }
-            { organization }
-          if$
-        }
-        { editor my.full.label }
-      if$
-    }
-    { author my.full.label }
-  if$
-
-  % leave label on the stack, to be popped when required.
-
-  "}{" * swap$ * "}{" *
-  %  year field.or.null purify$ #-1 #4 substring$ *
-  %
-  % save the year for sort processing afterwards (adding a, b, c, etc.)
-  %
-  year field.or.null purify$ #-1 #4 substring$
-  'label.year :=
-}
-
-FUNCTION { output.bibitem }
-{
-  newline$
-  %% acmtrans.bst alphanumeric style:
-  %%: "\bibitem[\protect\citeauthoryear{" write$
-  %%: calc.label write$
-  %%: sort.year write$
-  %%: "}]%" writeln
-  %%: "        {" write$
-  %%: cite$ write$
-  %%: "}" writeln
-  %% acm-plain.bst numeric style:
-  newline$
-  "\bibitem{" write$
-  cite$ write$
-  "}" write$
-  newline$
-  ""
-  before.all 'output.state :=
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url }
-{ % enter and return with stack empty
-  %% We switch now from buffered output to output of complete lines, so
-  %% that the Issue .. URL data have their own lines, and are less likely
-  %% to be line-wrapped by BibTeX's short-sighted algorithm, which wraps
-  %% lines longer than 79 characters, backtracking to what it thinks is
-  %% a break point in the string.  Any such wrapping MUST be undone to
-  %% prevent percent-newline from appearing in DOIs and URLs.  The
-  %% output data are intentionally wrapped in \showxxx{} macros at
-  %% beginning of line, and that supply their own punctuation (if they
-  %% are not defined to suppress output entirely), to make it easier for
-  %% other software to recover them from .bbl files.
-  %%
-  %% It also makes it possible to later change the macro definitions
-  %% to suppress particular output values, or alter their appearance.
-  %%
-  %% Note that it is possible for theses, technical reports, and
-  %% manuals to have ISBNs, and anything that has an ISBN may also
-  %% have an ISSN.  When there are no values for these keys, there
-  %% is no output generated for them here.
-
-  "\newblock" writeln
-  after.block 'output.state :=
-
-  output.issue
-  output.isbn
-  output.coden  % CODEN is functionally like ISSN, so output them sequentially
-  output.issn
-  output.lccn
-  output.doi    % DOI is ALWAYS last according to CrossRef DOI documentation
-  output.url    % but ACM wants URL last
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url.note }
-{ % enter with stack empty, return with empty string on stack
-  output.issue.doi.coden.isxn.lccn.url
-  note empty.or.unknown
-    { }
-    {
-      "\newblock" writeln
-      output.note
-    }
-  if$
-  ""
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url.note.check }
-{ % enter with stack empty, return with empty string on stack
-  output.issue.doi.coden.isxn.lccn.url
-  note empty.or.unknown
-    { }
-    {
-      "\newblock" writeln
-      output.note.check
-    }
-  if$
-  ""
-}
-
-FUNCTION { article }
-{
-  output.bibitem
-
-  author empty.or.unknown
-    {
-      editor empty.or.unknown
-        { "neither author and editor supplied for " cite$ * warning$ }
-        { format.editors "editor" output.check }
-      if$
-    }
-    { format.authors "author" output.check }
-  if$
-
-  author format.no.key output       % added
-  output.year.check                 % added
-  new.block
-  format.articletitle "title" output.check
-  new.block
-  howpublished output
-
-  crossref missing$
-    { format.journal.volume.number.day.month.year }
-    {
-      "cross reference in @Article{...} is unusual" warning$
-      format.article.crossref output.nonnull
-    }
-  if$
-  output
-
-  format.pages.check.without.articleno output
-  format.articleno.numpages output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { book }
-{
-  output.bibitem
-  author empty.or.unknown
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-        { "author and editor" editor either.or.check }
-        'skip$
-      if$
-    }
-  if$
-  output.year.check       % added
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { new.sentence              % jtb: start a new sentence for series/volume
-      format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check    % jtb: require address
-      fin.sentence
-      pages empty.or.unknown
-        { format.bookpages }    % use bookpages when pages empty
-        { format.pages.check "pages" tie.or.space.connect }
-      if$
-      output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { booklet }
-{
-  output.bibitem
-  format.authors output
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title "title" output.check
-  new.block
-  howpublished output
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { inbook }
-{
-  output.bibitem
-  author empty.or.unknown
-    { format.editors
-      "author and editor" output.check
-    }
-    { format.authors output.nonnull
-      crossref missing$
-    { "author and editor" editor either.or.check }
-    'skip$
-      if$
-    }
-  if$
-  output.year.check                 % added
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { new.sentence              % jtb: start a new sentence for series/volume
-      format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check    % jtb: require address
-      format.bookpages output
-      format.chapter.pages
-      "chapter and pages" output.check  % jtb: moved from before publisher
-    }
-    {
-      format.bookpages output
-      format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { incollection }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output       % added
-  output.year.check              % added
-  new.block
-  format.articletitle "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      new.sentence                % jtb: start a new sentence for series/volume
-      format.bvolume output
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check      % jtb: require address
-      format.bookpages output
-      format.chapter.pages output % gnp - was special.output.nonnull
-                                  % left out comma before page numbers
-                                  % jtb: moved from before publisher
-    }
-    {
-      format.incoll.inproc.crossref output.nonnull
-      format.chapter.pages output
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { inproceedings }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output            % added
-  output.year.check                   % added
-  new.block
-  format.articletitle "title" output.check
-  howpublished output.dot.space
-  crossref missing$
-    {
-      journal missing$          % jtb: proceedings appearing in journals
-        { format.in.emphasize.booktitle format.city "booktitle"  output.check.dot.space
-          format.series output.removenospace
-          format.editors.fml output.dot.space
-          format.bvolume.noseries output
-          new.sentence
-          organization output
-          publisher "publisher" output.check % jtb: require publisher (?)
-          address "address" output.check  % jtb: require address
-          format.bookpages output
-        }
-        {
-          format.in.booktitle format.city "booktitle" output.check
-          format.editors.fml output
-          new.sentence
-          format.journal.volume.number.day.month.year output
-        }
-      if$
-      format.articleno output
-      format.pages.check.without.articleno output
-    }
-    {
-      format.incoll.inproc.crossref output.nonnull
-      format.articleno output
-      format.pages.check.without.articleno output
-    }
-  if$
-  format.articleno.numpages output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { conference } { inproceedings }
-
-FUNCTION { manual }
-{
-  output.bibitem
-  author empty.or.unknown
-    { editor empty.or.unknown
-      { organization "organization" output.check
-        organization format.key output }  % if all else fails, use key
-      { format.editors "author and editor" output.check }
-      if$
-    }
-    { format.authors output.nonnull }
-    if$
-  output.year.check                 % added
-  new.block
-  format.btitle "title" output.check
-  organization address new.block.checkb
-  % jtb: back to normal style: organization, address
-  organization "organization" output.check
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { mastersthesis }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
-  new.block
-  "M.S.\ thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  new.block
-  format.advisor output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { misc }
-{
-  output.bibitem
-  format.authors output
-  author format.key output            % added
-  output.year.check                   % added
-  title howpublished new.block.checkb
-  format.title output
-  new.block
-  howpublished output
-  "" output.nonnull.dot.space
-  output.day.month.year
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { phdthesis }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
-  new.block
-  "Ph.D. thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  new.block
-  format.advisor output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION {format.date}
-{ year empty.or.unknown
-    { month empty.or.unknown
-        {
-          ""                    % output empty date if year/month both empty
-          day empty.or.unknown
-            {  }
-            { "there's a day but no month or year in " cite$ * warning$ }
-          if$
-        }
-        { "there's a month but no year in " cite$ * warning$
-          month
-          day empty.or.unknown
-            { }
-            { " " * day * }
-          if$
-        }
-      if$
-    }
-    { month empty.or.unknown
-        {
-          year                  % output only year if month empty
-          day empty.or.unknown
-            {  }
-            { "there's a day and year but no month in " cite$ * warning$ }
-          if$
-        }
-        {
-          month " " *
-          day empty.or.unknown
-            { }
-            { day * ", " * }
-          if$
-          year *
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION {new.block.checka}
-{
-  empty.or.unknown
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION { periodical }
-{
-  output.bibitem
-  editor empty.or.unknown
-    { organization output }
-    { format.editors output.nonnull }
-  if$
-  new.block
-  title emphasize "title" output.check
-  format.date output
-  new.sentence
-  publisher output
-  address output
-  howpublished new.block.checka
-  howpublished output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { proceedings }
-{
-  output.bibitem
-  editor empty.or.unknown
-    { organization output
-      organization format.key output }  % gnp - changed from author format.key
-    { format.editors output.nonnull }
-  if$
-  % author format.key output             % gnp - removed (should be either
-  %                                        editor or organization
-  output.year.check                    % added (newapa)
-  new.block
-  format.btitle format.city "title" output.check        % jtb: added city
-  new.sentence
-  format.bvolume output
-  format.number.series output
-  new.sentence
-  organization output
-  % jtb: normal order: publisher, address
-  publisher output
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { techreport }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output             % added
-  output.year.check                    % added
-  new.block
-  format.btitle "title" output.check
-  new.block
-  format.tr.number output               % jtb: moved month ...
-  institution "institution" output.check
-  address output
-  new.sentence
-  format.named.pages output
-  % ACM omits year at end in transactions style
-  % format.day.month.year output.nonnull.dot.space  % jtb: ... to here (no parens)
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { unpublished }
-{
-  output.bibitem
-  format.authors
-  "author" output.check
-  author format.key output              % added
-  output.year.check                     % added
-  new.block
-  format.title "title" output.check
-  fin.sentence
-  output.day.month.year                 % UTAH
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note.check
-  fin.entry
-}
-
-FUNCTION { default.type } { misc }
-
-%%% ACM journal-style month definitions: full name if 1--5 letters, else
-%%% abbreviation of 3 or 4 characters and a dot
-
-MACRO {jan}             {"Jan."}
-
-MACRO {feb}             {"Feb."}
-
-MACRO {mar}             {"March"}
-
-MACRO {apr}             {"April"}
-
-MACRO {may}             {"May"}
-
-MACRO {jun}             {"June"}
-
-MACRO {jul}             {"July"}
-
-MACRO {aug}             {"Aug."}
-
-MACRO {sep}             {"Sept."}
-
-MACRO {oct}             {"Oct."}
-
-MACRO {nov}             {"Nov."}
-
-MACRO {dec}             {"Dec."}
-
-
-%%% ====================================================================
-%%%                 I M P O R T A N T   C H A N G E
-%%%
-%%% For the 2009 release of the official acm-*.bst files, there are to
-%%% be NO predefined journal abbreviations in those style files.
-%%%
-%%% ACM may later develop an official list of mappings of full journal
-%%% names of commonly-cited journals to ACM-preferred abbreviations, but
-%%% authors should consider that use of any of these commented-out
-%%% abbreviations is DEPRECATED unless the BibTeX file itself provides
-%%% its own @String{name = "value"} definitions.
-%%%
-%%% Use of journal (and publisher and address) @String{...}
-%%% abbreviations, as opposed to explicit value assignments such as
-%%% journal = "J. ACM" and publisher = "IEEE", is preferred in
-%%% bibliographic databases, because it makes it easier for journal
-%%% production staff to replace those definitions by publisher-preferred
-%%% abbreviations when articles are typeset for publication.
-%%%
-%%% For historical reasons, and because some of these abbreviations are
-%%% used in other (non-ACM) bibliography style files, they are preserved
-%%% here in comments.  Future releases of the acm*-.bst files are likely
-%%% to remove them entirely.
-%%% ====================================================================
-%%%
-%%% DEPRECATED: MACRO {acmcs}           {"ACM Comput. Surv."}                   % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acmlett}         {"ACM Lett. Program. Lang. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acta}            {"Acta Inf."}                           % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ai}              {"Artificial Intelligence"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {al}              {"Ada Lett."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acr}             {"Adv. Comput. Res."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {bit}             {"Bit"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cacm}            {"Commun. ACM"}                         % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cj}              {"Comput. J."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cn}              {"Comput. Netw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cl}              {"Comput. Lang."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ibmjrd}          {"IBM J. Res. and Development"}         % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ibmsj}           {"IBM Systems Journal"}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ict}             {"Inf. Contr."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieebcs}          {"IEE/BCS Softw. Eng. J."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieees}           {"IEEE Softw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeese}          {"IEEE Trans. Softw. Eng."}             % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetc}          {"IEEE Trans. Comput."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetcad}        {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetpds}        {"IEEE Trans. Parall. Distrib. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetit}         {"IEEE Trans. Inf. Theory"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ipl}             {"Inf. Process. Lett."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {icp}             {"Inf. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ist}             {"Inf. Softw. Tech."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ijsa}            {"Int. J. Supercomput. Appl."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ijpp}            {"Int. J. Parallel Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jacm}            {"J. ACM"}                              % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: % MACRO {jcss}          {"Journal of Computer and System Sciences"} % original BibTeX
-%%% DEPRECATED: MACRO {jcss}            {"J. Comput. Syst. Sci."}               % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlp}             {"J. Logic Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jfp}             {"J. Funct. Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jsmrp}           {"J. Softw. Maint. Res. Pract."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jss}             {"J. Syst. Softw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlc}             {"J. Logic and Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlsc}            {"J. Lisp Symb. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {lpls}            {"Lett. Program. Lang. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mor}             {"Math. Oper. Res."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mscs}            {"Math. Struct. Comput. Sci."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mst}             {"Math. Syst. Theor."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ngc}             {"New Gen. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {scp}             {"Sci. Comput. Program."}               % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {sicomp}          {"SIAM J. Comput."}                     % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {spe}             {"Softw. Pract. Exper."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tocs}            {"ACM Trans. Comput. Syst."}            % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tods}            {"ACM Trans. Database Syst."}           % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tog}             {"ACM Trans. Graphics"}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toms}            {"ACM Trans. Math. Softw."}             % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toois}           {"ACM Trans. Office Inf. Syst."}        % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toplas}          {"ACM Trans. Program. Lang. Syst."}     % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tcs}             {"Theor. Comput. Sci."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tr}              {"Tech. Rep."}
-%%% ====================================================================
-
-READ
-
-FUNCTION { sortify }
-{
-  purify$
-  "l" change.case$
-}
-
-FUNCTION { chop.word }
-{
-  's :=
-  'len :=
-  s #1 len substring$ =
-    { s len #1 + global.max$ substring$ }
-    's
-  if$
-}
-
-FUNCTION { sort.format.names }
-{
-  's :=
-  #1 'nameptr :=
-  ""
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 >
-          { "   " * }
-         'skip$
-      if$
-  %      s nameptr "{ff{ } }{ll{ }}{  vv{ }}{  jj{ }}" format.name$ 't :=
-      s nameptr "{vv{ } }{ll{ }}{  f{ }}{  jj{ }}" format.name$ 't :=
-      nameptr numnames = t "others" = and
-          { " et~al" * }
-          { t sortify * }
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION { sort.format.title }
-{
-  't :=
-  "A " #2
-    "An " #3
-      "The " #4 t chop.word
-    chop.word
-  chop.word
-  sortify
-  #1 global.max$ substring$
-}
-
-FUNCTION { author.sort }
-{
-  author empty.or.unknown
-    { key empty.or.unknown
-         { "to sort, need author or key in " cite$ * warning$
-           "" }
-         { key sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { author.editor.sort }
-{
-  author empty.or.unknown
-    {
-      editor empty.or.unknown
-         {
-           key empty.or.unknown
-             { "to sort, need author, editor, or key in " cite$ * warning$
-               ""
-             }
-             { key sortify }
-           if$
-         }
-         { editor sort.format.names }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { author.organization.sort }
-{
-  % added - GNP. Stack author or organization for sorting (from alpha.bst).
-  % Unlike alpha.bst, we need entire names, not abbreviations
-
-  author empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "to sort, need author, organization, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { organization sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION { editor.organization.sort }
-{
-  % added - GNP. Stack editor or organization for sorting (from alpha.bst).
-  % Unlike alpha.bst, we need entire names, not abbreviations
-
-  editor empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "to sort, need editor, organization, or key in " cite$ * warning$
-              ""
-            }
-            { key sortify }
-          if$
-        }
-        { organization sortify }
-      if$
-    }
-    { editor sort.format.names }
-  if$
-}
-
-FUNCTION { presort }
-{
-  % Presort creates the bibentry's label via a call to calc.label, and then
-  % sorts the entries based on entry type. Chicago.bst adds support for
-  % including organizations as the sort key; the following is stolen from
-  % alpha.bst.
-
-  %%: calc.label sortify % recalculate bibitem label
-  %%: year field.or.null purify$ #-1 #4 substring$ * % add year
-  %% "    "
-  %% *
-  type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.sort
-    { type$ "proceedings" =
-        'editor.organization.sort
-        { type$ "manual" =
-            'author.organization.sort
-            'author.sort
-          if$
-        }
-      if$
-    }
-  if$
-  "    "
-  *
-  year field.or.null sortify
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE { presort }
-
-SORT             % by label, year, author/editor, title
-
-STRINGS { longest.label }
-
-INTEGERS { number.label longest.label.width }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
-  #1 'number.label :=
-  #0 'longest.label.width :=
-}
-
-FUNCTION {longest.label.pass}
-{ number.label int.to.str$ 'label :=
-  number.label #1 + 'number.label :=
-  label width$ longest.label.width >
-    { label 'longest.label :=
-      label width$ 'longest.label.width :=
-    }
-    'skip$
-  if$
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {longest.label.pass}
-
-FUNCTION { initialize.extra.label.stuff }
-{ #0 int.to.chr$ 'last.label :=
-  "" 'next.extra :=
-  #0 'last.extra.num :=
-}
-
-EXECUTE {initialize.extra.label.stuff}
-
-FUNCTION { begin.bib }
-{
-  %% Set to #0 show 13-digit ISBN in preference to 10-digit ISBN.
-  %% Set to #1 to show both 10-digit and 13-digit ISBNs.
-  #1 'show-isbn-10-and-13 :=
-
-  "%%% -*-BibTeX-*-" writeln
-  "%%% Do NOT edit. File created by BibTeX with style acmtrans-v2 [15-Nov-2008]." writeln
-  "" writeln
-
-  preamble$ empty.or.unknown
-    'skip$
-    { preamble$ writeln }
-  if$
-  "\begin{thebibliography}{" longest.label * "}" * writeln
-  ""                                                                         writeln
-  "%%% ====================================================================" writeln
-  "%%% NOTE TO THE USER: you can override these defaults by providing"       writeln
-  "%%% customized versions of any of these macros before the \bibliography"  writeln
-  "%%% command.  Each of them MUST provide its own final punctuation,"       writeln
-  "%%% except for \shownote{}, \showDOI{}, and \showURL{}.  The latter two"  writeln
-  "%%% do not use final punctuation, in order to avoid confusing it with"    writeln
-  "%%% the Web address."                                                     writeln
-  "%%%"                                                                      writeln
-  "%%% To suppress output of a particular field, define its macro to expand" writeln
-  "%%% to an empty string, or better, \unskip, like this:"                   writeln
-  "%%%"                                                                      writeln
-  "%%% \newcommand{\showDOI}[1]{\unskip}   % LaTeX syntax"                   writeln
-  "%%%"                                                                      writeln
-  "%%% \def \showDOI #1{\unskip}           % plain TeX syntax"               writeln
-  "%%%"                                                                      writeln
-  "%%% ====================================================================" writeln
-  ""                                                                         writeln
-
-  %% ACM publications do not use CODEN, ISSN, and LCCN data, so their default
-  %% macro wrappers expand to \unskip, discarding their values and unwanted
-  %% space.
-  %%
-  %% For other publications, prior definitions like these may be useful:
-  %%
-  %%     Plain TeX:
-  %%         \def \showCODEN     #1{CODEN #1.}
-  %%         \def \showISSN      #1{ISSN #1.}
-  %%         \def \showLCCN      #1{LCCN #1.}
-  %%
-  %%     LaTeX:
-  %%         \newcommand{\showCODEN}[1]{CODEN #1.}
-  %%         \newcommand{\showISSN}[1]#1{ISSN #1.}
-  %%         \newcommand{\showLCCN}[1]{LCCN #1.}
-
-  "\ifx \showCODEN    \undefined \def \showCODEN     #1{\unskip}     \fi" writeln
-  "\ifx \showDOI      \undefined \def \showDOI       #1{{\tt DOI:}\penalty0{#1}\ } \fi" writeln
-  % ACM styles omit ISBNs, but they can be included by suitable definitions of
-  % \showISBNx and \showISBNxiii before the .bbl file is read
-  "\ifx \showISBNx    \undefined \def \showISBNx     #1{\unskip}     \fi" writeln
-  "\ifx \showISBNxiii \undefined \def \showISBNxiii  #1{\unskip}     \fi" writeln
-  "\ifx \showISSN     \undefined \def \showISSN      #1{\unskip}     \fi" writeln
-  "\ifx \showLCCN     \undefined \def \showLCCN      #1{\unskip}     \fi" writeln
-  "\ifx \shownote     \undefined \def \shownote      #1{#1}          \fi" writeln % NB: final period supplied by add.period$ above
-  "\ifx \showarticletitle \undefined \def \showarticletitle #1{#1}   \fi" writeln
-  "\ifx \showURL      \undefined \def \showURL       #1{#1}          \fi" writeln
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION { end.bib }
-{
-  newline$
-  "\end{thebibliography}"
-  writeln
-}
-
-EXECUTE {end.bib}

Deleted: trunk/Master/texmf-dist/bibtex/bst/acmart/acm-unsrt.bst
===================================================================
--- trunk/Master/texmf-dist/bibtex/bst/acmart/acm-unsrt.bst	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/bibtex/bst/acmart/acm-unsrt.bst	2016-07-14 21:38:03 UTC (rev 41692)
@@ -1,3142 +0,0 @@
-%%% -*-BibTeX-*-
-%%% ====================================================================
-%%%  @BibTeX-style-file{
-%%%     author          = "Nelson H. F. Beebe and many others",
-%%%     version         = "1.03",
-%%%     date            = "15 April 2011",
-%%%     time            = "23:55:02 EDT",
-%%%     filename        = "acm-unsrt.bst",
-%%%     address         = "University of Utah
-%%%                        Department of Mathematics, 110 LCB
-%%%                        155 S 1400 E RM 233
-%%%                        Salt Lake City, UT 84112-0090
-%%%                        USA",
-%%%     telephone       = "+1 801 581 5254",
-%%%     FAX             = "+1 801 581 4148",
-%%%     URL             = "http://www.math.utah.edu/~beebe",
-%%%     checksum        = "18030 3142 11525 86689",
-%%%     email           = "beebe at math.utah.edu, beebe at acm.org,
-%%%                        beebe at computer.org",
-%%%     codetable       = "ISO/ASCII",
-%%%     keywords        = "ACM unsrt bibliography style; BibTeX",
-%%%     license         = "public domain",
-%%%     supported       = "yes",
-%%%     abstract        = "",
-%%%     docstring       = "The checksum field above contains a CRC-16
-%%%                        checksum as the first value, followed by the
-%%%                        equivalent of the standard UNIX wc (word
-%%%                        count) utility output of lines, words, and
-%%%                        characters.  This is produced by Robert
-%%%                        Solovay's checksum utility.",
-%%%  }
-%%% ====================================================================
-
-% "ACM unsrt" BibTeX style, derived by minimal modifications from acm-plain.bst
-% "ACM Transactions" BibTeX style, acmtrans-v2.bst
-%  for BibTeX version 0.99c, LaTeX version 3.141
-%  ACM extensions with code cleaned up, extended, and debugged 10--15-Nov-2008
-%  Revised 28-MARCH-1996
-%  Revised 30-JUNE-1995
-%  Revised 15-JAN-1996
-%  Revised 17-APRIL-2008
-%  Revised 13-MARCH-2011
-%  Revised 27-MARCH-2011
-%  Revised 15-APRIL-2011
-%
-% Hacked by John T. Boyland at University of California, Berkeley
-% (with assistance by John R. Hauser)
-% Hacked by Andrew W. Appel and Rebecca L. Davies at Princeton University,
-% based on a "chicago.bst" by Glenn Paulley at U. Waterloo,
-% which was based on "newapa.bst" found at ymir.claremont.edu.
-%
-% Version 2.2
-% Johny Sebatian and Sanjeev Sharma
-% Aptara corp (c) 2008
-%
-% History
-%
-% Date: 28th April 2008
-%
-% 1. Avoid 'repeating' the 'month' values.
-% 2. Avoid incorrectly italicizing the volume number.
-% 3. Avoid non italicizing certain titles (book, inproceedings etc).
-% 4. NO series if there is NO volume.
-% 5. Sorting of reference with first surname.
-% 6. Article no added for Inproceedings.
-%
-% Date: 07th May 2008
-%
-% 1. Abbreviation list added
-%
-%   Citation format: [author-last-name year]
-%             [author-last-name and author-last-name year]
-%             [author-last-name, author-last-name, and author-last-name year]
-%             [author-last-name et al. year]
-%             [author-last-name]
-%             author-last-name [year]
-%             [author-last-name and author-last-name]
-%             [author-last-name et al.]
-%             [year] or [year,year]
-%             year or year,year
-%
-%   Reference list ordering: alphabetical by author or whatever passes
-%    for author in the absence of one.
-%
-% This BibTeX style has support for abbreviated author lists and for
-%    year-only citations.  This is done by having the citations
-%    actually look like
-%
-%    \citeauthoryear{full-author-info}{abbrev-author-info}{year}
-%
-% The LaTeX style has to have the following (or similar)
-%
-%     \let\@internalcite\cite
-%     \def\fullcite{\def\citeauthoryear##1##2##3{##1, ##3}\@internalcite}
-%     \def\fullciteA{\def\citeauthoryear##1##2##3{##1}\@internalcite}
-%     \def\shortcite{\def\citeauthoryear##1##2##3{##2, ##3}\@internalcite}
-%     \def\shortciteA{\def\citeauthoryear##1##2##3{##2}\@internalcite}
-%     \def\citeyear{\def\citeauthoryear##1##2##3{##3}\@internalcite}
-%
-% These TeX macro definitions are found in acmtrans.sty. Additional
-% commands to manipulate different components of a citation can be defined
-% so that, for example, you can list author's names without parentheses
-% if using a citation as a noun or object in a sentence.
-%
-% Features of acmtrans.bst:
-% ========================
-%
-% - all authors appear last name first.
-% - all pages are listed xx-xx, (no pp.) and are at the end of the reference
-% - publishers are identified as publisher, address
-% - conferences papers (inproceedings) may give city of conference,
-%   date of conference, and journal that the proceedings appear in.
-% - months abbreviated to max four letters (eg. Mar.)
-% - volume of a series indicated after the title of the series
-% - editors appear after edited title and are identified by a trailing "Eds."
-%   not in parentheses.  Editor names are not given in small caps.
-%   (unless there is no author line)
-% - names terminated with a period even if there is no first name.
-% - editions are indicated trailing after the work, not in parentheses.
-% - "et al." citations have a protected period to avoid bad spacing (jrh)
-% - "address" required when publisher given
-% - series (roman) and volume are in a sentence separate from (book-)title
-%
-%
-% Features of chicago.bst:
-% =======================
-%
-% - full names used in citations, but abbreviated citations are available
-%   (see above)
-% - if an entry has a "month", then the month and year are also printed
-%   as part of that bibitem.
-% - all conjunctions use "and" instead of "\&"
-% - major modification from Chicago Manual of Style (13th ed.) is that
-%   only the first author in a reference appears last name first-
-%   additional authors appear as J. Q. Public.
-% - pages are listed as "pp. xx-xx" in all entry types except
-%   article entries.
-% - book, inbook, and manual use "location: publisher" (or organization)
-%   for address and publisher. All other types list publishers separately.
-% - "pp." are used to identify page numbers for all entry types except
-%   articles.
-% - organization is used as a citation label if neither author nor editor
-%   is present (for manuals).
-% - "et al." is used for long author and editor lists, or when "others"
-%   is used.
-%
-% Modifications and bug fixes from newapa.bst:
-% ===========================================
-%
-%   - added month, year to bib entries if month is present
-%   - fixed bug with In proceedings, added necessary comma after title
-%   - all conjunctions changed to "and" from "\&"
-%   - fixed bug with author labels in my.full.label: "et al." now is
-%        generated when "others" is an author name
-%   - major modification from Chicago Manual of Style (13th ed.) is that
-%     only the first author in a reference appears last name first-
-%     additional authors appear as J. Q. Public.
-%   - pages are listed as "pp. xx-xx" in all entry types except
-%     article entries. Unnecessary (IMHO) "()" around page numbers
-%     were removed, and page numbers now don't end with a period.
-%   - created chicago.sty for use with this bibstyle (required).
-%   - fixed bugs in FUNCTION {format.vol.num.pages} for missing volume,
-%     number, and /or pages. Renamed to format.journal.volume.number.
-%   - fixed bug in formatting booktitles: additional period an error if
-%     book has a volume.
-%   - fixed bug: editors usually given redundant period before next clause
-%     (format.editors.dot) removed.
-%   - added label support for organizations, if both author and editor
-%     are missing (from alpha.bst). If organization is too long, then
-%     the key field is used for abbreviated citations.
-%   - In proceedings or books of several volumes, no comma was written
-%     between the "Volume x" and the page numbers (this was intentional
-%     in newapa.bst). Fixed.
-%   - Some journals may not have volumes/numbers, only month/year (eg.
-%     IEEE Computer). Fixed bug in article style that assumed volume/number
-%     was always present.
-%
-% Original documentation for newapa.sty:
-% =====================================
-%
-% This version was made by modifying the master file made by
-% Oren Patashnik (PATASHNIK at SCORE.STANFORD.EDU), and the 'named' BibTeX
-% style of Peter F. Patel-Schneider.
-%
-% Copyright (C) 1985, all rights reserved.
-% Copying of this file is authorized only if either
-% (1) you make absolutely no changes to your copy, including name, or
-% (2) if you do make changes, you name it something other than 'newapa.bst'.
-% There are undoubtably bugs in this style.  If you make bug fixes,
-% improvements, etc.  please let me know.  My e-mail address is:
-%    spencer at cgrg.ohio.state.edu or 71160.3141 at compuserve.com
-%
-% This style was made from 'plain.bst', 'named.bst', and 'apalike.bst',
-% with lots of tweaking to make it look like APA style, along with tips
-% from Young Ryu and Brian Reiser's modifications of 'apalike.bst'.
-
-ENTRY
-  { address
-    advisor
-    author
-    booktitle
-    chapter
-    city        % jtb: added
-    date        % jtb: added
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-        % New keys recognized for acmtrans-v2.bst
-        issue         % UTAH: used in, e.g., ACM SIGSAM Bulletin and ACM Communications in Computer Algebra
-        articleno
-        day           % UTAH: needed for newspapers, weeklies, bi-weeklies
-        doi           % UTAH
-        url           % UTAH
-        bookpages     % UTAH
-        numpages
-        lastaccessed  % UTAH: used only for @Misc{...}
-        coden         % UTAH
-        isbn          % UTAH
-        isbn-13       % UTAH
-        issn          % UTAH
-        lccn          % UTAH
-  }
-  {}
-  { label label.year extra.label sort.year sort.label }
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-INTEGERS { show-isbn-10-and-13 }  % initialized below in begin.bib
-
-INTEGERS { nameptr namesleft numnames }
-
-INTEGERS { multiresult }
-
-INTEGERS { len }
-
-INTEGERS { last.extra.num }
-
-STRINGS { s t t.org u }
-
-STRINGS { last.label next.extra }
-
-STRINGS { p1 p2 p3 page.count }
-
-FUNCTION { dump.stack.1 }
-{
-    duplicate$ "STACK[top] = [" swap$ * "]" * warning$
-}
-
-FUNCTION { dump.stack.2 }
-{
-    duplicate$ "STACK[top  ] = [" swap$ * "]" * warning$
-    swap$
-    duplicate$ "STACK[top-1] = [" swap$ * "]" * warning$
-    swap$
-}
-
-FUNCTION { empty.or.unknown }
-{
-  %% Examine the top stack entry, and push 1 if it is empty, or
-  %% consists only of whitespace, or is a string beginning with two
-  %% queries (??), and otherwise, push 0.
-  %%
-  %% This function provides a replacement for empty$, with the
-  %% convenient feature that unknown values marked by two leading
-  %% queries are treated the same as missing values, and thus, do not
-  %% appear in the output .bbl file, and yet, their presence in .bib
-  %% file(s) serves to mark values which are temporarily missing, but
-  %% are expected to be filled in eventually once more data is
-  %% obtained.  The TeX User Group and BibNet bibliography archives
-  %% make extensive use of this practice.
-  %%
-  %% An empty string cannot serve the same purpose, because just as in
-  %% statistics data processing, an unknown value is not the same as an
-  %% empty value.
-  %%
-  %% At entry: stack = ... top:[string]
-  %% At exit:  stack = ... top:[0 or 1]
-
-  duplicate$ empty$
-    { pop$ #1 }
-    { #1 #2 substring$ "??" = }
-  if$
-}
-
-FUNCTION { writeln }
-{
-  %% In BibTeX style files, the sequences
-  %%
-  %%     ... "one" "two" output
-  %%     ... "one" "two" output.xxx
-  %%
-  %% ship "one" to the output file, possibly following by punctuation,
-  %% leaving the stack with
-  %%
-  %%     ... "two"
-  %%
-  %% There is thus a one-string lag in output processing that must be
-  %% carefully handled to avoid duplicating a string in the output
-  %% file.  Unless otherwise noted, all output.xxx functions leave
-  %% just one new string on the stack, and that model should be born
-  %% in mind when reading or writing function code.
-  %%
-  %% BibTeX's asynchronous buffering of output from strings from the
-  %% stack is confusing because newline$ bypasses the buffer.  It
-  %% would have been so much easier for newline to be a character
-  %% rather than a state of the output-in-progress.
-  %%
-  %% The documentation in btxhak.dvi is WRONG:  it says
-  %%
-  %%    newline$ Writes onto the bbl file what's accumulated in the
-  %%             output buffer. It writes a blank line if and only
-  %%             if the output buffer is empty. Since write$ does
-  %%             reasonable line breaking, you should use this
-  %%             function only when you want a blank line or an
-  %%             explicit line break.
-  %%
-  %%    write$   Pops the top (string) literal and writes it on the
-  %%             output buffer (which will result in stuff being
-  %%             written onto the bbl file when the buffer fills
-  %%             up).
-  %%
-  %% Examination of the BibTeX source code shows that write$ does
-  %% indeed behave as claimed, but newline$ sends a newline character
-  %% directly to the output file, leaving the stack unchanged.  The
-  %% first line "Writes onto ... buffer." is therefore wrong.
-  %%
-  %% The original BibTeX style files almost always use "write$ newline$"
-  %% in that order, so it makes sense to hide that pair in a private
-  %% function like this one, named after a statement in Pascal,
-  %% the programming language embedded in the BibTeX Web program.
-
-  write$                % output top-of-stack string
-  newline$              % immediate write of newline (not via stack)
-}
-
-FUNCTION { init.state.consts }
-{
-  #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-}
-
-FUNCTION { output.nonnull }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<comma><space>
-  's :=
-  output.state mid.sentence =
-    {
-      ", " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln
-          "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.dot.space }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<dot><space>
-  's :=
-  output.state mid.sentence =           % { "<DEBUG output.nonnull.dot.space>. " * write$ }
-    {
-      ". " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.remove }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S<space>
-  's :=
-  output.state mid.sentence =
-    {
-      " " * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output.nonnull.removenospace }
-{ % Stack in: ... R S T  Stack out: ... R T   File out: S
-  's :=
-  output.state mid.sentence =
-    {
-      "" * write$
-    }
-    {
-      output.state after.block =
-        {
-          add.period$ writeln "\newblock " write$
-        }
-        {
-          output.state before.all =
-            {
-              write$
-            }
-            {
-              add.period$ " " * write$
-            }
-          if$
-        }
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION { output }
-{ % discard top token if empty, else like output.nonnull
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION { output.dot.space }
-{ % discard top token if empty, else like output.nonnull.dot.space
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull.dot.space
-  if$
-}
-
-FUNCTION { output.removenospace }
-{ % discard top token if empty, else like output.nonnull.removenospace
-  duplicate$ empty.or.unknown
-    'pop$
-    'output.nonnull.removenospace
-  if$
-}
-
-FUNCTION { output.check }
-{ % like output, but warn if key name on top-of-stack is not set
-  't :=
-  duplicate$ empty.or.unknown
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull
-  if$
-}
-
-FUNCTION { output.check.dot.space }
-{ % like output.dot.space, but warn if key name on top-of-stack is not set
-  't :=
-  duplicate$ empty.or.unknown
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull.dot.space
-  if$
-}
-
-FUNCTION { fin.block }
-{ % functionally, but not logically, identical to fin.entry
-   add.period$
-   writeln
-}
-
-FUNCTION { fin.entry }
-{
-   add.period$
-   writeln
-}
-
-FUNCTION { new.sentence }
-{ % update sentence state, with neither output nor stack change
-  output.state after.block =
-    'skip$
-    {
-      output.state before.all =
-        'skip$
-        { after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION { fin.sentence }
-{
-   add.period$
-   write$
-   new.sentence
-   ""
-}
-
-FUNCTION { new.block }
-{
-  output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION { output.coden }       % UTAH
-{ % output non-empty CODEN as one-line sentence (stack untouched)
-  coden empty.or.unknown
-    { }
-    { "\showCODEN{" coden * "}" * writeln }
-  if$
-}
-
-FUNCTION { format.articleno }
-{
-  articleno empty.or.unknown
-     { "" }
-     {
-        numpages empty.or.unknown
-          { "articleno field, but no numpages field, in " cite$ * warning$ }
-          { }
-        if$
-        "Article " articleno *
-     }
-  if$
-}
-
-FUNCTION { format.year }
-{ % push year string or "????" onto output stack
-  %% Because year is a mandatory field, we always force SOMETHING
-  %% to be output
-  year empty.or.unknown
-    { "????" }
-    { year }
-  if$
-}
-
-FUNCTION { format.day.month }
-{ % push "day month " or "month " or "" onto output stack
-  day empty.or.unknown
-    {
-      month empty.or.unknown
-        { "" }
-        { month " " *}
-      if$
-    }
-    {
-      month empty.or.unknown
-        { "" }
-        { day " " * month * " " *}
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.day.month.year }     % UTAH
-{ % if month is empty, push "" else push "(MON.)" or "(DD MON.)"
-  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
-  % acm-*.bst addition: prefix parenthesized date string with
-  % ", Article nnn "
-  articleno empty.or.unknown
-    { "" }
-    { ", " format.articleno * }
-  if$
-  " (" * format.day.month * format.year * ")" *
-}
-
-FUNCTION { output.day.month.year }     % UTAH
-{ % if month is empty value, do nothing; else output stack top and
-  % leave with new top string "(MON.)" or "(DD MON.)"
-  % Needed for frequent periodicals: 2008. ... New York Times C-1, C-2, C-17 (23 Oct.)
-  format.day.month.year
-  output.nonnull.remove
-}
-
-FUNCTION { strip.doi } % UTAH
-{ % Strip any Web address prefix to recover the bare DOI, leaving the
-  % result on the output stack, as recommended by CrossRef DOI
-  % documentation.
-  % For example, reduce "http://doi.acm.org/10.1145/1534530.1534545" to
-  % "10.1145/1534530.1534545".  That is later typeset and displayed as
-  % doi:10.1145/1534530.1534545 as the LAST item in the reference list
-  % entry.  Publisher Web sites wrap this with a suitable link to a real
-  % URL to resolve the DOI, and the master http://dx.doi.org/ address is
-  % preferred, since publisher-specific URLs can disappear in response
-  % to economic events.  All journals are encouraged by the DOI
-  % authorities to use that typeset format and link procedures for
-  % uniformity across all publications that include DOIs in reference
-  % lists.
-  % The numeric prefix is guaranteed to start with "10.", so we use
-  % that as a test.
-  doi #1 #3 substring$ "10." =
-    { doi }
-    {
-      doi #1 #7 substring$ "http://" =
-        {
-            doi #8 doi text.length$ #7 - substring$ 't := % get modifiable copy of rest of DOI
-
-            "INTERNAL STYLE-FILE ERROR" 's :=
-
-            % search for next "/" and assign its suffix to s
-
-            { t text.length$ }
-            {
-              t #1 #1 substring$ "/" =
-                {
-                  % save rest of string as true DOI (should be 10.xxxx/yyyy)
-                  t #2 t text.length$ #1 - substring$ 's :=
-                  "" 't :=    % empty string t terminates the loop
-                }
-                {
-                  % discard first character and continue loop: t <= substring(t,2,last)
-                  t #2 t text.length$ #1 - substring$ 't :=
-                }
-              if$
-            }
-            while$
-
-            % check for valid DOI (should be 10.xxxx/yyyy)
-            s #1 #3 substring$ "10." =
-              { }
-              { "unrecognized DOI substring " s * " in DOI value [" * doi * "]" * warning$ }
-            if$
-
-            s   % push the stripped DOI on the output stack
-
-        }
-        {
-          "unrecognized DOI value [" doi * "]" * warning$
-          doi   % push the unrecognized original DOI on the output stack
-        }
-      if$
-    }
-  if$
-}
-
-%
-% Change by BV: added standard prefix to URL
-%
-FUNCTION { output.doi } % UTAH
-{ % output non-empty DOI as one-line sentence (stack untouched)
-  doi empty.or.unknown
-    { }
-    {
-      %% NB: We want URLs at beginning of line to reduce likelihood of
-      %% BibTeX's nasty line wrapping after column 79, which then requires
-      %% manual (or automated) editing of the .bbl file to repair.
-      %% The \url{} macro strips percent-newlines, and is thus safe in
-      %% the presence of the line wrapping, but \path|...| and
-      %% \verb|...| do not.
-      "\showDOI{%" writeln
-      "\url{http://dx.doi.org/" strip.doi * "}}" * writeln
-    }
-  if$
-}
-
-FUNCTION { output.isbn }                % UTAH
-{ % output non-empty ISBN-10 and/or ISBN-13 as one-line sentences (stack untouched)
-  show-isbn-10-and-13
-    {
-      %% show both 10- and 13-digit ISBNs
-      isbn empty.or.unknown
-        { }
-        {
-          "\showISBNx{" isbn * "}" * writeln
-        }
-      if$
-      isbn-13 empty.or.unknown
-        { }
-        {
-          "\showISBNxiii{" isbn-13 * "}" * writeln
-        }
-      if$
-    }
-    {
-      %% show 10-digit ISBNs only if 13-digit ISBNs not available
-      isbn-13 empty.or.unknown
-        {
-          isbn empty.or.unknown
-            { }
-            {
-              "\showISBNx{" isbn * "}" * writeln
-            }
-          if$
-        }
-        {
-          "\showISBNxiii{" isbn-13 * "}" * writeln
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION { output.issn } % UTAH
-{ % output non-empty ISSN as one-line sentence (stack untouched)
-  issn empty.or.unknown
-    { }
-    { "\showISSN{" issn * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.issue }
-{ % output non-empty issue number as a one-line sentence (stack untouched)
-  issue empty.or.unknown
-     { }
-     { "Issue " issue * "." * writeln }
-  if$
-}
-
-FUNCTION { output.lccn } % UTAH
-{ % return with stack untouched
-  lccn empty.or.unknown
-    { }
-    { "\showLCCN{" lccn * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.note } % UTAH
-{ % return with stack empty
-  note empty.or.unknown
-    { }
-    { "\shownote{" note add.period$ * "}" * writeln }
-  if$
-}
-
-FUNCTION { output.note.check } % UTAH
-{ % return with stack empty
-  note empty.or.unknown
-    { "empty note in " cite$ * warning$ }
-    { "\shownote{" note add.period$ * "}" * writeln }
-  if$
-}
-
-%
-% Changes by BV 2011/04/15.  Do not output
-% url if doi is defined
-%
-FUNCTION { output.url } % UTAH
-{ % return with stack untouched
-  % output URL and associated lastaccessed fields
-  doi empty.or.unknown
-  {
-    url empty.or.unknown
-      { }
-      {
-          %% NB: We want URLs at beginning of line to reduce likelihood of
-          %% BibTeX's nasty line wrapping after column 79, which would require
-          %% manual (or automated) editing of the .bbl file to repair.  However,
-          %% the \url{} macro handles the unwrapping job automatically.
-          "\showURL{%" writeln
-          lastaccessed empty.or.unknown
-            { "" }
-            { "Retrieved " lastaccessed * " from " * }
-          if$
-
-          %% The URL field may contain a semicolon-separated list of Web
-          %% addresses, and we locate and wrap each of them in \url{...}.
-          %% The simplistic approach of putting the entire list into the
-          %% macro argument is that the semicolons are typeset in a
-          %% typewriter font, and no space follows them.
-          %%
-          %% We therefore replace the original code
-          %%    "\url{" * url * "}}" * writeln
-          %% with this character-at-a-time loop:
-
-          "\url{" *
-
-          url 't :=                       % get modifiable copy of URL list
-
-          { t text.length$ }
-          {
-            t #1 #1 substring$ ";" =
-              {                         % then split argument at separator
-                "};" * writeln
-                "\url{"
-              }
-              {                         % else concatenate nonblank character to argument
-                t #1 #1 substring$ " " =
-                  { }
-                  { t #1 #1 substring$ * }
-                if$
-              }
-            if$
-
-            t #2 t text.length$ #1 - substring$ 't :=
-          }
-          while$
-
-          "}}" * writeln
-      }
-    if$
-  }
-  { }
-  if$
-}
-
-FUNCTION { output.year.check }
-{ % warn if year empty, else output top string and leave " YEAR<label>" on stack in mid-sentence
-  year empty.or.unknown
-     { "empty year in " cite$ * warning$ }
-     { write$
-        " " year * extra.label *
-       mid.sentence 'output.state :=
-     }
-  if$
-}
-
-FUNCTION { not }
-{
-    { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION { and }
-{
-    'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION { or }
-{
-   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION { le }
-{
-  %% test whether first number is less than or equal to second number
-  %% stack in:  n1 n2
-  %% stack out: if n1 <= n2 then 1 else 0
-
-  %% "DEBUG: le " cite$ * warning$
-  > { #0 } { #1 } if$
-}
-
-FUNCTION { ge }
-{
-  %% test whether first number is greater than or equal to second number
-  %% stack in:  n1 n2
-  %% stack out: if n1 >= n2 then 1 else 0
-
-  %% "DEBUG: ge " cite$ * warning$
-  < { #0 } { #1 } if$
-}
-
-FUNCTION { is.leading.digit }
-{
-  %% test whether first character of string is a digit
-  %% stack in:  string
-  %% stack out: if first-char-is-digit then 1 else 0
-
-  #1 #1 substring$                      % replace string by string[1:1]
-  duplicate$                            % string[1:1] string[1:1]
-  chr.to.int$
-  "0" chr.to.int$ swap$ le              % "0" <= string[1:1] --> 0-or-1
-  swap$                                 % 0-or-1 string[1:1]
-  chr.to.int$
-  "9" chr.to.int$ le                    % string[1:1} <= "9" --> 0-or-1
-  and
-}
-
-FUNCTION { skip.digits }
-{
-  %% skip over leading digits in string
-  %% stack in:  string
-  %% stack out: rest-of-string leading-digits
-
-  duplicate$
-  't :=
-  't.org :=
-  "" 'u :=
-
-  { t text.length$ }
-  {
-    %% "=================DEBUG: skip.digits   t = [" t * "]" * warning$
-    t is.leading.digit
-      { t #2 t text.length$ #1 - substring$ }
-      {
-        t 'u :=
-        ""
-      }
-    if$
-    't :=
-  }
-  while$
-
-  u                                                             % rest of string
-  t.org #1 t.org text.length$ u text.length$ - substring$       % leading digits
-}
-
-FUNCTION { skip.nondigits }
-{
-  %% skip over leading nondigits in string
-  %% stack in:  string
-  %% stack out: rest-of-string
-
-  't :=
-  "" 'u :=
-
-  { t text.length$ }
-  {
-    t is.leading.digit
-      {
-        t 'u :=
-        ""
-      }
-      { t #2 t text.length$ #1 - substring$ }
-    if$
-    't :=
-  }
-  while$
-
-  u                     % rest of string
-}
-
-FUNCTION { parse.next.number }
-{
-  %% stack in:  string
-  %% stack out: rest-of-string next-numeric-part-of-string
-  %% Example:
-  %% stack in:  "123:1--123:59"
-  %% stack out: ":1--123:59" "123"
-
-  's :=
-  s skip.nondigits 's :=
-  s skip.digits
-}
-
-FUNCTION { reduce.pages.to.page.count }
-{
-  %% Stack in:  arbitrary-and-unused
-  %% Stack out: unchanged
-  %%
-  %% For the new-style pagination with article number and numpages or
-  %% pages, we expect to have BibTeX entries containing something like
-  %%     articleno = "17",
-  %%     pages     = "1--23",
-  %% with output "Article 17, 23 pages",
-  %% or
-  %%     articleno = "17",
-  %%     numpages  = "23",
-  %% with output "Article 17, 23 pages",
-  %% or
-  %%     articleno = "17",
-  %%     pages     = "17:1--17:23",
-  %% with output "Article 17, 23 pages",
-  %%
-  %% If articleno is missing or empty, then we should output "1--23",
-  %% "23" (with a warning of a missing articleno), or "17:1--17:23",
-  %% respectively.
-
-  %% "DEBUG: enter reduce.pages.to.page.count " cite$ * warning$
-
-  %% "DEBUG: pages = [" pages * "]" * warning$
-
-  pages
-  parse.next.number 'p1 :=
-  parse.next.number 'p2 :=
-  parse.next.number 'p3 :=
-  parse.next.number 'page.count :=
-
-  duplicate$
-  empty.or.unknown
-    {  }
-    {
-      duplicate$ "unexpected trailing garbage [" swap$ *
-      "] after n:p1--n:p2 in pages = [" *
-      pages *
-      "] in " *
-      cite$ *
-      warning$
-    }
-  if$
-
-  pop$
-
-  %% "DEBUG: reduce.pages.to.page.count: "
-  %% " p1 = " p1 * *
-  %% " p2 = " p2 * *
-  %% " p3 = " p3 * *
-  %% " p4 = " page.count * *
-  %% " in " cite$ * * warning$
-
-  p1 p3 =   p2 "1" =   and   numpages empty.or.unknown   and
-    { "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$ }
-    {
-      numpages empty.or.unknown
-        { pages }
-        { numpages }
-      if$
-      'page.count :=
-    }
-  if$
-
-  p1 "1" =   p3 empty.or.unknown   and   numpages empty.or.unknown   and
-    {
-      p2 'page.count :=
-      "INFO: reduced pages = [" pages * "] to numpages = [" * page.count * "]" * warning$
-    }
-    {
-      numpages empty.or.unknown
-        { pages }
-        { numpages }
-      if$
-      'page.count :=
-    }
-  if$
-
-  %% "DEBUG: leave reduce.pages.to.page.count " cite$ * warning$
-}
-
-FUNCTION { new.block.checkb }
-{ % issue a new.block only if at least one of top two stack strings is not empty
-  empty.or.unknown
-  swap$ empty.or.unknown
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION { field.or.null }
-{ % convert empty value to null string, else return value
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION { emphasize }
-{ % emphasize a non-empty top string on the stack (WITHOUT italic correction)
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{\em " swap$ * "}" * }
-  if$
-}
-
-FUNCTION { emphasize.with.italic.correction }
-{ % convert empty string to null string, or emphasize with a trailing italic correction
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{\em " swap$ * "\/}" * }
-  if$
-}
-
-FUNCTION { comma }
-{ % convert empty string to null string, or brace string and add trailing comma
-  duplicate$ empty.or.unknown
-    { pop$ "" }
-    { "{" swap$ * "}," * }
-  if$
-}
-
-FUNCTION { format.names }
-{
-  % Format bibliographical entries with the first author last name first,
-  % and subsequent authors with initials followed by last name.
-  % All names are formatted in this routine.
-
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 =
-        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
-        %NO: BAD ORDER: {"{" s nameptr "{ff~}{ll}{, jj}{, vv}" format.name$ * "}" * 't := }
-        {"{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
-        {"{" s nameptr "{ff }{vv }{ll}{, jj}" format.name$ * "}" * 't := }
-      if$
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "{\sc others}" =
-                { " {et~al\mbox{.}}" * } % jrh: avoid spacing problems
-                { " {and} " * t * } % from Chicago Manual of Style
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-}
-
-FUNCTION { my.full.label }
-{
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-
-    { s nameptr "{vv~}{ll}" format.name$ 't :=  % get the next name
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "others" =
-                { " et~al\mbox{.}" * } % jrh: avoid spacing problems
-                { " and " * t * } % from Chicago Manual of Style
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-
-}
-
-FUNCTION { format.names.fml }
-{
-  % Format names in "familiar" format, with first initial followed by
-  % last name. Like format.names, ALL names are formatted.
-  % jtb: The names are NOT put in small caps
-
-  's :=
-  #1 'nameptr :=               % nameptr = 1;
-  s num.names$ 'numnames :=    % numnames = num.name$(s);
-  numnames 'namesleft :=
-    { namesleft #0 > }
-
-    {
-      "{" s nameptr "{ff~}{vv~}{ll}{, jj}" format.name$ * "}" * 't :=
-
-      nameptr #1 >
-        {
-          namesleft #1 >
-            { ", " * t * }
-            {
-              numnames #2 >
-                { "," * }
-                'skip$
-              if$
-              t "{others}" =
-                { " {et~al\mbox{.}}" * }
-                { " {and} " * t * }
-              if$
-            }
-          if$
-        }
-        't
-      if$
-      nameptr #1 + 'nameptr :=          % nameptr += 1;
-      namesleft #1 - 'namesleft :=      % namesleft =- 1;
-    }
-  while$
-}
-
-FUNCTION { format.authors }
-{
-  author empty.or.unknown
-    { "" }
-    { author format.names add.period$} % jtb: add period if none before
-  if$
-}
-
-FUNCTION { format.key }
-{
-  empty.or.unknown
-    { key field.or.null }
-    { "" }
-  if$
-}
-
-FUNCTION { format.no.key }
-{
-  empty.or.unknown
-    { "" }
-    { "" }
-  if$
-}
-
-FUNCTION { format.editors.fml }
-{
-  % Format editor names for use in the "in" types: inbook, incollection,
-  % inproceedings: first initial, then last names. When editors are the
-  % LABEL for an entry, then format.editor is used which lists editors
-  % by last name first.
-
-  editor empty.or.unknown
-    { "" }
-    {
-      editor format.names.fml editor num.names$ #1 >
-        { " (Eds.)" * }
-        { " (Ed.)" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.editors }
-{ % format editor names for use in labels, last names first.
-  editor empty.or.unknown
-    { "" }
-    {
-      editor format.names
-      editor num.names$ #1 >
-        { " (Eds.)." * }
-        { " (Ed.)." * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.articletitle }
-{
-  title empty.or.unknown
-    { "" }
-    % Use this to preserve lettercase in titles:
-    { "\showarticletitle{" title * "}" * }
-    % Use this for downcase title style:
-    % { \showarticletitle{" title "t" change.case$ * "}" * }
-  if$
-}
-
-FUNCTION { format.title }
-{
-  title empty.or.unknown
-    { "" }
-    % Use this to preserve lettercase in titles:
-    { title }
-    % Use this for downcase title style:
-    % { title "t" change.case$ }
-  if$
-}
-
-FUNCTION { n.dashify }
-{
-  't :=
-  ""
-    { t empty.or.unknown not }
-    {
-      t #1 #1 substring$ "-" =
-        {
-          t #1 #2 substring$ "--" = not
-            { "--" *
-              t #2 global.max$ substring$ 't :=
-            }
-            {
-              { t #1 #1 substring$ "-" = }
-              {
-                "-" *
-                t #2 global.max$ substring$ 't :=
-              }
-              while$
-            }
-          if$
-        }
-        {
-          t #1 #1 substring$ *
-          t #2 global.max$ substring$ 't :=
-        }
-      if$
-    }
-  while$
-}
-
-FUNCTION { format.btitle }
-{
-  edition empty.or.unknown
-  { title emphasize }
-  { title empty.or.unknown
-    { title emphasize } % jtb: what is this supposed to do ?!?
-    { "{\em " title * "\/} (" * edition "l" change.case$ * " ed.)" * } % jtb: no parens for ed.
-    if$
-  }
-  if$
-}
-
-FUNCTION { format.emphasize.booktitle }
-{ % push "" or "{\em booktitle}" or "{\em booktitle}, (second ed.)" on stack
-  edition empty.or.unknown
-    { booktitle emphasize }
-    { booktitle empty.or.unknown
-      { "" }
-      { "{\em " booktitle * "} (" * edition "l" change.case$ * " ed.)" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.city }
-{
-  % jtb: if the preceding string (the title of the conference) is non-empty,
-  % jtb: append the location, otherwise leave empty (so as to trigger the
-  % jtb: error message in output.check
-
-  duplicate$ empty.or.unknown
-    { }
-    {
-      city empty.or.unknown
-        {
-          date empty.or.unknown
-            { }
-            { " (" * date * ")" * }
-          if$
-        }
-        {
-          date empty.or.unknown
-            { " (" * city * ")" * }
-            { " (" * city * ", " * date * ")" * }
-          if$
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION { tie.or.space.connect }
-{
-  duplicate$ text.length$ #3 <
-    { "~" }
-    { " " }
-  if$
-  swap$ * *
-}
-
-FUNCTION { either.or.check }
-{
-  empty.or.unknown
-    'pop$
-    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
-  if$
-}
-
-FUNCTION { format.bvolume }
-{
-  % jtb: If there is a series, this is added and the volume trails after it.
-  % jtb: Otherwise, "Vol" is Capitalized.
-
-  volume empty.or.unknown
-    { "" }
-    {
-      series empty.or.unknown
-        { "Vol." volume tie.or.space.connect}
-        { series ", " * "Vol." volume tie.or.space.connect *}
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION { format.bvolume.noseries }
-{
-  volume empty.or.unknown
-    { "" }
-    {
-      series empty.or.unknown
-        { "Vol." volume tie.or.space.connect}
-        { "Vol." volume tie.or.space.connect}
-%        { series ", " * "Vol." volume tie.or.space.connect *}
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION { format.series }
-{
-  series empty.or.unknown
-    {""}
-    {" {\em (" * series ")}" *}
-  if$
-}
-
-FUNCTION { format.number.series }
-{
-  volume empty.or.unknown
-    {
-      number empty.or.unknown
-        {
-          volume empty.or.unknown
-          { "" }
-          {
-            series empty.or.unknown
-              { "" }
-              { " (" series * ")" * }
-            if$
-          }
-          if$
-        }                                       %    { series field.or.null }
-        {
-          output.state mid.sentence =
-            { "Number" }                        % gnp - changed to mixed case always
-            { "Number" }
-          if$
-          number tie.or.space.connect series empty.or.unknown
-            { "there's a number but no series in " cite$ * warning$ }
-            { " in " * series * }
-          if$
-        }
-      if$
-    }
-    {
-      ""
-    }
-  if$
-}
-
-FUNCTION { multi.page.check }
-{
-  't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty.or.unknown not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
-    { #1 'multiresult := }
-    { t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION { format.pages }
-{
-  pages empty.or.unknown
-    { "" }
-    {
-      pages multi.page.check
-        { pages n.dashify } % gnp - removed () % jtb: removed pp.
-        { pages }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.pages.check.without.articleno }
-{ %% format pages field only if articleno is absent
-  %% Stack out: pages-specification
-  numpages missing$ pages missing$ and
-    { "page numbers missing in both pages and numpages fields in " cite$ * warning$ }
-    { }
-  if$
-
-  articleno empty.or.unknown
-    {
-      pages missing$
-        { numpages }
-        { format.pages }
-      if$
-    }
-    { "" }
-  if$
-}
-
-FUNCTION { format.pages.check }
-{
-  pages empty.or.unknown
-    { "page numbers missing in " cite$ * warning$ "" }
-    { pages n.dashify }
-  if$
-}
-
-FUNCTION { format.bookpages }
-{
-  bookpages empty.or.unknown
-    { "" }
-    { bookpages "book pages" tie.or.space.connect }
-  if$
-}
-
-FUNCTION { format.named.pages }
-{
-  pages empty.or.unknown
-    { "" }
-    { format.pages "pages" tie.or.space.connect }
-  if$
-}
-
-%
-% Changed by Boris Veytsman, 2011-03-13
-% Now the word "pages" is printed even if
-% there field pages is not empty.
-%
-
-FUNCTION { format.page.count }
-{
-  page.count empty.or.unknown
-    { "" }
-    {
-      articleno empty.or.unknown
-        { "numpages field, but no articleno field, in " cite$ * warning$ }
-        { }
-      if$
-      page.count "pages" tie.or.space.connect
-    }
-  if$
-}
-
-FUNCTION { format.articleno.numpages }
-{
-  %% There are seven possible outputs, depending on which fields are set.
-  %%
-  %% These four are handled here:
-  %%
-  %%     articleno, numpages, pages     -> "Article articleno-value, numpages-value pages"
-  %%     articleno, numpages            -> "Article articleno-value, numpages-value pages"
-  %%     articleno, pages               -> "Article articleno-value, reduced-pages-value pages"
-  %%     articleno                      -> "Article articleno-value" and warn about missing numpages
-  %%
-  %% The remaining three have already been handled by
-  %% format.pages.check.without.articleno:
-  %%
-  %%     numpages, pages                -> "pages-value"
-  %%     numpages                       -> "numpages-value"
-  %%     pages                          -> "pages-value"
-
-  articleno empty.or.unknown
-    {
-      numpages empty.or.unknown
-        { }
-        { "require articleno with numpages field in " cite$ * warning$ }
-      if$
-      ""
-    }
-    {
-      numpages empty.or.unknown
-        {
-          pages empty.or.unknown
-            {
-              "require pages or numpages fields with articleno field in " cite$ * warning$
-              "" 'page.count :=
-            }
-            { reduce.pages.to.page.count }
-          if$
-        }
-        { numpages 'page.count := }
-      if$
-
-      %% The Article number is now handled in format.day.month.year because
-      %% ACM prefers the style "Digital Libraries 12, 3, Article 5 (July 2008)"
-      %% over "Digital Libraries 12, 3 (July 2008), Article 5"
-      %% format.articleno output
-      format.page.count
-    }
-  if$
-}
-
-FUNCTION { format.journal.volume.number.day.month.year }
-{
-  % By Young (and Spencer)
-  % GNP - fixed bugs with missing volume, number, and/or pages
-  %
-  % Format journal, volume, number, pages for article types.
-  %
-  journal empty.or.unknown
-    { "no journal in " cite$ * warning$
-      "" }
-%    { journal emphasize.with.italic.correction }
-     {
-           journal "Journal of the ACM" =
-       { "{\it J. ACM}" }
-       {
-           journal "American Mathematical Society Translations" =
-       { "{\it Amer. Math. Soc. Transl.}" }
-       {
-           journal "Bulletin of the American Mathematical Society" =
-       { "{\it Bull. Amer. Math. Soc.}" }
-       {
-           journal "Proceedings of the American Mathematical Society" =
-       { "{\it Proc. Amer. Math. Soc.}" }
-       {
-           journal "Transactions of the American Mathematical Society" =
-       { "{\it Trans. Amer. Math. Soc.}" }
-       {
-           journal "Communications of the {ACM}" =
-       { "{\it Commun. {ACM}}" }
-       {
-           journal "{ACM} Computing Surveys" =
-       { "{\it Comput. Surveys}" }
-       {
-           journal "{ACM} Transactions on Mathematical Software" =
-       { "{\it {ACM} Trans. Math. Software}" }
-       {
-           journal "{ACM} {SIGNUM} Newsletter" =
-       { "{\it {ACM} {SIGNUM} Newslett.}" }
-       {
-           journal "American Journal of Sociology" =
-       { "{\it Amer. J. Sociology}" }
-       {
-           journal "Journal of the American Statistical Association" =
-       { "{\it J. Amer. Statist. Assoc.}" }
-       {
-           journal "Applied Mathematics and Computation" =
-       { "{\it Appl. Math. Comput.}" }
-       {
-           journal "American Mathematical Monthly" =
-       { "{\it Amer. Math. Monthly}" }
-       {
-           journal "British Journal of Mathematical and Statistical Psychology" =
-       { "{\it Brit. J. Math. Statist. Psych.}" }
-       {
-           journal "Canadian Mathematical Bulletin" =
-       { "{\it Canad. Math. Bull.}" }
-       {
-           journal "Journal of Computational and Applied Mathematics" =
-       { "{\it J. Comput. Appl. Math.}" }
-       {
-           journal "Journal of Computational Physics" =
-       { "{\it J. Comput. Phys.}" }
-       {
-           journal "Computers and Structures" =
-       { "{\it Comput. \& Structures}" }
-       {
-           journal "The Computer Journal" =
-       { "{\it Comput. J.}" }
-       {
-           journal "Journal of Computer and System Sciences" =
-       { "{\it J. Comput. System Sci.}" }
-       {
-           journal "Contemporary Mathematics" =
-       { "{\it Contemp. Math.}" }
-       {
-           journal "Crelle's Journal" =
-       { "{\it Crelle's J.}" }
-       {
-           journal "Giornale di Mathematiche" =
-       { "{\it Giorn. Mat.}" }
-       {
-           journal "{IEEE} Transactions on Computers" =
-       { "{\it {IEEE} Trans. Comput.}" }
-       {
-           journal "{IEEE} Transactions on Automatic Control" =
-       { "{\it {IEEE} Trans. Automat. Control}" }
-       {
-           journal "Proceedings of the {IEEE}" =
-       { "{\it Proc. {IEEE}}" }
-       {
-           journal "{IEEE} Transactions on Aerospace and Electronic Systems" =
-       { "{\it {IEEE} Trans. Aerospace Electron. Systems}" }
-       {
-           journal "{IMA} Journal of Numerical Analysis" =
-       { "{\it {IMA} J. Numer. Anal.}" }
-       {
-           journal "Information Processing Letters" =
-       { "{\it Inform. Process. Lett.}" }
-       {
-           journal "Journal of the Institute of Mathematics and its Applications" =
-       { "{\it J. Inst. Math. Appl.}" }
-       {
-           journal "International Journal of Control" =
-       { "{\it Internat. J. Control}" }
-       {
-           journal "International Journal for Numerical Methods in Engineering" =
-       { "{\it Internat. J. Numer. Methods Engrg.}" }
-       {
-           journal "International Journal of Supercomputing Applications" =
-       { "{\it Internat. J. Supercomputing Applic.}" }
-       {
-           journal "Journal of Research of the National Bureau of Standards" =
-       { "{\it J. Res. Nat. Bur. Standards}" }
-       {
-           journal "Linear Algebra and its Applications" =
-       { "{\it Linear Algebra Appl.}" }
-       {
-           journal "Journal of Mathematical Analysis and Applications" =
-       { "{\it J. Math. Anal. Appl.}" }
-       {
-           journal "Mathematische Annalen" =
-       { "{\it Math. Ann.}" }
-       {
-           journal "Journal of Mathematical Physics" =
-       { "{\it J. Math. Phys.}" }
-       {
-           journal "Mathematics of Computation" =
-       { "{\it Math. Comp.}" }
-       {
-           journal "Mathematica Scandinavica" =
-       { "{\it Math. Scand.}" }
-       {
-           journal "Mathematical Tables and Other Aids to Computation" =
-       { "{\it Math. Tables Aids Comput.}" }
-       {
-           journal "Numerische Mathematik" =
-       { "{\it Numer. Math.}" }
-       {
-           journal "Pacific Journal of Mathematics" =
-       { "{\it Pacific J. Math.}" }
-       {
-           journal "Journal of Parallel and Distributed Computing" =
-       { "{\it J. Parallel and Distrib. Comput.}" }
-       {
-           journal "Parallel Computing" =
-       { "{\it Parallel Comput.}" }
-       {
-           journal "Philosophical Magazine" =
-       { "{\it Philos. Mag.}" }
-       {
-           journal "Proceedings of the National Academy of Sciences of the USA" =
-       { "{\it Proc. Nat. Acad. Sci. U. S. A.}" }
-       {
-           journal "Quarterly Journal of Mathematics, Oxford, Series (2)" =
-       { "{\it Quart. J. Math. Oxford Ser. (2)}" }
-       {
-           journal "Quarterly of Applied Mathematics" =
-       { "{\it Quart. Appl. Math.}" }
-       {
-           journal "Review of the International Statisical Institute" =
-       { "{\it Rev. Inst. Internat. Statist.}" }
-       {
-           journal "Journal of the Society for Industrial and Applied Mathematics" =
-       { "{\it J. Soc. Indust. Appl. Math.}" }
-       {
-           journal "Journal of the Society for Industrial and Applied Mathematics, Series B, Numerical Analysis" =
-       { "{\it J. Soc. Indust. Appl. Math. Ser. B Numer. Anal.}" }
-       {
-           journal "{SIAM} Journal on Algebraic and Discrete Methods" =
-       { "{\it {SIAM} J. Algebraic Discrete Methods}" }
-       {
-           journal "{SIAM} Journal on Applied Mathematics" =
-       { "{\it {SIAM} J. Appl. Math.}" }
-       {
-           journal "{SIAM} Journal on Computing" =
-       { "{\it {SIAM} J. Comput.}" }
-       {
-           journal "{SIAM} Journal on Matrix Analysis and Applications" =
-       { "{\it {SIAM} J. Matrix Anal. Appl.}" }
-       {
-           journal "{SIAM} Journal on Numerical Analysis" =
-       { "{\it {SIAM} J. Numer. Anal.}" }
-       {
-           journal "{SIAM} Review" =
-       { "{\it {SIAM} Rev.}" }
-       {
-           journal "{SIAM} Journal on Scientific and Statistical Computing" =
-       { "{\it {SIAM} J. Sci. Statist. Comput.}" }
-       {
-           journal "Software Practice and Experience" =
-       { "{\it Software Prac. Experience}" }
-       {
-           journal "Statistical Science" =
-       { "{\it Statist. Sci.}" }
-       {
-           journal "{USSR} Computational Mathematics and Mathematical Physics" =
-       { "{\it {U. S. S. R.} Comput. Math. and Math. Phys.}" }
-       {
-           journal "Journal of {VLSI} and Computer Systems" =
-       { "{\it J. {VLSI} Comput. Syst.}" }
-       {
-           journal "Zeitschrift fur Angewandte Mathematik und Mechanik" =
-       { "{\it Z. Angew. Math. Mech.}" }
-       {
-           journal "Zeitschrift fur Angewandte Mathematik und Physik" =
-       { "{\it Z. Angew. Math. Phys.}" }
-       {
-           journal "ACM Computing Surveys" =
-       { "{\it Comput. Surveys}" }
-       {
-           journal "ACM Transactions on Mathematical Software" =
-       { "{\it ACM Trans. Math. Software}" }
-       {
-           journal "ACM {SIGNUM} Newsletter" =
-       { "{\it ACM {SIGNUM} Newslett.}" }
-       {
-           journal "IEEE Transactions on Computers" =
-       { "{\it IEEE Trans. Comput.}" }
-       {
-           journal "IEEE Transactions on Automatic Control" =
-       { "{\it IEEE Trans. Automat. Control}" }
-       {
-           journal "Proceedings of the IEEE" =
-       { "{\it Proc. IEEE}" }
-       {
-           journal "IEEE Transactions on Aerospace and Electronic Systems" =
-       { "{\it IEEE Trans. Aerospace Electron. Systems}" }
-       {
-           journal "IMA Journal of Numerical Analysis" =
-       { "{\it IMA J. Numer. Anal.}" }
-       {
-           journal "SIAM Journal on Algebraic and Discrete Methods" =
-       { "{\it SIAM J. Algebraic Discrete Methods}" }
-       {
-           journal "SIAM Journal on Applied Mathematics" =
-       { "{\it SIAM J. Appl. Math.}" }
-       {
-           journal "SIAM Journal on Computing" =
-       { "{\it SIAM J. Comput.}" }
-       {
-           journal "SIAM Journal on Matrix Analysis and Applications" =
-       { "{\it SIAM J. Matrix Anal. Appl.}" }
-       {
-           journal "SIAM Journal on Numerical Analysis" =
-       { "{\it SIAM J. Numer. Anal.}" }
-       {
-           journal "SIAM Review" =
-       { "{\it SIAM Rev.}" }
-       {
-           journal "SIAM Journal on Scientific and Statistical Computing" =
-       { "{\it SIAM J. Sci. Statist. Comput.}" }
-       {
-           journal "USSR Computational Mathematics and Mathematical Physics" =
-       { "{\it U. S. S. R. Comput. Math. and Math. Phys.}" }
-       {
-           journal "Journal of VLSI and Computer Systems" =
-       { "{\it J. VLSI Comput. Syst.}" }
-       {
-           journal "Communications of the ACM" =
-       { "{\it Commun. ACM}" }
-       %% If no match with cases needing special handling, just output journal name
-       {  journal emphasize.with.italic.correction  }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-           }
-     if$
-         }
-    if$
-
-  number empty.or.unknown
-    {
-      volume empty.or.unknown
-        { "no number and no volume in " cite$ * warning$ "" * }
-        { " " * " {" * volume * "}" * }
-      if$
-    }
-    {
-      volume empty.or.unknown
-        {
-          "unusual to have number, but no volume, for " cite$ * warning$
-          " " * number *
-        }
-        { " " * volume comma " " * number * * }
-      if$
-    }
-  if$
-
-  format.day.month.year *
-}
-
-FUNCTION { format.chapter.pages }
-{
-  chapter empty.or.unknown
-    'format.pages
-    { type empty.or.unknown
-        { "Chapter" } % gnp - changed to mixed case
-        { type "t" change.case$ }
-      if$
-      chapter tie.or.space.connect
-      pages empty.or.unknown
-        {"page numbers missing in " cite$ * warning$} % gnp - added check
-        { ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.in.emphasize.booktitle }
-{ % jtb: format for collections or proceedings not appearing in a journal
-  booktitle empty.or.unknown
-  { "" }
-  { "In " format.emphasize.booktitle * }
-  if$
-}
-
-FUNCTION { format.in.booktitle }
-{ % jtb: format for proceedings appearing in a journal
-  booktitle empty.or.unknown
-  { "" }
-  { "In " booktitle * }
-  if$
-}
-
-FUNCTION { format.in.ed.booktitle }
-{
-  booktitle empty.or.unknown
-  { "" }
-  { editor empty.or.unknown
-    { "In " format.emphasize.booktitle * }
-                % jtb: swapped editor location
-    { "In " format.emphasize.booktitle * ", " * format.editors.fml * }
-    if$
-  }
-  if$
-}
-
-FUNCTION { format.thesis.type }
-{ % call with default type on stack top
-  type empty.or.unknown
-    'skip$    % use default type
-    {
-      pop$    % discard default type
-      % NO: it is silly to have to brace protect every degree type!:  type "t" change.case$
-      type
-    }
-  if$
-}
-
-FUNCTION { format.tr.number }
-{
-  type empty.or.unknown
-    { "Tech. Rep." }
-    'type
-  if$
-  number empty.or.unknown
-    { "t" change.case$ }
-    %% LOOKS BAD: { "." * number tie.or.space.connect }
-    %% Prefer "Research report RJ687." to "Research report. RJ687."
-    { number tie.or.space.connect }
-  if$
-}
-
-FUNCTION { format.advisor }
-{
-  advisor empty.or.unknown
-    { "" }
-    { "Advisor(s) " advisor * }
-  if$
-}
-
-FUNCTION { format.article.crossref }
-{ "See"
-  "\cite{" * crossref * "}" *
-}
-
-FUNCTION { format.crossref.editor }
-{
-  editor #1 "{vv~}{ll}" format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { pop$ " et~al\mbox{.}" * }         % jrh: avoid spacing problems
-    { #2 <
-    'skip$
-    { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-        { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
-        { " and " * editor #2 "{vv~}{ll}" format.name$ * }
-      if$
-    }
-      if$
-    }
-  if$
-}
-
-FUNCTION { format.book.crossref }
-{
-  volume empty.or.unknown
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
-      "In "
-    }
-    { "Volume" volume tie.or.space.connect % gnp - changed to mixed case
-      " of " *
-    }
-  if$
-  editor empty.or.unknown
-  editor field.or.null author field.or.null =
-  or
-    { key empty.or.unknown
-    { series empty.or.unknown
-        { "need editor, key, or series for " cite$ * " to crossref " *
-          crossref * warning$
-          "" *
-        }
-        { "{\em " * series * "\/}" * }
-      if$
-    }
-    { key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION { format.incoll.inproc.crossref }
-{ "See"
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION { format.lab.names }
-{
-  % format.lab.names:
-  %
-  % determines "short" names for the abbreviated author information.
-  % "Long" labels are created in calc.label, using the routine my.full.label
-  % to format author and editor fields.
-  %
-  % There are 4 cases for labels.   (n=3 in the example)
-  % a) one author             Foo
-  % b) one to n               Foo, Bar and Baz
-  % c) use of "and others"    Foo, Bar et al.
-  % d) more than n            Foo et al.
-
-  's :=
-  s num.names$ 'numnames :=
-  numnames #2 >    % change number to number of others allowed before
-                   % forcing "et al".
-    { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * } % jrh: \mbox{} added
-    {
-      numnames #1 - 'namesleft :=
-      #2 'nameptr :=
-      s #1 "{vv~}{ll}" format.name$
-        { namesleft #0 > }
-        { nameptr numnames =
-            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-                { " et~al\mbox{.}" * }          % jrh: avoid spacing problems
-                { " and " * s nameptr "{vv~}{ll}" format.name$ * }
-              if$
-            }
-            { ", " * s nameptr "{vv~}{ll}" format.name$ * }
-          if$
-          nameptr #1 + 'nameptr :=
-          namesleft #1 - 'namesleft :=
-        }
-      while$
-    }
-  if$
-}
-
-FUNCTION { author.key.label }
-{
-  author empty.or.unknown
-    { key empty.or.unknown
-          { "no key, author in " cite$ * warning$
-            cite$ #1 #3 substring$ }
-         'key
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { author.key.organization.label }
-{ % added - gnp. Provide label formatting by organization if author is null.
-  author empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "no key, author or organization in " cite$ * warning$
-              cite$ #1 #3 substring$ }
-            'key
-          if$
-        }
-        { organization }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { editor.key.organization.label }
-{ % added - gnp. Provide label formatting by organization if editor is null.
-  editor empty.or.unknown
-    { organization empty.or.unknown
-        { key empty.or.unknown
-            { "no key, editor or organization in " cite$ * warning$
-              cite$ #1 #3 substring$ }
-            'key
-          if$
-        }
-        { organization }
-      if$
-    }
-    { editor format.lab.names }
-  if$
-}
-
-FUNCTION { author.editor.key.label }
-{
-  author empty.or.unknown
-    { editor empty.or.unknown
-          { key empty.or.unknown
-               { "no key, author, or editor in " cite$ * warning$
-                 cite$ #1 #3 substring$ }
-             'key
-           if$
-         }
-          { editor format.lab.names }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION { calc.label }
-{
-  % Changed - GNP. See also author.organization.sort, editor.organization.sort
-  % Form label for BibTeX entry. The classification of which fields are used
-  % for which type of entry (book, inbook, etc.) are taken from alpha.bst.
-  % The change here from newapa is to also include organization as a
-  % citation label if author or editor is missing.
-
-  type$ "book" =
-  type$ "inbook" =
-  or
-  type$ "periodical" =
-  or
-    'author.editor.key.label
-    { type$ "proceedings" =
-        'editor.key.organization.label
-        { type$ "manual" =
-            'author.key.organization.label
-            'author.key.label
-          if$
-        }
-      if$
-    }
-  if$
-
-  author empty.or.unknown  % generate the full label citation information.
-    {
-      editor empty.or.unknown
-        {
-          organization empty.or.unknown
-            {
-              key empty.or.unknown
-                {
-                  "no author, editor, organization, or key in " cite$ * warning$
-                  "??"
-                }
-                { key }
-              if$
-            }
-            { organization }
-          if$
-        }
-        { editor my.full.label }
-      if$
-    }
-    { author my.full.label }
-  if$
-
-  % leave label on the stack, to be popped when required.
-
-  "}{" * swap$ * "}{" *
-  %  year field.or.null purify$ #-1 #4 substring$ *
-  %
-  % save the year for sort processing afterwards (adding a, b, c, etc.)
-  %
-  year field.or.null purify$ #-1 #4 substring$
-  'label.year :=
-}
-
-FUNCTION { output.bibitem }
-{
-  newline$
-  %% acmtrans.bst alphanumeric style:
-  %%: "\bibitem[\protect\citeauthoryear{" write$
-  %%: calc.label write$
-  %%: sort.year write$
-  %%: "}]%" writeln
-  %%: "        {" write$
-  %%: cite$ write$
-  %%: "}" writeln
-  %% acm-plain.bst numeric style:
-  newline$
-  "\bibitem{" write$
-  cite$ write$
-  "}" write$
-  newline$
-  ""
-  before.all 'output.state :=
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url }
-{ % enter and return with stack empty
-  %% We switch now from buffered output to output of complete lines, so
-  %% that the Issue .. URL data have their own lines, and are less likely
-  %% to be line-wrapped by BibTeX's short-sighted algorithm, which wraps
-  %% lines longer than 79 characters, backtracking to what it thinks is
-  %% a break point in the string.  Any such wrapping MUST be undone to
-  %% prevent percent-newline from appearing in DOIs and URLs.  The
-  %% output data are intentionally wrapped in \showxxx{} macros at
-  %% beginning of line, and that supply their own punctuation (if they
-  %% are not defined to suppress output entirely), to make it easier for
-  %% other software to recover them from .bbl files.
-  %%
-  %% It also makes it possible to later change the macro definitions
-  %% to suppress particular output values, or alter their appearance.
-  %%
-  %% Note that it is possible for theses, technical reports, and
-  %% manuals to have ISBNs, and anything that has an ISBN may also
-  %% have an ISSN.  When there are no values for these keys, there
-  %% is no output generated for them here.
-
-  "\newblock" writeln
-  after.block 'output.state :=
-
-  output.issue
-  output.isbn
-  output.coden  % CODEN is functionally like ISSN, so output them sequentially
-  output.issn
-  output.lccn
-  output.doi    % DOI is ALWAYS last according to CrossRef DOI documentation
-  output.url    % but ACM wants URL last
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url.note }
-{ % enter with stack empty, return with empty string on stack
-  output.issue.doi.coden.isxn.lccn.url
-  note empty.or.unknown
-    { }
-    {
-      "\newblock" writeln
-      output.note
-    }
-  if$
-  ""
-}
-
-FUNCTION { output.issue.doi.coden.isxn.lccn.url.note.check }
-{ % enter with stack empty, return with empty string on stack
-  output.issue.doi.coden.isxn.lccn.url
-  note empty.or.unknown
-    { }
-    {
-      "\newblock" writeln
-      output.note.check
-    }
-  if$
-  ""
-}
-
-FUNCTION { article }
-{
-  output.bibitem
-
-  author empty.or.unknown
-    {
-      editor empty.or.unknown
-        { "neither author and editor supplied for " cite$ * warning$ }
-        { format.editors "editor" output.check }
-      if$
-    }
-    { format.authors "author" output.check }
-  if$
-
-  author format.no.key output       % added
-  output.year.check                 % added
-  new.block
-  format.articletitle "title" output.check
-  new.block
-  howpublished output
-
-  crossref missing$
-    { format.journal.volume.number.day.month.year }
-    {
-      "cross reference in @Article{...} is unusual" warning$
-      format.article.crossref output.nonnull
-    }
-  if$
-  output
-
-  format.pages.check.without.articleno output
-  format.articleno.numpages output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { book }
-{
-  output.bibitem
-  author empty.or.unknown
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-        { "author and editor" editor either.or.check }
-        'skip$
-      if$
-    }
-  if$
-  output.year.check       % added
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { new.sentence              % jtb: start a new sentence for series/volume
-      format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check    % jtb: require address
-      fin.sentence
-      pages empty.or.unknown
-        { format.bookpages }    % use bookpages when pages empty
-        { format.pages.check "pages" tie.or.space.connect }
-      if$
-      output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { booklet }
-{
-  output.bibitem
-  format.authors output
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title "title" output.check
-  new.block
-  howpublished output
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { inbook }
-{
-  output.bibitem
-  author empty.or.unknown
-    { format.editors
-      "author and editor" output.check
-    }
-    { format.authors output.nonnull
-      crossref missing$
-    { "author and editor" editor either.or.check }
-    'skip$
-      if$
-    }
-  if$
-  output.year.check                 % added
-  new.block
-  format.btitle "title" output.check
-  crossref missing$
-    { new.sentence              % jtb: start a new sentence for series/volume
-      format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check    % jtb: require address
-      format.bookpages output
-      format.chapter.pages
-      "chapter and pages" output.check  % jtb: moved from before publisher
-    }
-    {
-      format.bookpages output
-      format.chapter.pages "chapter and pages" output.check
-      new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { incollection }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output       % added
-  output.year.check              % added
-  new.block
-  format.articletitle "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      new.sentence                % jtb: start a new sentence for series/volume
-      format.bvolume output
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address "address" output.check      % jtb: require address
-      format.bookpages output
-      format.chapter.pages output % gnp - was special.output.nonnull
-                                  % left out comma before page numbers
-                                  % jtb: moved from before publisher
-    }
-    {
-      format.incoll.inproc.crossref output.nonnull
-      format.chapter.pages output
-    }
-  if$
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { inproceedings }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output            % added
-  output.year.check                   % added
-  new.block
-  format.articletitle "title" output.check
-  howpublished output.dot.space
-  crossref missing$
-    {
-      journal missing$          % jtb: proceedings appearing in journals
-        { format.in.emphasize.booktitle format.city "booktitle"  output.check.dot.space
-          format.series output.removenospace
-          format.editors.fml output.dot.space
-          format.bvolume.noseries output
-          new.sentence
-          organization output
-          publisher "publisher" output.check % jtb: require publisher (?)
-          address "address" output.check  % jtb: require address
-          format.bookpages output
-        }
-        {
-          format.in.booktitle format.city "booktitle" output.check
-          format.editors.fml output
-          new.sentence
-          format.journal.volume.number.day.month.year output
-        }
-      if$
-      format.articleno output
-      format.pages.check.without.articleno output
-    }
-    {
-      format.incoll.inproc.crossref output.nonnull
-      format.articleno output
-      format.pages.check.without.articleno output
-    }
-  if$
-  format.articleno.numpages output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { conference } { inproceedings }
-
-FUNCTION { manual }
-{
-  output.bibitem
-  author empty.or.unknown
-    { editor empty.or.unknown
-      { organization "organization" output.check
-        organization format.key output }  % if all else fails, use key
-      { format.editors "author and editor" output.check }
-      if$
-    }
-    { format.authors output.nonnull }
-    if$
-  output.year.check                 % added
-  new.block
-  format.btitle "title" output.check
-  organization address new.block.checkb
-  % jtb: back to normal style: organization, address
-  organization "organization" output.check
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { mastersthesis }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
-  new.block
-  "M.S.\ thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  new.block
-  format.advisor output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { misc }
-{
-  output.bibitem
-  format.authors output
-  author format.key output            % added
-  output.year.check                   % added
-  title howpublished new.block.checkb
-  format.title output
-  new.block
-  howpublished output
-  "" output.nonnull.dot.space
-  output.day.month.year
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { phdthesis }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output          % added
-  output.year.check                 % added
-  new.block
-  format.title emphasize "title" output.check  % NB: ACM style requires emphasized thesis title
-  new.block
-  "Ph.D. thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  new.block
-  format.advisor output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION {format.date}
-{ year empty.or.unknown
-    { month empty.or.unknown
-        {
-          ""                    % output empty date if year/month both empty
-          day empty.or.unknown
-            {  }
-            { "there's a day but no month or year in " cite$ * warning$ }
-          if$
-        }
-        { "there's a month but no year in " cite$ * warning$
-          month
-          day empty.or.unknown
-            { }
-            { " " * day * }
-          if$
-        }
-      if$
-    }
-    { month empty.or.unknown
-        {
-          year                  % output only year if month empty
-          day empty.or.unknown
-            {  }
-            { "there's a day and year but no month in " cite$ * warning$ }
-          if$
-        }
-        {
-          month " " *
-          day empty.or.unknown
-            { }
-            { day * ", " * }
-          if$
-          year *
-        }
-      if$
-    }
-  if$
-}
-
-FUNCTION {new.block.checka}
-{
-  empty.or.unknown
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION { periodical }
-{
-  output.bibitem
-  editor empty.or.unknown
-    { organization output }
-    { format.editors output.nonnull }
-  if$
-  new.block
-  title emphasize "title" output.check
-  format.date output
-  new.sentence
-  publisher output
-  address output
-  howpublished new.block.checka
-  howpublished output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { proceedings }
-{
-  output.bibitem
-  editor empty.or.unknown
-    { organization output
-      organization format.key output }  % gnp - changed from author format.key
-    { format.editors output.nonnull }
-  if$
-  % author format.key output             % gnp - removed (should be either
-  %                                        editor or organization
-  output.year.check                    % added (newapa)
-  new.block
-  format.btitle format.city "title" output.check        % jtb: added city
-  new.sentence
-  format.bvolume output
-  format.number.series output
-  new.sentence
-  organization output
-  % jtb: normal order: publisher, address
-  publisher output
-  address output
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { techreport }
-{
-  output.bibitem
-  format.authors "author" output.check
-  author format.key output             % added
-  output.year.check                    % added
-  new.block
-  format.btitle "title" output.check
-  new.block
-  format.tr.number output               % jtb: moved month ...
-  institution "institution" output.check
-  address output
-  new.sentence
-  format.named.pages output
-  % ACM omits year at end in transactions style
-  % format.day.month.year output.nonnull.dot.space  % jtb: ... to here (no parens)
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note
-  fin.entry
-}
-
-FUNCTION { unpublished }
-{
-  output.bibitem
-  format.authors
-  "author" output.check
-  author format.key output              % added
-  output.year.check                     % added
-  new.block
-  format.title "title" output.check
-  fin.sentence
-  output.day.month.year                 % UTAH
-  fin.block
-  output.issue.doi.coden.isxn.lccn.url.note.check
-  fin.entry
-}
-
-FUNCTION { default.type } { misc }
-
-%%% ACM journal-style month definitions: full name if 1--5 letters, else
-%%% abbreviation of 3 or 4 characters and a dot
-
-MACRO {jan}             {"Jan."}
-
-MACRO {feb}             {"Feb."}
-
-MACRO {mar}             {"March"}
-
-MACRO {apr}             {"April"}
-
-MACRO {may}             {"May"}
-
-MACRO {jun}             {"June"}
-
-MACRO {jul}             {"July"}
-
-MACRO {aug}             {"Aug."}
-
-MACRO {sep}             {"Sept."}
-
-MACRO {oct}             {"Oct."}
-
-MACRO {nov}             {"Nov."}
-
-MACRO {dec}             {"Dec."}
-
-
-%%% ====================================================================
-%%%                 I M P O R T A N T   C H A N G E
-%%%
-%%% For the 2009 release of the official acm-*.bst files, there are to
-%%% be NO predefined journal abbreviations in those style files.
-%%%
-%%% ACM may later develop an official list of mappings of full journal
-%%% names of commonly-cited journals to ACM-preferred abbreviations, but
-%%% authors should consider that use of any of these commented-out
-%%% abbreviations is DEPRECATED unless the BibTeX file itself provides
-%%% its own @String{name = "value"} definitions.
-%%%
-%%% Use of journal (and publisher and address) @String{...}
-%%% abbreviations, as opposed to explicit value assignments such as
-%%% journal = "J. ACM" and publisher = "IEEE", is preferred in
-%%% bibliographic databases, because it makes it easier for journal
-%%% production staff to replace those definitions by publisher-preferred
-%%% abbreviations when articles are typeset for publication.
-%%%
-%%% For historical reasons, and because some of these abbreviations are
-%%% used in other (non-ACM) bibliography style files, they are preserved
-%%% here in comments.  Future releases of the acm*-.bst files are likely
-%%% to remove them entirely.
-%%% ====================================================================
-%%%
-%%% DEPRECATED: MACRO {acmcs}           {"ACM Comput. Surv."}                   % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acmlett}         {"ACM Lett. Program. Lang. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acta}            {"Acta Inf."}                           % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ai}              {"Artificial Intelligence"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {al}              {"Ada Lett."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {acr}             {"Adv. Comput. Res."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {bit}             {"Bit"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cacm}            {"Commun. ACM"}                         % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cj}              {"Comput. J."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cn}              {"Comput. Netw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {cl}              {"Comput. Lang."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ibmjrd}          {"IBM J. Res. and Development"}         % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ibmsj}           {"IBM Systems Journal"}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ict}             {"Inf. Contr."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieebcs}          {"IEE/BCS Softw. Eng. J."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieees}           {"IEEE Softw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeese}          {"IEEE Trans. Softw. Eng."}             % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetc}          {"IEEE Trans. Comput."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetcad}        {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetpds}        {"IEEE Trans. Parall. Distrib. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ieeetit}         {"IEEE Trans. Inf. Theory"}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ipl}             {"Inf. Process. Lett."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {icp}             {"Inf. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ist}             {"Inf. Softw. Tech."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ijsa}            {"Int. J. Supercomput. Appl."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ijpp}            {"Int. J. Parallel Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jacm}            {"J. ACM"}                              % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: % MACRO {jcss}          {"Journal of Computer and System Sciences"} % original BibTeX
-%%% DEPRECATED: MACRO {jcss}            {"J. Comput. Syst. Sci."}               % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlp}             {"J. Logic Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jfp}             {"J. Funct. Program."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jsmrp}           {"J. Softw. Maint. Res. Pract."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jss}             {"J. Syst. Softw."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlc}             {"J. Logic and Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {jlsc}            {"J. Lisp Symb. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {lpls}            {"Lett. Program. Lang. Syst."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mor}             {"Math. Oper. Res."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mscs}            {"Math. Struct. Comput. Sci."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {mst}             {"Math. Syst. Theor."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {ngc}             {"New Gen. Comput."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {scp}             {"Sci. Comput. Program."}               % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {sicomp}          {"SIAM J. Comput."}                     % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {spe}             {"Softw. Pract. Exper."}
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tocs}            {"ACM Trans. Comput. Syst."}            % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tods}            {"ACM Trans. Database Syst."}           % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tog}             {"ACM Trans. Graphics"}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toms}            {"ACM Trans. Math. Softw."}             % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toois}           {"ACM Trans. Office Inf. Syst."}        % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {toplas}          {"ACM Trans. Program. Lang. Syst."}     % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tcs}             {"Theor. Comput. Sci."}                 % original BibTeX
-%%% DEPRECATED:
-%%% DEPRECATED: MACRO {tr}              {"Tech. Rep."}
-%%% ====================================================================
-
-READ
-
-STRINGS { longest.label }
-
-INTEGERS { number.label longest.label.width }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
-  #1 'number.label :=
-  #0 'longest.label.width :=
-}
-
-FUNCTION {longest.label.pass}
-{ number.label int.to.str$ 'label :=
-  number.label #1 + 'number.label :=
-  label width$ longest.label.width >
-    { label 'longest.label :=
-      label width$ 'longest.label.width :=
-    }
-    'skip$
-  if$
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {longest.label.pass}
-
-FUNCTION { initialize.extra.label.stuff }
-{ #0 int.to.chr$ 'last.label :=
-  "" 'next.extra :=
-  #0 'last.extra.num :=
-}
-
-EXECUTE {initialize.extra.label.stuff}
-
-FUNCTION { begin.bib }
-{
-  %% Set to #0 show 13-digit ISBN in preference to 10-digit ISBN.
-  %% Set to #1 to show both 10-digit and 13-digit ISBNs.
-  #1 'show-isbn-10-and-13 :=
-
-  "%%% -*-BibTeX-*-" writeln
-  "%%% Do NOT edit. File created by BibTeX with style acmtrans-v2 [15-Nov-2008]." writeln
-  "" writeln
-
-  preamble$ empty.or.unknown
-    'skip$
-    { preamble$ writeln }
-  if$
-  "\begin{thebibliography}{" longest.label * "}" * writeln
-  ""                                                                         writeln
-  "%%% ====================================================================" writeln
-  "%%% NOTE TO THE USER: you can override these defaults by providing"       writeln
-  "%%% customized versions of any of these macros before the \bibliography"  writeln
-  "%%% command.  Each of them MUST provide its own final punctuation,"       writeln
-  "%%% except for \shownote{}, \showDOI{}, and \showURL{}.  The latter two"  writeln
-  "%%% do not use final punctuation, in order to avoid confusing it with"    writeln
-  "%%% the Web address."                                                     writeln
-  "%%%"                                                                      writeln
-  "%%% To suppress output of a particular field, define its macro to expand" writeln
-  "%%% to an empty string, or better, \unskip, like this:"                   writeln
-  "%%%"                                                                      writeln
-  "%%% \newcommand{\showDOI}[1]{\unskip}   % LaTeX syntax"                   writeln
-  "%%%"                                                                      writeln
-  "%%% \def \showDOI #1{\unskip}           % plain TeX syntax"               writeln
-  "%%%"                                                                      writeln
-  "%%% ====================================================================" writeln
-  ""                                                                         writeln
-
-  %% ACM publications do not use CODEN, ISSN, and LCCN data, so their default
-  %% macro wrappers expand to \unskip, discarding their values and unwanted
-  %% space.
-  %%
-  %% For other publications, prior definitions like these may be useful:
-  %%
-  %%     Plain TeX:
-  %%         \def \showCODEN     #1{CODEN #1.}
-  %%         \def \showISSN      #1{ISSN #1.}
-  %%         \def \showLCCN      #1{LCCN #1.}
-  %%
-  %%     LaTeX:
-  %%         \newcommand{\showCODEN}[1]{CODEN #1.}
-  %%         \newcommand{\showISSN}[1]#1{ISSN #1.}
-  %%         \newcommand{\showLCCN}[1]{LCCN #1.}
-
-  "\ifx \showCODEN    \undefined \def \showCODEN     #1{\unskip}     \fi" writeln
-  "\ifx \showDOI      \undefined \def \showDOI       #1{{\tt DOI:}\penalty0{#1}\ } \fi" writeln
-  % ACM styles omit ISBNs, but they can be included by suitable definitions of
-  % \showISBNx and \showISBNxiii before the .bbl file is read
-  "\ifx \showISBNx    \undefined \def \showISBNx     #1{\unskip}     \fi" writeln
-  "\ifx \showISBNxiii \undefined \def \showISBNxiii  #1{\unskip}     \fi" writeln
-  "\ifx \showISSN     \undefined \def \showISSN      #1{\unskip}     \fi" writeln
-  "\ifx \showLCCN     \undefined \def \showLCCN      #1{\unskip}     \fi" writeln
-  "\ifx \shownote     \undefined \def \shownote      #1{#1}          \fi" writeln % NB: final period supplied by add.period$ above
-  "\ifx \showarticletitle \undefined \def \showarticletitle #1{#1}   \fi" writeln
-  "\ifx \showURL      \undefined \def \showURL       #1{#1}          \fi" writeln
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION { end.bib }
-{
-  newline$
-  "\end{thebibliography}"
-  writeln
-}
-
-EXECUTE {end.bib}

Deleted: trunk/Master/texmf-dist/bibtex/bst/acmart/acmsiggraph.bst
===================================================================
--- trunk/Master/texmf-dist/bibtex/bst/acmart/acmsiggraph.bst	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/bibtex/bst/acmart/acmsiggraph.bst	2016-07-14 21:38:03 UTC (rev 41692)
@@ -1,1384 +0,0 @@
-%    'acmsiggraph.bst'
-%    ACM SIGGRAPH bibliography style 
-%    * based on "ACM Transactions bibliography style (24-Jan-88 version)"
-%      A lot like abbrv.bst, but names come out "Last, initials", and in \sc.
-%      Some dates are parenthesized.
-%    * the citation format -- [Jones 2001] -- is pulled from 'alpha.bst'
-%
-%    Version History
-%    * 07 Sept 2001: original version - Stephen Spencer (spencer at acm.org)
-%    * 22 Dec 2003: tweaked file for entry w/out year, removed "n. d." 
-%    * 28 Apr 2016: added doi
-%   
-%
-ENTRY
-  { address
-    author
-    booktitle
-    chapter
-    doi
-    edition
-    editor
-    howpublished
-    institution
-    journal
-    key
-    month
-    note
-    number
-    organization
-    pages
-    publisher
-    school
-    series
-    title
-    type
-    volume
-    year
-  }
-  {}
-  { label extra.label sort.label}
-
-INTEGERS { output.state before.all mid.sentence after.sentence after.block }
-
-FUNCTION {init.state.consts}
-{ #0 'before.all :=
-  #1 'mid.sentence :=
-  #2 'after.sentence :=
-  #3 'after.block :=
-}
-
-STRINGS { s t }
-
-FUNCTION {output.nonnull}
-{ 's :=
-  output.state mid.sentence =
-    { ", " * write$ }
-    { output.state after.block =
-	{ add.period$ write$
-	  newline$
-	  "\newblock " write$
-	}
-	{ output.state before.all =
-	    'write$
-	    { add.period$ " " * write$ }
-	  if$
-	}
-      if$
-      mid.sentence 'output.state :=
-    }
-  if$
-  s
-}
-
-FUNCTION {output}
-{ duplicate$ empty$
-    'pop$
-    'output.nonnull
-  if$
-}
-
-FUNCTION {output.check}
-{ 't :=
-  duplicate$ empty$
-    { pop$ "empty " t * " in " * cite$ * warning$ }
-    'output.nonnull
-  if$
-}
-
-FUNCTION {output.bibitem}
-{ newline$
-  "\bibitem[" write$
-  label write$
-  "]{" write$
-  cite$ write$
-  "}" write$
-  newline$
-  ""
-  before.all 'output.state :=
-}
-
-FUNCTION {fin.entry}
-{ add.period$
-  write$
-  newline$
-}
-
-FUNCTION {new.block}
-{ output.state before.all =
-    'skip$
-    { after.block 'output.state := }
-  if$
-}
-
-FUNCTION {new.sentence}
-{ output.state after.block =
-    'skip$
-    { output.state before.all =
-	'skip$
-	{ after.sentence 'output.state := }
-      if$
-    }
-  if$
-}
-
-FUNCTION {not}
-{   { #0 }
-    { #1 }
-  if$
-}
-
-FUNCTION {and}
-{   'skip$
-    { pop$ #0 }
-  if$
-}
-
-FUNCTION {or}
-{   { pop$ #1 }
-    'skip$
-  if$
-}
-
-FUNCTION {new.block.checka}
-{ empty$
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {new.block.checkb}
-{ empty$
-  swap$ empty$
-  and
-    'skip$
-    'new.block
-  if$
-}
-
-FUNCTION {field.or.null}
-{ duplicate$ empty$
-    { pop$ "" }
-    'skip$
-  if$
-}
-
-FUNCTION {emphasize}
-{ duplicate$ empty$
-    { pop$ "" }
-    { "{\em " swap$ * "}" * }
-  if$
-}
-
-FUNCTION {emphasizeic}
-{ duplicate$ empty$
-    { pop$ "" }
-    { "{\em " swap$ * "\/}" * }
-  if$
-}
-
-FUNCTION {scapify}
-{ duplicate$ empty$
-    { pop$ "" }
-    { "{\sc " swap$ * "}" * }
-  if$
-}
-
-INTEGERS { nameptr namesleft numnames }
-
-FUNCTION {format.names}
-{ 's :=
-  #1 'nameptr :=
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=
-      nameptr #1 >
-	{ namesleft #1 >
-	    { ", " * t * }
-	    { t "others" =
-		{ ", et~al." * }
-		{ ", and " * t * }
-	      if$
-	    }
-	  if$
-	}
-	't
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-% For names inside entries (e.g., editors of an "In ...");
-% this is exactly ABBRV.BST's `format.names' function.
-FUNCTION {format.innames}
-{ 's :=
-  #1 'nameptr :=
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
-      nameptr #1 >
-	{ namesleft #1 >
-	    { ", " * t * }
-	    { numnames #2 >
-		{ "," * }
-		'skip$
-	      if$
-	      t "others" =
-		{ " et~al." * }
-		{ " and " * t * }
-	      if$
-	    }
-	  if$
-	}
-	't
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION {format.authors}
-{ author empty$
-    { "" }
-    { author format.names scapify }
-  if$
-}
-
-FUNCTION {format.editors}
-{ editor empty$
-    { "" }
-    { editor format.names scapify
-      editor num.names$ #1 >
-	{ ", Eds." * }
-	{ ", Ed." * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.publisher.address}
-{ address empty$
-    { publisher empty$
-        'skip$
-        { publisher "publisher" output.check 
-        }
-      if$ 
-    }
-    { publisher empty$
-        'skip$
-        { publisher "publisher" output.check
-          address "address" output.check
-        }
-      if$ 
-    }
-  if$
-}
-
-FUNCTION {format.ineditors}
-{ editor empty$
-    { "" }
-    { editor format.innames
-      editor num.names$ #1 >
-	{ ", Eds." * }
-	{ ", Ed." * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.title}
-{ title empty$
-    { "" }
-    { title "t" change.case$ }
-  if$
-}
-
-FUNCTION {format.doi}
-{ doi empty$
-    { "" }
-    { new.block "\doi{" doi * "}" * }
-  if$
-}
-
-
-FUNCTION {n.dashify}
-{ 't :=
-  ""
-    { t empty$ not }
-    { t #1 #1 substring$ "-" =
-	{ t #1 #2 substring$ "--" = not
-	    { "--" *
-	      t #2 global.max$ substring$ 't :=
-	    }
-	    {   { t #1 #1 substring$ "-" = }
-		{ "-" *
-		  t #2 global.max$ substring$ 't :=
-		}
-	      while$
-	    }
-	  if$
-	}
-	{ t #1 #1 substring$ *
-	  t #2 global.max$ substring$ 't :=
-	}
-      if$
-    }
-  while$
-}
-
-FUNCTION {format.year}
-{ year empty$
-    { "" }
-    { year }
-  if$
-}
-
-FUNCTION {format.month}
-{ month empty$
-    { "" }
-    { month }
-  if$
-}
-
-FUNCTION {format.date}
-{ year empty$
-    { month empty$
-	{ "" }
-	{ "there's a month but no year in " cite$ * warning$
-	  month
-	}
-      if$
-    }
-    { month empty$
-	'year
-	{ month " " * year * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.btitle}
-{ title emphasize
-}
-
-FUNCTION {tie.or.space.connect}
-{ duplicate$ text.length$ #3 <
-    { "~" }
-    { " " }
-  if$
-  swap$ * *
-}
-
-FUNCTION {either.or.check}
-{ empty$
-    'pop$
-    { "can't use both " swap$ * " fields in " * cite$ * warning$ }
-  if$
-}
-
-FUNCTION {format.bvolume}
-{ volume empty$
-    { "" }
-    { "vol.~" volume *
-      series empty$
-	'skip$
-	{ " of " * series emphasize * }
-      if$
-      "volume and number" number either.or.check
-    }
-  if$
-}
-
-FUNCTION {format.number.series}
-{ volume empty$
-    { number empty$
-	{ series field.or.null }
-	{ output.state mid.sentence =
-	    { "no.~" }
-	    { "No.~" }
-	  if$
-	  number *
-	  series empty$
-	    { "there's a number but no series in " cite$ * warning$ }
-	    { " in " * series * }
-	  if$
-	}
-      if$
-    }
-    { "" }
-  if$
-}
-
-FUNCTION {format.edition}
-{ edition empty$
-    { "" }
-    { output.state mid.sentence =
-	{ edition "l" change.case$ "~ed." * }
-	{ edition "t" change.case$ "~ed." * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.pages}
-{ pages empty$
-    { "" }
-    { pages n.dashify }
-  if$
-}
-
-INTEGERS { multiresult }
-
-FUNCTION {multi.page.check}
-{ 't :=
-  #0 'multiresult :=
-    { multiresult not
-      t empty$ not
-      and
-    }
-    { t #1 #1 substring$
-      duplicate$ "-" =
-      swap$ duplicate$ "," =
-      swap$ "+" =
-      or or
-	{ #1 'multiresult := }
-	{ t #2 global.max$ substring$ 't := }
-      if$
-    }
-  while$
-  multiresult
-}
-
-FUNCTION {format.pp.pages}
-{ pages empty$
-    { "" }
-    { pages multi.page.check
-	{ "pp.~" pages n.dashify * }
-	{ "p.~" pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.journal.vol.num.date}
-{ journal empty$
-    { "empty journal in " cite$ * warning$
-      ""
-    }
-    { journal
-      volume empty$
-	'skip$
-	{ " " * volume * }
-      if$
-      number empty$
-	'emphasizeic
-	{ emphasize ", " * number * }
-      if$
-      month empty$
-        'skip$
-        { " (" * format.month * ")" * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.chapter.pages}
-{ chapter empty$
-    'format.pages
-    { type empty$
-	{ "ch.~" chapter * }
-	{ type "l" change.case$ chapter tie.or.space.connect }
-      if$
-      pages empty$
-	'skip$
-	{ ", " * format.pages * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.in.ed.booktitle}
-{ booktitle empty$
-    { "" }
-    { "In " booktitle emphasize *
-      editor empty$
-	'skip$
-	{ ", " * format.ineditors * }
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.in.proc.date}
-{ booktitle empty$
-    { "" }
-    { "In " booktitle emphasize * }
-  if$
-}
-
-FUNCTION {empty.misc.check}
-{ author empty$ title empty$ howpublished empty$
-  month empty$ year empty$ note empty$
-  and and and and and
-  key empty$ not and
-    { "all relevant fields are empty in " cite$ * warning$ }
-    'skip$
-  if$
-}
-
-FUNCTION {format.thesis.type}
-{ type empty$
-    'skip$
-    { pop$
-      type "t" change.case$
-    }
-  if$
-}
-
-FUNCTION {format.tr.number}
-{ type empty$
-    { "Tech. Rep." }
-    'type
-  if$
-  number empty$
-    { "t" change.case$ }
-    { number tie.or.space.connect }
-  if$
-}
-
-FUNCTION {format.article.crossref}
-{ key empty$
-    { journal empty$
-	{ "need key or journal for " cite$ * " to crossref " * crossref *
-	  warning$
-	  ""
-	}
-	{ "In {\em " journal * "\/}" * }
-      if$
-    }
-    { "In " key * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {format.crossref.editor}
-{ editor #1 "{vv~}{ll}" format.name$
-  editor num.names$ duplicate$
-  #2 >
-    { pop$ " et~al." * }
-    { #2 <
-	'skip$
-	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-	    { " et~al." * }
-	    { " and " * editor #2 "{vv~}{ll}" format.name$ * }
-	  if$
-	}
-      if$
-    }
-  if$
-}
-
-FUNCTION {format.book.crossref}
-{ volume empty$
-    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$
-      "In "
-    }
-    { "Vol.~" volume *
-      " of " *
-    }
-  if$
-  editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
-	{ series empty$
-	    { "need editor, key, or series for " cite$ * " to crossref " *
-	      crossref * warning$
-	      "" *
-	    }
-	    { "{\em " * series * "\/}" * }
-	  if$
-	}
-	{ key * }
-      if$
-    }
-    { format.crossref.editor * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {format.incoll.inproc.crossref}
-{ editor empty$
-  editor field.or.null author field.or.null =
-  or
-    { key empty$
-	{ booktitle empty$
-	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
-	      crossref * warning$
-	      ""
-	    }
-	    { "In {\em " booktitle * "\/}" * }
-	  if$
-	}
-	{ "In " key * }
-      if$
-    }
-    { "In " format.crossref.editor * }
-  if$
-  " \cite{" * crossref * "}" *
-}
-
-FUNCTION {article}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.year output
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { format.journal.vol.num.date output
-      format.pages output
-    }
-    { format.article.crossref output.nonnull
-      format.pages output
-    }
-  if$
-  format.doi output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {book}
-{ output.bibitem
-  author empty$
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-	{ "author and editor" editor either.or.check }
-	'skip$
-      if$
-    }
-  if$
-  new.block
-  format.year "year" output.check
-  new.block
-  format.btitle "title" output.check
-  format.edition output
-  crossref missing$
-    { format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.month output
-  format.doi output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {booklet}
-{ output.bibitem
-  format.authors output
-  new.block
-  format.year output
-  new.block
-  format.title "title" output.check
-  howpublished address new.block.checkb
-  howpublished output
-  address output
-  format.month output
-  format.doi output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {inbook}
-{ output.bibitem
-  author empty$
-    { format.editors "author and editor" output.check }
-    { format.authors output.nonnull
-      crossref missing$
-	{ "author and editor" editor either.or.check }
-	'skip$
-      if$
-    }
-  if$
-  new.block
-  format.year "year" output.check
-  new.block
-  format.btitle "title" output.check
-  format.edition output
-  crossref missing$
-    { format.bvolume output
-      new.block
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-    }
-    { new.block
-      format.book.crossref output.nonnull
-    }
-  if$
-  format.month output
-  format.chapter.pages "chapter and pages" output.check
-  format.doi output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {incollection}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.year "year" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { format.in.ed.booktitle "booktitle" output.check
-      format.edition output
-      format.bvolume output
-      format.number.series output
-      new.sentence
-      publisher "publisher" output.check
-      address output
-      format.month output
-    }
-    { format.incoll.inproc.crossref output.nonnull }
-  if$
-  format.chapter.pages output
-  format.doi output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {inproceedings}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.year "year" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  crossref missing$
-    { format.in.proc.date "booktitle" output.check
-      address empty$
-        { publisher empty$
-            'skip$
-            { publisher "publisher" output.check 
-            }
-          if$ 
-        }
-        { publisher empty$
-            'skip$
-            { publisher "publisher" output.check
-              address "address" output.check
-            }
-          if$ 
-        }
-      if$
-      format.ineditors output
-      format.bvolume output
-      format.number.series output
-      organization "organization" output.check
-    }
-    { format.incoll.inproc.crossref output.nonnull }
-  if$
-  format.pages output
-  format.doi output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {conference} { inproceedings }
-
-FUNCTION {manual}
-{ output.bibitem
-  author empty$
-    { organization scapify output }
-    { format.authors output.nonnull }
-  if$
-  new.block
-  format.year output
-  new.block
-  format.btitle "title" output.check
-  format.edition output
-  author empty$
-    { address new.block.checka }
-    { organization address new.block.checkb
-      organization output
-    }
-  if$
-  address output
-  format.month output
-  format.doi output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {mastersthesis}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.year "year" output.check
-  new.block
-  format.btitle "title" output.check
-  new.block
-  "Master's thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  format.doi output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {misc}
-{ output.bibitem
-  format.authors output
-  format.year output
-  title howpublished new.block.checkb
-  format.title output
-  howpublished new.block.checka
-  howpublished output
-  format.month output
-  format.doi output
-  new.block
-  note output
-  fin.entry
-  empty.misc.check
-}
-
-FUNCTION {phdthesis}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.year "year" output.check
-  new.block
-  format.btitle "title" output.check
-  new.block
-  "PhD thesis" format.thesis.type output.nonnull
-  school "school" output.check
-  address output
-  format.doi output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {proceedings}
-{ output.bibitem
-  editor empty$
-    { organization scapify output }
-    { format.editors output.nonnull }
-  if$
-  new.block
-  format.year output
-  new.block
-  title "title" output.check
-  format.bvolume output
-  format.number.series output
-  editor empty$
-    'skip$
-    { organization output }
-  if$
-  address empty$
-    { publisher empty$
-        'skip$
-        { publisher "publisher" output.check 
-        }
-      if$ 
-    }
-    { publisher empty$
-        'skip$
-        { publisher "publisher" output.check
-          address "address" output.check
-        }
-      if$ 
-    }
-  if$
-  format.doi output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {techreport}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.year "year" output.check
-  new.block
-  format.title "title" output.check
-  new.block
-  format.tr.number output.nonnull
-  institution "institution" output.check
-  address output
-  format.month output
-  format.doi output
-  new.block
-  note output
-  fin.entry
-}
-
-FUNCTION {unpublished}
-{ output.bibitem
-  format.authors "author" output.check
-  new.block
-  format.year output
-  new.block
-  format.title "title" output.check
-  new.block
-  note "note" output.check
-  format.month output
-  fin.entry
-}
-
-FUNCTION {default.type} { misc }
-
-MACRO {jan} {"Jan."}
-
-MACRO {feb} {"Feb."}
-
-MACRO {mar} {"Mar."}
-
-MACRO {apr} {"Apr."}
-
-MACRO {may} {"May"}
-
-MACRO {jun} {"June"}
-
-MACRO {jul} {"July"}
-
-MACRO {aug} {"Aug."}
-
-MACRO {sep} {"Sept."}
-
-MACRO {oct} {"Oct."}
-
-MACRO {nov} {"Nov."}
-
-MACRO {dec} {"Dec."}
-
-MACRO {acmcs} {"ACM Comput. Surv."}
-
-MACRO {acta} {"Acta Inf."}
-
-MACRO {cacm} {"Commun. ACM"}
-
-MACRO {ibmjrd} {"IBM J. Res. Dev."}
-
-MACRO {ibmsj} {"IBM Syst.~J."}
-
-MACRO {ieeese} {"IEEE Trans. Softw. Eng."}
-
-MACRO {ieeetc} {"IEEE Trans. Comput."}
-
-MACRO {ieeetcad}
- {"IEEE Trans. Comput.-Aided Design Integrated Circuits"}
-
-MACRO {ipl} {"Inf. Process. Lett."}
-
-MACRO {jacm} {"J.~ACM"}
-
-MACRO {jcss} {"J.~Comput. Syst. Sci."}
-
-MACRO {scp} {"Sci. Comput. Programming"}
-
-MACRO {sicomp} {"SIAM J. Comput."}
-
-MACRO {tocs} {"ACM Trans. Comput. Syst."}
-
-MACRO {tods} {"ACM Trans. Database Syst."}
-
-MACRO {tog} {"ACM Trans. Gr."}
-
-MACRO {toms} {"ACM Trans. Math. Softw."}
-
-MACRO {toois} {"ACM Trans. Office Inf. Syst."}
-
-MACRO {toplas} {"ACM Trans. Program. Lang. Syst."}
-
-MACRO {tcs} {"Theoretical Comput. Sci."}
-
-READ
-
-FUNCTION {sortify}
-{ purify$
-  "l" change.case$
-}
-
-INTEGERS { len }
-
-FUNCTION {chop.word}
-{ 's :=
-  'len :=
-  s #1 len substring$ =
-    { s len #1 + global.max$ substring$ }
-    's
-  if$
-}
-
-INTEGERS { et.al.char.used }
-
-FUNCTION {initialize.et.al.char.used}
-{ #0 'et.al.char.used :=
-}
-
-EXECUTE {initialize.et.al.char.used}
-
-FUNCTION {format.lab.names}
-{ 
-  's :=
-  s num.names$ 'numnames :=
-  numnames #2 >    % change number to number of others allowed before
-                   % forcing "et al".
-    { s #1 "{vv~}{ll}" format.name$ " et~al\mbox{.}" * }
-    {
-      numnames #1 - 'namesleft :=
-      #2 'nameptr :=
-      s #1 "{vv~}{ll}" format.name$
-        { namesleft #0 > }
-        { nameptr numnames =
-            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
-                { " et~al\mbox{.}" * }
-                { " and " * s nameptr "{vv~}{ll}" format.name$ * }
-              if$
-            }
-            { ", " * s nameptr "{vv~}{ll}" format.name$ * }
-          if$
-          nameptr #1 + 'nameptr :=
-          namesleft #1 - 'namesleft :=
-        }
-      while$
-    }
-  if$
-}
-
-
-FUNCTION {author.key.label}
-{ author empty$
-    { key empty$
-	{ cite$ #1 #3 substring$ }
-	{ key #3 text.prefix$ }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION {author.editor.key.label}
-{ author empty$
-    { editor empty$
-	{ key empty$
-	    { cite$ #1 #3 substring$ }
-	    { key #3 text.prefix$ }
-	  if$
-	}
-	{ editor format.lab.names }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION {author.key.organization.label}
-{ author empty$
-    { key empty$
-	{ organization empty$
-	    { cite$ #1 #3 substring$ }
-	    { "The " #4 organization chop.word #3 text.prefix$ }
-	  if$
-	}
-	{ key #3 text.prefix$ }
-      if$
-    }
-    { author format.lab.names }
-  if$
-}
-
-FUNCTION {editor.key.organization.label}
-{ editor empty$
-    { key empty$
-	{ organization empty$
-	    { cite$ #1 #3 substring$ }
-	    { "The " #4 organization chop.word #3 text.prefix$ }
-	  if$
-	}
-	{ key #3 text.prefix$ }
-      if$
-    }
-    { editor format.lab.names }
-  if$
-}
-
-FUNCTION {calc.label}
-{ type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.key.label
-    { type$ "proceedings" =
-	'editor.key.organization.label
-	{ type$ "manual" =
-	    'author.key.organization.label
-	    'author.key.label
-	  if$
-	}
-      if$
-    }
-  if$
-
-  duplicate$
-  year empty$
-  {
-    "\protect\citename{" swap$ * " }" *
-    "" * 'label :=
-  }
-  {
-    "\protect\citename{" swap$ * " }" *
-    year
-    *
-    'label :=
-  }
-  if$
-
-  year field.or.null *
-  sortify 'sort.label :=
-}
-
-FUNCTION {sort.format.names}
-{ 's :=
-  #1 'nameptr :=
-  ""
-  s num.names$ 'numnames :=
-  numnames 'namesleft :=
-    { namesleft #0 > }
-    { nameptr #1 >
-	{ "   " * }
-	'skip$
-      if$
-      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
-      nameptr numnames = t "others" = and
-	{ "et al" * }
-	{ t sortify * }
-      if$
-      nameptr #1 + 'nameptr :=
-      namesleft #1 - 'namesleft :=
-    }
-  while$
-}
-
-FUNCTION {sort.format.title}
-{ 't :=
-  "A " #2
-    "An " #3
-      "The " #4 t chop.word
-    chop.word
-  chop.word
-  sortify
-  #1 global.max$ substring$
-}
-
-FUNCTION {author.sort}
-{ author empty$
-    { key empty$
-	{ "to sort, need author or key in " cite$ * warning$
-	  ""
-	}
-	{ key sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {author.editor.sort}
-{ author empty$
-    { editor empty$
-	{ key empty$
-	    { "to sort, need author, editor, or key in " cite$ * warning$
-	      ""
-	    }
-	    { key sortify }
-	  if$
-	}
-	{ editor sort.format.names }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {author.organization.sort}
-{ author empty$
-    { organization empty$
-	{ key empty$
-	    { "to sort, need author, organization, or key in " cite$ * warning$
-	      ""
-	    }
-	    { key sortify }
-	  if$
-	}
-	{ "The " #4 organization chop.word sortify }
-      if$
-    }
-    { author sort.format.names }
-  if$
-}
-
-FUNCTION {editor.organization.sort}
-{ editor empty$
-    { organization empty$
-	{ key empty$
-	    { "to sort, need editor, organization, or key in " cite$ * warning$
-	      ""
-	    }
-	    { key sortify }
-	  if$
-	}
-	{ "The " #4 organization chop.word sortify }
-      if$
-    }
-    { editor sort.format.names }
-  if$
-}
-
-FUNCTION {presort}
-{ calc.label
-  sort.label
-  "    "
-  *
-  type$ "book" =
-  type$ "inbook" =
-  or
-    'author.editor.sort
-    { type$ "proceedings" =
-	'editor.organization.sort
-	{ type$ "manual" =
-	    'author.organization.sort
-	    'author.sort
-	  if$
-	}
-      if$
-    }
-  if$
-  *
-  "    "
-  *
-  year field.or.null sortify
-  *
-  "    "
-  *
-  title field.or.null
-  sort.format.title
-  *
-  #1 entry.max$ substring$
-  'sort.key$ :=
-}
-
-ITERATE {presort}
-
-SORT
-
-STRINGS { longest.label last.sort.label next.extra }
-
-INTEGERS { longest.label.width last.extra.num }
-
-FUNCTION {initialize.longest.label}
-{ "" 'longest.label :=
-  #0 int.to.chr$ 'last.sort.label :=
-  "" 'next.extra :=
-  #0 'longest.label.width :=
-  #0 'last.extra.num :=
-}
-
-FUNCTION {forward.pass}
-{ last.sort.label sort.label =
-    { last.extra.num #1 + 'last.extra.num :=
-      last.extra.num int.to.chr$ 'extra.label :=
-    }
-    { "a" chr.to.int$ 'last.extra.num :=
-      "" 'extra.label :=
-      sort.label 'last.sort.label :=
-    }
-  if$
-}
-
-FUNCTION {reverse.pass}
-{ next.extra "b" =
-    { "a" 'extra.label := }
-    'skip$
-  if$
-  label extra.label * 'label :=
-  label width$ longest.label.width >
-    { label 'longest.label :=
-      label width$ 'longest.label.width :=
-    }
-    'skip$
-  if$
-  extra.label 'next.extra :=
-}
-
-EXECUTE {initialize.longest.label}
-
-ITERATE {forward.pass}
-
-REVERSE {reverse.pass}
-
-FUNCTION {begin.bib}
-{ et.al.char.used
-    { "\providecommand{\etalchar}[1]{$^{#1}$}" write$ newline$ }
-    'skip$
-  if$
-  preamble$ empty$
-    'skip$
-    { preamble$ write$ newline$ }
-  if$
-  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
-  "\providecommand{\url}[1]{\texttt{#1}}"
-  write$ newline$
-  "\expandafter\ifx\csname urlstyle\endcsname\relax"
-  write$ newline$
-  "  \providecommand{\doi}[1]{doi: #1}\else"
-  write$ newline$
-  "  \expandafter\ifx\csname href\endcsname\relax"
-  write$ newline$
-  "    \providecommand{\doi}[1]{doi: \url{#1}}\else"
-  write$ newline$
-  "    \providecommand{\doi}[1]{doi: \href{http://dx.doi.org/#1}{\nolinkurl{#1}}}\fi\fi"
-  write$ newline$
-}
-
-EXECUTE {begin.bib}
-
-EXECUTE {init.state.consts}
-
-ITERATE {call.type$}
-
-FUNCTION {end.bib}
-{ newline$
-  "\end{thebibliography}" write$ newline$
-}
-
-EXECUTE {end.bib}
-

Modified: trunk/Master/texmf-dist/doc/latex/acmart/Makefile
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/Makefile	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/Makefile	2016-07-14 21:38:03 UTC (rev 41692)
@@ -77,4 +77,4 @@
 	tar -C .. -czvf $(PACKAGE).tgz --exclude '*~' --exclude '*.tgz' --exclude '*.zip'  --exclude CVS --exclude '.git*' $(PACKAGE) 
 
 zip:  all clean
-	zip -r  $(PACKAGE).zip * -x '*~' -x '*.tgz' -x '*.zip' -x CVS -x 'CVS/*'
\ No newline at end of file
+	zip -r  $(PACKAGE).zip * -x '*~' -x '*.tgz' -x '*.zip' -x CVS -x 'CVS/*'

Modified: trunk/Master/texmf-dist/doc/latex/acmart/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/README	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/README	2016-07-14 21:38:03 UTC (rev 41692)
@@ -16,3 +16,23 @@
 		Footnotes rearranged.
                 Option natbib is now mostly superfluous: the class 
 		makes a guess based on the format chosen.
+
+version 1.13    Formatting changes: headers, folios etc.
+		Bibliography changes.
+
+version 1.14    Warn about undefined citation styles; move definitions
+                of acmauthoryear and acmnumeric citation styles before
+                use.
+
+version 1.15    New structured affiliation command.
+                New commands for acknowledgements.
+
+version 1.16    Formatting changes for headers and footers.
+
+version 1.17    Formatting changes for margins and lists.  Bug fixes.
+
+version 1.18    Natbib is now the default for all versions.  A unified bib
+		file is used for all styles.  Better treatment
+		of multiple affiliations.
+		
+

Modified: trunk/Master/texmf-dist/doc/latex/acmart/acmart.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-acmlarge.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-acmlarge.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/sample-acmlarge.tex	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/sample-acmlarge.tex	2016-07-14 21:38:03 UTC (rev 41692)
@@ -48,22 +48,45 @@
 \title{A Multifrequency MAC Specially Designed for Wireless Sensor
   Network Applications} 
 \author{Gang Zhou}
-\email{zhou at uva.edu}
+\orcid{1234-5678-9012-3456}
+\affiliation{%
+  \institution{College of William and Mary}
+  \streetaddress{104 Jamestown Rd}
+  \city{Williamsburg}
+  \state{VA}
+  \postcode{23185}
+  \country{USA}}
 \author{Yafeng Wu}
-\email{ywu at uva.edu}
-\affiliation{University of Virginia}
+\affiliation{%
+  \institution{University of Virginia}
+  \department{School of Engineering}
+  \city{Charlottesville}
+  \state{VA}
+  \postcode{22903}
+  \country{USA}
+}
 \author{Ting Yan}
-\affiliation{Eaton Innovation Center}
+\affiliation{%
+  \institution{Eaton Innovation Center}
+  \city{Prague}
+  \country{Czech Republic}}
 \author{Tian He}
-\affiliation{University of Minnesota}
+\affiliation{%
+  \institution{University of Minnesota}
+  \country{USA}}
 \author{Chengdu Huang}
-\affiliation{Google}
 \author{John A. Stankovic}
-\affiliation{University of Virginia}
 \author{Tarek F. Abdelzaher}
-\affiliation{University of Illinois at Urbana-Champaign}
-\affiliation{University of Virginia}
+\affiliation{%
+  \institution{University of Virginia}
+  \department{School of Engineering}
+  \city{Charlottesville}
+  \state{VA}
+  \postcode{22903}
+  \country{USA}
+}
 
+
 \begin{abstract}
 Multifrequency media access control has been well understood in
 general wireless ad hoc networks, while in wireless sensor networks,
@@ -145,6 +168,9 @@
 
 \maketitle
 
+% The default list of authors is too long for headers}
+\renewcommand{\shortauthors}{G. Zhou et. al.}
+
 \input{samplebody-journals}
 
 

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-acmsmall.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-acmsmall.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/sample-acmsmall.tex	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/sample-acmsmall.tex	2016-07-14 21:38:03 UTC (rev 41692)
@@ -45,17 +45,43 @@
 \title[A Multifrequency MAC for Wireless Sensor]{A Multifrequency MAC
   Specially Designed for Wireless Sensor  Network Applications}  
 \author{Gang Zhou}
-\affiliation{College of William and Mary}
+\orcid{1234-5678-9012-3456}
+\affiliation{%
+  \institution{College of William and Mary}
+  \streetaddress{104 Jamestown Rd}
+  \city{Williamsburg}
+  \state{VA}
+  \postcode{23185}
+  \country{USA}}
 \author{Yafeng Wu}
-\affiliation{University of Virginia}
+\affiliation{%
+  \institution{University of Virginia}
+  \department{School of Engineering}
+  \city{Charlottesville}
+  \state{VA}
+  \postcode{22903}
+  \country{USA}
+}
 \author{Ting Yan}
-\affiliation{Eaton Innovation Center}
+\affiliation{%
+  \institution{Eaton Innovation Center}
+  \city{Prague}
+  \country{Czech Republic}}
 \author{Tian He}
-\affiliation{University of Minnesota}
+\affiliation{%
+  \institution{University of Minnesota}
+  \country{USA}}
 \author{Chengdu Huang}
 \author{John A. Stankovic}
 \author{Tarek F. Abdelzaher}
-\affiliation{University of Virginia}
+\affiliation{%
+  \institution{University of Virginia}
+  \department{School of Engineering}
+  \city{Charlottesville}
+  \state{VA}
+  \postcode{22903}
+  \country{USA}
+}
 
 \begin{abstract}
 Multifrequency media access control has been well understood in
@@ -71,11 +97,7 @@
 multifrequency availability while, at the same time, takes into
 consideration the restrictions of wireless sensor networks. Through
 extensive experiments, MMSN exhibits the prominent ability to utilize
-parallel transmissions among neighboring nodes. When multiple physical
-frequencies are available, it also achieves increased energy
-efficiency, demonstrating the ability to work against radio
-interference and the tolerance to a wide range of measured time
-synchronization errors.
+parallel transmissions among neighboring nodes. 
 \end{abstract}
 
 

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-acmtog.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-acmtog.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/sample-acmtog.tex	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/sample-acmtog.tex	2016-07-14 21:38:03 UTC (rev 41692)
@@ -44,21 +44,54 @@
 \title{A Multifrequency MAC Specially Designed for Wireless Sensor
   Network Applications} 
 \author{Gang Zhou}
-\email{zhou at uva.edu}
+\orcid{1234-5678-9012-3456}
+\affiliation{%
+  \institution{College of William and Mary}
+  \streetaddress{104 Jamestown Rd}
+  \city{Williamsburg}
+  \state{VA}
+  \postcode{23185}
+  \country{USA}}
 \author{Yafeng Wu}
-\email{ywu at uva.edu}
-\affiliation{University of Virginia}
+\affiliation{%
+  \institution{University of Virginia}
+  \department{School of Engineering}
+  \city{Charlottesville}
+  \state{VA}
+  \postcode{22903}
+  \country{USA}
+}
 \author{Ting Yan}
-\affiliation{Eaton Innovation Center}
+\affiliation{%
+  \institution{Eaton Innovation Center}
+  \city{Prague}
+  \country{Czech Republic}}
 \author{Tian He}
-\affiliation{University of Minnesota}
+\affiliation{%
+  \institution{University of Virginia}
+  \department{School of Engineering}
+  \city{Charlottesville}
+  \state{VA}
+  \postcode{22903}
+  \country{USA}
+}
+\affiliation{%
+  \institution{University of Minnesota}
+  \country{USA}}
 \author{Chengdu Huang}
-\affiliation{Google}
 \author{John A. Stankovic}
-\affiliation{University of Virginia}
 \author{Tarek F. Abdelzaher}
-\affiliation{University of Illinois at Urbana-Champaign}
+\affiliation{%
+  \institution{University of Virginia}
+  \department{School of Engineering}
+  \city{Charlottesville}
+  \state{VA}
+  \postcode{22903}
+  \country{USA}
+}
 
+\renewcommand\shortauthors{Zhou, G. et al}
+
 \begin{abstract}
 Multifrequency media access control has been well understood in
 general wireless ad hoc networks, while in wireless sensor networks,

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-manuscript.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-manuscript.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/sample-manuscript.tex	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/sample-manuscript.tex	2016-07-14 21:38:03 UTC (rev 41692)
@@ -35,25 +35,59 @@
 \title{A Multifrequency MAC Specially Designed for Wireless Sensor
   Network Applications} 
  \titlenote{This is a titlenote}
-% \subtitle{This is a subtitle}
-% \subtitlenote{Subtitle note}
+ \subtitle{This is a subtitle}
+ \subtitlenote{Subtitle note}
 \author{Gang Zhou}
-% \authornote{The corresponding author}
+\authornote{The corresponding author}
+\orcid{1234-5678-9012-3456}
 \email{zhou at uva.edu}
 \author{Yafeng Wu}
 \email{ywu at uva.edu}
-\affiliation{University of Virginia}
+\author{John A. Stankovic}
+\affiliation{%
+  \institution{University of Virginia}
+  \department{School of Engineering}
+  \city{Charlottesville}
+  \state{VA}
+  \postcode{22903}
+  \country{USA}
+}
 \author{Ting Yan}
-\affiliation{Eaton Innovation Center}
+\affiliation{%
+  \institution{Eaton Innovation Center}
+  \city{Prague}
+  \country{Czech Republic}}
 \author{Tian He}
-\affiliation{University of Minnesota}
+\affiliation{%
+  \institution{University of Minnesota}
+  \country{USA}}
 \author{Chengdu Huang}
-\affiliation{Google}
-\author{John A. Stankovic}
-\affiliation{University of Virginia}
+\affiliation{%
+  \institution{Google}
+  \country{USA}}
+\affiliation{%
+  \institution{University of Virginia}
+  \department{School of Engineering}
+  \city{Charlottesville}
+  \state{VA}
+  \postcode{22903}
+  \country{USA}
+}
 \author{Tarek F. Abdelzaher}
-\affiliation{University of Illinois at Urbana-Champaign}
-\affiliation{University of Virginia}
+\affiliation{%
+  \institution{University of Illinois at Urbana-Champaign}
+  \country{USA}}
+\affiliation{%
+  \institution{University of Virginia}
+  \department{School of Engineering}
+  \city{Charlottesville}
+  \state{VA}
+  \postcode{22903}
+  \country{USA}
+}
+\affiliation{%
+  \institution{Google}
+  \country{USA}}
 
 \begin{abstract}
 Multifrequency media access control has been well understood in

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-sigchi-a.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-sigchi-a.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/sample-sigchi-a.tex	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/sample-sigchi-a.tex	2016-07-14 21:38:03 UTC (rev 41692)
@@ -34,38 +34,51 @@
 \title{SIGCHI Extended Abstracts Sample File}
 
 \author{First Author}
-\affiliation{University of Author\\
-  Authortown, CA 94022, USA} 
+\affiliation{%
+  \institution{University of Author}
+  \city{Authortown}
+  \state{CA} 
+  \postcode{94022} 
+  \country{USA} }
 \email{author1 at anotherco.edu}
 
 \author{Second Author}
-\affiliation{VP, Authoring\\
-  Authorship Holdings, Ltd.\\
-  Awdur SA22 8PP, UK}
+\affiliation{%
+  \position{VP, Authoring}
+  \institution{Authorship Holdings, Ltd.}
+  \city{Awdur} 
+  \postcode{SA22 8PP}
+  \country{UK}}
 \email{author2 at author.ac.uk}
 
 \author{Third Author \\
   Fourth Author}
-\affiliation{L\={e}khaka Labs\\
-  Bengaluru 560 080, India}
+\affiliation{%
+  \institution{L\={e}khaka Labs}
+  \city{Bengaluru} \postcode{560 080} \country{India}}
 \email{author3 at another.com} 
 \email{author4 at another.com}
 
 \author{Fifth Author}
-\affiliation{YetAuthorCo, Inc.\\
-  Authortown, BC V6M 22P Canada}
+\affiliation{\institution{YetAuthorCo, Inc.}
+  \city{Authortown} \state{BC}
+  \postcode{V6M 22P} \country{Canada}}
 \email{author5 at anotherco.com} 
 
 \author{Sixth Author}
-\affiliation{Universit\'e de Auteur-Sud\\
-  40222 Auteur France}
+\affiliation{\institution{Universit\'e de Auteur-Sud}
+  \city{Auteur} \postcode{40222} \country{France}}
 \email{author6 at author.fr} 
 
 \author{Seventh Author}
-\affiliation{University of Umbhali\\
-  Pretoria, South Africa}
+\affiliation{\institution{University of Umbhali}
+  \city{Pretoria} \country{South Africa}}
 \email{author7 at umbhaliu.ac.za} 
 
+% The default list of authors is too long for headers}
+\renewcommand{\shortauthors}{F. Author et. al.}
+
+
 %
 % The code below should be generated by the tool at
 % http://dl.acm.org/ccs.cfm
@@ -366,16 +379,17 @@
 American/European version of Acrobat reader, so please check your PDF
 accordingly.
 
-\section{Acknowledgements}
+\begin{acks}
+  We thank all the volunteers, publications support, staff, and
+  authors who wrote and provided helpful comments on previous versions
+  of this document. As well authors 1, 2, and 3 gratefully acknowledge
+  the grant from \grantsponsor{001}{NSF}{}
+  (\#\grantnum{001}{1234-2222-ABC}). Author 4 for example may want to
+  acknowledge a supervisor/manager from their original employer. This
+  whole paragraph is just for example. Some of the references cited in
+  this paper are included for illustrative purposes only.
+\end{acks}
 
-We thank all the volunteers, publications support, staff, and authors
-who wrote and provided helpful comments on previous versions of this
-document. As well authors 1, 2, and 3 gratefully acknowledge the grant
-from NSF (\#1234--2222--ABC). Author 4 for example may want to
-acknowledge a supervisor/manager from their original employer. This
-whole paragraph is just for example. Some of the references cited in
-this paper are included for illustrative purposes only.
-
 \section{References Format}
 
 Your references should be published materials accessible to the
@@ -421,6 +435,6 @@
 
 
 \bibliography{sigchi-a}
-\bibliographystyle{SIGCHI-Reference-Format}
+\bibliographystyle{ACM-Reference-Format}
 
 \end{document}

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-sigchi.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-sigchi.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/sample-sigchi.tex	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/sample-sigchi.tex	2016-07-14 21:38:03 UTC (rev 41692)
@@ -39,51 +39,72 @@
 
 \author{Ben Trovato}
 \authornote{Dr.~Trovato insisted his name be first.}
-\affiliation{Institute for Clarity in Documentation\\
-  P.O. Box 1212\\
-  Dublin, Ohio 43017-6221}
+\orcid{1234-5678-9012}
+\affiliation{%
+  \institution{Institute for Clarity in Documentation}
+  \streetaddress{P.O. Box 1212}
+  \city{Dublin} 
+  \state{Ohio} 
+  \postcode{43017-6221}
+}
 \email{trovato at corporation.com}
 
 \author{G.K.M. Tobin}
 \authornote{The secretary disavows any knowledge of this author's actions.}
-\affiliation{Institute for Clarity in Documentation\\
-  P.O. Box 1212\\
-  Dublin, Ohio 43017-6221}
+\affiliation{%
+  \institution{Institute for Clarity in Documentation}
+  \streetaddress{P.O. Box 1212}
+  \city{Dublin} 
+  \state{Ohio} 
+  \postcode{43017-6221}
+}
 \email{webmaster at marysville-ohio.com}
 
 \author{Lars Th{\o}rv{\"a}ld}
 \authornote{This author is the
   one who did all the really hard work.}
-\affiliation{The Th{\o}rv{\"a}ld Group\\
-  1 Th{\o}rv{\"a}ld Circle\\
-  Hekla, Iceland}
+\affiliation{%
+  \institution{The Th{\o}rv{\"a}ld Group}
+  \streetaddress{1 Th{\o}rv{\"a}ld Circle}
+  \city{Hekla} 
+  \country{Iceland}}
 \email{larst at affiliation.org}
 
 \author{Lawrence P. Leipuner}
-\affiliation{Brookhaven Laboratories\\
-  P.O. Box 5000}
+\affiliation{
+  \institution{Brookhaven Laboratories}
+  \streetaddress{P.O. Box 5000}}
 \email{lleipuner at researchlabs.org}
 
 \author{Sean Fogarty}
-\affiliation{NASA Ames Research Center\\
-  Moffett Field\\
-  California 94035}
+\affiliation{%
+  \institution{NASA Ames Research Center}
+  \city{Moffett Field}
+  \state{California} 
+  \postcode{94035}}
 \email{fogartys at amesres.org}
 
 \author{Charles Palmer}
-\affiliation{Palmer Research Laboratories\\
-  8600 Datapoint Drive\\
-  San Antonio, Texas 78229}
+\affiliation{%
+  \institution{Palmer Research Laboratories}
+  \streetaddress{8600 Datapoint Drive}
+  \city{San Antonio}
+  \state{Texas} 
+  \postcode{78229}}
 \email{cpalmer at prl.com}
 
 \author{John Smith}
-\affiliation{The Th{\o}rv{\"a}ld Group}
+\affiliation{\institution{The Th{\o}rv{\"a}ld Group}}
 \email{jsmith at affiliation.org}
 
 \author{Julius P.~Kumquat}
-\affiliation{The Kumquat Consortium} 
+\affiliation{\institution{The Kumquat Consortium}}
 \email{jpkumquat at consortium.net}
 
+% The default list of authors is too long for headers}
+\renewcommand{\shortauthors}{B. Trovato et. al.}
+
+
 \begin{abstract}
 This paper provides a sample of a \LaTeX\ document which conforms,
 somewhat loosely, to the formatting guidelines for
@@ -141,7 +162,7 @@
 
 \input{samplebody-conf}
 
-\bibliographystyle{SIGCHI-Reference-Format}
+\bibliographystyle{ACM-Reference-Format}
 \bibliography{sigproc} 
 
 \end{document}

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-sigconf.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-sigconf.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/sample-sigconf.tex	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/sample-sigconf.tex	2016-07-14 21:38:03 UTC (rev 41692)
@@ -37,53 +37,75 @@
 \subtitlenote{The full version of the author's guide is available as
   \texttt{acmart.pdf} document}
 
+
 \author{Ben Trovato}
 \authornote{Dr.~Trovato insisted his name be first.}
-\affiliation{Institute for Clarity in Documentation\\
-  P.O. Box 1212\\
-  Dublin, Ohio 43017-6221}
+\orcid{1234-5678-9012}
+\affiliation{%
+  \institution{Institute for Clarity in Documentation}
+  \streetaddress{P.O. Box 1212}
+  \city{Dublin} 
+  \state{Ohio} 
+  \postcode{43017-6221}
+}
 \email{trovato at corporation.com}
 
 \author{G.K.M. Tobin}
 \authornote{The secretary disavows any knowledge of this author's actions.}
-\affiliation{Institute for Clarity in Documentation\\
-  P.O. Box 1212\\
-  Dublin, Ohio 43017-6221}
+\affiliation{%
+  \institution{Institute for Clarity in Documentation}
+  \streetaddress{P.O. Box 1212}
+  \city{Dublin} 
+  \state{Ohio} 
+  \postcode{43017-6221}
+}
 \email{webmaster at marysville-ohio.com}
 
 \author{Lars Th{\o}rv{\"a}ld}
 \authornote{This author is the
   one who did all the really hard work.}
-\affiliation{The Th{\o}rv{\"a}ld Group\\
-  1 Th{\o}rv{\"a}ld Circle\\
-  Hekla, Iceland}
+\affiliation{%
+  \institution{The Th{\o}rv{\"a}ld Group}
+  \streetaddress{1 Th{\o}rv{\"a}ld Circle}
+  \city{Hekla} 
+  \country{Iceland}}
 \email{larst at affiliation.org}
 
 \author{Lawrence P. Leipuner}
-\affiliation{Brookhaven Laboratories\\
-  P.O. Box 5000}
+\affiliation{
+  \institution{Brookhaven Laboratories}
+  \streetaddress{P.O. Box 5000}}
 \email{lleipuner at researchlabs.org}
 
 \author{Sean Fogarty}
-\affiliation{NASA Ames Research Center\\
-  Moffett Field\\
-  California 94035}
+\affiliation{%
+  \institution{NASA Ames Research Center}
+  \city{Moffett Field}
+  \state{California} 
+  \postcode{94035}}
 \email{fogartys at amesres.org}
 
 \author{Charles Palmer}
-\affiliation{Palmer Research Laboratories\\
-  8600 Datapoint Drive\\
-  San Antonio, Texas 78229}
+\affiliation{%
+  \institution{Palmer Research Laboratories}
+  \streetaddress{8600 Datapoint Drive}
+  \city{San Antonio}
+  \state{Texas} 
+  \postcode{78229}}
 \email{cpalmer at prl.com}
 
 \author{John Smith}
-\affiliation{The Th{\o}rv{\"a}ld Group}
+\affiliation{\institution{The Th{\o}rv{\"a}ld Group}}
 \email{jsmith at affiliation.org}
 
 \author{Julius P.~Kumquat}
-\affiliation{The Kumquat Consortium} 
+\affiliation{\institution{The Kumquat Consortium}}
 \email{jpkumquat at consortium.net}
 
+% The default list of authors is too long for headers}
+\renewcommand{\shortauthors}{B. Trovato et. al.}
+
+
 \begin{abstract}
 This paper provides a sample of a \LaTeX\ document which conforms,
 somewhat loosely, to the formatting guidelines for
@@ -135,7 +157,7 @@
 
 \input{samplebody-conf}
 
-\bibliographystyle{acm-abbrv}
+\bibliographystyle{ACM-Reference-Format}
 \bibliography{sigproc} 
 
 \end{document}

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-siggraph.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-siggraph.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/sample-siggraph.tex	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/sample-siggraph.tex	2016-07-14 21:38:03 UTC (rev 41692)
@@ -1,8 +1,8 @@
 \documentclass[siggraph, review=false]{acmart}
 
 \usepackage{booktabs} % For formal tables
+\citestyle{acmauthoryear}  % Author-year format
 
-
 % Copyright
 %\setcopyright{none}
 %\setcopyright{acmcopyright}
@@ -37,53 +37,76 @@
 \subtitlenote{The full version of the author's guide is available as
   \texttt{acmart.pdf} document}
 
+
 \author{Ben Trovato}
 \authornote{Dr.~Trovato insisted his name be first.}
-\affiliation{Institute for Clarity in Documentation\\
-  P.O. Box 1212\\
-  Dublin, Ohio 43017-6221}
+\orcid{1234-5678-9012}
+\affiliation{%
+  \institution{Institute for Clarity in Documentation}
+  \streetaddress{P.O. Box 1212}
+  \city{Dublin} 
+  \state{Ohio} 
+  \postcode{43017-6221}
+}
 \email{trovato at corporation.com}
 
 \author{G.K.M. Tobin}
 \authornote{The secretary disavows any knowledge of this author's actions.}
-\affiliation{Institute for Clarity in Documentation\\
-  P.O. Box 1212\\
-  Dublin, Ohio 43017-6221}
+\affiliation{%
+  \institution{Institute for Clarity in Documentation}
+  \streetaddress{P.O. Box 1212}
+  \city{Dublin} 
+  \state{Ohio} 
+  \postcode{43017-6221}
+}
 \email{webmaster at marysville-ohio.com}
 
 \author{Lars Th{\o}rv{\"a}ld}
 \authornote{This author is the
   one who did all the really hard work.}
-\affiliation{The Th{\o}rv{\"a}ld Group\\
-  1 Th{\o}rv{\"a}ld Circle\\
-  Hekla, Iceland}
+\affiliation{%
+  \institution{The Th{\o}rv{\"a}ld Group}
+  \streetaddress{1 Th{\o}rv{\"a}ld Circle}
+  \city{Hekla} 
+  \country{Iceland}}
 \email{larst at affiliation.org}
 
 \author{Lawrence P. Leipuner}
-\affiliation{Brookhaven Laboratories\\
-  P.O. Box 5000}
+\affiliation{
+  \institution{Brookhaven Laboratories}
+  \streetaddress{P.O. Box 5000}}
 \email{lleipuner at researchlabs.org}
 
 \author{Sean Fogarty}
-\affiliation{NASA Ames Research Center\\
-  Moffett Field\\
-  California 94035}
+\affiliation{%
+  \institution{NASA Ames Research Center}
+  \city{Moffett Field}
+  \state{California} 
+  \postcode{94035}}
 \email{fogartys at amesres.org}
 
 \author{Charles Palmer}
-\affiliation{Palmer Research Laboratories\\
-  8600 Datapoint Drive\\
-  San Antonio, Texas 78229}
+\affiliation{%
+  \institution{Palmer Research Laboratories}
+  \streetaddress{8600 Datapoint Drive}
+  \city{San Antonio}
+  \state{Texas} 
+  \postcode{78229}}
 \email{cpalmer at prl.com}
 
 \author{John Smith}
-\affiliation{The Th{\o}rv{\"a}ld Group}
+\affiliation{\institution{The Th{\o}rv{\"a}ld Group}}
 \email{jsmith at affiliation.org}
 
 \author{Julius P.~Kumquat}
-\affiliation{The Kumquat Consortium} 
+\affiliation{\institution{The Kumquat Consortium}}
 \email{jpkumquat at consortium.net}
 
+
+
+% The default list of authors is too long for headers}
+\renewcommand{\shortauthors}{B. Trovato et. al.}
+
 \begin{abstract}
 This paper provides a sample of a \LaTeX\ document which conforms,
 somewhat loosely, to the formatting guidelines for
@@ -141,7 +164,7 @@
 
 \input{samplebody-conf}
 
-\bibliographystyle{acmsiggraph}
+\bibliographystyle{ACM-Reference-Format}
 \bibliography{sigproc} 
 
 \end{document}

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-sigplan.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/acmart/sample-sigplan.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/sample-sigplan.tex	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/sample-sigplan.tex	2016-07-14 21:38:03 UTC (rev 41692)
@@ -42,51 +42,73 @@
 
 \author{Ben Trovato}
 \authornote{Dr.~Trovato insisted his name be first.}
-\affiliation{Institute for Clarity in Documentation\\
-  P.O. Box 1212\\
-  Dublin, Ohio 43017-6221}
+\orcid{1234-5678-9012}
+\affiliation{%
+  \institution{Institute for Clarity in Documentation}
+  \streetaddress{P.O. Box 1212}
+  \city{Dublin} 
+  \state{Ohio} 
+  \postcode{43017-6221}
+}
 \email{trovato at corporation.com}
 
 \author{G.K.M. Tobin}
 \authornote{The secretary disavows any knowledge of this author's actions.}
-\affiliation{Institute for Clarity in Documentation\\
-  P.O. Box 1212\\
-  Dublin, Ohio 43017-6221}
+\affiliation{%
+  \institution{Institute for Clarity in Documentation}
+  \streetaddress{P.O. Box 1212}
+  \city{Dublin} 
+  \state{Ohio} 
+  \postcode{43017-6221}
+}
 \email{webmaster at marysville-ohio.com}
 
 \author{Lars Th{\o}rv{\"a}ld}
 \authornote{This author is the
   one who did all the really hard work.}
-\affiliation{The Th{\o}rv{\"a}ld Group\\
-  1 Th{\o}rv{\"a}ld Circle\\
-  Hekla, Iceland}
+\affiliation{%
+  \institution{The Th{\o}rv{\"a}ld Group}
+  \streetaddress{1 Th{\o}rv{\"a}ld Circle}
+  \city{Hekla} 
+  \country{Iceland}}
 \email{larst at affiliation.org}
 
 \author{Lawrence P. Leipuner}
-\affiliation{Brookhaven Laboratories\\
-  P.O. Box 5000}
+\affiliation{
+  \institution{Brookhaven Laboratories}
+  \streetaddress{P.O. Box 5000}}
 \email{lleipuner at researchlabs.org}
 
 \author{Sean Fogarty}
-\affiliation{NASA Ames Research Center\\
-  Moffett Field\\
-  California 94035}
+\affiliation{%
+  \institution{NASA Ames Research Center}
+  \city{Moffett Field}
+  \state{California} 
+  \postcode{94035}}
 \email{fogartys at amesres.org}
 
 \author{Charles Palmer}
-\affiliation{Palmer Research Laboratories\\
-  8600 Datapoint Drive\\
-  San Antonio, Texas 78229}
+\affiliation{%
+  \institution{Palmer Research Laboratories}
+  \streetaddress{8600 Datapoint Drive}
+  \city{San Antonio}
+  \state{Texas} 
+  \postcode{78229}}
 \email{cpalmer at prl.com}
 
 \author{John Smith}
-\affiliation{The Th{\o}rv{\"a}ld Group}
+\affiliation{\institution{The Th{\o}rv{\"a}ld Group}}
 \email{jsmith at affiliation.org}
 
 \author{Julius P.~Kumquat}
-\affiliation{The Kumquat Consortium} 
+\affiliation{\institution{The Kumquat Consortium}}
 \email{jpkumquat at consortium.net}
 
+
+% The default list of authors is too long for headers}
+\renewcommand{\shortauthors}{B. Trovato et. al.}
+
+
 \begin{abstract}
 This paper provides a sample of a \LaTeX\ document which conforms,
 somewhat loosely, to the formatting guidelines for
@@ -144,7 +166,7 @@
 
 \input{samplebody-conf}
 
-\bibliographystyle{ACM-Reference-Format-Journals}
+\bibliographystyle{ACM-Reference-Format}
 \bibliography{sigproc} 
 
 \end{document}

Modified: trunk/Master/texmf-dist/doc/latex/acmart/samplebody-conf.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/samplebody-conf.tex	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/samplebody-conf.tex	2016-07-14 21:38:03 UTC (rev 41692)
@@ -262,7 +262,7 @@
 
 The pre-defined theorem-like constructs are \textbf{theorem},
 \textbf{conjecture}, \textbf{proposition}, \textbf{lemma} and
-\textbf{corollary}.  The pre-defined definition-like constructs are
+\textbf{corollary}.  The pre-defined de\-fi\-ni\-ti\-on-like constructs are
 \textbf{example} and \textbf{definition}.  You can add your own
 constructs using the \textsl{amsthm} interface~\cite{Amsthm15}.  The
 styles used in the \verb|\theoremstyle| command are \textbf{acmplain}
@@ -298,14 +298,6 @@
 examples only.
 %\end{document}  % This is where a 'short' article might terminate
 
-%ACKNOWLEDGMENTS are optional
-\section{Acknowledgments}
-This section is optional; it is a location for you
-to acknowledge grants, funding, editing assistance and
-what have you.  In the present case, for example, the
-authors would like to thank Gerald Murray of ACM for
-his help in codifying this \textit{Author's Guide}
-and the \texttt{.cls} and \texttt{.tex} files that it describes.
 
 
 \appendix
@@ -334,7 +326,6 @@
 \subsubsection{Theorem-like Constructs}
 \subsubsection*{A Caveat for the \TeX\ Expert}
 \subsection{Conclusions}
-\subsection{Acknowledgments}
 \subsection{References}
 Generated by bibtex from your \texttt{.bib} file.  Run latex,
 then bibtex, then latex twice (to resolve references)
@@ -346,13 +337,20 @@
 \section{More Help for the Hardy}
 
 Of course, reading the source code is always useful.  The file
-\texttt{acmart.pdf} contains both the user guide and the commented
+\path{acmart.pdf} contains both the user guide and the commented
 code.
 
-\section*{Acknowledgements}
-\label{sec:acks}
+\begin{acks}
+  The authors would like to thank Dr. Yuhua Li for providing the
+  matlab code of  the \textit{BEPS} method. 
 
-\begin{anonsuppress}
-  The acknowledgements are suppressed when the paper is prepared for a
-  blind review.
-\end{anonsuppress}
\ No newline at end of file
+  The authors would also like to thank the anonymous referees for
+  their valuable comments and helpful suggestions. The work is
+  supported by the \grantsponsor{GS501100001809}{National Natural
+    Science Foundation of
+    China}{http://dx.doi.org/10.13039/501100001809} under Grant
+  No.:~\grantnum{GS501100001809}{61273304}
+  and~\grantnum[http://www.nnsf.cn/youngscientsts]{GS501100001809}{Young
+    Scientsts' Support Program}.
+
+\end{acks}

Modified: trunk/Master/texmf-dist/doc/latex/acmart/samplebody-journals.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/acmart/samplebody-journals.tex	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/doc/latex/acmart/samplebody-journals.tex	2016-07-14 21:38:03 UTC (rev 41692)
@@ -260,7 +260,7 @@
   \bottomrule
 \end{tabular}
 \end{center}
-\bigskip
+\bigskip\centering
 \footnotesize\emph{Source:} This is a table
  sourcenote. This is a table sourcenote. This is a table
  sourcenote.
@@ -320,7 +320,7 @@
 test mote without switching channels, denoted as $N_{2}$. We calculate
 the channel-switching time $s$ as
 \begin{displaymath}%
-s=\frac{10}{N_{1}}-\frac{10}{N_{2}}/
+s=\frac{10}{N_{1}}-\frac{10}{N_{2}}.
 \end{displaymath}%
 By repeating the experiments 100 times, we get the average
 channel-switching time of Micaz motes: 24.3\,$\mu$s.
@@ -359,12 +359,21 @@
   
 \end{screenonly}
 
-\section*{Acknowledgements}
+\begin{acks}
 
 The authors would like to thank Dr. Maura Turolla of Telecom
 Italia for providing specifications about the application scenario.
 
+The work is supported by the \grantsponsor{GS501100001809}{National
+  Natural Science Foundation of
+  China}{http://dx.doi.org/10.13039/501100001809} under Grant
+No.:~\grantnum{GS501100001809}{61273304\_a}
+and~\grantnum[http://www.nnsf.cn/youngscientsts]{GS501100001809}{Young
+  Scientsts' Support Program}.
 
+
+\end{acks}
+
 % Bibliography
-\bibliographystyle{ACM-Reference-Format-Journals}
+\bibliographystyle{ACM-Reference-Format}
 \bibliography{sample-bibliography}

Modified: trunk/Master/texmf-dist/source/latex/acmart/acmart.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/acmart/acmart.dtx	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/source/latex/acmart/acmart.dtx	2016-07-14 21:38:03 UTC (rev 41692)
@@ -263,7 +263,7 @@
 %     review & false & A review version: lines are numbered,
 %     hyperlinks are colored\\
 %     screen & false & A screen version: hyperlinks are colored\\
-%     natbib &  & Whether to use |natbib| package (see
+%     natbib & true & Whether to use |natbib| package (see
 %     Section~\ref{sec:ug_bibliography})\\
 %     anonymous & false & Whether to make author(s) anonymous\\
 %     authorversion & false & Whether to generate a special
@@ -413,37 +413,126 @@
 % Besides title, ACM classes allow subtitle, set with the
 % \cs{subtitle}\marg{subtitle} macro.
 %
+% The commands for specification of authors are highly structured.
+% The reason is, they serve double duty:  the authors' information is
+% typeset in the manuscript, \emph{and} is used by the metadata
+% extraction tools for indexing and cataloguing.  Therefore it is very
+% important to follow the guidelines exactly.
+%
 % \DescribeMacro{\author}%
+% \DescribeMacro{\orcid}
 % \DescribeMacro{\affiliation}%
 % \DescribeMacro{\email}%
-% The interface for specifying the authors and their affiliations is
-% close the the one of \progname{amsart}~\cite{instr-l} (and different
-% from the standard \LaTeX).  For each author a separate command
-% |\author| should be used, followed by |\affliation| and |\email|.
-% If several authors share affiliations, in journal formats like
-% |acmsmall| or |acmlarge| one may put the
-% affiliation after all these authors, for example:
+% The basic commands are \cs{author}, \cs{orcid} (for the researchers
+% registered with ORCID, \url{http://www.orcid.org/}), \cs{affiliation} and
+% \cs{email}.  In the simplest case you enter them in this order:
 % \begin{verbatim}
+% \author{...}
+% \orcid{...}
+% \affiliation{...}
+% \email{...}
+% \end{verbatim}
+% Do \emph{not} use \LaTeX\ \cs{and} macro! Each author deserves
+% his or her own \cs{author} command.
+%
+% Note that some formats do not typset e-mails of ORCID identifiers.
+% Do now worry: metadata tools will get them.  
+%
+% Sometimes an author has several affiliations.  In this case the
+% \cs{affiliation} command should be repeated:
+% \begin{verbatim}
+% \author{...}
+% \orcid{...}
+% \affiliation{...}
+% \affiliation{...}
+% \email{...} 
+% \end{verbatim}
+% Similarly you can repeat \cs{email} command.
+%
+% You may have several authors with the same afifliation, different
+% affiliations or overlapping affiliations (author~$A_1$ is affiliated
+% with institutions $I_1$ and $I_2$, while author $A_2$ is affiliated
+% with $I_2$ only, and author $A_3$ is affiliated with
+% $I_1$ and $I_3$, \ldots).  The recommended solution is to put the
+% \cs{affiliation} commands after each author, possibly repeating them:
+% \begin{verbatim}
+% \author{...}
+% \orcid{...}
+% \affiliation{...}
+% \affiliation{...}
+% \email{...} 
+% \author{...}
+% \orcid{...}
+% \affiliation{...}
+% \email{...}  
+% \author{...}
+% \orcid{...}
+% \affiliation{...}
+% \affiliation{...}
+% \email{...} 
+% \end{verbatim}
+%  In some cases when several authors share the same affiliation you may
+%  try to save the space using the format
+% \begin{verbatim}
+% \author{...}
+% \email{...}
+% \author{...}
+% \email{...}
+% \affiliation{...}
+% \end{verbatim}
+%  However, this format is not generally recommended.
+%
+%  \DescribeMacro{\position}%
+%  \DescribeMacro{\institution}%
+%  \DescribeMacro{\department}%
+%  \DescribeMacro{\streetaddress}%
+%  \DescribeMacro{\city}%
+%  \DescribeMacro{\state}%
+%  \DescribeMacro{\postcode}%
+%  \DescribeMacro{\country}%
+%  The \cs{affiliation} command is further structured to interact with
+%  the metadata extraction tools.  Inside the this command you should
+%  use \cs{position}, \cs{institution}, \cs{department}, \cs{city},
+%  \cs{streetaddress}, \cs{state}, \cs{postcode} and \cs{country}
+%  macros to indicate the corresponding parts of the affiliation.
+%  Note that in some cases (for example, journals) these parts are not
+%  printed in the resulting copy, but they \emph{are} necessary since
+%  they are used by the XML metadata extraction programs.  Do
+%  \emph{not} put commas or |\\| between the elements of
+%  \cs{affiliation}: they will be provided automatically.
+%
+% An example of the author block:
+% \begin{verbatim}
 % \author{A. U. Thor}
+% \orcid{1234-4564-1234-4565}
+% \affiliation{%
+%   \institution{University of New South Wales}
+%   \department{School of Biomedical Engineering}
+%   \streetaddress{Samuels Building (F25), Kensington Campus}
+%   \city{Sidney}
+%   \state{NSW}
+%   \postcode{2052}
+%   \country{Australia}}
 % \email{author at nsw.au.edu}
-% \affiliation{University of New South Wales}
 % \author{A. N. Other}
+% \affiliation{%
+%   \institution{University of New South Wales}
+%   \city{Sidney}
+%   \state{NSW}
+%   \country{Australia}}
 % \author{C. O. Respondent}
-% \affiliation{University of Pennsylvania}
+% \orcid{1234-4565-4564-1234}
+% \affiliation{%
+%   \institution{University of Pennsylvania}
+%   \city{Philadelphia}
+%   \state{PA}
+%   \country{USA}}
+% \affiliation{%
+%   \institution{University of New South Wales}
+%   \city{Sidney}
+%   \state{NSW}
+%   \country{Australia}}
 % \end{verbatim}
-% In the cases of overlapping affiliations it is advisable to repeat
-% the full list, for example,
-% \begin{verbatim}
-% \author{A. U. Thor}
-% \affiliation{University of New South Wales, Australia}
-% \email{author at nsw.edu.au}
-% \author{A. N. Other}
-% \affiliation{University of Pennsylvania, USA and University of New South
-% Wales, Australia}
-% \email{other at upenn.edu}
-% \end{verbatim}
-% For \emph{conferences} the affiliations should \emph{always} be
-% repeated, even if they are shared between the authors.
 %
 % Note that old ACM conference formats did not allow for more than six
 % authors and required some efforts from the authors to achieve
@@ -719,7 +808,7 @@
 % settings and their meanings are listed in
 % Table~\ref{tab:settopmatter}.  For example,
 % \begin{verbatim}
-% \settopmatter{printbib=false, printccs=true}
+% \settopmatter{printacmref=false, printccs=true, printfolios=true}
 % \end{verbatim}
 %
 %
@@ -732,8 +821,9 @@
 %     Parameter & Values & Meaning\\
 %     \midrule
 %     printccs & true/false & Whether to print CCS categories\\
-%     printbib & true/false & Whether to print ACM bibliographic
+%     printacmref & true/false & Whether to print ACM bibliographic
 %     entry\\
+%     printfolios & true/false & Whether to print page numbers (folios)\\
 %     \bottomrule
 %   \end{tabularx}
 % \end{table}
@@ -891,6 +981,8 @@
 %
 %
 %
+%
+%
 %\subsection{Online-only and offline-only material}
 %\label{sec:ug_screen}
 %
@@ -912,11 +1004,12 @@
 % \begin{screenonly}
 %   (The actual section).
 % \end{screenonly}
-%
 % \end{verbatim}
 %
+% We use \textsl{comment} package for typesetting this code, so
+% |\begin| and |\end| should start at the first positions of the lines
+% of their own (no initial spaces etc.).
 %
-%
 %\subsection{Note about anonymous mode}
 %\label{sec:ug_anonymous}
 %
@@ -924,51 +1017,100 @@
 % When the option |anonymous| is selected, \TeX\ suppresses author
 % information (including number of authors) for a blind review.
 % However, sometimes the information identifying the authors may be
-% present in the body of the paper, for example, in the
-% acknowledgements.  The environment |anonsuppress| is used to
-% suppress such information, for example
+% present in the body of the paper
 % \begin{verbatim}
-% \section*{Acknowledgements}
 % \begin{anonsuppress}
-%   The authors wish to thank Prof. C.~O.~Lleague for her generous
-%   advices and the Society for Development of Oort Cloud for the
-%   financial support.
+%   This is the continuation of the previous work by the author
+%   \cite{prev1, prev2}.  
 % \end{anonsuppress}
 % \end{verbatim}
+%
+% As for |printonly| and |screenonly| environments,
+% |\begin{anonsuppress}| and |\end{anonsuppress}| should start the
+% line of their own (no leading or trailing spaces).  
 % 
+%\subsection{Acknowledgments}
+%\label{sec:ug_acks}
 %
+% The traditional ``Acknowledgments'' section is conventionally used
+% to thank persons and granting agencies for their help and support.
+% However, there are several important considerations about this
+% section.
+%
+% First, in the anonymous mode this section must be omitted: it gives
+% too much information to the reviewers.  Second, the data about
+% the grants is extracted and stored separately by the postprocessing
+% software.  ACM classes provide facilities for both these tasks.
+%
+% \DescribeEnv{acks}%
+% The environment |acks| starts an unnumbered section
+% ``Acknowledgments'' unless the anonymous mode is chosen.  Put all
+% thanks inside this environment.
+%
+% As for |printonly| and |screenonly| environments,
+% |\begin{acks}| and |\end{acls}| should start the
+% line of their own (no leading or trailing spaces).  
+
+%
+% \DescribeMacro{\grantsponsor}%
+% \DescribeMacro{\grantnum}%
+% All the financial support \emph{must} be listed using the commands
+% \cs{grantsponsor} and \cs{grantnum}.  These commands tell the
+% postprocessing software about the granting organization and the
+% grant.  The format of the command is the following:
+% \begin{quote}
+%   \cs{grantsponsor}\marg{sponsorID}\marg{name}\marg{url}\\
+%   \cs{grantnum}\oarg{url}\marg{sponsorID}\marg{number}.
+% \end{quote}
+% Here \marg{sponsorID} is the unique ID used to match grants to
+% sponsors, \marg{name} is the name of the sponsor, \marg{url} is its
+% URL, and \marg{number} is the grant number.  The \marg{sponsorID} of
+% the \cs{grantnum} command must correspond to \cs{sponsorID} of a
+% \cs{grantsponsor command}.  Some awards have their own web pages,
+% which you can include using the optional argument of \cs{grantnum}
+% command. 
+%
+% Example:
+% \begin{verbatim}
+% \begin{acks}
+%   The authors would like to thank Dr. Yuhua Li for providing the
+%   matlab code of  the \textit{BEPS} method. 
+%
+%   The authors would also like to thank the anonymous referees for
+%   their valuable comments and helpful suggestions. The work is
+%   supported by the \grantsponsor{GS501100001809}{National Natural
+%   Science Foundation of
+%   China}{http://dx.doi.org/10.13039/501100001809} under Grant
+%   No.:~\grantnum{GS501100001809}{61273304}
+%   and~\grantnum[http://www.nnsf.cn/youngscientsts]{GS501100001809}{Young 
+%   Scientsts' Support Program}.
+% \end{acks}
+% \end{verbatim}
+% 
+%
 %\subsection{Bibliography}
 %\label{sec:ug_bibliography}
 %
-% At present some formats use \textsl{natbib} package by default,
-% while some are not compatible with \textsl{natbib}.  Table
+% ACM uses \textsl{natbib} package for formatting of referencing ant
+% the style \path{ACM-Reference-Format.bst} for Bib\TeX\
+% processing.  You may disable loading of \textsl{natbib} by using the
+% option |natbib=false| in \cs{documentclass}.  However, it is not
+% recommended, as well as the use of Bib\TeX\ styles other than
+% \path{ACM-Reference-Format.bst}, and may delay the processing of the
+% manuscript.  
+% 
 %
-% \begin{table}
-%   \caption{Bibliography styles used by different formats}
-%   \label{tab:bst}
-%   \begin{tabularx}{\textwidth}{l<{\ttfamily}lX<{\raggedright}l}
-%     \toprule
-%     \normalfont Format & \textsl{natbib} use & Bibliography style &
-%     Citaton format\\
-%     \midrule
-%     manuscript & Yes & ACM-Reference-Format-Journals & Author/year\\
-%     acmsmall & Yes & ACM-Reference-Format-Journals & Author/year\\
-%     acmlarge & Yes & ACM-Reference-Format-Journals & Author/year\\
-%     acmtog & Yes & ACM-Reference-Format-Journals & Author/year\\
-%     sigconf & No & acm-abbrv, acm-alpha, acm-plain or acm-unsrt &
-%     Numeric or alpha \\
-%     siggraph & No & acmsiggraph & Author/year \\
-%     sigplan & Yes & ACM-Reference-Format-Journals & Author/year \\
-%     sigchi & No & SIGCHI-Reference-Format & Numeric\\
-%     sigchi-a & No & SIGCHI-Reference-Format & Numeric \\
-%     \bottomrule
-%   \end{tabularx}
-% \end{table}
-%
-% Usually when you select a format, \LaTeX\ automatically determines
-% whether you need \textsl{natbib} and the required settings.
-% However, you can ovveride these decision by manually setting the
-% option |natbib| to |true| or |false|.  You may further customize
+% \DescribeMacro{\citestyle}%
+% If you use |natbib|, you can select one of two predefined sitation
+% styles: the author-year format |acmauthoryear| or the numeric
+% format |acmnumeric| using the command \cs{sitestyle}, for example,
+% \begin{verbatim}
+% \citestyle{acmauthoryear}
+% \end{verbatim}
+% Note that numeric citations are the default mode for most formats.  
+%  
+% \DescribeMacro{\setcitestyle}%
+% You may further customize
 % \textsl{natbib} using \cs{setcitestyle} command, for example,
 % \begin{verbatim}
 % \setcitestyle{numbers,sort&compress}
@@ -1037,7 +1179,7 @@
 \ProvidesFile{acmart.dtx}
 %</gobble>
 %<class>\ProvidesClass{acmart}
-[2016/05/30 v1.12 Typesetting articles for Association of
+[2016/07/12 v1.18 Typesetting articles for Association of
 Computing Machinery]
 %    \end{macrocode}
 %
@@ -1065,6 +1207,11 @@
 % \changes{v1.11}{2016/05/27}{Customization of ACM theorem styles and
 % proof environment by Matthew Fluet}
 % \changes{v1.12}{2016/05/30}{Documentation updates}
+% \changes{v1.14}{2016/06/09}{\cs{citestyle} updates (Matthew Fluet)}
+% \changes{v1.16}{2016/07/07}{Formatting header/footer (Matthew
+% Fluet)}
+% \changes{v1.18}{2016/07/10}{Natbib is now the default for all
+% formats} 
 %
 %
 % And the driver code:
@@ -1300,26 +1447,7 @@
 % overrode format's selection):
 %    \begin{macrocode}
 \if at ACM@natbib at override\else
-  \ifcase\ACM at format@nr
-  \relax % manuscript
     \@ACM at natbibtrue
-  \or % acmsmall
-    \@ACM at natbibtrue
-  \or % acmlarge
-    \@ACM at natbibtrue
-  \or % acmtog
-    \@ACM at natbibtrue
-  \or % sigconf
-    \@ACM at natbibfalse
-  \or % siggraph
-    \@ACM at natbibfalse
-   \or % sigplan
-    \@ACM at natbibtrue
-   \or % sigchi
-    \@ACM at natbibfalse
-  \or % sigchi-a
-    \@ACM at natbibfalse
-  \fi
 \fi
 %    \end{macrocode}
 % 
@@ -1327,7 +1455,9 @@
 %\subsection{Loading base class and package}
 %\label{sec:loading}
 %
+% \changes{v1.13}{2016/06/06}{Increased font size for ACM Large}
 %
+%
 % At this point we either have \cs{ACM at fontsize}, or use defaults
 %    \begin{macrocode}
 \ifx\ACM at fontsize\@empty
@@ -1337,7 +1467,7 @@
   \or % acmsmall
     \def\ACM at fontsize{10pt}%
   \or % acmlarge
-    \def\ACM at fontsize{9pt}%
+    \def\ACM at fontsize{10pt}%
   \or % acmtog
     \def\ACM at fontsize{9pt}%
   \or % sigconf
@@ -1377,8 +1507,10 @@
 \fi
 %    \end{macrocode}
 %
+% \changes{v1.14}{2016/06/09}{Patched \cs{citestyle}}
 % Citations.  We patch \cs{setcitestyle} to allow, e.g.,
-% \cs{setcitestyle}|{sort}| and \cs{setcitestyle}|{nosort}|
+% \cs{setcitestyle}|{sort}| and \cs{setcitestyle}|{nosort}|.  We patch
+% \cs{citestyle} to warn about undefined citation styles.
 %    \begin{macrocode}
 \if at ACM@natbib
   \RequirePackage{natbib}
@@ -1448,13 +1580,53 @@
   }%
   \NAT@@setcites
   }
-  \setcitestyle{%
-    open={[},close={]},citesep={;},%
-    authoryear,aysep={},yysep={,},%
-    notesep={, }}
+  \renewcommand\citestyle[1]{%
+    \ifcsname bibstyle@#1\endcsname%
+    \csname bibstyle@#1\endcsname\let\bibstyle\@gobble%
+    \else%
+    \@latex at error{Undefined `#1' citestyle}%
+    \fi
+  }%
 \fi
 %    \end{macrocode}
 %
+% \begin{macro}{\bibstyle at acmauthoryear}
+% \changes{v1.13}{2016/06/06}{Added macro}
+% \changes{v1.14}{2016/06/09}{Moved def of \cs{bibstyle at acmauthoryear}
+%   before use}
+%   The default author-year format:
+%    \begin{macrocode}
+\newcommand{\bibstyle at acmauthoryear}{%
+  \setcitestyle{%
+    authoryear,%
+    open={(},close={)},citesep={;},%
+    aysep={},yysep={,},%
+    notesep={, }}}
+%    \end{macrocode}
+%
+% \end{macro}
+%
+% \begin{macro}{\bibstyle at acmnumeric}
+% \changes{v1.13}{2016/06/06}{Added macro}
+% \changes{v1.14}{2016/06/09}{Moved def of \cs{bibstyle at numeric}
+%   before use}
+%   The default numeric format:
+%    \begin{macrocode}
+\newcommand{\bibstyle at acmnumeric}{%
+  \setcitestyle{%
+    numbers,sort&compress,%
+    open={[},close={]},citesep={,},%
+    notesep={, }}}
+%    \end{macrocode}
+%
+% \end{macro}
+%
+% The default is numeric:
+%    \begin{macrocode}
+\citestyle{acmnumeric}
+%    \end{macrocode}
+% 
+%
 % Before we call |hyperref|, we redefine \cs{startsection} commands to
 % their \LaTeX\ defaults, since |amsart| ones are too AMS-specific.
 % We need to do this early since we want |hyperref| to have a chance
@@ -1578,7 +1750,7 @@
 \fi
 %    \end{macrocode}
 %
-% Bibliography mangling.  Siggraph does not want the label.  
+% Bibliography mangling. 
 %    \begin{macrocode}
 \if at ACM@natbib
   \let\citeN\cite
@@ -1591,45 +1763,31 @@
   \def\shortcite#1{\citeyear{#1}}
   \DeclareRobustCommand\citeA
      {\begingroup\NAT at swafalse
-       \let\NAT at ctype\@ne\NAT at partrue\NAT at fullfalse\NAT at open\NAT at citetp}
-  \providecommand\newblock{}
+       \let\NAT at ctype\@ne\NAT at partrue\NAT at fullfalse\NAT at open\NAT at citetp}%
+  \providecommand\newblock{}%
 \else
   \providecommand\citename[1]{#1}
 \fi
-\ifcase\ACM at format@nr
-\relax % manuscript
-\or % acmsmall
-\or % acmlarge
-\or % acmtog
-\or % sigconf
-\or % siggraph
-   \def\@biblabel#1{}
-   \ifx\bibhang\@undefined
-      \newlength\bibhang
-   \fi
-   \setlength{\bibhang}{1em}
-    \renewenvironment{thebibliography}[1]{%
-      \@bibtitlestyle
-      \normalfont\bibliofont\labelsep .5em\relax
-      \renewcommand\theenumiv{\arabic{enumiv}}\let\p at enumiv\@empty
-      \list{\@biblabel{\theenumiv}}{\labelwidth\z@
-        \setlength{\itemindent}{-\bibhang}%
-        \setlength{\leftmargin}{\bibhang}%
-        \labelsep\z@
-        \def\newblock{\hskip .11em plus .33em minus .07em}%
-        \usecounter{enumiv}}%
-      \sloppy \clubpenalty\@M \widowpenalty\clubpenalty
-      \sfcode`\.=\@m
-    }{%
-      \def\@noitemerr{\@latex at warning{Empty `thebibliography' environment}}%
-      \endlist
-    }
-\or % sigplan  
-\or % sigchi
-\or % sigchi-a
-\fi
 %    \end{macrocode}
 %
+%
+% \begin{macro}{\bibliographystyle}
+% \changes{v1.13}{2016/06/06}{Redefined macro}
+%   Amsart redefines \cs{bibliographystyle} since it prefers AMS
+%   bibliography.  We turn it back to \LaTeX\ definition:
+%    \begin{macrocode}
+\def\bibliographystyle#1{%
+  \ifx\@begindocumenthook\@undefined\else
+    \expandafter\AtBeginDocument
+  \fi
+    {\if at filesw
+       \immediate\write\@auxout{\string\bibstyle{#1}}%
+     \fi}}
+%    \end{macrocode}
+%   
+% \end{macro}
+%
+%
 % Graphics and color
 %    \begin{macrocode}
 \RequirePackage{graphicx, xcolor}
@@ -1651,6 +1809,7 @@
 %\subsection{Paper size and paragraphing}
 %\label{sec:paper}
 %
+% \changes{v1.17}{2016/07/07}{Slightly decreased margins for sigs}
 % We use |geometry| for dimensions
 %    \begin{macrocode}
 \RequirePackage{geometry}
@@ -1679,13 +1838,13 @@
    \geometry{twoside=true, head=1pc,
      paperwidth=8.5in, paperheight=11in,
      includeheadfoot, columnsep=2pc,
-     top=57pt, bottom=75pt, inner=54pt, outer=57pt
+     top=57pt, bottom=73pt, inner=54pt, outer=54pt
      }%
 \or % siggraph
    \geometry{twoside=true, head=1pc,
      paperwidth=8.5in, paperheight=11in,
      includeheadfoot, columnsep=2pc,
-     top=57pt, bottom=75pt, inner=54pt, outer=57pt
+     top=57pt, bottom=73pt, inner=54pt, outer=54pt
      }%
 \or % sigplan
    \geometry{twoside=true, head=1pc,
@@ -1697,7 +1856,7 @@
    \geometry{twoside=true, head=1pc,
      paperwidth=8.5in, paperheight=11in,
      includeheadfoot, columnsep=2pc,
-     top=66pt, bottom=78pt, inner=54pt, outer=48pt
+     top=66pt, bottom=73pt, inner=54pt, outer=54pt
      }%
 \or % sigchi-a
    \geometry{twoside=false, head=1pc,
@@ -1785,7 +1944,6 @@
   \color at endgroup
   \egroup
   \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}}
-
 %    \end{macrocode}
 %
 % \end{macro}
@@ -1817,6 +1975,36 @@
 %
 % \end{macro}
 %
+% \begin{macro}{\@mpfootnotetext}
+% \changes{v1.13}{2016/06/06}{Made minipage footnotes centered}
+%   We want the footnotes in minipages centered:
+%    \begin{macrocode}
+\long\def\@mpfootnotetext#1{%
+  \global\setbox\@mpfootins\vbox{%
+    \unvbox\@mpfootins
+    \reset at font\footnotesize
+    \hsize\columnwidth
+    \@parboxrestore
+    \protected at edef\@currentlabel
+         {\csname p at mpfootnote\endcsname\@thefnmark}%
+    \color at begingroup\centering
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+    \color at endgroup}}
+%    \end{macrocode}
+%   
+% \end{macro}
+% 
+% \begin{macro}{\@makefnmark}
+% \changes{v1.17}{2016/067/09}{Redefined}
+%   AMS classes use a buggy definition of \cs{makefnmark}.  We revert
+%   to the standard one.
+%    \begin{macrocode}
+\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
+%    \end{macrocode}
+%   
+% \end{macro}
+%
 %\subsection{Fonts}
 %\label{sec:fonts}
 %
@@ -2038,6 +2226,24 @@
 %   
 % \end{macro}
 %
+%
+% \begin{macro}{\description}
+% \changes{v1.17}{2016/07/07}{Decreased indent}
+%   AMS uses additional indent of 6pt.  Frank recommends
+%   dropping it.
+%    \begin{macrocode}
+\renewenvironment{description}{\list{}{%
+    \itemindent-12\p@
+    \labelwidth\z@ \let\makelabel\descriptionlabel}%
+}{
+  \endlist
+}
+\let\enddescription=\endlist % for efficiency
+%    \end{macrocode}
+%   
+% \end{macro}
+%
+%
 %\subsection{Top matter data}
 %\label{sec:top_matter_data}
 %
@@ -2292,6 +2498,7 @@
 %
 % The defaults:
 %    \begin{macrocode}
+\def\@journalCode at nr{0}
 \def\@journalName{}%
 \def\@journalNameShort{\@journalName}%
 \def\@permissionCodeOne{XXXX-XX}%
@@ -2326,20 +2533,33 @@
 % \end{macro}
 %
 %
-% \begin{macro}{\num at authors}
-%   The total number of authors
+% \begin{macro}{\num at authorgroups}
+% \changes{v1.15}{2016/06/25}{Renamed}
+%   The total number of ``groups''.  Each group is several authors with
+%   the same affiliations(s)
 %    \begin{macrocode}
-\newcount\num at authors
-\num at authors=0\relax
+\newcount\num at authorgroups
+\num at authorgroups=0\relax
 %    \end{macrocode}
 %
 % \end{macro}
 %
+% \begin{macro}{\if at insideauthorgroup}
+% \changes{v1.15}{2016/06/25}{Introduced macro}
+%  Whether we are continuing an author group
+\newif\if at insideauthorgroup
+\@insideauthorgroupfalse
+% \end{macro}
+%
 % \begin{macro}{\author}
+% \changes{v1.15}{2016/06/25}{Added code for author groups}
 %   Adding an author to the list of authors and addresses
 %    \begin{macrocode}
 \renewcommand\author[2][]{%
-  \global\advance\num at authors by 1\relax
+  \if at insideauthorgroup\else
+    \global\advance\num at authorgroups by 1\relax
+    \global\@insideauthorgrouptrue
+  \fi
   \ifx\addresses\@empty
     \if at ACM@anonymous
       \gdef\addresses{\@author{Anonymous Author(s)}}%
@@ -2380,11 +2600,13 @@
 %
 %
 % \begin{macro}{\affiliation}
+% \changes{v1.15}{2016/06/25}{Added code for author groups}
 %   The macro \cs{affiliation} mimics \cs{address} from |amsart|.
 %   Note that it has an optional argument we do not currently need,
 %   but keep for the possible future use.
 %    \begin{macrocode}
 \newcommand{\affiliation}[2][]{%
+  \global\@insideauthorgroupfalse
   \if at ACM@anonymous\else
     \g at addto@macro\addresses{\affiliation{#1}{#2}}%
   \fi}
@@ -2405,6 +2627,12 @@
 %
 % \end{macro}
 %
+% \begin{macro}{\orcid}
+% \changes{v1.15}{2016/06/25}{Introduced macro}
+%   Right now we do not typeset orcids
+\let\orcid\@gobble
+% \end{macro}
+% 
 % \begin{macro}{\@titlenotes}
 %   The titlenotes
 %    \begin{macrocode}
@@ -2475,28 +2703,31 @@
 % \end{macro}
 %
 % \begin{macro}{\acmVolume}
+% \changes{v1.17}{2016/07/10}{The default is now numerical}
 %   The current volume
 %    \begin{macrocode}
 \def\acmVolume#1{\def\@acmVolume{#1}}
-\acmVolume{VV}
+\acmVolume{1}
 %    \end{macrocode}
 %
 % \end{macro}
 %
 % \begin{macro}{\acmNumber}
+% \changes{v1.17}{2016/07/10}{The default is now numerical}
 %   The current number
 %    \begin{macrocode}
 \def\acmNumber#1{\def\@acmNumber{#1}}
-\acmNumber{NNN}
+\acmNumber{1}
 %    \end{macrocode}
 %
 % \end{macro}
 %
 % \begin{macro}{\acmArticle}
+% \changes{v1.17}{2016/07/10}{The default is now numerical}
 %   The current article
 %    \begin{macrocode}
 \def\acmArticle#1{\def\@acmArticle{#1}}
-\acmArticle{AA}
+\acmArticle{1}
 %    \end{macrocode}
 %
 % \end{macro}
@@ -2512,19 +2743,21 @@
 % \end{macro}
 %
 % \begin{macro}{\acmYear}
+% \changes{v1.17}{2016/07/10}{The default is now numerical}
 %   The current year
 %    \begin{macrocode}
 \def\acmYear#1{\def\@acmYear{#1}}
-\acmYear{YYYY}
+\acmYear{2016}
 %    \end{macrocode}
 %
 % \end{macro}
 %
 % \begin{macro}{\acmMonth}
+% \changes{v1.17}{2017/07/09}{The default must be numerical.   Closes \#50.}
 %   The current month
 %    \begin{macrocode}
 \def\acmMonth#1{\def\@acmMonth{#1}}
-\acmMonth{MM}
+\acmMonth{1}
 %    \end{macrocode}
 %
 % \end{macro}
@@ -2707,20 +2940,33 @@
 %    \end{macrocode}
 %
 % \end{macro}
-% \begin{macro}{\if at ACM@printbib}
+% \begin{macro}{\if at ACM@printacmref}
+% \changes{v1.17}{2016/07/10}{Renamed from \cs{if at ACM@printbib}}
 %   Whether to print ACM bib
 %    \begin{macrocode}
-\define at boolkey+{@ACM at topmatter@}[@ACM@]{printbib}[true]{%
-  \if at ACM@printcss
+\define at boolkey+{@ACM at topmatter@}[@ACM@]{printacmref}[true]{%
+  \if at ACM@printacmref
     \ClassInfo{\@classname}{Printing bibformat}%
   \else
     \ClassInfo{\@classname}{Suppressing bibformat}%
-  \fi}{\ClassError{\@classname}{printbib must be true or false}}
+  \fi}{\ClassError{\@classname}{printacmref must be true or false}}
 %    \end{macrocode}
 %
 % \end{macro}
 %
-%
+% \begin{macro}{\if at ACM@printfolios}
+% \changes{v1.13}{2016/06/06}{Added macro}
+%   Whether to print folios
+%    \begin{macrocode}
+\define at boolkey+{@ACM at topmatter@}[@ACM@]{printfolios}[true]{%
+  \if at ACM@printfolios
+    \ClassInfo{\@classname}{Printing folios}%
+  \else
+    \ClassInfo{\@classname}{Suppressing folios}%
+  \fi}{\ClassError{\@classname}{printfolios must be true or false}}
+%    \end{macrocode}
+% \end{macro}
+% 
 % \begin{macro}{\settopmatter}
 %   The usual syntactic sugar
 %    \begin{macrocode}
@@ -2730,16 +2976,18 @@
 % \end{macro}
 %
 %
+% \changes{v1.13}{2016/06/06}{Print bibliographic information by
+% default for the proceedings}
 % Now the settings
 %    \begin{macrocode}
-\settopmatter{printcss=true}
+\settopmatter{printcss=true, printacmref=true}
 \if at ACM@manuscript
-  \settopmatter{printbib=false}
+  \settopmatter{printfolios=true}
 \else
   \if at ACM@journal
-    \settopmatter{printbib=true}
+    \settopmatter{printfolios=true}
   \else
-    \settopmatter{printbib=false}
+    \settopmatter{printfolios=false}
   \fi
 \fi
 %    \end{macrocode}
@@ -3134,7 +3382,7 @@
 % \changes{v1.10}{2016/05/23}{Corrected a bug with doi in manuscript
 % and author vertsion,
 % \url{https://github.com/borisveytsman/acmart/issues/36}} 
-% \changes{v1.12}{2016/05/30}{Moved thankses to copyrightpermission box.}
+% \changes{v1.12}{2016/05/30}{Moved thankses to copyrightpermission box}
 %   The (in)famous \cs{maketitle}.  Note that in sigchi-a mode authors
 %   are \emph{not} in the title box.
 %
@@ -3146,7 +3394,7 @@
 \def\maketitle{%
   \if at ACM@anonymous
     % Anonymize omission of \author-s
-    \ifnum\num at authors=0\author{}\fi
+    \ifnum\num at authorgroups=0\author{}\fi
   \fi
   \begingroup
   \let\@footnotemark\@footnotemark at nolink
@@ -3238,7 +3486,7 @@
   \andify\shortauthors
   \global\let\authors=\authors
   \global\let\shortauthors=\shortauthors
-  \if at ACM@printbib
+  \if at ACM@printacmref
      \@mkbibcitation
   \fi
   \hypersetup{pdfauthor={\authors},
@@ -3521,8 +3769,83 @@
 %
 % \end{macro}
 %
+% \begin{macro}{\@ACM at addtoaddress}
+% \changes{v1.15}{2016/07/03}{Added macro}
+%   The macro adds an item to address using the following rules:
+%   \begin{enumerate}
+%   \item If we start a paragraph, add the item
+%   \item Otherwise, add a comma and the item
+%   \item However, the comma is deleted, if it is on the end of the
+%   line.  We use the magic cleaders trick for this.
+%   \end{enumerate}
+%    \begin{macrocode}
+\newbox\@ACM at commabox
+\def\@ACM at addtoaddress#1{%
+  \ifvmode\else
+    \setbox\@ACM at commabox=\hbox{, }%
+    \unskip\cleaders\copy\@ACM at commabox\hskip\wd\@ACM at commabox
+  \fi
+  #1}
+%    \end{macrocode}
+% \end{macro}
 %
+% \begin{macro}{\institution}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \begin{macro}{\position}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \begin{macro}{\department}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \begin{macro}{\streetaddress}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \begin{macro}{\city}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \begin{macro}{\state}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \begin{macro}{\postcode}
+% \changes{v1.15}{2016/07/03}{Added macro}
+% \begin{macro}{\country}
+% \changes{v1.15}{2016/07/03}{Added macro}
+%   Theoretically we can define the macros for \cs{affiliation} inside
+%   the \cs{@mkauthors}-style commands.  However, this would lead to a
+%   strange error if an author uses them outside \cs{affiliation}.  Of
+%   course we can make them produce an error message, but\ldots
+%
+%   We follow the strange American tradtion of no comma before zip
+%   code.  
+%    \begin{macrocode}
+\if at ACM@journal
+  \let\position\@gobble
+  \def\institution#1{#1\ignorespaces}%
+  \let\department\@gobble
+  \let\streetaddress\@gobble
+  \let\city\@gobble
+  \let\state\@gobble
+  \let\postcode\@gobble
+  \let\country\@gobble
+\else
+  \def\position#1{#1\par}%
+  \def\institution#1{#1\par}%
+  \def\department#1{#1\par}%
+  \def\streetaddress#1{#1\par}%
+  \let\city\@ACM at addtoaddress
+  \let\state\@ACM at addtoaddress
+  \def\postcode#1{\unskip\space#1}%
+  \let\country\@ACM at addtoaddress
+\fi
+%    \end{macrocode}
+%   
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
 % \begin{macro}{\@mkauthors}
+% \changes{v1.17}{2017/07/09}{TOG now uses the same authors block as
+% other journals}
 %   Typesetting authors
 %    \begin{macrocode}
 \def\@mkauthors{\begingroup
@@ -3535,7 +3858,7 @@
   \or % acmlarge
     \@mkauthors at i
   \or % acmtog
-    \@mkauthors at ii
+    \@mkauthors at i
   \or % sigconf
     \@mkauthors at iii
   \or % siggraph
@@ -3569,11 +3892,14 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \changes{v1.13}{2016/06/06}{Font adjustments for acmsmall}
 % Adjusting fonts for different formats
 %    \begin{macrocode}
 \ifcase\ACM at format@nr
 \relax % manuscript
 \or % acmsmall
+  \def\@authorfont{\large\sffamily}
+  \def\@affiliationfont{\small\normalfont}
 \or % acmlarge
 \or % acmtog
   \def\@authorfont{\LARGE\sffamily}
@@ -3596,15 +3922,33 @@
 \fi
 %    \end{macrocode}
 %
+% \begin{macro}{\@typeset at author@line}
+% \changes{v1.18}{2017/07/12}{Added macro}
+%   At this point we have \cs{@currentauthors} and
+%   \cs{@currentaffiliations}.  We typeset them in the journal style
+%    \begin{macrocode}
+\def\@typeset at author@line{%
+  \andify\@currentauthors\par\noindent
+  \@currentauthors\def\@currentauthors{}%
+  \ifx\@currentaffiliations\@empty\else
+    \andify\@currentaffiliations
+      \unskip, {\@currentaffiliations}\par
+  \fi
+  \def\@currentaffiliations{}}
+%    \end{macrocode}
+%   
+% \end{macro}
+%
+%
 % \begin{macro}{\@mkauthors at i}
+% \changes{v1.18}{2017/07/12}{Now we andify affiliations}
 %   This is version used in most formats.  Note that \cs{and} between
 %   authors with the same affiliation becomes \verb*| and |:
 %    \begin{macrocode}
 \def\@mkauthors at i{%
   \def\@currentauthors{}%
-  \def\and{%
-    \andify\@currentauthors\par\noindent
-    \@currentauthors\def\@currentauthors{}}%
+  \def\@currentaffiliations{}%
+  \global\let\and\@typeset at author@line
   \def\@author##1{%
     \ifx\@currentauthors\@empty
       \gdef\@currentauthors{\@authorfont\MakeUppercase{##1}}%
@@ -3611,16 +3955,20 @@
     \else
        \g at addto@macro{\@currentauthors}{\and\MakeUppercase{##1}}%
     \fi
-    \def\and{}}%
+    \gdef\and{}}%
   \def\email##1##2{}%
   \def\affiliation##1##2{%
-    \ifx\@currentauthors\@empty\else
-      \andify\@currentauthors\par\noindent\@currentauthors
+    \def\@tempa{##2}\ifx\@tempa\@empty\else
+       \ifx\@currentaffiliations\@empty
+          \gdef\@currentaffiliations{\@affiliationfont##2}%
+       \else
+         \g at addto@macro{\@currentaffiliations}{\and##2}%
+      \fi
     \fi
-    \def\@currentauthors{}\def\@tempa{##2}\ifx\@tempa\@empty\else
-    \unskip, {\@affiliationfont##2}\fi\def\and{\par\noindent}}%
+     \global\let\and\@typeset at author@line}
   \global\setbox\mktitle at bx=\vbox{\noindent\box\mktitle at bx\par\medskip
-    \noindent\addresses\andify\@currentauthors\par\noindent\@currentauthors\par\medskip}%
+    \noindent\addresses\@typeset at author@line
+   \par\medskip}%
 }
 %    \end{macrocode}
 %
@@ -3627,31 +3975,8 @@
 % \end{macro}
 %
 % \begin{macro}{\@mkauthors at ii}
-%   This is version used in acmtog.  A more vertical design
-%    \begin{macrocode}
-\def\@mkauthors at ii{\par\medskip
-  \def\@currentauthors{}%
-  \def\and{}%
-  \def\@author##1{%
-    \ifx\@currentauthors\@empty
-      \gdef\@currentauthors{\@authorfont
-      \MakeUppercase{##1}}%
-    \else
-      \g at addto@macro{\@currentauthors}{\and\MakeUppercase{##1}}%
-    \fi\def\and{}}%
-  \def\email##1##2{}%
-  \def\affiliation##1##2{%
-    \ifx\@currentauthors\@empty\else
-      \andify\@currentauthors\par\noindent\@currentauthors
-    \fi
-    \def\@currentauthors{}\def\@tempa{##2}\ifx\@tempa\@empty\else
-    \par\noindent{\@affiliationfont##2}\fi
-    \def\and{\par\noindent{\@affiliationfont and}\par
-      \noindent\def\and{}}}%
-  \global\setbox\mktitle at bx=\vbox{\noindent\box\mktitle at bx\par\medskip
-    \noindent\addresses\andify\@currentauthors\par\noindent\@currentauthors\par\medskip}%
-}
-%    \end{macrocode}
+% \changes{v1.17}{2017/07/09}{Deleted}
+%   \cs{@mkauthors at iI} was version used in acmtog.  No longer necessary
 %
 % \end{macro}
 %
@@ -3680,9 +4005,25 @@
 %
 % \end{macro}
 %
+% \begin{macro}{\@typeset at author@bx}
+% \changes{v1.15}{2016/07/04}{Moved to separate macro}
+%   Typesetting the box with authors.  Note that in SIGCHI-A the box
+%   is not centered.
+%    \begin{macrocode}
+\def\@typeset at author@bx{\bgroup\hsize=\author at bx@wd\def\and{\par}%
+  \global\setbox\author at bx=\vtop{\if at ACM@sigchiamode\else\centering\fi
+    \@authorfont\@currentauthors\par\@affiliationfont
+    \@currentaffiliation}\egroup
+  \box\author at bx\hspace{\author at bx@sep}%
+  \gdef\@currentauthors{}%
+  \gdef\@currentaffiliation{}}
+%    \end{macrocode}
+%   
+% \end{macro}
 %
 %
 % \begin{macro}{\@mkauthors at iii}
+% \changes{v1.15}{2016/07/04}{New authors system}
 %   The |sigconf| version.  Here we use centered design with each
 %   author in a separate box.
 %    \begin{macrocode}
@@ -3696,13 +4037,13 @@
 %    \begin{macrocode}
   \author at bx@wd=\textwidth\relax
   \advance\author at bx@wd by -\author at bx@sep\relax
-  \ifcase\num at authors
+  \ifcase\num at authorgroups
   \relax % 0?
   \or  % 1=one author per row
   \or  % 2=two authors per row
-     \divide\author at bx@wd by \num at authors\relax
+     \divide\author at bx@wd by \num at authorgroups\relax
   \or  % 3=three authors per row
-     \divide\author at bx@wd by \num at authors\relax
+     \divide\author at bx@wd by \num at authorgroups\relax
   \or  % 4=two authors per row (!)
      \divide\author at bx@wd by 2\relax
   \else % three authors per row
@@ -3717,8 +4058,9 @@
   \def\@author##1{\ifx\@currentauthors\@empty
     \gdef\@currentauthors{\par##1}%
   \else
-    \g at addto@macro\@currentauthors{\quad##1}%
-  \fi}%
+    \g at addto@macro\@currentauthors{\par##1}%
+  \fi
+  \gdef\and{}}%
   \def\email##1##2{\ifx\@currentaffiliation\@empty
     \gdef\@currentaffiliation{\nolinkurl{##2}}%
   \else
@@ -3728,25 +4070,17 @@
     \gdef\@currentaffiliation{##2}%
   \else
     \g at addto@macro\@currentaffiliation{\par##2}%
-  \fi}%
+  \fi
+  \global\let\and\@typeset at author@bx
+}%
 %    \end{macrocode}
-% Actual typesetting is done by \cs{and} macro
+% Actual typesetting is done by \cs{and} macro:
 %    \begin{macrocode}
-  \def\and{\bgroup\hsize=\author at bx@wd\def\and{\quad}%
-    \global\setbox\author at bx=\vtop{\centering
-      \@authorfont\@currentauthors\par\@affiliationfont
-      \@currentaffiliation}\egroup
-    \box\author at bx\hspace{\author at bx@sep}%
-    \gdef\@currentauthors{}%
-    \gdef\@currentaffiliation{}}%
-%    \end{macrocode}
-% And here we use it:
-%    \begin{macrocode}
   \hsize=\textwidth
   \global\setbox\mktitle at bx=\vbox{\noindent
     \box\mktitle at bx\par\medskip\leavevmode
     \lineskip=1pc\relax\centering\hspace*{-1em}%
-    \addresses\and\par\bigskip}}
+    \addresses\let\and\@typeset at author@bx\and\par\bigskip}}
 %    \end{macrocode}
 %
 % \end{macro}
@@ -3766,7 +4100,7 @@
 %    \begin{macrocode}
   \author at bx@wd=\columnwidth\relax
   \advance\author at bx@wd by -\author at bx@sep\relax
-  \ifcase\num at authors
+  \ifcase\num at authorgroups
   \relax % 0?
   \or  % 1=one author per row
   \else  % 2=two authors per row
@@ -3781,8 +4115,9 @@
   \def\@author##1{\ifx\@currentauthors\@empty
     \gdef\@currentauthors{\par##1}%
   \else
-    \g at addto@macro\@currentauthors{\quad##1}%
-  \fi}%
+    \g at addto@macro\@currentauthors{\par##1}%
+  \fi
+  \gdef\and{}}%
   \def\email##1##2{\ifx\@currentaffiliation\@empty
     \gdef\@currentaffiliation{\nolinkurl{##2}}%
   \else
@@ -3792,23 +4127,16 @@
     \gdef\@currentaffiliation{##2}%
   \else
     \g at addto@macro\@currentaffiliation{\par##2}%
-  \fi}%
+  \fi
+  \global\let\and\@typeset at author@bx}%
+%
 %    \end{macrocode}
 % Actual typesetting is done by \cs{and} macro
 %    \begin{macrocode}
-  \def\and{\bgroup\hsize=\author at bx@wd\def\and{\quad}%
-    \global\setbox\author at bx=\vtop{\raggedright
-      \@authorfont\@currentauthors\par\@affiliationfont
-      \@currentaffiliation}\egroup
-    \box\author at bx\hskip\author at bx@sep
-    \gdef\@currentauthors{}%
-    \gdef\@currentaffiliation{}}%
-%    \end{macrocode}
-% And here we use it:
-%    \begin{macrocode}
     \bgroup\hsize=\columnwidth
     \par\raggedright\leftskip=\z@
-    \lineskip=1pc\noindent\addresses\and\par\bigskip\egroup}
+    \lineskip=1pc\noindent
+    \addresses\let\and\@typeset at author@bx\and\par\bigskip\egroup}
 %    \end{macrocode}
 %
 % \end{macro}
@@ -3860,13 +4188,25 @@
 % \end{macro}
 %
 % \begin{macro}{\@mkbibcitation}
+% \changes{v1.17}{2016/07/10}{Changed format for sigs}
+% \changes{v1.17}{2016/07/10}{Added \cs{nobreak}}
 %   Print bibcitation format
 %    \begin{macrocode}
 \def\@mkbibcitation{\bgroup
-  \par\medskip\small\noindent{\bfseries ACM Reference format:}\par
-  \noindent\authors. \@acmYear. \@title. \textit{\@journalNameShort}
-  \@acmVolume, \@acmNumber, Article~\@acmArticle\
-  (\@acmPubDate), \ref{TotPages}~pages.\par
+  \def\footnotemark{}%
+  \par\medskip\small\noindent{\bfseries ACM Reference format:}\par\nobreak
+  \noindent\authors. \@acmYear. \@title. 
+  \if at ACM@journal
+     \textit{\@journalNameShort}
+     \@acmVolume, \@acmNumber, Article~\@acmArticle\ (\@acmPubDate), 
+     \ref{TotPages}~pages.
+  \else
+     In \textit{Proceedings of \acmConference at name, \acmConference at venue,
+       \acmConference at date
+       \ifx\acmConference at name\acmConference at shortname\else
+         \ (\acmConference at shortname)\fi
+         ,} \ref{TotPages}~pages.
+  \fi\par
   \noindent DOI: \nolinkurl{\@acmDOI}
 \par\egroup}
 %    \end{macrocode}
@@ -3949,10 +4289,53 @@
 %
 % \end{macro}
 %
+% \begin{macro}{\@shortauthors}
+% \changes{v1.15}{2016/07/04}{Introduced macro}
+%   Even if the author redefined \cs{shortauthors}, we do not print
+%   them in the anonymous mode in the headers:
+%    \begin{macrocode}
+\def\@shortauthors{\if at ACM@anonymous Anon.\else\shortauthors\fi}
+%    \end{macrocode}
+%   
+% \end{macro}
 %
+% \begin{macro}{\@headfootfont}
+% \changes{v1.16}{2016/07/07}{Added macro}
+%   The font to typeset header and footer text.
+%    \begin{macrocode}
+\def\@headfootfont{%
+  \ifcase\ACM at format@nr
+  \relax % manuscript
+    \sffamily
+  \or % acmsmall
+    \sffamily
+  \or % acmlarge
+    \sffamily
+  \or % acmtog
+    \sffamily
+  \or % sigconf
+    \sffamily
+  \or % siggraph
+    \sffamily
+  \or % sigplan
+    \sffamily
+  \or % sigchi
+    \sffamily
+  \or % sigchi-a
+    \sffamily
+  \fi}
+%    \end{macrocode}
 %
+% \end{macro}
+%
 % \begin{macro}{standardpagestyle}
 % \changes{v1.10}{2016/05/22}{Reversed folios location}
+% \changes{v1.13}{2016/06/06}{Suppressed folios if sig}
+% \changes{v1.13}{2016/06/06}{Added headers for sigs}
+% \changes{v1.13}{2016/06/06}{Expanded headers for sigchi-a}
+% \changes{v1.15}{2016/07/04}{Better handling of anonymous mode}
+% \changes{v1.16}{2016/07/07}{Customize header/footer text font}
+% \changes{v1.17}{2016/07/10}{Added paper title to sigs}
 %   The pagestyle for all pages but the first one
 %    \begin{macrocode}
 \fancypagestyle{standardpagestyle}{%
@@ -3961,38 +4344,46 @@
   \renewcommand{\footrulewidth}{\z@}%
   \ifcase\ACM at format@nr
   \relax % manuscript
-    \fancyhead[LE]{\ACM at linecount\thepage}%
-    \fancyhead[RO]{\thepage}%
-    \fancyhead[RE]{\shortauthors}%
+    \fancyhead[LE]{\ACM at linecount\if at ACM@printfolios\thepage\fi}%
+    \fancyhead[RO]{\if at ACM@printfolios\thepage\fi}%
+    \fancyhead[RE]{\@shortauthors}%
     \fancyhead[LO]{\ACM at linecount\shorttitle}%
     \fancyfoot[RO,LE]{\footnotesize Manuscript submitted to ACM}%
   \or % acmsmall
-    \fancyhead[LE]{\ACM at linecount\sffamily\@acmArticle:\thepage}%
-    \fancyhead[RO]{\sffamily\@acmArticle:\thepage}%
-    \fancyhead[RE]{\sffamily\shortauthors}%
-    \fancyhead[LO]{\ACM at linecount\sffamily\shorttitle}%
+    \fancyhead[LE]{\ACM at linecount\@headfootfont\@acmArticle\if at ACM@printfolios:\thepage\fi}%
+    \fancyhead[RO]{\@headfootfont\@acmArticle\if at ACM@printfolios:\thepage\fi}%
+    \fancyhead[RE]{\@headfootfont\@shortauthors}%
+    \fancyhead[LO]{\ACM at linecount\@headfootfont\shorttitle}%
     \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
     \@acmNumber, Article \@acmArticle.  Publication date: \@acmPubDate.}%
   \or % acmlarge
-    \fancyhead[LE]{\ACM at linecount\sffamily
-      \@acmArticle:\thepage\quad\textbullet\quad\shortauthors}%
+    \fancyhead[LE]{\ACM at linecount\@headfootfont
+      \@acmArticle:\if at ACM@printfolios\thepage\quad\textbullet\quad\fi\@shortauthors}%
     \fancyhead[LO]{\ACM at linecount}%
-    \fancyhead[RO]{\sffamily
-      \shorttitle\quad\textbullet\quad\@acmArticle:\thepage}%
+    \fancyhead[RO]{\@headfootfont
+      \shorttitle\quad\textbullet\quad\@acmArticle\if at ACM@printfolios:\thepage\fi}%
     \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
     \@acmNumber, Article \@acmArticle.  Publication date: \@acmPubDate.}%
   \or % acmtog
-    \fancyhead[LE]{\ACM at linecount\sffamily
-      \@acmArticle:\thepage\quad\textbullet\quad\shortauthors}%
+    \fancyhead[LE]{\ACM at linecount\@headfootfont
+      \@acmArticle:\if at ACM@printfolios\thepage\quad\textbullet\quad\fi\@shortauthors}%
     \fancyhead[LO]{\ACM at linecount}%
-    \fancyhead[RO]{\sffamily
-      \shorttitle\quad\textbullet\quad\@acmArticle:\thepage}%
+    \fancyhead[RO]{\@headfootfont
+      \shorttitle\quad\textbullet\quad\@acmArticle\if at ACM@printfolios:\thepage\fi}%
     \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
     \@acmNumber, Article \@acmArticle.  Publication date: \@acmPubDate.}%
   \else % Proceedings
-    \fancyfoot[R]{\footnotesize\thepage}%
-    \fancyhead[L]{\ACM at linecount}%
+    \fancyfoot[C]{\if at ACM@printfolios\footnotesize\thepage\fi}%
+    \fancyhead[LO]{\ACM at linecount\@headfootfont\shorttitle}%
+    \fancyhead[RE]{\@headfootfont\@shortauthors}%
+    \fancyhead[LE]{\ACM at linecount\@headfootfont\acmConference at shortname,
+      \acmConference at date, \acmConference at venue}%
+    \fancyhead[RO]{\@headfootfont\acmConference at shortname,
+      \acmConference at date, \acmConference at venue}%
   \fi
+  \if at ACM@sigchiamode
+     \fancyheadoffset[L]{\dimexpr(\marginparsep+\marginparwidth)}%
+  \fi
 }
 \pagestyle{standardpagestyle}
 %    \end{macrocode}
@@ -4075,7 +4466,7 @@
   \ifcase\ACM at format@nr
   \relax % manuscript
     \fancyhead[L]{\ACM at linecount}%
-    \fancyfoot[RO,LE]{\small\thepage}%
+    \fancyfoot[RO,LE]{\if at ACM@printfolios\small\thepage\fi}%
     \fancyfoot[RE,LO]{\footnotesize Manuscript submitted to ACM}%
   \or % acmsmall
     \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
@@ -4100,7 +4491,7 @@
     \fancyhead[L]{\ACM at linecount}%
   \else % Conference proceedings
     \fancyhead[L]{\ACM at linecount}%
-    \fancyfoot[R]{\footnotesize\thepage}%
+    \fancyfoot[C]{\if at ACM@printfolios\footnotesize\thepage\fi}%
   \fi
 }
 %    \end{macrocode}
@@ -4112,7 +4503,44 @@
 %\label{sec:sectioninng}
 %
 %
+%   Sectioning is different for different levels
+%    \begin{macrocode}
+\renewcommand\section{\@startsection{section}{1}{\z@}%
+  {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+  {.25\baselineskip}%
+  {\@secfont}}
+\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
+  {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+  {.25\baselineskip}%
+  {\@subsecfont}}
+\renewcommand\subsubsection{\@startsection{subsubsection}{3}{10pt}%
+  {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+  {-3.5\p@}%
+  {\@subsubsecfont\@adddotafter}}
+\renewcommand\paragraph{\@startsection{paragraph}{4}{\parindent}%
+  {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+  {-3.5\p@}%
+  {\@parfont\@adddotafter}}
+\renewcommand\part{\@startsection{part}{9}{\z@}%
+  {-10\p@ \@plus -4\p@ \@minus -2\p@}%
+  {4\p@}%
+  {\@parfont}}
+%    \end{macrocode}
 %
+% \begin{macro}{\section at raggedright}
+%   \changes{v1.12}{2016/05/30}{Introduced macro}%
+%   Special version of \cs{raggedright} compatible with
+%   \cs{MakeUppercase}
+%    \begin{macrocode}
+\def\section at raggedright{\@rightskip\@flushglue
+  \rightskip\@rightskip
+  \leftskip\z at skip
+  \parindent\z@}
+%    \end{macrocode}
+%
+% \end{macro}
+%
+%
 % \begin{macro}{\@secfont}
 % \begin{macro}{\@subsecfont}
 % \begin{macro}{\@subsubsecfont}
@@ -4191,44 +4619,6 @@
 % \end{macro}
 %
 %
-%   Sectioning is different for different levels
-%    \begin{macrocode}
-\renewcommand\section{\@startsection{section}{1}{\z@}%
-  {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
-  {.25\baselineskip}%
-  {\@secfont}}
-\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
-  {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
-  {.25\baselineskip}%
-  {\@subsecfont}}
-\renewcommand\subsubsection{\@startsection{subsubsection}{3}{10pt}%
-  {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
-  {-3.5\p@}%
-  {\@subsubsecfont\@adddotafter}}
-\renewcommand\paragraph{\@startsection{paragraph}{4}{\parindent}%
-  {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
-  {-3.5\p@}%
-  {\@parfont\@adddotafter}}
-\renewcommand\part{\@startsection{part}{9}{\z@}%
-  {-10\p@ \@plus -4\p@ \@minus -2\p@}%
-  {4\p@}%
-  {\@parfont}}
-%    \end{macrocode}
-%
-% \begin{macro}{\section at raggedright}
-%   \changes{v1.12}{2016/05/30}{Introduced macro}%
-%   Special version of \cs{raggedright} compatible with
-%   \cs{MakeUppercase}
-%    \begin{macrocode}
-\def\section at raggedright{\@rightskip\@flushglue 
-  \rightskip\@rightskip
-  \leftskip\z at skip
-  \parindent\z@}
-%    \end{macrocode}
-%   
-% \end{macro}
-%
-%
 %\subsection{Theorems}
 %\label{sec:theorems}
 %
@@ -4437,6 +4827,40 @@
 % \end{macro}
 %
 %
+%
+%\subsection{Acknowledgments}
+%\label{sec:acks}
+%
+% \begin{macro}{\acks}
+% \changes{v1.15}{2016/07/05}{Added macro}
+%   This is a |comment|-like structure
+%    \begin{macrocode}
+\specialcomment{acks}
+  {\begingroup\section*{Acknowledgments}}{\endgroup}
+%    \end{macrocode}
+%   
+% \end{macro}
+%
+% \begin{macro}{\grantsponsor}
+% \changes{v1.15}{2016/07/05}{Added macro}
+% \changes{v1.17}{2016/07/10}{Renamed}
+% We just typeset the name of the sponsor
+%    \begin{macrocode}
+\def\grantsponsor#1#2#3{#2}
+%    \end{macrocode}
+% 
+% \end{macro}
+%
+% \begin{macro}{\grantnum}
+% \changes{v1.15}{2016/07/05}{Added macro}
+% \changes{v1.17}{2016/07/10}{Added url}
+%    \begin{macrocode}
+\newcommand\grantnum[3][]{#3%
+  \def\@tempa{#1}\ifx\@tempa\@empty\else\space(\url{#1})\fi}      
+%    \end{macrocode}
+%   
+% \end{macro}
+%
 % \subsection{Conditional typesetting}
 % \label{sec:conditional}
 %
@@ -4451,12 +4875,12 @@
 \fi
 \if at ACM@anonymous
   \excludecomment{anonsuppress}
+  \excludecomment{acks}
 \else
   \includecomment{anonsuppress}
 \fi
 %    \end{macrocode}
 %
-%
 %\subsection{End of Class}
 %\label{end}
 %

Modified: trunk/Master/texmf-dist/tex/latex/acmart/acmart.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/acmart/acmart.cls	2016-07-14 21:22:53 UTC (rev 41691)
+++ trunk/Master/texmf-dist/tex/latex/acmart/acmart.cls	2016-07-14 21:38:03 UTC (rev 41692)
@@ -35,9 +35,10 @@
 %%   Right bracket \]     Circumflex    \^     Underscore    \_
 %%   Grave accent  \`     Left brace    \{     Vertical bar  \|
 %%   Right brace   \}     Tilde         \~}
+
 \NeedsTeXFormat{LaTeX2e}
 \ProvidesClass{acmart}
-[2016/05/30 v1.12 Typesetting articles for Association of
+[2016/07/12 v1.18 Typesetting articles for Association of
 Computing Machinery]
 \def\@classname{acmart}
 \RequirePackage{xkeyval}
@@ -140,26 +141,7 @@
   \@ACM at sigchiamodetrue
 \fi
 \if at ACM@natbib at override\else
-  \ifcase\ACM at format@nr
-  \relax % manuscript
     \@ACM at natbibtrue
-  \or % acmsmall
-    \@ACM at natbibtrue
-  \or % acmlarge
-    \@ACM at natbibtrue
-  \or % acmtog
-    \@ACM at natbibtrue
-  \or % sigconf
-    \@ACM at natbibfalse
-  \or % siggraph
-    \@ACM at natbibfalse
-   \or % sigplan
-    \@ACM at natbibtrue
-   \or % sigchi
-    \@ACM at natbibfalse
-  \or % sigchi-a
-    \@ACM at natbibfalse
-  \fi
 \fi
 \ifx\ACM at fontsize\@empty
   \ifcase\ACM at format@nr
@@ -168,7 +150,7 @@
   \or % acmsmall
     \def\ACM at fontsize{10pt}%
   \or % acmlarge
-    \def\ACM at fontsize{9pt}%
+    \def\ACM at fontsize{10pt}%
   \or % acmtog
     \def\ACM at fontsize{9pt}%
   \or % sigconf
@@ -260,11 +242,26 @@
   }%
   \NAT@@setcites
   }
+  \renewcommand\citestyle[1]{%
+    \ifcsname bibstyle@#1\endcsname%
+    \csname bibstyle@#1\endcsname\let\bibstyle\@gobble%
+    \else%
+    \@latex at error{Undefined `#1' citestyle}%
+    \fi
+  }%
+\fi
+\newcommand{\bibstyle at acmauthoryear}{%
   \setcitestyle{%
-    open={[},close={]},citesep={;},%
-    authoryear,aysep={},yysep={,},%
-    notesep={, }}
-\fi
+    authoryear,%
+    open={(},close={)},citesep={;},%
+    aysep={},yysep={,},%
+    notesep={, }}}
+\newcommand{\bibstyle at acmnumeric}{%
+  \setcitestyle{%
+    numbers,sort&compress,%
+    open={[},close={]},citesep={,},%
+    notesep={, }}}
+\citestyle{acmnumeric}
 \def\@startsection#1#2#3#4#5#6{%
   \if at noskipsec \leavevmode \fi
   \par
@@ -387,43 +384,18 @@
   \def\shortcite#1{\citeyear{#1}}
   \DeclareRobustCommand\citeA
      {\begingroup\NAT at swafalse
-       \let\NAT at ctype\@ne\NAT at partrue\NAT at fullfalse\NAT at open\NAT at citetp}
-  \providecommand\newblock{}
+       \let\NAT at ctype\@ne\NAT at partrue\NAT at fullfalse\NAT at open\NAT at citetp}%
+  \providecommand\newblock{}%
 \else
   \providecommand\citename[1]{#1}
 \fi
-\ifcase\ACM at format@nr
-\relax % manuscript
-\or % acmsmall
-\or % acmlarge
-\or % acmtog
-\or % sigconf
-\or % siggraph
-   \def\@biblabel#1{}
-   \ifx\bibhang\@undefined
-      \newlength\bibhang
-   \fi
-   \setlength{\bibhang}{1em}
-    \renewenvironment{thebibliography}[1]{%
-      \@bibtitlestyle
-      \normalfont\bibliofont\labelsep .5em\relax
-      \renewcommand\theenumiv{\arabic{enumiv}}\let\p at enumiv\@empty
-      \list{\@biblabel{\theenumiv}}{\labelwidth\z@
-        \setlength{\itemindent}{-\bibhang}%
-        \setlength{\leftmargin}{\bibhang}%
-        \labelsep\z@
-        \def\newblock{\hskip .11em plus .33em minus .07em}%
-        \usecounter{enumiv}}%
-      \sloppy \clubpenalty\@M \widowpenalty\clubpenalty
-      \sfcode`\.=\@m
-    }{%
-      \def\@noitemerr{\@latex at warning{Empty `thebibliography' environment}}%
-      \endlist
-    }
-\or % sigplan
-\or % sigchi
-\or % sigchi-a
-\fi
+\def\bibliographystyle#1{%
+  \ifx\@begindocumenthook\@undefined\else
+    \expandafter\AtBeginDocument
+  \fi
+    {\if at filesw
+       \immediate\write\@auxout{\string\bibstyle{#1}}%
+     \fi}}
 \RequirePackage{graphicx, xcolor}
 \definecolor[named]{ACMBlue}{cmyk}{1,0.1,0,0.1}
 \definecolor[named]{ACMYellow}{cmyk}{0,0.16,1,0}
@@ -459,13 +431,13 @@
    \geometry{twoside=true, head=1pc,
      paperwidth=8.5in, paperheight=11in,
      includeheadfoot, columnsep=2pc,
-     top=57pt, bottom=75pt, inner=54pt, outer=57pt
+     top=57pt, bottom=73pt, inner=54pt, outer=54pt
      }%
 \or % siggraph
    \geometry{twoside=true, head=1pc,
      paperwidth=8.5in, paperheight=11in,
      includeheadfoot, columnsep=2pc,
-     top=57pt, bottom=75pt, inner=54pt, outer=57pt
+     top=57pt, bottom=73pt, inner=54pt, outer=54pt
      }%
 \or % sigplan
    \geometry{twoside=true, head=1pc,
@@ -477,7 +449,7 @@
    \geometry{twoside=true, head=1pc,
      paperwidth=8.5in, paperheight=11in,
      includeheadfoot, columnsep=2pc,
-     top=66pt, bottom=78pt, inner=54pt, outer=48pt
+     top=66pt, bottom=73pt, inner=54pt, outer=54pt
      }%
 \or % sigchi-a
    \geometry{twoside=false, head=1pc,
@@ -522,7 +494,6 @@
   \color at endgroup
   \egroup
   \expandafter\@iiiparbox\@mpargs{\unvbox\@tempboxa}}
-
 \def\@makefntext{\noindent\@makefnmark}
 \if at ACM@sigchiamode
 \long\def\@footnotetext#1{\marginpar{%
@@ -536,6 +507,19 @@
         \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
     \color at endgroup}}%
 \fi
+\long\def\@mpfootnotetext#1{%
+  \global\setbox\@mpfootins\vbox{%
+    \unvbox\@mpfootins
+    \reset at font\footnotesize
+    \hsize\columnwidth
+    \@parboxrestore
+    \protected at edef\@currentlabel
+         {\csname p at mpfootnote\endcsname\@thefnmark}%
+    \color at begingroup\centering
+      \@makefntext{%
+        \rule\z@\footnotesep\ignorespaces#1\@finalstrut\strutbox}%
+    \color at endgroup}}
+\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
 \newif\if at ACM@newfonts
 \@ACM at newfontstrue
 \IfFileExists{libertine.sty}{}{\ClassWarning{\@classname}{You do not
@@ -633,6 +617,13 @@
 \or % sigchi-a
 \fi
 \renewcommand{\descriptionlabel}[1]{\hspace\labelsep \upshape\bfseries #1}
+\renewenvironment{description}{\list{}{%
+    \itemindent-12\p@
+    \labelwidth\z@ \let\makelabel\descriptionlabel}%
+}{
+  \endlist
+}
+\let\enddescription=\endlist % for efficiency
 \define at choicekey*+{ACM}{acmJournal}[\@journalCode\@journalCode at nr]{%
   CIE,%
   CSUR,%
@@ -869,6 +860,7 @@
   \ClassError{\@classname}{Incorrect journal #1}%
 }%
 \def\acmJournal#1{\setkeys{ACM}{acmJournal=#1}}
+\def\@journalCode at nr{0}
 \def\@journalName{}%
 \def\@journalNameShort{\@journalName}%
 \def\@permissionCodeOne{XXXX-XX}%
@@ -885,10 +877,15 @@
   DC, USA}
 \def\subtitle#1{\def\@subtitle{#1}}
 \subtitle{}
-\newcount\num at authors
-\num at authors=0\relax
+\newcount\num at authorgroups
+\num at authorgroups=0\relax
+\newif\if at insideauthorgroup
+\@insideauthorgroupfalse
 \renewcommand\author[2][]{%
-  \global\advance\num at authors by 1\relax
+  \if at insideauthorgroup\else
+    \global\advance\num at authorgroups by 1\relax
+    \global\@insideauthorgrouptrue
+  \fi
   \ifx\addresses\@empty
     \if at ACM@anonymous
       \gdef\addresses{\@author{Anonymous Author(s)}}%
@@ -924,6 +921,7 @@
     \fi
   \fi}
 \newcommand{\affiliation}[2][]{%
+  \global\@insideauthorgroupfalse
   \if at ACM@anonymous\else
     \g at addto@macro\addresses{\affiliation{#1}{#2}}%
   \fi}
@@ -931,6 +929,7 @@
   \if at ACM@anonymous\else
     \g at addto@macro\addresses{\email{#1}{#2}}%
   \fi}
+\let\orcid\@gobble
 \def\@titlenotes{}
 \def\titlenote#1{%
   \g at addto@macro\@title{\footnotemark}%
@@ -958,17 +957,17 @@
       \stepcounter{footnote}\footnotetext{#1}}%
   \fi}
 \def\acmVolume#1{\def\@acmVolume{#1}}
-\acmVolume{VV}
+\acmVolume{1}
 \def\acmNumber#1{\def\@acmNumber{#1}}
-\acmNumber{NNN}
+\acmNumber{1}
 \def\acmArticle#1{\def\@acmArticle{#1}}
-\acmArticle{AA}
+\acmArticle{1}
 \def\acmArticleSeq#1{\def\@acmArticleSeq{#1}}
 \acmArticleSeq{\@acmArticle}
 \def\acmYear#1{\def\@acmYear{#1}}
-\acmYear{YYYY}
+\acmYear{2016}
 \def\acmMonth#1{\def\@acmMonth{#1}}
-\acmMonth{MM}
+\acmMonth{1}
 \def\@acmPubDate{\ifcase\@acmMonth\or
   January\or February\or March\or April\or May\or June\or
   July\or August\or September\or October\or November\or
@@ -1012,21 +1011,27 @@
   \else
     \ClassInfo{\@classname}{Suppressing CSS}%
   \fi}{\ClassError{\@classname}{printcss must be true or false}}
-\define at boolkey+{@ACM at topmatter@}[@ACM@]{printbib}[true]{%
-  \if at ACM@printcss
+\define at boolkey+{@ACM at topmatter@}[@ACM@]{printacmref}[true]{%
+  \if at ACM@printacmref
     \ClassInfo{\@classname}{Printing bibformat}%
   \else
     \ClassInfo{\@classname}{Suppressing bibformat}%
-  \fi}{\ClassError{\@classname}{printbib must be true or false}}
+  \fi}{\ClassError{\@classname}{printacmref must be true or false}}
+\define at boolkey+{@ACM at topmatter@}[@ACM@]{printfolios}[true]{%
+  \if at ACM@printfolios
+    \ClassInfo{\@classname}{Printing folios}%
+  \else
+    \ClassInfo{\@classname}{Suppressing folios}%
+  \fi}{\ClassError{\@classname}{printfolios must be true or false}}
 \def\settopmatter#1{\setkeys{@ACM at topmatter@}{#1}}
-\settopmatter{printcss=true}
+\settopmatter{printcss=true, printacmref=true}
 \if at ACM@manuscript
-  \settopmatter{printbib=false}
+  \settopmatter{printfolios=true}
 \else
   \if at ACM@journal
-    \settopmatter{printbib=true}
+    \settopmatter{printfolios=true}
   \else
-    \settopmatter{printbib=false}
+    \settopmatter{printfolios=false}
   \fi
 \fi
 \def\@received{}
@@ -1256,7 +1261,7 @@
 \def\maketitle{%
   \if at ACM@anonymous
     % Anonymize omission of \author-s
-    \ifnum\num at authors=0\author{}\fi
+    \ifnum\num at authorgroups=0\author{}\fi
   \fi
   \begingroup
   \let\@footnotemark\@footnotemark at nolink
@@ -1348,7 +1353,7 @@
   \andify\shortauthors
   \global\let\authors=\authors
   \global\let\shortauthors=\shortauthors
-  \if at ACM@printbib
+  \if at ACM@printacmref
      \@mkbibcitation
   \fi
   \hypersetup{pdfauthor={\authors},
@@ -1550,6 +1555,32 @@
        \par\noindent\@subtitlefont\@subtitle
      \fi
      \par\bigskip}}%
+\newbox\@ACM at commabox
+\def\@ACM at addtoaddress#1{%
+  \ifvmode\else
+    \setbox\@ACM at commabox=\hbox{, }%
+    \unskip\cleaders\copy\@ACM at commabox\hskip\wd\@ACM at commabox
+  \fi
+  #1}
+\if at ACM@journal
+  \let\position\@gobble
+  \def\institution#1{#1\ignorespaces}%
+  \let\department\@gobble
+  \let\streetaddress\@gobble
+  \let\city\@gobble
+  \let\state\@gobble
+  \let\postcode\@gobble
+  \let\country\@gobble
+\else
+  \def\position#1{#1\par}%
+  \def\institution#1{#1\par}%
+  \def\department#1{#1\par}%
+  \def\streetaddress#1{#1\par}%
+  \let\city\@ACM at addtoaddress
+  \let\state\@ACM at addtoaddress
+  \def\postcode#1{\unskip\space#1}%
+  \let\country\@ACM at addtoaddress
+\fi
 \def\@mkauthors{\begingroup
   \hsize=\textwidth
   \ifcase\ACM at format@nr
@@ -1560,7 +1591,7 @@
   \or % acmlarge
     \@mkauthors at i
   \or % acmtog
-    \@mkauthors at ii
+    \@mkauthors at i
   \or % sigconf
     \@mkauthors at iii
   \or % siggraph
@@ -1579,6 +1610,8 @@
 \ifcase\ACM at format@nr
 \relax % manuscript
 \or % acmsmall
+  \def\@authorfont{\large\sffamily}
+  \def\@affiliationfont{\small\normalfont}
 \or % acmlarge
 \or % acmtog
   \def\@authorfont{\LARGE\sffamily}
@@ -1599,11 +1632,18 @@
   \def\@authorfont{\bfseries}
   \def\@affiliationfont{\mdseries}
 \fi
+\def\@typeset at author@line{%
+  \andify\@currentauthors\par\noindent
+  \@currentauthors\def\@currentauthors{}%
+  \ifx\@currentaffiliations\@empty\else
+    \andify\@currentaffiliations
+      \unskip, {\@currentaffiliations}\par
+  \fi
+  \def\@currentaffiliations{}}
 \def\@mkauthors at i{%
   \def\@currentauthors{}%
-  \def\and{%
-    \andify\@currentauthors\par\noindent
-    \@currentauthors\def\@currentauthors{}}%
+  \def\@currentaffiliations{}%
+  \global\let\and\@typeset at author@line
   \def\@author##1{%
     \ifx\@currentauthors\@empty
       \gdef\@currentauthors{\@authorfont\MakeUppercase{##1}}%
@@ -1610,53 +1650,42 @@
     \else
        \g at addto@macro{\@currentauthors}{\and\MakeUppercase{##1}}%
     \fi
-    \def\and{}}%
+    \gdef\and{}}%
   \def\email##1##2{}%
   \def\affiliation##1##2{%
-    \ifx\@currentauthors\@empty\else
-      \andify\@currentauthors\par\noindent\@currentauthors
+    \def\@tempa{##2}\ifx\@tempa\@empty\else
+       \ifx\@currentaffiliations\@empty
+          \gdef\@currentaffiliations{\@affiliationfont##2}%
+       \else
+         \g at addto@macro{\@currentaffiliations}{\and##2}%
+      \fi
     \fi
-    \def\@currentauthors{}\def\@tempa{##2}\ifx\@tempa\@empty\else
-    \unskip, {\@affiliationfont##2}\fi\def\and{\par\noindent}}%
+     \global\let\and\@typeset at author@line}
   \global\setbox\mktitle at bx=\vbox{\noindent\box\mktitle at bx\par\medskip
-    \noindent\addresses\andify\@currentauthors\par\noindent\@currentauthors\par\medskip}%
+    \noindent\addresses\@typeset at author@line
+   \par\medskip}%
 }
-\def\@mkauthors at ii{\par\medskip
-  \def\@currentauthors{}%
-  \def\and{}%
-  \def\@author##1{%
-    \ifx\@currentauthors\@empty
-      \gdef\@currentauthors{\@authorfont
-      \MakeUppercase{##1}}%
-    \else
-      \g at addto@macro{\@currentauthors}{\and\MakeUppercase{##1}}%
-    \fi\def\and{}}%
-  \def\email##1##2{}%
-  \def\affiliation##1##2{%
-    \ifx\@currentauthors\@empty\else
-      \andify\@currentauthors\par\noindent\@currentauthors
-    \fi
-    \def\@currentauthors{}\def\@tempa{##2}\ifx\@tempa\@empty\else
-    \par\noindent{\@affiliationfont##2}\fi
-    \def\and{\par\noindent{\@affiliationfont and}\par
-      \noindent\def\and{}}}%
-  \global\setbox\mktitle at bx=\vbox{\noindent\box\mktitle at bx\par\medskip
-    \noindent\addresses\andify\@currentauthors\par\noindent\@currentauthors\par\medskip}%
-}
 \newbox\author at bx
 \newdimen\author at bx@wd
 \newskip\author at bx@sep
 \author at bx@sep=1pc\relax
+\def\@typeset at author@bx{\bgroup\hsize=\author at bx@wd\def\and{\par}%
+  \global\setbox\author at bx=\vtop{\if at ACM@sigchiamode\else\centering\fi
+    \@authorfont\@currentauthors\par\@affiliationfont
+    \@currentaffiliation}\egroup
+  \box\author at bx\hspace{\author at bx@sep}%
+  \gdef\@currentauthors{}%
+  \gdef\@currentaffiliation{}}
 \def\@mkauthors at iii{%
   \author at bx@wd=\textwidth\relax
   \advance\author at bx@wd by -\author at bx@sep\relax
-  \ifcase\num at authors
+  \ifcase\num at authorgroups
   \relax % 0?
   \or  % 1=one author per row
   \or  % 2=two authors per row
-     \divide\author at bx@wd by \num at authors\relax
+     \divide\author at bx@wd by \num at authorgroups\relax
   \or  % 3=three authors per row
-     \divide\author at bx@wd by \num at authors\relax
+     \divide\author at bx@wd by \num at authorgroups\relax
   \or  % 4=two authors per row (!)
      \divide\author at bx@wd by 2\relax
   \else % three authors per row
@@ -1668,8 +1697,9 @@
   \def\@author##1{\ifx\@currentauthors\@empty
     \gdef\@currentauthors{\par##1}%
   \else
-    \g at addto@macro\@currentauthors{\quad##1}%
-  \fi}%
+    \g at addto@macro\@currentauthors{\par##1}%
+  \fi
+  \gdef\and{}}%
   \def\email##1##2{\ifx\@currentaffiliation\@empty
     \gdef\@currentaffiliation{\nolinkurl{##2}}%
   \else
@@ -1679,23 +1709,18 @@
     \gdef\@currentaffiliation{##2}%
   \else
     \g at addto@macro\@currentaffiliation{\par##2}%
-  \fi}%
-  \def\and{\bgroup\hsize=\author at bx@wd\def\and{\quad}%
-    \global\setbox\author at bx=\vtop{\centering
-      \@authorfont\@currentauthors\par\@affiliationfont
-      \@currentaffiliation}\egroup
-    \box\author at bx\hspace{\author at bx@sep}%
-    \gdef\@currentauthors{}%
-    \gdef\@currentaffiliation{}}%
+  \fi
+  \global\let\and\@typeset at author@bx
+}%
   \hsize=\textwidth
   \global\setbox\mktitle at bx=\vbox{\noindent
     \box\mktitle at bx\par\medskip\leavevmode
     \lineskip=1pc\relax\centering\hspace*{-1em}%
-    \addresses\and\par\bigskip}}
+    \addresses\let\and\@typeset at author@bx\and\par\bigskip}}
 \def\@mkauthors at iv{%
   \author at bx@wd=\columnwidth\relax
   \advance\author at bx@wd by -\author at bx@sep\relax
-  \ifcase\num at authors
+  \ifcase\num at authorgroups
   \relax % 0?
   \or  % 1=one author per row
   \else  % 2=two authors per row
@@ -1707,8 +1732,9 @@
   \def\@author##1{\ifx\@currentauthors\@empty
     \gdef\@currentauthors{\par##1}%
   \else
-    \g at addto@macro\@currentauthors{\quad##1}%
-  \fi}%
+    \g at addto@macro\@currentauthors{\par##1}%
+  \fi
+  \gdef\and{}}%
   \def\email##1##2{\ifx\@currentaffiliation\@empty
     \gdef\@currentaffiliation{\nolinkurl{##2}}%
   \else
@@ -1718,17 +1744,12 @@
     \gdef\@currentaffiliation{##2}%
   \else
     \g at addto@macro\@currentaffiliation{\par##2}%
-  \fi}%
-  \def\and{\bgroup\hsize=\author at bx@wd\def\and{\quad}%
-    \global\setbox\author at bx=\vtop{\raggedright
-      \@authorfont\@currentauthors\par\@affiliationfont
-      \@currentaffiliation}\egroup
-    \box\author at bx\hskip\author at bx@sep
-    \gdef\@currentauthors{}%
-    \gdef\@currentaffiliation{}}%
+  \fi
+  \global\let\and\@typeset at author@bx}%
     \bgroup\hsize=\columnwidth
     \par\raggedright\leftskip=\z@
-    \lineskip=1pc\noindent\addresses\and\par\bigskip\egroup}
+    \lineskip=1pc\noindent
+    \addresses\let\and\@typeset at author@bx\and\par\bigskip\egroup}
 \def\@authornotemark{\g at addto@macro\@currentauthors{\footnotemark}}
 \def\@mkteasers{%
   \ifx\@teaserfigures\@empty\else
@@ -1748,10 +1769,20 @@
       \@abstract\par}%
   \fi\egroup}
 \def\@mkbibcitation{\bgroup
-  \par\medskip\small\noindent{\bfseries ACM Reference format:}\par
-  \noindent\authors. \@acmYear. \@title. \textit{\@journalNameShort}
-  \@acmVolume, \@acmNumber, Article~\@acmArticle\
-  (\@acmPubDate), \ref{TotPages}~pages.\par
+  \def\footnotemark{}%
+  \par\medskip\small\noindent{\bfseries ACM Reference format:}\par\nobreak
+  \noindent\authors. \@acmYear. \@title.
+  \if at ACM@journal
+     \textit{\@journalNameShort}
+     \@acmVolume, \@acmNumber, Article~\@acmArticle\ (\@acmPubDate),
+     \ref{TotPages}~pages.
+  \else
+     In \textit{Proceedings of \acmConference at name, \acmConference at venue,
+       \acmConference at date
+       \ifx\acmConference at name\acmConference at shortname\else
+         \ (\acmConference at shortname)\fi
+         ,} \ref{TotPages}~pages.
+  \fi\par
   \noindent DOI: \nolinkurl{\@acmDOI}
 \par\egroup}
 \def\@printendtopmatter{\par\medskip
@@ -1793,6 +1824,28 @@
     \put(-26,-22){\usebox{\ACM at linecount@bx}}%
   \end{picture}%
   \fi}
+\def\@shortauthors{\if at ACM@anonymous Anon.\else\shortauthors\fi}
+\def\@headfootfont{%
+  \ifcase\ACM at format@nr
+  \relax % manuscript
+    \sffamily
+  \or % acmsmall
+    \sffamily
+  \or % acmlarge
+    \sffamily
+  \or % acmtog
+    \sffamily
+  \or % sigconf
+    \sffamily
+  \or % siggraph
+    \sffamily
+  \or % sigplan
+    \sffamily
+  \or % sigchi
+    \sffamily
+  \or % sigchi-a
+    \sffamily
+  \fi}
 \fancypagestyle{standardpagestyle}{%
   \fancyhf{}%
   \renewcommand{\headrulewidth}{\z@}%
@@ -1799,38 +1852,46 @@
   \renewcommand{\footrulewidth}{\z@}%
   \ifcase\ACM at format@nr
   \relax % manuscript
-    \fancyhead[LE]{\ACM at linecount\thepage}%
-    \fancyhead[RO]{\thepage}%
-    \fancyhead[RE]{\shortauthors}%
+    \fancyhead[LE]{\ACM at linecount\if at ACM@printfolios\thepage\fi}%
+    \fancyhead[RO]{\if at ACM@printfolios\thepage\fi}%
+    \fancyhead[RE]{\@shortauthors}%
     \fancyhead[LO]{\ACM at linecount\shorttitle}%
     \fancyfoot[RO,LE]{\footnotesize Manuscript submitted to ACM}%
   \or % acmsmall
-    \fancyhead[LE]{\ACM at linecount\sffamily\@acmArticle:\thepage}%
-    \fancyhead[RO]{\sffamily\@acmArticle:\thepage}%
-    \fancyhead[RE]{\sffamily\shortauthors}%
-    \fancyhead[LO]{\ACM at linecount\sffamily\shorttitle}%
+    \fancyhead[LE]{\ACM at linecount\@headfootfont\@acmArticle\if at ACM@printfolios:\thepage\fi}%
+    \fancyhead[RO]{\@headfootfont\@acmArticle\if at ACM@printfolios:\thepage\fi}%
+    \fancyhead[RE]{\@headfootfont\@shortauthors}%
+    \fancyhead[LO]{\ACM at linecount\@headfootfont\shorttitle}%
     \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
     \@acmNumber, Article \@acmArticle.  Publication date: \@acmPubDate.}%
   \or % acmlarge
-    \fancyhead[LE]{\ACM at linecount\sffamily
-      \@acmArticle:\thepage\quad\textbullet\quad\shortauthors}%
+    \fancyhead[LE]{\ACM at linecount\@headfootfont
+      \@acmArticle:\if at ACM@printfolios\thepage\quad\textbullet\quad\fi\@shortauthors}%
     \fancyhead[LO]{\ACM at linecount}%
-    \fancyhead[RO]{\sffamily
-      \shorttitle\quad\textbullet\quad\@acmArticle:\thepage}%
+    \fancyhead[RO]{\@headfootfont
+      \shorttitle\quad\textbullet\quad\@acmArticle\if at ACM@printfolios:\thepage\fi}%
     \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
     \@acmNumber, Article \@acmArticle.  Publication date: \@acmPubDate.}%
   \or % acmtog
-    \fancyhead[LE]{\ACM at linecount\sffamily
-      \@acmArticle:\thepage\quad\textbullet\quad\shortauthors}%
+    \fancyhead[LE]{\ACM at linecount\@headfootfont
+      \@acmArticle:\if at ACM@printfolios\thepage\quad\textbullet\quad\fi\@shortauthors}%
     \fancyhead[LO]{\ACM at linecount}%
-    \fancyhead[RO]{\sffamily
-      \shorttitle\quad\textbullet\quad\@acmArticle:\thepage}%
+    \fancyhead[RO]{\@headfootfont
+      \shorttitle\quad\textbullet\quad\@acmArticle\if at ACM@printfolios:\thepage\fi}%
     \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
     \@acmNumber, Article \@acmArticle.  Publication date: \@acmPubDate.}%
   \else % Proceedings
-    \fancyfoot[R]{\footnotesize\thepage}%
-    \fancyhead[L]{\ACM at linecount}%
+    \fancyfoot[C]{\if at ACM@printfolios\footnotesize\thepage\fi}%
+    \fancyhead[LO]{\ACM at linecount\@headfootfont\shorttitle}%
+    \fancyhead[RE]{\@headfootfont\@shortauthors}%
+    \fancyhead[LE]{\ACM at linecount\@headfootfont\acmConference at shortname,
+      \acmConference at date, \acmConference at venue}%
+    \fancyhead[RO]{\@headfootfont\acmConference at shortname,
+      \acmConference at date, \acmConference at venue}%
   \fi
+  \if at ACM@sigchiamode
+     \fancyheadoffset[L]{\dimexpr(\marginparsep+\marginparwidth)}%
+  \fi
 }
 \pagestyle{standardpagestyle}
 \newdimen\@folio at wd
@@ -1879,7 +1940,7 @@
   \ifcase\ACM at format@nr
   \relax % manuscript
     \fancyhead[L]{\ACM at linecount}%
-    \fancyfoot[RO,LE]{\small\thepage}%
+    \fancyfoot[RO,LE]{\if at ACM@printfolios\small\thepage\fi}%
     \fancyfoot[RE,LO]{\footnotesize Manuscript submitted to ACM}%
   \or % acmsmall
     \fancyfoot[RO,LE]{\footnotesize \@journalName, Vol. \@acmVolume, No.
@@ -1904,9 +1965,33 @@
     \fancyhead[L]{\ACM at linecount}%
   \else % Conference proceedings
     \fancyhead[L]{\ACM at linecount}%
-    \fancyfoot[R]{\footnotesize\thepage}%
+    \fancyfoot[C]{\if at ACM@printfolios\footnotesize\thepage\fi}%
   \fi
 }
+\renewcommand\section{\@startsection{section}{1}{\z@}%
+  {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+  {.25\baselineskip}%
+  {\@secfont}}
+\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
+  {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+  {.25\baselineskip}%
+  {\@subsecfont}}
+\renewcommand\subsubsection{\@startsection{subsubsection}{3}{10pt}%
+  {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+  {-3.5\p@}%
+  {\@subsubsecfont\@adddotafter}}
+\renewcommand\paragraph{\@startsection{paragraph}{4}{\parindent}%
+  {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
+  {-3.5\p@}%
+  {\@parfont\@adddotafter}}
+\renewcommand\part{\@startsection{part}{9}{\z@}%
+  {-10\p@ \@plus -4\p@ \@minus -2\p@}%
+  {4\p@}%
+  {\@parfont}}
+\def\section at raggedright{\@rightskip\@flushglue
+  \rightskip\@rightskip
+  \leftskip\z at skip
+  \parindent\z@}
 \def\@secfont{\sffamily\bfseries\section at raggedright\MakeUppercase}
 \def\@subsecfont{\sffamily\bfseries\section at raggedright}
 \def\@subsubsecfont{\sffamily\itshape}
@@ -1956,30 +2041,6 @@
 \fi
 \def\@adddotafter#1{#1\@addpunct{.}}
 \def\@addspaceafter#1{#1\@addpunct{\enspace}}
-\renewcommand\section{\@startsection{section}{1}{\z@}%
-  {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
-  {.25\baselineskip}%
-  {\@secfont}}
-\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
-  {-.75\baselineskip \@plus -2\p@ \@minus -.2\p@}%
-  {.25\baselineskip}%
-  {\@subsecfont}}
-\renewcommand\subsubsection{\@startsection{subsubsection}{3}{10pt}%
-  {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
-  {-3.5\p@}%
-  {\@subsubsecfont\@adddotafter}}
-\renewcommand\paragraph{\@startsection{paragraph}{4}{\parindent}%
-  {-.5\baselineskip \@plus -2\p@ \@minus -.2\p@}%
-  {-3.5\p@}%
-  {\@parfont\@adddotafter}}
-\renewcommand\part{\@startsection{part}{9}{\z@}%
-  {-10\p@ \@plus -4\p@ \@minus -2\p@}%
-  {4\p@}%
-  {\@parfont}}
-\def\section at raggedright{\@rightskip\@flushglue
-  \rightskip\@rightskip
-  \leftskip\z at skip
-  \parindent\z@}
 \def\@acmplainbodyfont{\itshape}
 \def\@acmplainindent{\parindent}
 \def\@acmplainheadfont{\scshape}
@@ -2074,6 +2135,11 @@
 }{%
   \popQED\endtrivlist\@endpefalse
 }
+\specialcomment{acks}
+  {\begingroup\section*{Acknowledgments}}{\endgroup}
+\def\grantsponsor#1#2#3{#2}
+\newcommand\grantnum[3][]{#3%
+  \def\@tempa{#1}\ifx\@tempa\@empty\else\space(\url{#1})\fi}
 \if at ACM@screen
   \includecomment{screenonly}
   \excludecomment{printonly}
@@ -2083,6 +2149,7 @@
 \fi
 \if at ACM@anonymous
   \excludecomment{anonsuppress}
+  \excludecomment{acks}
 \else
   \includecomment{anonsuppress}
 \fi



More information about the tex-live-commits mailing list