// Copyright (C) 2014, 2015 Apple Inc. All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
//    notice, this list of conditions and the following disclaimer in the
//    documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
// BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
// THE POSSIBILITY OF SUCH DAMAGE.

JetStream.addReferences({
    "3d-cube": 7.3,
    "3d-raytrace": 8.05,
    "base64": 4.2,
    "crypto-aes": 6.6,
    "crypto-md5": 3,
    "crypto-sha1": 2.05,
    "date-format-tofte": 9.95,
    "date-format-xparb": 8.1,
    "fannkuch-redux": 6,
    "n-body": 3,
    "regex-dna": 7.85,
    "tagcloud": 14.55,
    "unpack-code": 27.65,
    "bigfib.cpp": 1731,
    "c-ray.c": 950,
    "container.cpp": 10981,
    "dry.c": 1699,
    "float-mm.c": 2669,
    "gcc-loops.cpp": 18038,
    "hash-map": 565,
    "n-body.c": 2444,
    "quicksort.c": 1238,
    "towers.c": 778,
    "code-multi-load": 2.120195905897577,
    "richards": 0.23239600278875197,
    "delta-blue": 0.46860356138706644,
    "crypto": 1.5442204655506482,
    "proto-raytracer": 3.134796238244515,
    "earley-boyer": 2.5795868328750444,
    "regexp-2010": 61.82352941176467,
    "splay": 0.9286376274328075,
    "splay-latency": 40,
    "navier-stokes": 9.653846153846146,
    "pdfjs": 88.4166666666666,
    "mandreel": 157.14285714285708,
    "mandreel-latency": 10,
    "gbemu": 135.9999999999998,
    "code-first-load": 2.3249465349251905,
    "box2d": 28.416666666666636,
    "zlib": 887.666666666666,
    "typescript": 1149.9999999999993,
    "lua": 29858,
    "cdjs": 20,
    "geomean": 31.556451704472156,
});
