README (README.md)
Jsonnet - The data templating language
For an introduction to Jsonnet and documentation,
visit our website.
This repository contains the original implementation. You can also try go-jsonnet, a newer implementation which in some cases is orders of magnitude faster, and is recommended in preference to the C++ version.
Visit our discussion forum.
Security notes: If you need to process untrusted inputs (untrusted Jsonnet code), it is best not to use the C++ implementation, as it is not hardened for that use-case. The expected use-case is for evaluating Jsonnet code that you / your organisation has written and trusts not to be malicious. Even ignoring the risk of exploitable bugs in the implementation, the import, importstr, and importbin language constructs can potentially be used to exfiltrate sensitive data unless you take extra steps to restrict these or sandbox the jsonnet interpreter. By default, these constructs can import from any path accessible to the interpreter process.
Packages
Jsonnet is available on Homebrew:
brew install jsonnetJsonnet is available on MSYS2:
pacman -S mingw-w64-clang-i686-jsonnetpacman -S mingw-w64-clang-x86_64-jsonnetpacman -S mingw-w64-i686-jsonnetpacman -S mingw-w64-x86_64-jsonnetpacman -S mingw-w64-ucrt-x86_64-jsonnetThe Python binding is on pypi:
pip install jsonnetYou can also download and install Jsonnet using the vcpkg
dependency manager:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
vcpkg install jsonnetThe Jsonnet port in vcpkg is kept up to date by Microsoft team members and community contributors.
If the version is out of date, please create an issue or pull
request on the vcpkg repository.
Building Jsonnet
You can use either GCC or Clang to build Jsonnet. Note that on recent versions
of macOS, /usr/bin/gcc and /usr/bin/g++ are actually Clang, so there is no
difference.
Makefile
To build Jsonnet with GCC, run:
makeTo build Jsonnet with Clang, run:
make CC=clang CXX=clang++To run the output binary, run:
./jsonnetTo run the reformatter, run:
./jsonnetfmtBazel
Bazel builds are also supported.
Install Bazel if it is
not installed already. Then, run the following command to build with GCC:
bazel build -c opt //cmd:allTo build with Clang, use one of these two options:
env CC=clang CXX=clang++ bazel build -c opt //cmd:allOR
bazel build -c opt --action_env=CC=clang --action_env=CXX=clang++ //cmd:all
This builds the jsonnet and jsonnetfmt targets defined in cmd/BUILD. To launch
the output binaries, run:
bazel-bin/cmd/jsonnet
bazel-bin/cmd/jsonnetfmtCMake
cmake . -Bbuildcmake --build build --target run_testsContributing
See the contributing page on our website.
Developing Jsonnet
Running tests
To run the comprehensive suite:
make testLocally serving the website
You need a doc/js/libjsonnet.wasm which can either be downloaded from the
production website:
wget https://jsonnet.org/js/libjsonnet.wasm -O doc/js/libjsonnet.wasmOr you can build it yourself, which requires checking out
go-jsonnet. See the README.md in
that repo for instructions.
The standard library is documented in a structured format in doc/_stdlib_gen/stdlib-content.jsonnet.
The HTML (input for Jekyll) is regenerated using the following command:
tools/scripts/update_web_content.shThen, from the root of the repository you can generate and serve the website using
Jekyll (you need version 4.3.0 or later):
jekyll serve -s doc/This should build and serve the website locally, and automatically rebuild
when you change any underlying files.
---
CMakeLists (CMakeLists.txt)
cmake_minimum_required(VERSION 3.15...4.1)
#### Check important configuration pre-requisites.
#
Discourage in-source builds; they overwrite the hand-written Makefile, and generally cause confusion.
Use cmake . -B<dir> or the CMake GUI to do an out-of-source build.
if (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
message(FATAL_ERROR "Out-of-source builds are recommended for this project.")
endif()
#### Extract version from include/libjsonnet.h so it can be put in the project version.
#
Extract release version number from include/libjsonnet.h.
We do this in various other (non-CMake-build) places too, e.g., the Python wheel build.
set(JSONNET_HEADER_VERSION_REGEX
[=[^[ \t]#[ \t]define[ \t]+LIB_JSONNET_VERSION[ \t]+\"v([0-9.]+(-?[a-z][a-z0-9])?)\"[ \t]$]=])
file(
STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/include/libjsonnet.h JSONNET_HEADER_VERSION
LIMIT_COUNT 1
REGEX ${JSONNET_HEADER_VERSION_REGEX})
string(REGEX REPLACE ${JSONNET_HEADER_VERSION_REGEX} "\\1" JSONNET_HEADER_VERSION "${JSONNET_HEADER_VERSION}")
message(VERBOSE "Extracted version from include/libjsonnet.h: ${JSONNET_HEADER_VERSION}")
#### Set CMake project.
#
project(
jsonnet
HOMEPAGE_URL "https://jsonnet.org/"
LANGUAGES C CXX)
#### Unconditional CMake module includes.
#
include(GNUInstallDirs)
#### Set up cacheable/user-configurable state.
#
User-configurable options.
option(BUILD_JSONNET "Build jsonnet command-line tool." ON)
option(BUILD_JSONNETFMT "Build jsonnetfmt command-line tool." ON)
option(BUILD_TESTS "Build and run jsonnet tests." ON)
option(BUILD_STATIC_LIBS "Build a static libjsonnet." ON)
option(BUILD_SHARED_LIBS "Build shared libjsonnet." ON)
option(BUILD_SHARED_BINARIES "Link binaries to the shared libjsonnet instead of the static one." OFF)
option(BUILD_MAN_PAGES "Build manpages." ON)
option(USE_SYSTEM_GTEST "Use system-provided gtest library" OFF)
option(USE_SYSTEM_JSON "Use the system-provided json library" OFF)
option(USE_SYSTEM_RAPIDYAML "Use the system-provided rapidyaml library" OFF)
#### Compute derived values from user-configurable state.
#
Helper variable set to ON if there is any reason we need to build the jsonnet command binaries.
if(BUILD_TESTS OR BUILD_JSONNET OR BUILD_JSONNETFMT)
set(BUILD_SOME_BINARIES ON)
else()
set(BUILD_SOME_BINARIES OFF)
endif()
#### System package searches.
#
if(USE_SYSTEM_JSON)
find_package(nlohmann_json 3.6.1 REQUIRED)
endif()
if(USE_SYSTEM_RAPIDYAML)
find_package(ryml 0.10.0 REQUIRED)
endif()
#### Utility function to configure a target with our preferred C and C++ compilation flags.
#
function(configure_target_cc_props LIB_TARGET_NAME)
set_property(TARGET ${LIB_TARGET_NAME} PROPERTY CXX_STANDARD 17)
set_property(TARGET ${LIB_TARGET_NAME} PROPERTY CXX_EXTENSIONS OFF)
set_property(TARGET ${LIB_TARGET_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET ${LIB_TARGET_NAME} PROPERTY C_STANDARD 99)
set_property(TARGET ${LIB_TARGET_NAME} PROPERTY C_EXTENSIONS OFF)
set_property(TARGET ${LIB_TARGET_NAME} PROPERTY C_STANDARD_REQUIRED ON)
if (NOT MSVC)
target_compile_options(${LIB_TARGET_NAME}
PRIVATE
-Wall -Wextra -Wimplicit-fallthrough
-pedantic
$<$<COMPILE_LANGUAGE:CXX>:-Woverloaded-virtual>
)
endif()
endfunction()
#### Sub-directory CMakeLists includes.
#
add_subdirectory(stdlib)
#### Utility function to set up all the properties for an OBJECT library for the jsonnet core.
#
This is done as a function because there separate object libraries for shared vs. static.
Shared has slightly different compilation flags (it needs -fPIC).
#
function(configure_jsonnet_obj_target LIB_TARGET_NAME)
configure_target_cc_props(${LIB_TARGET_NAME})
target_sources(${LIB_TARGET_NAME}
PRIVATE
third_party/md5/md5.h
third_party/md5/md5.cpp
core/static_error.h
core/desugarer.h
core/unicode.h
core/vm.h
core/static_analysis.h
core/path_utils.h
core/state.h
core/pass.h
core/ast.h
core/json.h
core/string_utils.h
core/formatter.h
core/parser.h
core/lexer.h
core/desugarer.cpp
core/formatter.cpp
core/lexer.cpp
core/libjsonnet.cpp
core/parser.cpp
core/pass.cpp
core/path_utils.cpp
core/static_analysis.cpp
core/string_utils.cpp
core/vm.cpp
PUBLIC
include/libjsonnet.h
include/libjsonnet_fmt.h
)
target_link_libraries(${LIB_TARGET_NAME} PRIVATE stdlib_h)
if(USE_SYSTEM_JSON)
target_link_libraries(${LIB_TARGET_NAME} PRIVATE nlohmann_json::nlohmann_json)
else()
target_sources(${LIB_TARGET_NAME}
PRIVATE
third_party/json/nlohmann/json.hpp
)
target_include_directories(${LIB_TARGET_NAME}
SYSTEM PRIVATE third_party/json)
endif()
if(USE_SYSTEM_RAPIDYAML)
target_link_libraries(${LIB_TARGET_NAME} PRIVATE ryml::ryml)
target_compile_definitions(${LIB_TARGET_NAME} PRIVATE USE_SYSTEM_RAPIDYAML)
else()
target_sources(${LIB_TARGET_NAME}
PRIVATE
third_party/rapidyaml/rapidyaml-0.10.0.hpp
third_party/rapidyaml/rapidyaml.cpp
)
endif()
target_include_directories(${LIB_TARGET_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
PRIVATE
third_party/md5
$<$<NOT:$<BOOL:${USE_SYSTEM_RAPIDYAML}>>:${CMAKE_CURRENT_SOURCE_DIR}/third_party/rapidyaml>
)
endfunction()
#### Utility function to set up library target properties for the C lib.
#
function(configure_jsonnet_lib_target LIB_TARGET_NAME OBJ_TARGET_NAME)
configure_target_cc_props(${LIB_TARGET_NAME})
target_link_libraries(${LIB_TARGET_NAME} PUBLIC ${OBJ_TARGET_NAME})
set(JSONNET_PUBLIC_HEADERS include/libjsonnet.h include/libjsonnet_fmt.h)
set_target_properties(${LIB_TARGET_NAME} PROPERTIES
OUTPUT_NAME jsonnet
PUBLIC_HEADER "${JSONNET_PUBLIC_HEADERS}")
endfunction()
#### Utility function to set up library target properties for the C++ lib.
#
function(configure_jsonnet_cpp_lib_target LIB_TARGET_NAME OBJ_TARGET_NAME)
configure_target_cc_props(${LIB_TARGET_NAME})
target_sources(${LIB_TARGET_NAME}
PRIVATE
cpp/libjsonnet++.cpp
include/libjsonnet++.h
)
target_link_libraries(${LIB_TARGET_NAME} PUBLIC ${OBJ_TARGET_NAME})
set(JSONNET_PUBLIC_HEADERS include/libjsonnet.h include/libjsonnet++.h)
set_target_properties(${LIB_TARGET_NAME} PROPERTIES
OUTPUT_NAME jsonnet++
PUBLIC_HEADER "${JSONNET_PUBLIC_HEADERS}")
endfunction()
#### Static library target setup.
#
if(BUILD_STATIC_LIBS OR (BUILD_SOME_BINARIES AND NOT BUILD_SHARED_BINARIES))
add_library(jsonnet_obj_static OBJECT)
configure_jsonnet_obj_target(jsonnet_obj_static)
add_library(jsonnet_static STATIC)
configure_jsonnet_lib_target(jsonnet_static jsonnet_obj_static)
add_library(jsonnet_cpp_static STATIC)
configure_jsonnet_cpp_lib_target(jsonnet_cpp_static jsonnet_obj_static)
if(BUILD_STATIC_LIBS)
install(TARGETS jsonnet_static jsonnet_cpp_static)
endif()
endif()
#### Shared library target setup.
#
if(BUILD_SHARED_LIBS OR (BUILD_SOME_BINARIES AND BUILD_SHARED_BINARIES))
add_library(jsonnet_obj_shared OBJECT)
set_property(TARGET jsonnet_obj_shared PROPERTY POSITION_INDEPENDENT_CODE ON)
configure_jsonnet_obj_target(jsonnet_obj_shared)
add_library(jsonnet_shared SHARED)
configure_jsonnet_lib_target(jsonnet_shared jsonnet_obj_shared)
set_target_properties(jsonnet_shared PROPERTIES
VERSION "${JSONNET_HEADER_VERSION}"
SOVERSION "0")
add_library(jsonnet_cpp_shared SHARED)
configure_jsonnet_cpp_lib_target(jsonnet_cpp_shared jsonnet_obj_shared)
set_target_properties(jsonnet_cpp_shared PROPERTIES
VERSION "${JSONNET_HEADER_VERSION}"
SOVERSION "0")
if(BUILD_SHARED_LIBS)
install(TARGETS jsonnet_shared jsonnet_cpp_shared)
endif()
endif()
#### Alias the library to use for binaries.
#
if(BUILD_SHARED_BINARIES)
add_library(jsonnet_lib_for_binaries ALIAS jsonnet_shared)
add_library(jsonnet_cpp_lib_for_binaries ALIAS jsonnet_cpp_shared)
else()
add_library(jsonnet_lib_for_binaries ALIAS jsonnet_static)
add_library(jsonnet_cpp_lib_for_binaries ALIAS jsonnet_cpp_static)
endif()
#### An object library for the utils.cpp code which is shared by both CLI binaries.
#
if(BUILD_SOME_BINARIES)
add_library(jsonnet_cmd_utils OBJECT
cmd/utils.cpp
cmd/utils.h
)
endif()
#### CLI (jsonnet and jsonnetfmt) binary targets.
#
if(BUILD_JSONNET OR BUILD_TESTS)
add_executable(jsonnet
cmd/jsonnet.cpp
$<TARGET_OBJECTS:jsonnet_cmd_utils>
)
target_link_libraries(jsonnet PRIVATE jsonnet_lib_for_binaries)
if(BUILD_JSONNET)
install(TARGETS jsonnet)
endif()
endif()
if(BUILD_JSONNETFMT OR BUILD_TESTS)
add_executable(jsonnetfmt
cmd/jsonnetfmt.cpp
$<TARGET_OBJECTS:jsonnet_cmd_utils>
)
target_link_libraries(jsonnetfmt PRIVATE jsonnet_lib_for_binaries)
if(BUILD_JSONNETFMT)
install(TARGETS jsonnetfmt)
endif()
endif()
#### GoogleTest based tests.
#
if(BUILD_TESTS)
enable_testing()
include(GoogleTest)
if(USE_SYSTEM_GTEST)
find_package(GTest REQUIRED)
else()
include(FetchContent)
FetchContent_Declare(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v1.17.0
)
# For Windows: Prevent overriding the parent project's compiler/linker settings.
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
# Prevent including GoogleTest in the generated install rules.
set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
endif()
set(JSONNET_TEST_TARGETS)
function(jsonnet_add_gtest TESTNAME JSONNET_LIB_TARGET)
set(JSONNET_TEST_TARGETS ${JSONNET_TEST_TARGETS} ${TESTNAME} PARENT_SCOPE)
add_executable(${TESTNAME} ${ARGN})
target_link_libraries(${TESTNAME} ${JSONNET_LIB_TARGET} gtest gmock gtest_main)
gtest_discover_tests(${TESTNAME}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
PROPERTIES
VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}"
ENVIRONMENT "JSONNET_SOURCE_BASE=${PROJECT_SOURCE_DIR}"
)
set_target_properties(${TESTNAME} PROPERTIES FOLDER tests)
endfunction()
function(jsonnet_add_raw_test TESTNAME JSONNET_LIB_TARGET)
set(JSONNET_TEST_TARGETS ${JSONNET_TEST_TARGETS} ${TESTNAME} PARENT_SCOPE)
add_executable(${TESTNAME} ${ARGN})
target_link_libraries(${TESTNAME} ${JSONNET_LIB_TARGET})
set_target_properties(${TESTNAME} PROPERTIES FOLDER tests)
add_test(NAME ${TESTNAME} COMMAND ${TESTNAME})
endfunction()
jsonnet_add_gtest(test_core_unicode jsonnet_lib_for_binaries core/unicode_test.cpp)
jsonnet_add_gtest(test_core_lexer jsonnet_lib_for_binaries core/lexer_test.cpp)
jsonnet_add_gtest(test_core_parser jsonnet_lib_for_binaries core/parser_test.cpp)
jsonnet_add_gtest(test_core_libjsonnet jsonnet_lib_for_binaries core/libjsonnet_test.cpp)
jsonnet_add_gtest(test_cpp_libjsonnet jsonnet_cpp_lib_for_binaries cpp/libjsonnet++_test.cpp)
jsonnet_add_gtest(test_cpp_libjsonnet_locale jsonnet_cpp_lib_for_binaries cpp/libjsonnet_locale_test.cpp)
jsonnet_add_raw_test(test_core_libjsonnet_native_callbacks jsonnet_lib_for_binaries core/libjsonnet_native_callbacks_test.c)
# core/libjsonnet_file_test needs an input file
add_executable(test_libjsonnet_file core/libjsonnet_file_test.c)
target_link_libraries(test_libjsonnet_file jsonnet_lib_for_binaries)
set_target_properties(test_libjsonnet_file PROPERTIES FOLDER tests)
add_test(
NAME test_libjsonnet_file
COMMAND test_libjsonnet_file "test_suite/object.jsonnet"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
add_subdirectory(test_suite)
# run_tests target builds and runs all tests
add_custom_target(run_tests COMMAND ${CMAKE_CTEST_COMMAND}
DEPENDS
jsonnet jsonnetfmt test_libjsonnet_file ${JSONNET_TEST_TARGETS}
)
endif() # if(BUILD_TESTS)
#### Man pages
#
if(BUILD_MAN_PAGES AND (BUILD_JSONNET OR BUILD_JSONNETFMT))
find_program(HELP2MAN_BINARY NAMES help2man)
if (HELP2MAN_BINARY)
message(STATUS "help2man found, man pages will be generated.")
file(MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/man/man1")
if(BUILD_JSONNET)
add_custom_command(
OUTPUT "${PROJECT_BINARY_DIR}/man/man1/jsonnet.1"
COMMAND "${HELP2MAN_BINARY}"
ARGS --section=1 --no-info --name="Jsonnet data templating language interpreter" --output="${PROJECT_BINARY_DIR}/man/man1/jsonnet.1" "$<TARGET_FILE:jsonnet>"
DEPENDS jsonnet
)
endif()
if(BUILD_JSONNETFMT)
add_custom_command(
OUTPUT "${PROJECT_BINARY_DIR}/man/man1/jsonnetfmt.1"
COMMAND "${HELP2MAN_BINARY}"
ARGS --section=1 --no-info --name="Jsonnet data templating language auto-formatter" --output="${PROJECT_BINARY_DIR}/man/man1/jsonnetfmt.1" "$<TARGET_FILE:jsonnetfmt>"
DEPENDS jsonnetfmt
)
endif()
add_custom_target(jsonnet-man ALL DEPENDS "${PROJECT_BINARY_DIR}/man/man1/jsonnet.1")
add_custom_target(jsonnetfmt-man ALL DEPENDS "${PROJECT_BINARY_DIR}/man/man1/jsonnetfmt.1")
install(FILES ${PROJECT_BINARY_DIR}/man/man1/jsonnet.1 DESTINATION "${CMAKE_INSTALL_MANDIR}/man1")
install(FILES ${PROJECT_BINARY_DIR}/man/man1/jsonnetfmt.1 DESTINATION "${CMAKE_INSTALL_MANDIR}/man1")
else()
message(STATUS "help2man not found, man pages will not be generated.")
endif()
endif() # if(BUILD_MAN_PAGES)
#### CMake debugging outputs
#
Note cmake_language GET_MESSAGE_LOG_LEVEL exists only in 3.25 and above.
if(CMAKE_VERSION VERSION_GREATER "3.25")
include(CMakePrintHelpers)
cmake_language(GET_MESSAGE_LOG_LEVEL CURRENT_CMAKE_LOG_LEVEL)
if(CURRENT_CMAKE_LOG_LEVEL MATCHES "TRACE")
# Print specific properties for specific targets
cmake_print_properties(
TARGETS
to_c_array
stdlib_h
jsonnet_obj_static
jsonnet_obj_shared
jsonnet_static
jsonnet_shared
jsonnet_cpp_static
jsonnet_cpp_shared
jsonnet_cmd_utils
jsonnet
jsonnetfmt
jsonnet-man
jsonnetfmt-man
PROPERTIES
TYPE
C_STANDARD
CXX_STANDARD
POSITION_INDEPENDENT_CODE
PUBLIC_LINK_DEPENDS
INTERFACE_LINK_DEPENDS
PUBLIC_LINK_LIBRARIES
INTERFACE_LINK_LIBRARIES
PUBLIC_INCLUDE_DIRECTORIES
INTERFACE_INCLUDE_DIRECTORIES
OUTPUT_NAME
PUBLIC_HEADER
RUNTIME_OUTPUT_DIRECTORY
)
endif()
endif()
---
PYTHON README (PYTHON_README.md)
Jsonnet - The data templating language
For an introduction to Jsonnet and documentation,
visit our website.
This is the Python module for the original C++ implementation of Jsonnet.
Security notes: The C++ implementation is not suitable for processing untrusted inputs without significant external effort to sandbox it. It is not hardened and may have unknown exploitable bugs. It is intended for use to evaluate Jsonnet code that you trust not to be malicious (e.g., code written by you/your organisation). Even ignoring the risk of exploitable bugs in the implementation, the import, importstr, and importbin language constructs can potentially be used to exfiltrate sensitive data unless you take extra steps to restrict these or sandbox the jsonnet interpreter. By default, these constructs can import from any path accessible to the interpreter process.
Using the Jsonnet Python module
You can install from PyPI with uv add jsonnet or with your preferred Python package management tool.
The two main functions in the _jsonnet package are evaluate_file and evaluate_snippet:
- evaluate_file(filename, ...) reads and evalutes the file at the given path, returning an output as a JSON string.
- evaluate_snippet(filename, src, ...) evaluates the given source code (src), returning an output as a JSON string. The provided filename is used in error messages.
The functions support keyword arguments:
- jpathdir: A string (path to a directory) or list of strings (list of directories) to be added to the import search path.
- ext_vars, ext_codes: Dictionaries of variables to set; these can be used from within the evaluated code through the std.extVar Jsonnet function. ext_codes values are Jsonnet expressions, ext_vars values are provided to Jsonnet as plain strings.
- tla_vars, tla_codes: Dictionaries of Top-Level arguments. If the provided Jsonnet code to evaluate represents a function, that function is called with these values as (named) arguments.
- import_callback: A function which will be called when import (or importstr, importbin) expressions are evaluated. See below.
- native_callbacks: A dictionary of functions which can be called from Jsonnet using the Jsonnet std.native function. See below.
And some configuration for internal implementation details:
- max_stack
- max_trace
- gc_min_objects
- gc_growth_trigger
import_callback
Usage example:
import _jsonnetFILES = {
"the_message.txt": b"hello, world",
}
def import_callback_memfile(dir, rel):
"""Custom import function which only returns files from some in-memory storage.
Args:
dir: The directory part of the file in which the import occurred.
rel: The path string passed to the import expression.
"""
if rel in FILES:
# Note that the returned file _content_ should be a bytes value, not a string.
return rel, FILES[rel]
raise RuntimeError('File not found')
result = _jsonnet.evaluate_snippet(
'example',
'local the_message = importstr "the_message.txt"; ' +
'{ msg: the_message }',
import_callback=import_callback_memfile)
assert result == '{\n "msg": "hello, world"\n}\n';
native_callbacks
Usage example:
import _jsonnetdef concat(a, b):
return a + b
native_callbacks = {
'concat': (('a', 'b'), concat),
}
result = _jsonnet.evaluate_snippet(
'example',
'local concat = std.native("concat"); ' +
'concat("hello, ", "world")',
native_callbacks=native_callbacks)
assert result == '"hello, world"\n';
---
Release Checklist (release_checklist.md)
Jsonnet Release Checklist
Preparation
Before doing the release, make sure that the project is in good state:
- Triage issues – make sure that all issues are labelled.
- Check for release-blocking bugs. All bugs which results in a wrong result of the evaluation are release-blocking.
- Go through the open PRs – consider merging any outstanding ones. Do not merge big changes right before the release.
- Check for new major Bazel versions (https://bazel.build/release), update
.github/workflows/build_and_test.yml "Build Bazel example" job to check all actively maintained Bazel versions
and confirm that it stays green.
- Sync google/go-jsonnet and google/jsonnet
1. Check out master from both
1. Use the update_cpp_jsonnet.sh script in the go-jsonnet repository to sync it to jsonnet master.
1. Run tests: ./tests.sh
1. Fix any failing tests.
1. Send a PR with the updated version, so that all the CI tests are run.
- Check that CI is green in both C++ and Go jsonnet: Checks should run automatically on pushes to master,
so you can check the status on the latest master commit.
- Optionally, run tests locally to double-check.
- C++:
1. make test
1. bazel test ...:all
1. mkdir build ; cd build ; cmake .. ; make ; make test
- Go:
1. ./tests.sh
2. bazel test //:go_default_test
- Optionally, make sure the Python bindings build and work correctly locally.
- Go through the commits since the last release and prepare the release notes.
The release notes should have separate sections for the language changes and
changes specific to each implementation.
- Make sure that the stdlib documentation is complete. Check the git history for any
changes to stdlib (including builtins) and make sure they are reflected in the documentation.
- Make sure that you can build the website locally.
- Download or build libjsonnet.wasm (see README.md for instructions)
- jekyll serve -s doc/ (you need Jekyll 4.3.0 or later) to serve the site locally to check it.
- Check that it works in two different browsers. Make sure that live evaluation
in the tutorial works.
All the above points apply to both google/jsonnet and google/go-jsonnet.
Make a final decision to release
A this point you should be confident that the project is ready for the release, and know what
will be included in that release.
Release the C++ version
1. Checkout the prepare-release branch.
1. Fast-forward merge it to match master (it should fast-forward cleanly!):
git merge --ff-only upstream/master
(upstream might have a different name depending on your local git checkout)
1. Modify include/libjsonnet.h to the version number for the new release. If you are making a
release candidate and not a full release, include a suffix like -rc1.
1. Modify MODULE.bazel to match the new release version number.
1. Update test_cmd golden file version numbers:
./tools/scripts/replace_test_cmd_version.sh <NEW_VERSION>1. In doc/_stdlib_gen/stdlib-content.jsonnet replace any availableSince: "upcoming" with NEW_VERSION".
1. Commit the version number changes. Typically I use a commit message like:
git commit -m "release: prepare to release v0.21.0-rc2"
1. Push the prepare-release up to github. CI checks should automatically be triggered on the branch.
Wait for them to be green, in: https://github.com/google/jsonnet/actions
If CI checks don't pass, fix the problems.
1. Optionally: Perform a test Python build & publish to testpypi. This is important to do if the Python
build/publish process has changed, but less important otherwise. To do this, on the GitHub Actions page,
manually trigger the "Build and Publish Python Package" workflow. Set the options appropriately
(check the "Upload generate package files to PyPI" checkbox, select "testpypi" as the instance to
publish to). You will need to explicitly approve the publish step after the build step is completed.
This lets you check the whole workflow end to end and check that all the steps succeeded.
If you just want to verify that building the Python packages works (without checking the publishing
process) you can run the workflow but leave "Upload generate package files to PyPI" unchecked.
1. On the GitHub Actions page, manually trigger the "Release" workflow.
This will create a new _draft_ release in GitHub, and attach a tarball archive of the repository content.
The version number for the release is extracted directly from the LIB_JSONNET_VERSION in the jsonnet header.
1. On the GitHub Actions page, manually trigger the "Build and Publish Python Package" workflow. In the
workflow settings, check "Upload generate package files to PyPI" and select "pypi" as the instance to
publish to.
This will build Python packages for a variety of systems. It will then _pause_ and wait for an approval
before publishing them to PyPI. I generally wait until I'm really ready to hit the publish button on the
release in GitHub before approving the PyPI publish step (but I let PyPI publishing complete before hitting
the GitHub button so that I can confirm that the packages get uploaded successfully).
1. Do any last minute checks you want to do!
If you want to manually check any of the built Python packages before they're published, you can download
them GitHub Actions - they are available as "Artifacts" on the workflow. If you want to download and check
the source tarball you can download it from the draft release in GitHub.
1. Finalise the release notes in the GitHub release UI.
1. Approve PyPI publishing and let it complete.
1. Check that the new/proposed version tag specified in the GitHub release is correct and hit the Publish button
(you do not have to manually create the tag - GitHub creates tag when you publish the release).
1. Fast-forward merge the prepare-release branch to master and push master so that the repo master state
matches the release that was just published.
1. TO BE WRITTEN: Update the Bazel module at https://registry.bazel.build/modules/jsonnet.
Release the Go version
This should be done _after_ the C++ version release, because the Go version depends on the C++ version: it uses
the standard library from the C++ version, and some header files.
1. In go-jsonnet, switch to the prepare-release branch and bring it up to date with master:
Fast-forward merge with git merge --ff-only.
1. In go-jsonnet you can run the update_cpp_jsonnet.sh script and pass in the published version tag
for the C++ version; this will update go-jsonnet to pin it to that specific release (instead of pinning
to a commit hash). Pinning to the release is better, because it will use the stable jsonnet release
source tarball (which has a stable hash that can be used) instead of the unstable GitHub automatic
tarball for the commit.
1. Modify vm.go to update the version number.
1. Modify MODULE.bazel to update the version number.
1. Run tests locally, commit, and push to the go-jsonnet prepare-release branch. CI checks should run
automatically on this branch - check the results in https://github.com/google/go-jsonnet/actions
1. Optionally: Perform a preflight Python build & publish by manually triggering the workflow in GitHub actions.
1. Start a release Python build & publish by manually triggering the workflow in GitHub Actions.
It will wait for an approval before publishing (don't approve it yet).
Check that the Python packages are all built successfully.
1. Manually trigger the Release workflow in GitHub Actions to create a new _draft_ release with all the
built packages attached to it.
1. Fill in the release notes in the GitHub draft release.
1. Do any final release checks (including downloading built packages and checking them locally if you want).
1. Approve the Python publish step and wait for that to complete successfully.
1. Check that the new tag number is correct and click Publish in the GitHub draft release.
1. Fast-forward merge the prepare-release branch to master and push master so that the repo master state
matches the release that was just published.
1. TO BE WRITTEN: Update the Bazel module at https://registry.bazel.build/modules/jsonnet_go.
Update the website
In google/jsonnet:
- Build or download libjsonnet.wasm (see README.md)
- jekyll serve -s docs/
- Check that the local version works in two different browsers. Make sure that live evaluation in the tutorial works.
- tools/scripts/push_docs.sh
- Check that the public works in two different browsers. Make sure that you are getting the new version (and not an old cached version). Make sure that live evaluation in the tutorial works.
Make the announcement
- Send an email to the mailing list.
- Announce the new release on Slack.
After the release
It's a good time to merge big PRs.
---
Case Studies/Kubernetes/README (case_studies/kubernetes/README.md)
Kubernetes Example
This Kubernetes example is based on https://github.com/vasanthbala/hackathon/tree/master/kbp/redis
Generate the yaml (actually json) files for Kubernetes:
jsonnet -m ./ example.jsonnetCheck they are the same as the original handwritten files:
python test_same.pyClean up
rm -v .out .new.yaml---
Case Studies/Kubernetes/Bigquery Controller.Old.Yaml (case_studies/kubernetes/bigquery-controller.old.yaml)
apiVersion: v1
kind: ReplicationController
metadata:
name: bigquery-controller
labels:
name: bigquery-controller
spec:
replicas: 2
template:
metadata:
labels:
name: bigquery-controller
spec:
containers:
- name: bigquery
image: gcr.io/cooltool-1009/pipeline_image:latest
env:
- name: PROCESSINGSCRIPT
value: redis-to-bigquery
- name: REDISLIST
value: twitter-stream
# Change this to your project ID.
- name: PROJECT_ID
value: cooltool-1009
# Change the following two settings to your dataset and table.
- name: BQ_DATASET
value: rtda
- name: BQ_TABLE
value: tweets
---
Case Studies/Kubernetes/Redis Master Service.Old.Yaml (case_studies/kubernetes/redis-master-service.old.yaml)
apiVersion: v1
kind: Service
metadata:
name: redismaster
labels:
name: redis-master
spec:
ports:
# The port that this service should serve on.
# You don't need to specify the targetPort if it is the same as the port,
# though here we include it anyway, to show the syntax.
- port: 6379
targetPort: 6379
selector:
name: redis-master
---
Case Studies/Kubernetes/Redis Master.Old.Yaml (case_studies/kubernetes/redis-master.old.yaml)
apiVersion: v1
kind: ReplicationController
metadata:
name: redis-master
labels:
name: redis-master
spec:
replicas: 1
template:
metadata:
labels:
name: redis-master
spec:
containers:
- name: master
image: redis
ports:
- containerPort: 6379
- name: collectd
image: gcr.io/cooltool-1009/collectd-redis:latest
ports: []
---
Case Studies/Kubernetes/Twitter Stream.Old.Yaml (case_studies/kubernetes/twitter-stream.old.yaml)
apiVersion: v1
kind: ReplicationController
metadata:
name: twitter-stream
labels:
name: twitter-stream
spec:
replicas: 1
template:
metadata:
labels:
name: twitter-stream
spec:
containers:
- name: twitter-to-redis
image: gcr.io/cooltool-1009/pipeline_image:latest
env:
- name: PROCESSINGSCRIPT
value: twitter-to-redis
- name: REDISLIST
value: twitter-stream
# Change the following four settings to your twitter credentials
# information.
- name: CONSUMERKEY
value: xxxx
- name: CONSUMERSECRET
value: xxxx
- name: ACCESSTOKEN
value: xxxx
- name: ACCESSTOKENSEC
value: xxxx
- name: TWSTREAMMODE
value: sample
---
Case Studies/Micromanage/Lib/Mmlib/V0.1.2/Amis/Ubuntu Raw.Json (case_studies/micromanage/lib/mmlib/v0.1.2/amis/ubuntu_raw.json)
{ "aaData":
[
["ap-northeast-1","karmic","9.10 EOL","amd64","instance-store","20100826","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-2a0fa42b\">ami-2a0fa42b</a>","aki-260fa427"],
["ap-northeast-1","karmic","9.10 EOL","i386","instance-store","20100826","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-240fa425\">ami-240fa425</a>","aki-0a0fa40b"],
["ap-southeast-1","karmic","9.10 EOL","amd64","instance-store","20100826","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-90344ac2\">ami-90344ac2</a>","aki-ec344abe"],
["ap-southeast-1","karmic","9.10 EOL","i386","instance-store","20100826","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-e6344ab4\">ami-e6344ab4</a>","aki-e2344ab0"],
["eu-west-1","karmic","9.10 EOL","amd64","instance-store","20100826","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-28b9935c\">ami-28b9935c</a>","aki-20b99354"],
["eu-west-1","karmic","9.10 EOL","i386","instance-store","20100826","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-24b99350\">ami-24b99350</a>","aki-34b99340"],
["us-east-1","karmic","9.10 EOL","amd64","instance-store","20100826","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-6832d801\">ami-6832d801</a>","aki-1c3dd775"],
["us-east-1","karmic","9.10 EOL","i386","instance-store","20100826","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-563dd73f\">ami-563dd73f</a>","aki-c43cd6ad"],
["us-west-1","karmic","9.10 EOL","amd64","instance-store","20100826","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-0af0a14f\">ami-0af0a14f</a>","aki-68f0a12d"],
["us-west-1","karmic","9.10 EOL","i386","instance-store","20100826","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-6ef0a12b\">ami-6ef0a12b</a>","aki-5af0a11f"],
["ap-northeast-1","utopic","14.10 EOL","amd64","hvm:ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-48c27448\">ami-48c27448</a>","hvm"],
["ap-northeast-1","utopic","14.10 EOL","amd64","hvm:ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-4ac2744a\">ami-4ac2744a</a>","hvm"],
["ap-northeast-1","utopic","14.10 EOL","amd64","hvm:ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-50c27450\">ami-50c27450</a>","hvm"],
["ap-northeast-1","utopic","14.10 EOL","amd64","hvm:instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-a4c472a4\">ami-a4c472a4</a>","hvm"],
["ap-northeast-1","utopic","14.10 EOL","amd64","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-3ec2743e\">ami-3ec2743e</a>","aki-176bf516"],
["ap-northeast-1","utopic","14.10 EOL","i386","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-3cc2743c\">ami-3cc2743c</a>","aki-136bf512"],
["ap-northeast-1","utopic","14.10 EOL","amd64","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-42c27442\">ami-42c27442</a>","aki-176bf516"],
["ap-northeast-1","utopic","14.10 EOL","i386","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-40c27440\">ami-40c27440</a>","aki-136bf512"],
["ap-northeast-1","utopic","14.10 EOL","amd64","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-46c27446\">ami-46c27446</a>","aki-176bf516"],
["ap-northeast-1","utopic","14.10 EOL","i386","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-44c27444\">ami-44c27444</a>","aki-136bf512"],
["ap-northeast-1","utopic","14.10 EOL","amd64","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-ccda6ccc\">ami-ccda6ccc</a>","aki-176bf516"],
["ap-northeast-1","utopic","14.10 EOL","i386","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-18d16718\">ami-18d16718</a>","aki-136bf512"],
["ap-southeast-1","utopic","14.10 EOL","amd64","hvm:ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-86e3e1d4\">ami-86e3e1d4</a>","hvm"],
["ap-southeast-1","utopic","14.10 EOL","amd64","hvm:ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-84e3e1d6\">ami-84e3e1d6</a>","hvm"],
["ap-southeast-1","utopic","14.10 EOL","amd64","hvm:ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-8ae3e1d8\">ami-8ae3e1d8</a>","hvm"],
["ap-southeast-1","utopic","14.10 EOL","amd64","hvm:instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-e8e3e1ba\">ami-e8e3e1ba</a>","hvm"],
["ap-southeast-1","utopic","14.10 EOL","amd64","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-94e3e1c6\">ami-94e3e1c6</a>","aki-503e7402"],
["ap-southeast-1","utopic","14.10 EOL","i386","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-96e3e1c4\">ami-96e3e1c4</a>","aki-ae3973fc"],
["ap-southeast-1","utopic","14.10 EOL","amd64","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-9ce3e1ce\">ami-9ce3e1ce</a>","aki-503e7402"],
["ap-southeast-1","utopic","14.10 EOL","i386","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-98e3e1ca\">ami-98e3e1ca</a>","aki-ae3973fc"],
["ap-southeast-1","utopic","14.10 EOL","amd64","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-80e3e1d2\">ami-80e3e1d2</a>","aki-503e7402"],
["ap-southeast-1","utopic","14.10 EOL","i386","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-82e3e1d0\">ami-82e3e1d0</a>","aki-ae3973fc"],
["ap-southeast-1","utopic","14.10 EOL","amd64","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-f2dcdea0\">ami-f2dcdea0</a>","aki-503e7402"],
["ap-southeast-1","utopic","14.10 EOL","i386","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-f6dedca4\">ami-f6dedca4</a>","aki-ae3973fc"],
["ap-southeast-2","utopic","14.10 EOL","amd64","hvm:ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-21eea81b\">ami-21eea81b</a>","hvm"],
["ap-southeast-2","utopic","14.10 EOL","amd64","hvm:ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-27eea81d\">ami-27eea81d</a>","hvm"],
["ap-southeast-2","utopic","14.10 EOL","amd64","hvm:ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-25eea81f\">ami-25eea81f</a>","hvm"],
["ap-southeast-2","utopic","14.10 EOL","amd64","hvm:instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-05e1a73f\">ami-05e1a73f</a>","hvm"],
["ap-southeast-2","utopic","14.10 EOL","amd64","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-2beea811\">ami-2beea811</a>","aki-c362fff9"],
["ap-southeast-2","utopic","14.10 EOL","i386","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-37eea80d\">ami-37eea80d</a>","aki-cd62fff7"],
["ap-southeast-2","utopic","14.10 EOL","amd64","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-2feea815\">ami-2feea815</a>","aki-c362fff9"],
["ap-southeast-2","utopic","14.10 EOL","i386","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-29eea813\">ami-29eea813</a>","aki-cd62fff7"],
["ap-southeast-2","utopic","14.10 EOL","amd64","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-23eea819\">ami-23eea819</a>","aki-c362fff9"],
["ap-southeast-2","utopic","14.10 EOL","i386","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-2deea817\">ami-2deea817</a>","aki-cd62fff7"],
["ap-southeast-2","utopic","14.10 EOL","amd64","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a7e3a59d\">ami-a7e3a59d</a>","aki-c362fff9"],
["ap-southeast-2","utopic","14.10 EOL","i386","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-91e5a3ab\">ami-91e5a3ab</a>","aki-cd62fff7"],
["eu-central-1","utopic","14.10 EOL","amd64","hvm:ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-88333695\">ami-88333695</a>","hvm"],
["eu-central-1","utopic","14.10 EOL","amd64","hvm:ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-8a333697\">ami-8a333697</a>","hvm"],
["eu-central-1","utopic","14.10 EOL","amd64","hvm:ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-84333699\">ami-84333699</a>","hvm"],
["eu-central-1","utopic","14.10 EOL","amd64","hvm:instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-2c303531\">ami-2c303531</a>","hvm"],
["eu-central-1","utopic","14.10 EOL","amd64","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-9633368b\">ami-9633368b</a>","aki-184c7a05"],
["eu-central-1","utopic","14.10 EOL","i386","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-94333689\">ami-94333689</a>","aki-3e4c7a23"],
["eu-central-1","utopic","14.10 EOL","amd64","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-9233368f\">ami-9233368f</a>","aki-184c7a05"],
["eu-central-1","utopic","14.10 EOL","i386","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-9033368d\">ami-9033368d</a>","aki-3e4c7a23"],
["eu-central-1","utopic","14.10 EOL","amd64","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-8e333693\">ami-8e333693</a>","aki-184c7a05"],
["eu-central-1","utopic","14.10 EOL","i386","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-8c333691\">ami-8c333691</a>","aki-3e4c7a23"],
["eu-central-1","utopic","14.10 EOL","amd64","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-f43633e9\">ami-f43633e9</a>","aki-184c7a05"],
["eu-central-1","utopic","14.10 EOL","i386","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-b63732ab\">ami-b63732ab</a>","aki-3e4c7a23"],
["eu-west-1","utopic","14.10 EOL","amd64","hvm:ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-c8a5eebf\">ami-c8a5eebf</a>","hvm"],
["eu-west-1","utopic","14.10 EOL","amd64","hvm:ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-b6a5eec1\">ami-b6a5eec1</a>","hvm"],
["eu-west-1","utopic","14.10 EOL","amd64","hvm:ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-b4a5eec3\">ami-b4a5eec3</a>","hvm"],
["eu-west-1","utopic","14.10 EOL","amd64","hvm:instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-b0ade6c7\">ami-b0ade6c7</a>","hvm"],
["eu-west-1","utopic","14.10 EOL","amd64","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-daa5eead\">ami-daa5eead</a>","aki-52a34525"],
["eu-west-1","utopic","14.10 EOL","i386","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-dea5eea9\">ami-dea5eea9</a>","aki-68a3451f"],
["eu-west-1","utopic","14.10 EOL","amd64","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-c2a5eeb5\">ami-c2a5eeb5</a>","aki-52a34525"],
["eu-west-1","utopic","14.10 EOL","i386","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-c6a5eeb1\">ami-c6a5eeb1</a>","aki-68a3451f"],
["eu-west-1","utopic","14.10 EOL","amd64","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-caa5eebd\">ami-caa5eebd</a>","aki-52a34525"],
["eu-west-1","utopic","14.10 EOL","i386","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-cca5eebb\">ami-cca5eebb</a>","aki-68a3451f"],
["eu-west-1","utopic","14.10 EOL","amd64","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-56abe021\">ami-56abe021</a>","aki-52a34525"],
["eu-west-1","utopic","14.10 EOL","i386","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-c091dab7\">ami-c091dab7</a>","aki-68a3451f"],
["sa-east-1","utopic","14.10 EOL","amd64","hvm:ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-1319960e\">ami-1319960e</a>","hvm"],
["sa-east-1","utopic","14.10 EOL","amd64","hvm:ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-0d199610\">ami-0d199610</a>","hvm"],
["sa-east-1","utopic","14.10 EOL","amd64","hvm:ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-0f199612\">ami-0f199612</a>","hvm"],
["sa-east-1","utopic","14.10 EOL","amd64","hvm:instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-7d1a9560\">ami-7d1a9560</a>","hvm"],
["sa-east-1","utopic","14.10 EOL","amd64","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-19199604\">ami-19199604</a>","aki-5553f448"],
["sa-east-1","utopic","14.10 EOL","i386","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-1f199602\">ami-1f199602</a>","aki-5b53f446"],
["sa-east-1","utopic","14.10 EOL","amd64","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-15199608\">ami-15199608</a>","aki-5553f448"],
["sa-east-1","utopic","14.10 EOL","i386","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-1b199606\">ami-1b199606</a>","aki-5b53f446"],
["sa-east-1","utopic","14.10 EOL","amd64","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-1119960c\">ami-1119960c</a>","aki-5553f448"],
["sa-east-1","utopic","14.10 EOL","i386","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-1719960a\">ami-1719960a</a>","aki-5b53f446"],
["sa-east-1","utopic","14.10 EOL","amd64","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-4b1b9456\">ami-4b1b9456</a>","aki-5553f448"],
["sa-east-1","utopic","14.10 EOL","i386","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-cb1d92d6\">ami-cb1d92d6</a>","aki-5b53f446"],
["us-east-1","utopic","14.10 EOL","amd64","hvm:ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-d96cb0b2\">ami-d96cb0b2</a>","hvm"],
["us-east-1","utopic","14.10 EOL","amd64","hvm:ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-df6cb0b4\">ami-df6cb0b4</a>","hvm"],
["us-east-1","utopic","14.10 EOL","amd64","hvm:ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-d36cb0b8\">ami-d36cb0b8</a>","hvm"],
["us-east-1","utopic","14.10 EOL","amd64","hvm:instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-b77fa3dc\">ami-b77fa3dc</a>","hvm"],
["us-east-1","utopic","14.10 EOL","amd64","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-cf6cb0a4\">ami-cf6cb0a4</a>","aki-919dcaf8"],
["us-east-1","utopic","14.10 EOL","i386","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-f16cb09a\">ami-f16cb09a</a>","aki-8f9dcae6"],
["us-east-1","utopic","14.10 EOL","amd64","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-c36cb0a8\">ami-c36cb0a8</a>","aki-919dcaf8"],
["us-east-1","utopic","14.10 EOL","i386","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-cd6cb0a6\">ami-cd6cb0a6</a>","aki-8f9dcae6"],
["us-east-1","utopic","14.10 EOL","amd64","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-c76cb0ac\">ami-c76cb0ac</a>","aki-919dcaf8"],
["us-east-1","utopic","14.10 EOL","i386","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-c16cb0aa\">ami-c16cb0aa</a>","aki-8f9dcae6"],
["us-east-1","utopic","14.10 EOL","amd64","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-514b973a\">ami-514b973a</a>","aki-919dcaf8"],
["us-east-1","utopic","14.10 EOL","i386","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-5525f93e\">ami-5525f93e</a>","aki-8f9dcae6"],
["us-west-1","utopic","14.10 EOL","amd64","hvm:ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-6988752d\">ami-6988752d</a>","hvm"],
["us-west-1","utopic","14.10 EOL","amd64","hvm:ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-6b88752f\">ami-6b88752f</a>","hvm"],
["us-west-1","utopic","14.10 EOL","amd64","hvm:ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-77887533\">ami-77887533</a>","hvm"],
["us-west-1","utopic","14.10 EOL","amd64","hvm:instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-d78e7393\">ami-d78e7393</a>","hvm"],
["us-west-1","utopic","14.10 EOL","amd64","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-65887521\">ami-65887521</a>","aki-880531cd"],
["us-west-1","utopic","14.10 EOL","i386","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-5b88751f\">ami-5b88751f</a>","aki-8e0531cb"],
["us-west-1","utopic","14.10 EOL","amd64","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-63887527\">ami-63887527</a>","aki-880531cd"],
["us-west-1","utopic","14.10 EOL","i386","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-67887523\">ami-67887523</a>","aki-8e0531cb"],
["us-west-1","utopic","14.10 EOL","amd64","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-6f88752b\">ami-6f88752b</a>","aki-880531cd"],
["us-west-1","utopic","14.10 EOL","i386","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-6d887529\">ami-6d887529</a>","aki-8e0531cb"],
["us-west-1","utopic","14.10 EOL","amd64","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-458c7101\">ami-458c7101</a>","aki-880531cd"],
["us-west-1","utopic","14.10 EOL","i386","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-95916cd1\">ami-95916cd1</a>","aki-8e0531cb"],
["us-west-2","utopic","14.10 EOL","amd64","hvm:ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-d9353ae9\">ami-d9353ae9</a>","hvm"],
["us-west-2","utopic","14.10 EOL","amd64","hvm:ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-db353aeb\">ami-db353aeb</a>","hvm"],
["us-west-2","utopic","14.10 EOL","amd64","hvm:ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-dd353aed\">ami-dd353aed</a>","hvm"],
["us-west-2","utopic","14.10 EOL","amd64","hvm:instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-ad3f339d\">ami-ad3f339d</a>","hvm"],
["us-west-2","utopic","14.10 EOL","amd64","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-3f353a0f\">ami-3f353a0f</a>","aki-fc8f11cc"],
["us-west-2","utopic","14.10 EOL","i386","ebs","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-dd3935ed\">ami-dd3935ed</a>","aki-f08f11c0"],
["us-west-2","utopic","14.10 EOL","amd64","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-ed353add\">ami-ed353add</a>","aki-fc8f11cc"],
["us-west-2","utopic","14.10 EOL","i386","ebs-io1","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-eb353adb\">ami-eb353adb</a>","aki-f08f11c0"],
["us-west-2","utopic","14.10 EOL","amd64","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-d7353ae7\">ami-d7353ae7</a>","aki-fc8f11cc"],
["us-west-2","utopic","14.10 EOL","i386","ebs-ssd","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-ef353adf\">ami-ef353adf</a>","aki-f08f11c0"],
["us-west-2","utopic","14.10 EOL","amd64","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-85222eb5\">ami-85222eb5</a>","aki-fc8f11cc"],
["us-west-2","utopic","14.10 EOL","i386","instance-store","20150723","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-9b2824ab\">ami-9b2824ab</a>","aki-f08f11c0"],
["ap-northeast-1","oneiric","11.10 EOL","amd64","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-29129d28\">ami-29129d28</a>","aki-44992845"],
["ap-northeast-1","oneiric","11.10 EOL","i386","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-0d129d0c\">ami-0d129d0c</a>","aki-42992843"],
["ap-northeast-1","oneiric","11.10 EOL","amd64","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-d11699d0\">ami-d11699d0</a>","aki-44992845"],
["ap-northeast-1","oneiric","11.10 EOL","i386","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-8d17988c\">ami-8d17988c</a>","aki-42992843"],
["ap-southeast-1","oneiric","11.10 EOL","amd64","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-22e3ac70\">ami-22e3ac70</a>","aki-fe1354ac"],
["ap-southeast-1","oneiric","11.10 EOL","i386","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-3ee3ac6c\">ami-3ee3ac6c</a>","aki-f81354aa"],
["ap-southeast-1","oneiric","11.10 EOL","amd64","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-78e3ac2a\">ami-78e3ac2a</a>","aki-fe1354ac"],
["ap-southeast-1","oneiric","11.10 EOL","i386","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-eee4abbc\">ami-eee4abbc</a>","aki-f81354aa"],
["ap-southeast-2","oneiric","11.10 EOL","amd64","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-c71d8dfd\">ami-c71d8dfd</a>","aki-31990e0b"],
["ap-southeast-2","oneiric","11.10 EOL","i386","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-c31d8df9\">ami-c31d8df9</a>","aki-33990e09"],
["ap-southeast-2","oneiric","11.10 EOL","amd64","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-ed1d8dd7\">ami-ed1d8dd7</a>","aki-31990e0b"],
["ap-southeast-2","oneiric","11.10 EOL","i386","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a71d8d9d\">ami-a71d8d9d</a>","aki-33990e09"],
["eu-west-1","oneiric","11.10 EOL","amd64","hvm:ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-f3bea887\">ami-f3bea887</a>","hvm"],
["eu-west-1","oneiric","11.10 EOL","amd64","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-09bea87d\">ami-09bea87d</a>","aki-71665e05"],
["eu-west-1","oneiric","11.10 EOL","i386","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-21bea855\">ami-21bea855</a>","aki-75665e01"],
["eu-west-1","oneiric","11.10 EOL","amd64","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-adb0a6d9\">ami-adb0a6d9</a>","aki-71665e05"],
["eu-west-1","oneiric","11.10 EOL","i386","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-e3b3a597\">ami-e3b3a597</a>","aki-75665e01"],
["sa-east-1","oneiric","11.10 EOL","amd64","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-20419b3d\">ami-20419b3d</a>","aki-c48f51d9"],
["sa-east-1","oneiric","11.10 EOL","i386","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-2e419b33\">ami-2e419b33</a>","aki-ca8f51d7"],
["sa-east-1","oneiric","11.10 EOL","amd64","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-10419b0d\">ami-10419b0d</a>","aki-c48f51d9"],
["sa-east-1","oneiric","11.10 EOL","i386","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-c0409add\">ami-c0409add</a>","aki-ca8f51d7"],
["us-east-1","oneiric","11.10 EOL","amd64","hvm:ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-59204e30\">ami-59204e30</a>","hvm"],
["us-east-1","oneiric","11.10 EOL","amd64","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-77204e1e\">ami-77204e1e</a>","aki-88aa75e1"],
["us-east-1","oneiric","11.10 EOL","i386","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-8f234de6\">ami-8f234de6</a>","aki-b6aa75df"],
["us-east-1","oneiric","11.10 EOL","amd64","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-09244a60\">ami-09244a60</a>","aki-88aa75e1"],
["us-east-1","oneiric","11.10 EOL","i386","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-d12947b8\">ami-d12947b8</a>","aki-b6aa75df"],
["us-west-1","oneiric","11.10 EOL","amd64","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-83d9f6c6\">ami-83d9f6c6</a>","aki-f77e26b2"],
["us-west-1","oneiric","11.10 EOL","i386","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-f9d9f6bc\">ami-f9d9f6bc</a>","aki-f57e26b0"],
["us-west-1","oneiric","11.10 EOL","amd64","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-15d9f650\">ami-15d9f650</a>","aki-f77e26b2"],
["us-west-1","oneiric","11.10 EOL","i386","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-9fdaf5da\">ami-9fdaf5da</a>","aki-f57e26b0"],
["us-west-2","oneiric","11.10 EOL","amd64","hvm:ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-ab6afc9b\">ami-ab6afc9b</a>","hvm"],
["us-west-2","oneiric","11.10 EOL","amd64","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-bb6afc8b\">ami-bb6afc8b</a>","aki-fc37bacc"],
["us-west-2","oneiric","11.10 EOL","i386","ebs","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-b16afc81\">ami-b16afc81</a>","aki-fa37baca"],
["us-west-2","oneiric","11.10 EOL","amd64","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-396afc09\">ami-396afc09</a>","aki-fc37bacc"],
["us-west-2","oneiric","11.10 EOL","i386","instance-store","20130509","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-b16dfb81\">ami-b16dfb81</a>","aki-fa37baca"],
["ap-northeast-1","quantal","12.10 EOL","amd64","hvm:ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-070d7406\">ami-070d7406</a>","hvm"],
["ap-northeast-1","quantal","12.10 EOL","amd64","hvm:instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-a90b72a8\">ami-a90b72a8</a>","hvm"],
["ap-northeast-1","quantal","12.10 EOL","amd64","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-050d7404\">ami-050d7404</a>","aki-176bf516"],
["ap-northeast-1","quantal","12.10 EOL","i386","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-030d7402\">ami-030d7402</a>","aki-136bf512"],
["ap-northeast-1","quantal","12.10 EOL","amd64","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-2f09702e\">ami-2f09702e</a>","aki-176bf516"],
["ap-northeast-1","quantal","12.10 EOL","i386","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-53146d52\">ami-53146d52</a>","aki-136bf512"],
["ap-southeast-1","quantal","12.10 EOL","amd64","hvm:ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-4c06551e\">ami-4c06551e</a>","hvm"],
["ap-southeast-1","quantal","12.10 EOL","amd64","hvm:instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-4a065518\">ami-4a065518</a>","hvm"],
["ap-southeast-1","quantal","12.10 EOL","amd64","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-4e06551c\">ami-4e06551c</a>","aki-503e7402"],
["ap-southeast-1","quantal","12.10 EOL","i386","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-4806551a\">ami-4806551a</a>","aki-ae3973fc"],
["ap-southeast-1","quantal","12.10 EOL","amd64","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-56005304\">ami-56005304</a>","aki-503e7402"],
["ap-southeast-1","quantal","12.10 EOL","i386","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-da015288\">ami-da015288</a>","aki-ae3973fc"],
["ap-southeast-2","quantal","12.10 EOL","amd64","hvm:ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-7b52ca41\">ami-7b52ca41</a>","hvm"],
["ap-southeast-2","quantal","12.10 EOL","amd64","hvm:instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-3152ca0b\">ami-3152ca0b</a>","hvm"],
["ap-southeast-2","quantal","12.10 EOL","amd64","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-0752ca3d\">ami-0752ca3d</a>","aki-c362fff9"],
["ap-southeast-2","quantal","12.10 EOL","i386","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-0152ca3b\">ami-0152ca3b</a>","aki-cd62fff7"],
["ap-southeast-2","quantal","12.10 EOL","amd64","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-4951c973\">ami-4951c973</a>","aki-c362fff9"],
["ap-southeast-2","quantal","12.10 EOL","i386","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-d950c8e3\">ami-d950c8e3</a>","aki-cd62fff7"],
["eu-west-1","quantal","12.10 EOL","amd64","hvm:ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-09c8337e\">ami-09c8337e</a>","hvm"],
["eu-west-1","quantal","12.10 EOL","amd64","hvm:instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-e7d42f90\">ami-e7d42f90</a>","hvm"],
["eu-west-1","quantal","12.10 EOL","amd64","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-01c83376\">ami-01c83376</a>","aki-52a34525"],
["eu-west-1","quantal","12.10 EOL","i386","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-05c83372\">ami-05c83372</a>","aki-68a3451f"],
["eu-west-1","quantal","12.10 EOL","amd64","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-ddd02baa\">ami-ddd02baa</a>","aki-52a34525"],
["eu-west-1","quantal","12.10 EOL","i386","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-dfd229a8\">ami-dfd229a8</a>","aki-68a3451f"],
["sa-east-1","quantal","12.10 EOL","amd64","hvm:ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-f954f6e4\">ami-f954f6e4</a>","hvm"],
["sa-east-1","quantal","12.10 EOL","amd64","hvm:instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-8754f69a\">ami-8754f69a</a>","hvm"],
["sa-east-1","quantal","12.10 EOL","amd64","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-ff54f6e2\">ami-ff54f6e2</a>","aki-5553f448"],
["sa-east-1","quantal","12.10 EOL","i386","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-fd54f6e0\">ami-fd54f6e0</a>","aki-5b53f446"],
["sa-east-1","quantal","12.10 EOL","amd64","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-2d54f630\">ami-2d54f630</a>","aki-5553f448"],
["sa-east-1","quantal","12.10 EOL","i386","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-e757f5fa\">ami-e757f5fa</a>","aki-5b53f446"],
["us-east-1","quantal","12.10 EOL","amd64","hvm:ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-79071b10\">ami-79071b10</a>","hvm"],
["us-east-1","quantal","12.10 EOL","amd64","hvm:instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-ab0e12c2\">ami-ab0e12c2</a>","hvm"],
["us-east-1","quantal","12.10 EOL","amd64","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-63071b0a\">ami-63071b0a</a>","aki-919dcaf8"],
["us-east-1","quantal","12.10 EOL","i386","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-6f071b06\">ami-6f071b06</a>","aki-8f9dcae6"],
["us-east-1","quantal","12.10 EOL","amd64","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-c5100cac\">ami-c5100cac</a>","aki-919dcaf8"],
["us-east-1","quantal","12.10 EOL","i386","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-d51a06bc\">ami-d51a06bc</a>","aki-8f9dcae6"],
["us-west-1","quantal","12.10 EOL","amd64","hvm:ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-32c9f077\">ami-32c9f077</a>","hvm"],
["us-west-1","quantal","12.10 EOL","amd64","hvm:instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-7cd6ef39\">ami-7cd6ef39</a>","hvm"],
["us-west-1","quantal","12.10 EOL","amd64","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-28c9f06d\">ami-28c9f06d</a>","aki-880531cd"],
["us-west-1","quantal","12.10 EOL","i386","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-2ec9f06b\">ami-2ec9f06b</a>","aki-8e0531cb"],
["us-west-1","quantal","12.10 EOL","amd64","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-0ad7ee4f\">ami-0ad7ee4f</a>","aki-880531cd"],
["us-west-1","quantal","12.10 EOL","i386","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-9ad5ecdf\">ami-9ad5ecdf</a>","aki-8e0531cb"],
["us-west-2","quantal","12.10 EOL","amd64","hvm:ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-d4c5aee4\">ami-d4c5aee4</a>","hvm"],
["us-west-2","quantal","12.10 EOL","amd64","hvm:instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-00c7ac30\">ami-00c7ac30</a>","hvm"],
["us-west-2","quantal","12.10 EOL","amd64","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-d0c5aee0\">ami-d0c5aee0</a>","aki-fc8f11cc"],
["us-west-2","quantal","12.10 EOL","i386","ebs","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-ecc5aedc\">ami-ecc5aedc</a>","aki-f08f11c0"],
["us-west-2","quantal","12.10 EOL","amd64","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-18c1aa28\">ami-18c1aa28</a>","aki-fc8f11cc"],
["us-west-2","quantal","12.10 EOL","i386","instance-store","20140409","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-82cca7b2\">ami-82cca7b2</a>","aki-f08f11c0"],
["ap-northeast-1","hardy","8.04 LTS","amd64","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-d669d6d7\">ami-d669d6d7</a>","aki-d069d6d1"],
["ap-northeast-1","hardy","8.04 LTS","i386","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-ca69d6cb\">ami-ca69d6cb</a>","aki-c469d6c5"],
["ap-southeast-1","hardy","8.04 LTS","amd64","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-f4a8e8a6\">ami-f4a8e8a6</a>","aki-f2a8e8a0"],
["ap-southeast-1","hardy","8.04 LTS","i386","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-cca8e89e\">ami-cca8e89e</a>","aki-c0a8e892"],
["eu-west-1","hardy","8.04 LTS","amd64","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-897575fd\">ami-897575fd</a>","aki-877575f3"],
["eu-west-1","hardy","8.04 LTS","i386","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-917575e5\">ami-917575e5</a>","aki-a97575dd"],
["sa-east-1","hardy","8.04 LTS","amd64","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-7008d16d\">ami-7008d16d</a>","aki-7e08d163"],
["sa-east-1","hardy","8.04 LTS","i386","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-4208d15f\">ami-4208d15f</a>","aki-4a08d157"],
["us-east-1","hardy","8.04 LTS","amd64","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3c229e55\">ami-3c229e55</a>","aki-5e229e37"],
["us-east-1","hardy","8.04 LTS","i386","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-6c229e05\">ami-6c229e05</a>","aki-9c219df5"],
["us-west-1","hardy","8.04 LTS","amd64","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-3ff8df7a\">ami-3ff8df7a</a>","aki-37f8df72"],
["us-west-1","hardy","8.04 LTS","i386","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-2ff8df6a\">ami-2ff8df6a</a>","aki-25f8df60"],
["us-west-2","hardy","8.04 LTS","amd64","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-dc31bfec\">ami-dc31bfec</a>","aki-d631bfe6"],
["us-west-2","hardy","8.04 LTS","i386","instance-store","20121003","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-ea31bfda\">ami-ea31bfda</a>","aki-e231bfd2"],
["ap-northeast-1","lucid","10.04 LTS","amd64","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-08ca0808\">ami-08ca0808</a>","aki-176bf516"],
["ap-northeast-1","lucid","10.04 LTS","i386","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-06ca0806\">ami-06ca0806</a>","aki-136bf512"],
["ap-northeast-1","lucid","10.04 LTS","amd64","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-0eca080e\">ami-0eca080e</a>","aki-176bf516"],
["ap-northeast-1","lucid","10.04 LTS","i386","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-0cca080c\">ami-0cca080c</a>","aki-136bf512"],
["ap-northeast-1","lucid","10.04 LTS","amd64","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-16ca0816\">ami-16ca0816</a>","aki-176bf516"],
["ap-northeast-1","lucid","10.04 LTS","i386","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-12ca0812\">ami-12ca0812</a>","aki-136bf512"],
["ap-northeast-1","lucid","10.04 LTS","amd64","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-b6c507b6\">ami-b6c507b6</a>","aki-176bf516"],
["ap-northeast-1","lucid","10.04 LTS","i386","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-b4c103b4\">ami-b4c103b4</a>","aki-136bf512"],
["ap-southeast-1","lucid","10.04 LTS","amd64","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-6ab08c38\">ami-6ab08c38</a>","aki-503e7402"],
["ap-southeast-1","lucid","10.04 LTS","i386","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-60b08c32\">ami-60b08c32</a>","aki-ae3973fc"],
["ap-southeast-1","lucid","10.04 LTS","amd64","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-6cb08c3e\">ami-6cb08c3e</a>","aki-503e7402"],
["ap-southeast-1","lucid","10.04 LTS","i386","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-6eb08c3c\">ami-6eb08c3c</a>","aki-ae3973fc"],
["ap-southeast-1","lucid","10.04 LTS","amd64","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-10b08c42\">ami-10b08c42</a>","aki-503e7402"],
["ap-southeast-1","lucid","10.04 LTS","i386","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-12b08c40\">ami-12b08c40</a>","aki-ae3973fc"],
["ap-southeast-1","lucid","10.04 LTS","amd64","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-5cb08c0e\">ami-5cb08c0e</a>","aki-503e7402"],
["ap-southeast-1","lucid","10.04 LTS","i386","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-beb589ec\">ami-beb589ec</a>","aki-ae3973fc"],
["ap-southeast-2","lucid","10.04 LTS","amd64","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a7a6da9d\">ami-a7a6da9d</a>","aki-c362fff9"],
["ap-southeast-2","lucid","10.04 LTS","i386","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a1a6da9b\">ami-a1a6da9b</a>","aki-cd62fff7"],
["ap-southeast-2","lucid","10.04 LTS","amd64","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-9ba6daa1\">ami-9ba6daa1</a>","aki-c362fff9"],
["ap-southeast-2","lucid","10.04 LTS","i386","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a5a6da9f\">ami-a5a6da9f</a>","aki-cd62fff7"],
["ap-southeast-2","lucid","10.04 LTS","amd64","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-9fa6daa5\">ami-9fa6daa5</a>","aki-c362fff9"],
["ap-southeast-2","lucid","10.04 LTS","i386","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-99a6daa3\">ami-99a6daa3</a>","aki-cd62fff7"],
["ap-southeast-2","lucid","10.04 LTS","amd64","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a9a6da93\">ami-a9a6da93</a>","aki-c362fff9"],
["ap-southeast-2","lucid","10.04 LTS","i386","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-d3a5d9e9\">ami-d3a5d9e9</a>","aki-cd62fff7"],
["eu-central-1","lucid","10.04 LTS","amd64","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-cc2817d1\">ami-cc2817d1</a>","aki-184c7a05"],
["eu-central-1","lucid","10.04 LTS","i386","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-d22817cf\">ami-d22817cf</a>","aki-3e4c7a23"],
["eu-central-1","lucid","10.04 LTS","amd64","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-ca2817d7\">ami-ca2817d7</a>","aki-184c7a05"],
["eu-central-1","lucid","10.04 LTS","i386","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-c82817d5\">ami-c82817d5</a>","aki-3e4c7a23"],
["eu-central-1","lucid","10.04 LTS","amd64","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-c62817db\">ami-c62817db</a>","aki-184c7a05"],
["eu-central-1","lucid","10.04 LTS","i386","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-c42817d9\">ami-c42817d9</a>","aki-3e4c7a23"],
["eu-central-1","lucid","10.04 LTS","amd64","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-2c281731\">ami-2c281731</a>","aki-184c7a05"],
["eu-central-1","lucid","10.04 LTS","i386","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-78291665\">ami-78291665</a>","aki-3e4c7a23"],
["eu-west-1","lucid","10.04 LTS","amd64","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-0bfb947c\">ami-0bfb947c</a>","aki-52a34525"],
["eu-west-1","lucid","10.04 LTS","i386","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-0dfb947a\">ami-0dfb947a</a>","aki-68a3451f"],
["eu-west-1","lucid","10.04 LTS","amd64","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-f7fb9480\">ami-f7fb9480</a>","aki-52a34525"],
["eu-west-1","lucid","10.04 LTS","i386","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-09fb947e\">ami-09fb947e</a>","aki-68a3451f"],
["eu-west-1","lucid","10.04 LTS","amd64","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-f3fb9484\">ami-f3fb9484</a>","aki-52a34525"],
["eu-west-1","lucid","10.04 LTS","i386","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-f5fb9482\">ami-f5fb9482</a>","aki-68a3451f"],
["eu-west-1","lucid","10.04 LTS","amd64","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-ede08f9a\">ami-ede08f9a</a>","aki-52a34525"],
["eu-west-1","lucid","10.04 LTS","i386","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-f9e38c8e\">ami-f9e38c8e</a>","aki-68a3451f"],
["sa-east-1","lucid","10.04 LTS","amd64","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-096bef14\">ami-096bef14</a>","aki-5553f448"],
["sa-east-1","lucid","10.04 LTS","i386","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-0f6bef12\">ami-0f6bef12</a>","aki-5b53f446"],
["sa-east-1","lucid","10.04 LTS","amd64","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-056bef18\">ami-056bef18</a>","aki-5553f448"],
["sa-east-1","lucid","10.04 LTS","i386","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-0b6bef16\">ami-0b6bef16</a>","aki-5b53f446"],
["sa-east-1","lucid","10.04 LTS","amd64","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-016bef1c\">ami-016bef1c</a>","aki-5553f448"],
["sa-east-1","lucid","10.04 LTS","i386","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-076bef1a\">ami-076bef1a</a>","aki-5b53f446"],
["sa-east-1","lucid","10.04 LTS","amd64","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-d76aeeca\">ami-d76aeeca</a>","aki-5553f448"],
["sa-east-1","lucid","10.04 LTS","i386","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-056aee18\">ami-056aee18</a>","aki-5b53f446"],
["us-east-1","lucid","10.04 LTS","amd64","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-1e6f6176\">ami-1e6f6176</a>","aki-919dcaf8"],
["us-east-1","lucid","10.04 LTS","i386","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-1c6f6174\">ami-1c6f6174</a>","aki-8f9dcae6"],
["us-east-1","lucid","10.04 LTS","amd64","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-126f617a\">ami-126f617a</a>","aki-919dcaf8"],
["us-east-1","lucid","10.04 LTS","i386","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-106f6178\">ami-106f6178</a>","aki-8f9dcae6"],
["us-east-1","lucid","10.04 LTS","amd64","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-e86f6180\">ami-e86f6180</a>","aki-919dcaf8"],
["us-east-1","lucid","10.04 LTS","i386","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-166f617e\">ami-166f617e</a>","aki-8f9dcae6"],
["us-east-1","lucid","10.04 LTS","amd64","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-32505e5a\">ami-32505e5a</a>","aki-919dcaf8"],
["us-east-1","lucid","10.04 LTS","i386","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-5c565834\">ami-5c565834</a>","aki-8f9dcae6"],
["us-west-1","lucid","10.04 LTS","amd64","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-250fe361\">ami-250fe361</a>","aki-880531cd"],
["us-west-1","lucid","10.04 LTS","i386","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-1b0fe35f\">ami-1b0fe35f</a>","aki-8e0531cb"],
["us-west-1","lucid","10.04 LTS","amd64","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-210fe365\">ami-210fe365</a>","aki-880531cd"],
["us-west-1","lucid","10.04 LTS","i386","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-270fe363\">ami-270fe363</a>","aki-8e0531cb"],
["us-west-1","lucid","10.04 LTS","amd64","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-290fe36d\">ami-290fe36d</a>","aki-880531cd"],
["us-west-1","lucid","10.04 LTS","i386","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-2f0fe36b\">ami-2f0fe36b</a>","aki-8e0531cb"],
["us-west-1","lucid","10.04 LTS","amd64","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-310ee275\">ami-310ee275</a>","aki-880531cd"],
["us-west-1","lucid","10.04 LTS","i386","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-ef0ce0ab\">ami-ef0ce0ab</a>","aki-8e0531cb"],
["us-west-2","lucid","10.04 LTS","amd64","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-1b2a1c2b\">ami-1b2a1c2b</a>","aki-fc8f11cc"],
["us-west-2","lucid","10.04 LTS","i386","ebs","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-192a1c29\">ami-192a1c29</a>","aki-f08f11c0"],
["us-west-2","lucid","10.04 LTS","amd64","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-012a1c31\">ami-012a1c31</a>","aki-fc8f11cc"],
["us-west-2","lucid","10.04 LTS","i386","ebs-io1","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-1f2a1c2f\">ami-1f2a1c2f</a>","aki-f08f11c0"],
["us-west-2","lucid","10.04 LTS","amd64","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-052a1c35\">ami-052a1c35</a>","aki-fc8f11cc"],
["us-west-2","lucid","10.04 LTS","i386","ebs-ssd","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-032a1c33\">ami-032a1c33</a>","aki-f08f11c0"],
["us-west-2","lucid","10.04 LTS","amd64","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-3f2d1b0f\">ami-3f2d1b0f</a>","aki-fc8f11cc"],
["us-west-2","lucid","10.04 LTS","i386","instance-store","20150427","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-2b2e181b\">ami-2b2e181b</a>","aki-f08f11c0"],
["ap-northeast-1","maverick","10.10 EOL","amd64","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-741dac75\">ami-741dac75</a>","aki-d409a2d5"],
["ap-northeast-1","maverick","10.10 EOL","i386","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-721dac73\">ami-721dac73</a>","aki-d209a2d3"],
["ap-northeast-1","maverick","10.10 EOL","amd64","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-701dac71\">ami-701dac71</a>","aki-d409a2d5"],
["ap-northeast-1","maverick","10.10 EOL","i386","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-641dac65\">ami-641dac65</a>","aki-d209a2d3"],
["ap-southeast-1","maverick","10.10 EOL","amd64","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-0e8acd5c\">ami-0e8acd5c</a>","aki-11d5aa43"],
["ap-southeast-1","maverick","10.10 EOL","i386","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-0a8acd58\">ami-0a8acd58</a>","aki-13d5aa41"],
["ap-southeast-1","maverick","10.10 EOL","amd64","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-1a8acd48\">ami-1a8acd48</a>","aki-11d5aa43"],
["ap-southeast-1","maverick","10.10 EOL","i386","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-608acd32\">ami-608acd32</a>","aki-13d5aa41"],
["eu-west-1","maverick","10.10 EOL","amd64","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-c57942b1\">ami-c57942b1</a>","aki-4feec43b"],
["eu-west-1","maverick","10.10 EOL","i386","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-db7942af\">ami-db7942af</a>","aki-4deec439"],
["eu-west-1","maverick","10.10 EOL","amd64","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-df7942ab\">ami-df7942ab</a>","aki-4feec43b"],
["eu-west-1","maverick","10.10 EOL","i386","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-d57942a1\">ami-d57942a1</a>","aki-4deec439"],
["sa-east-1","maverick","10.10 EOL","amd64","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-10a9770d\">ami-10a9770d</a>","aki-d63ce3cb"],
["sa-east-1","maverick","10.10 EOL","i386","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-16a9770b\">ami-16a9770b</a>","aki-863ce39b"],
["sa-east-1","maverick","10.10 EOL","amd64","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-1aa97707\">ami-1aa97707</a>","aki-d63ce3cb"],
["sa-east-1","maverick","10.10 EOL","i386","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-1ea97703\">ami-1ea97703</a>","aki-863ce39b"],
["us-east-1","maverick","10.10 EOL","amd64","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-d78f57be\">ami-d78f57be</a>","aki-427d952b"],
["us-east-1","maverick","10.10 EOL","i386","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-d38f57ba\">ami-d38f57ba</a>","aki-407d9529"],
["us-east-1","maverick","10.10 EOL","amd64","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-098f5760\">ami-098f5760</a>","aki-427d952b"],
["us-east-1","maverick","10.10 EOL","i386","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-7b8f5712\">ami-7b8f5712</a>","aki-407d9529"],
["us-west-1","maverick","10.10 EOL","amd64","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-3b154e7e\">ami-3b154e7e</a>","aki-9ba0f1de"],
["us-west-1","maverick","10.10 EOL","i386","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-39154e7c\">ami-39154e7c</a>","aki-99a0f1dc"],
["us-west-1","maverick","10.10 EOL","amd64","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-2b154e6e\">ami-2b154e6e</a>","aki-9ba0f1de"],
["us-west-1","maverick","10.10 EOL","i386","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-1d154e58\">ami-1d154e58</a>","aki-99a0f1dc"],
["us-west-2","maverick","10.10 EOL","amd64","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-64fd7154\">ami-64fd7154</a>","aki-ace26f9c"],
["us-west-2","maverick","10.10 EOL","i386","ebs","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-62fd7152\">ami-62fd7152</a>","aki-dce26fec"],
["us-west-2","maverick","10.10 EOL","amd64","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-7efd714e\">ami-7efd714e</a>","aki-ace26f9c"],
["us-west-2","maverick","10.10 EOL","i386","instance-store","20120410","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-76fd7146\">ami-76fd7146</a>","aki-dce26fec"],
["ap-northeast-1","natty","11.04 EOL","amd64","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-087bc509\">ami-087bc509</a>","aki-d409a2d5"],
["ap-northeast-1","natty","11.04 EOL","i386","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-067bc507\">ami-067bc507</a>","aki-d209a2d3"],
["ap-northeast-1","natty","11.04 EOL","amd64","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-e67ac4e7\">ami-e67ac4e7</a>","aki-d409a2d5"],
["ap-northeast-1","natty","11.04 EOL","i386","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-8c7ac48d\">ami-8c7ac48d</a>","aki-d209a2d3"],
["ap-southeast-1","natty","11.04 EOL","amd64","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-240e4d76\">ami-240e4d76</a>","aki-11d5aa43"],
["ap-southeast-1","natty","11.04 EOL","i386","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-260e4d74\">ami-260e4d74</a>","aki-13d5aa41"],
["ap-southeast-1","natty","11.04 EOL","amd64","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-220e4d70\">ami-220e4d70</a>","aki-11d5aa43"],
["ap-southeast-1","natty","11.04 EOL","i386","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-180e4d4a\">ami-180e4d4a</a>","aki-13d5aa41"],
["eu-west-1","natty","11.04 EOL","amd64","hvm:ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-7b14170f\">ami-7b14170f</a>","hvm"],
["eu-west-1","natty","11.04 EOL","amd64","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-7914170d\">ami-7914170d</a>","aki-4feec43b"],
["eu-west-1","natty","11.04 EOL","i386","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-7f14170b\">ami-7f14170b</a>","aki-4deec439"],
["eu-west-1","natty","11.04 EOL","amd64","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-d71516a3\">ami-d71516a3</a>","aki-4feec43b"],
["eu-west-1","natty","11.04 EOL","i386","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-23151657\">ami-23151657</a>","aki-4deec439"],
["sa-east-1","natty","11.04 EOL","amd64","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-d0548dcd\">ami-d0548dcd</a>","aki-d63ce3cb"],
["sa-east-1","natty","11.04 EOL","i386","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-d6548dcb\">ami-d6548dcb</a>","aki-863ce39b"],
["sa-east-1","natty","11.04 EOL","amd64","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-a2548dbf\">ami-a2548dbf</a>","aki-d63ce3cb"],
["sa-east-1","natty","11.04 EOL","i386","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-b6548dab\">ami-b6548dab</a>","aki-863ce39b"],
["us-east-1","natty","11.04 EOL","amd64","hvm:ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-beb10ad7\">ami-beb10ad7</a>","hvm"],
["us-east-1","natty","11.04 EOL","amd64","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-bab10ad3\">ami-bab10ad3</a>","aki-427d952b"],
["us-east-1","natty","11.04 EOL","i386","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-a6b10acf\">ami-a6b10acf</a>","aki-407d9529"],
["us-east-1","natty","11.04 EOL","amd64","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-1cb30875\">ami-1cb30875</a>","aki-427d952b"],
["us-east-1","natty","11.04 EOL","i386","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-96b803ff\">ami-96b803ff</a>","aki-407d9529"],
["us-west-1","natty","11.04 EOL","amd64","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-132c0a56\">ami-132c0a56</a>","aki-9ba0f1de"],
["us-west-1","natty","11.04 EOL","i386","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-112c0a54\">ami-112c0a54</a>","aki-99a0f1dc"],
["us-west-1","natty","11.04 EOL","amd64","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-712c0a34\">ami-712c0a34</a>","aki-9ba0f1de"],
["us-west-1","natty","11.04 EOL","i386","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-b12f09f4\">ami-b12f09f4</a>","aki-99a0f1dc"],
["us-west-2","natty","11.04 EOL","amd64","hvm:ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-70b23b40\">ami-70b23b40</a>","hvm"],
["us-west-2","natty","11.04 EOL","amd64","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-0eb23b3e\">ami-0eb23b3e</a>","aki-ace26f9c"],
["us-west-2","natty","11.04 EOL","i386","ebs","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-0ab23b3a\">ami-0ab23b3a</a>","aki-dce26fec"],
["us-west-2","natty","11.04 EOL","amd64","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-3ab23b0a\">ami-3ab23b0a</a>","aki-ace26f9c"],
["us-west-2","natty","11.04 EOL","i386","instance-store","20121028","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-a2b33a92\">ami-a2b33a92</a>","aki-dce26fec"],
["ap-northeast-1","precise","12.04 LTS","amd64","hvm:ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-a8f8d7c6\">ami-a8f8d7c6</a>","hvm"],
["ap-northeast-1","precise","12.04 LTS","amd64","hvm:ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-4afdd224\">ami-4afdd224</a>","hvm"],
["ap-northeast-1","precise","12.04 LTS","amd64","hvm:ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-3df8d753\">ami-3df8d753</a>","hvm"],
["ap-northeast-1","precise","12.04 LTS","amd64","hvm:instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-bef9d6d0\">ami-bef9d6d0</a>","hvm"],
["ap-northeast-1","precise","12.04 LTS","amd64","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-b8f9d6d6\">ami-b8f9d6d6</a>","aki-176bf516"],
["ap-northeast-1","precise","12.04 LTS","i386","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-48fdd226\">ami-48fdd226</a>","aki-136bf512"],
["ap-northeast-1","precise","12.04 LTS","amd64","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-defad5b0\">ami-defad5b0</a>","aki-176bf516"],
["ap-northeast-1","precise","12.04 LTS","i386","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-59fcd337\">ami-59fcd337</a>","aki-136bf512"],
["ap-northeast-1","precise","12.04 LTS","amd64","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-e0f6d98e\">ami-e0f6d98e</a>","aki-176bf516"],
["ap-northeast-1","precise","12.04 LTS","i386","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-0cfbd462\">ami-0cfbd462</a>","aki-136bf512"],
["ap-northeast-1","precise","12.04 LTS","amd64","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-0bfcd365\">ami-0bfcd365</a>","aki-176bf516"],
["ap-northeast-1","precise","12.04 LTS","i386","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-67ffd009\">ami-67ffd009</a>","aki-136bf512"],
["ap-southeast-1","precise","12.04 LTS","amd64","hvm:ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-34cb0b57\">ami-34cb0b57</a>","hvm"],
["ap-southeast-1","precise","12.04 LTS","amd64","hvm:ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-87ca0ae4\">ami-87ca0ae4</a>","hvm"],
["ap-southeast-1","precise","12.04 LTS","amd64","hvm:ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-70cc0c13\">ami-70cc0c13</a>","hvm"],
["ap-southeast-1","precise","12.04 LTS","amd64","hvm:instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-72cc0c11\">ami-72cc0c11</a>","hvm"],
["ap-southeast-1","precise","12.04 LTS","amd64","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-48cc0c2b\">ami-48cc0c2b</a>","aki-503e7402"],
["ap-southeast-1","precise","12.04 LTS","i386","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-f8ca0a9b\">ami-f8ca0a9b</a>","aki-ae3973fc"],
["ap-southeast-1","precise","12.04 LTS","amd64","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-e2c90981\">ami-e2c90981</a>","aki-503e7402"],
["ap-southeast-1","precise","12.04 LTS","i386","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-73cc0c10\">ami-73cc0c10</a>","aki-ae3973fc"],
["ap-southeast-1","precise","12.04 LTS","amd64","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-86ca0ae5\">ami-86ca0ae5</a>","aki-503e7402"],
["ap-southeast-1","precise","12.04 LTS","i386","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-f9ca0a9a\">ami-f9ca0a9a</a>","aki-ae3973fc"],
["ap-southeast-1","precise","12.04 LTS","amd64","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-06ca0a65\">ami-06ca0a65</a>","aki-503e7402"],
["ap-southeast-1","precise","12.04 LTS","i386","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-9fc707fc\">ami-9fc707fc</a>","aki-ae3973fc"],
["ap-southeast-2","precise","12.04 LTS","amd64","hvm:ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-bb5a02d8\">ami-bb5a02d8</a>","hvm"],
["ap-southeast-2","precise","12.04 LTS","amd64","hvm:ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-1858007b\">ami-1858007b</a>","hvm"],
["ap-southeast-2","precise","12.04 LTS","amd64","hvm:ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-aa5800c9\">ami-aa5800c9</a>","hvm"],
["ap-southeast-2","precise","12.04 LTS","amd64","hvm:instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-7f58001c\">ami-7f58001c</a>","hvm"],
["ap-southeast-2","precise","12.04 LTS","amd64","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-d65a02b5\">ami-d65a02b5</a>","aki-c362fff9"],
["ap-southeast-2","precise","12.04 LTS","i386","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-b35800d0\">ami-b35800d0</a>","aki-cd62fff7"],
["ap-southeast-2","precise","12.04 LTS","amd64","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-bd5a02de\">ami-bd5a02de</a>","aki-c362fff9"],
["ap-southeast-2","precise","12.04 LTS","i386","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-1a580079\">ami-1a580079</a>","aki-cd62fff7"],
["ap-southeast-2","precise","12.04 LTS","amd64","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-b6277fd5\">ami-b6277fd5</a>","aki-c362fff9"],
["ap-southeast-2","precise","12.04 LTS","i386","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-fb590198\">ami-fb590198</a>","aki-cd62fff7"],
["ap-southeast-2","precise","12.04 LTS","amd64","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-27257d44\">ami-27257d44</a>","aki-c362fff9"],
["ap-southeast-2","precise","12.04 LTS","i386","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-63257d00\">ami-63257d00</a>","aki-cd62fff7"],
["eu-central-1","precise","12.04 LTS","amd64","hvm:ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-132b367f\">ami-132b367f</a>","hvm"],
["eu-central-1","precise","12.04 LTS","amd64","hvm:ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-862835ea\">ami-862835ea</a>","hvm"],
["eu-central-1","precise","12.04 LTS","amd64","hvm:ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-872835eb\">ami-872835eb</a>","hvm"],
["eu-central-1","precise","12.04 LTS","amd64","hvm:instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-6b2e3307\">ami-6b2e3307</a>","hvm"],
["eu-central-1","precise","12.04 LTS","amd64","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-c22934ae\">ami-c22934ae</a>","aki-184c7a05"],
["eu-central-1","precise","12.04 LTS","i386","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-6629340a\">ami-6629340a</a>","aki-3e4c7a23"],
["eu-central-1","precise","12.04 LTS","amd64","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-5b283537\">ami-5b283537</a>","aki-184c7a05"],
["eu-central-1","precise","12.04 LTS","i386","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-112b367d\">ami-112b367d</a>","aki-3e4c7a23"],
["eu-central-1","precise","12.04 LTS","amd64","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-2029344c\">ami-2029344c</a>","aki-184c7a05"],
["eu-central-1","precise","12.04 LTS","i386","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-122b367e\">ami-122b367e</a>","aki-3e4c7a23"],
["eu-central-1","precise","12.04 LTS","amd64","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-172e337b\">ami-172e337b</a>","aki-184c7a05"],
["eu-central-1","precise","12.04 LTS","i386","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-8c2934e0\">ami-8c2934e0</a>","aki-3e4c7a23"],
["eu-west-1","precise","12.04 LTS","amd64","hvm:ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-8315b2f0\">ami-8315b2f0</a>","hvm"],
["eu-west-1","precise","12.04 LTS","amd64","hvm:ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-0212b571\">ami-0212b571</a>","hvm"],
["eu-west-1","precise","12.04 LTS","amd64","hvm:ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-c509aeb6\">ami-c509aeb6</a>","hvm"],
["eu-west-1","precise","12.04 LTS","amd64","hvm:instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-5217b021\">ami-5217b021</a>","hvm"],
["eu-west-1","precise","12.04 LTS","amd64","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-8115b2f2\">ami-8115b2f2</a>","aki-52a34525"],
["eu-west-1","precise","12.04 LTS","i386","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-3910b74a\">ami-3910b74a</a>","aki-68a3451f"],
["eu-west-1","precise","12.04 LTS","amd64","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-3b10b748\">ami-3b10b748</a>","aki-52a34525"],
["eu-west-1","precise","12.04 LTS","i386","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-6e14b31d\">ami-6e14b31d</a>","aki-68a3451f"],
["eu-west-1","precise","12.04 LTS","amd64","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-8015b2f3\">ami-8015b2f3</a>","aki-52a34525"],
["eu-west-1","precise","12.04 LTS","i386","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-bd13b4ce\">ami-bd13b4ce</a>","aki-68a3451f"],
["eu-west-1","precise","12.04 LTS","amd64","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-c50bacb6\">ami-c50bacb6</a>","aki-52a34525"],
["eu-west-1","precise","12.04 LTS","i386","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-840cabf7\">ami-840cabf7</a>","aki-68a3451f"],
["sa-east-1","precise","12.04 LTS","amd64","hvm:ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-2300854f\">ami-2300854f</a>","hvm"],
["sa-east-1","precise","12.04 LTS","amd64","hvm:ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-b70386db\">ami-b70386db</a>","hvm"],
["sa-east-1","precise","12.04 LTS","amd64","hvm:ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-e9078285\">ami-e9078285</a>","hvm"],
["sa-east-1","precise","12.04 LTS","amd64","hvm:instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-ec078280\">ami-ec078280</a>","hvm"],
["sa-east-1","precise","12.04 LTS","amd64","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-5e018432\">ami-5e018432</a>","aki-5553f448"],
["sa-east-1","precise","12.04 LTS","i386","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-59028735\">ami-59028735</a>","aki-5b53f446"],
["sa-east-1","precise","12.04 LTS","amd64","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-e706838b\">ami-e706838b</a>","aki-5553f448"],
["sa-east-1","precise","12.04 LTS","i386","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-7e038612\">ami-7e038612</a>","aki-5b53f446"],
["sa-east-1","precise","12.04 LTS","amd64","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-c10184ad\">ami-c10184ad</a>","aki-5553f448"],
["sa-east-1","precise","12.04 LTS","i386","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-060d886a\">ami-060d886a</a>","aki-5b53f446"],
["sa-east-1","precise","12.04 LTS","amd64","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-e5058089\">ami-e5058089</a>","aki-5553f448"],
["sa-east-1","precise","12.04 LTS","i386","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-4300852f\">ami-4300852f</a>","aki-5b53f446"],
["us-east-1","precise","12.04 LTS","amd64","hvm:ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-1aa1e370\">ami-1aa1e370</a>","hvm"],
["us-east-1","precise","12.04 LTS","amd64","hvm:ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-54a0e23e\">ami-54a0e23e</a>","hvm"],
["us-east-1","precise","12.04 LTS","amd64","hvm:ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-309ddf5a\">ami-309ddf5a</a>","hvm"],
["us-east-1","precise","12.04 LTS","amd64","hvm:instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3a90d250\">ami-3a90d250</a>","hvm"],
["us-east-1","precise","12.04 LTS","amd64","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-81a0e2eb\">ami-81a0e2eb</a>","aki-919dcaf8"],
["us-east-1","precise","12.04 LTS","i386","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-14a3e17e\">ami-14a3e17e</a>","aki-8f9dcae6"],
["us-east-1","precise","12.04 LTS","amd64","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-5aa0e230\">ami-5aa0e230</a>","aki-919dcaf8"],
["us-east-1","precise","12.04 LTS","i386","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-f3a6e499\">ami-f3a6e499</a>","aki-8f9dcae6"],
["us-east-1","precise","12.04 LTS","amd64","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3ca3e156\">ami-3ca3e156</a>","aki-919dcaf8"],
["us-east-1","precise","12.04 LTS","i386","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-18a1e372\">ami-18a1e372</a>","aki-8f9dcae6"],
["us-east-1","precise","12.04 LTS","amd64","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-9c8fcdf6\">ami-9c8fcdf6</a>","aki-919dcaf8"],
["us-east-1","precise","12.04 LTS","i386","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-f482c09e\">ami-f482c09e</a>","aki-8f9dcae6"],
["us-west-1","precise","12.04 LTS","amd64","hvm:ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-2bdbb24b\">ami-2bdbb24b</a>","hvm"],
["us-west-1","precise","12.04 LTS","amd64","hvm:ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-2ddab34d\">ami-2ddab34d</a>","hvm"],
["us-west-1","precise","12.04 LTS","amd64","hvm:ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-caddb4aa\">ami-caddb4aa</a>","hvm"],
["us-west-1","precise","12.04 LTS","amd64","hvm:instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-87dab3e7\">ami-87dab3e7</a>","hvm"],
["us-west-1","precise","12.04 LTS","amd64","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-f0dab390\">ami-f0dab390</a>","aki-880531cd"],
["us-west-1","precise","12.04 LTS","i386","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-1ad8b17a\">ami-1ad8b17a</a>","aki-8e0531cb"],
["us-west-1","precise","12.04 LTS","amd64","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-f1dab391\">ami-f1dab391</a>","aki-880531cd"],
["us-west-1","precise","12.04 LTS","i386","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-c9ddb4a9\">ami-c9ddb4a9</a>","aki-8e0531cb"],
["us-west-1","precise","12.04 LTS","amd64","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-2cdab34c\">ami-2cdab34c</a>","aki-880531cd"],
["us-west-1","precise","12.04 LTS","i386","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-84d8b1e4\">ami-84d8b1e4</a>","aki-8e0531cb"],
["us-west-1","precise","12.04 LTS","amd64","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-65d9b005\">ami-65d9b005</a>","aki-880531cd"],
["us-west-1","precise","12.04 LTS","i386","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-4ac7ae2a\">ami-4ac7ae2a</a>","aki-8e0531cb"],
["us-west-2","precise","12.04 LTS","amd64","hvm:ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-f7243696\">ami-f7243696</a>","hvm"],
["us-west-2","precise","12.04 LTS","amd64","hvm:ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-5a21333b\">ami-5a21333b</a>","hvm"],
["us-west-2","precise","12.04 LTS","amd64","hvm:ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-9b2436fa\">ami-9b2436fa</a>","hvm"],
["us-west-2","precise","12.04 LTS","amd64","hvm:instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-77223016\">ami-77223016</a>","hvm"],
["us-west-2","precise","12.04 LTS","amd64","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-9c2436fd\">ami-9c2436fd</a>","aki-fc8f11cc"],
["us-west-2","precise","12.04 LTS","i386","ebs","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-c72133a6\">ami-c72133a6</a>","aki-f08f11c0"],
["us-west-2","precise","12.04 LTS","amd64","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-9a2436fb\">ami-9a2436fb</a>","aki-fc8f11cc"],
["us-west-2","precise","12.04 LTS","i386","ebs-io1","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-9d2436fc\">ami-9d2436fc</a>","aki-f08f11c0"],
["us-west-2","precise","12.04 LTS","amd64","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-d02634b1\">ami-d02634b1</a>","aki-fc8f11cc"],
["us-west-2","precise","12.04 LTS","i386","ebs-ssd","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-962537f7\">ami-962537f7</a>","aki-f08f11c0"],
["us-west-2","precise","12.04 LTS","amd64","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-c72032a6\">ami-c72032a6</a>","aki-fc8f11cc"],
["us-west-2","precise","12.04 LTS","i386","instance-store","20151130","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-b9382ad8\">ami-b9382ad8</a>","aki-f08f11c0"],
["ap-northeast-1","vivid","15.04L","amd64","hvm:ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-05f2dd6b\">ami-05f2dd6b</a>","hvm"],
["ap-northeast-1","vivid","15.04L","amd64","hvm:ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-48cfe026\">ami-48cfe026</a>","hvm"],
["ap-northeast-1","vivid","15.04L","amd64","hvm:ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-88cde2e6\">ami-88cde2e6</a>","hvm"],
["ap-northeast-1","vivid","15.04L","amd64","hvm:instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-dcf3dcb2\">ami-dcf3dcb2</a>","hvm"],
["ap-northeast-1","vivid","15.04L","amd64","ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-02cde26c\">ami-02cde26c</a>","aki-176bf516"],
["ap-northeast-1","vivid","15.04L","amd64","ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-8fcde2e1\">ami-8fcde2e1</a>","aki-176bf516"],
["ap-northeast-1","vivid","15.04L","amd64","ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-8ccee1e2\">ami-8ccee1e2</a>","aki-176bf516"],
["ap-northeast-1","vivid","15.04L","amd64","instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-baf3dcd4\">ami-baf3dcd4</a>","aki-176bf516"],
["ap-southeast-1","vivid","15.04L","amd64","hvm:ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-6dd0100e\">ami-6dd0100e</a>","hvm"],
["ap-southeast-1","vivid","15.04L","amd64","hvm:ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-99cc0cfa\">ami-99cc0cfa</a>","hvm"],
["ap-southeast-1","vivid","15.04L","amd64","hvm:ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-a6ce0ec5\">ami-a6ce0ec5</a>","hvm"],
["ap-southeast-1","vivid","15.04L","amd64","hvm:instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-f9ce0e9a\">ami-f9ce0e9a</a>","hvm"],
["ap-southeast-1","vivid","15.04L","amd64","ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-6cd0100f\">ami-6cd0100f</a>","aki-503e7402"],
["ap-southeast-1","vivid","15.04L","amd64","ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-80cf0fe3\">ami-80cf0fe3</a>","aki-503e7402"],
["ap-southeast-1","vivid","15.04L","amd64","ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-05d11166\">ami-05d11166</a>","aki-503e7402"],
["ap-southeast-1","vivid","15.04L","amd64","instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-b9cc0cda\">ami-b9cc0cda</a>","aki-503e7402"],
["ap-southeast-2","vivid","15.04L","amd64","hvm:ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-525f0731\">ami-525f0731</a>","hvm"],
["ap-southeast-2","vivid","15.04L","amd64","hvm:ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a75d05c4\">ami-a75d05c4</a>","hvm"],
["ap-southeast-2","vivid","15.04L","amd64","hvm:ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a45d05c7\">ami-a45d05c7</a>","hvm"],
["ap-southeast-2","vivid","15.04L","amd64","hvm:instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-245c0447\">ami-245c0447</a>","hvm"],
["ap-southeast-2","vivid","15.04L","amd64","ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-555f0736\">ami-555f0736</a>","aki-c362fff9"],
["ap-southeast-2","vivid","15.04L","amd64","ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a65d05c5\">ami-a65d05c5</a>","aki-c362fff9"],
["ap-southeast-2","vivid","15.04L","amd64","ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-815e06e2\">ami-815e06e2</a>","aki-c362fff9"],
["ap-southeast-2","vivid","15.04L","amd64","instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-f95d059a\">ami-f95d059a</a>","aki-c362fff9"],
["eu-central-1","vivid","15.04L","amd64","hvm:ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-16273a7a\">ami-16273a7a</a>","hvm"],
["eu-central-1","vivid","15.04L","amd64","hvm:ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-9d2439f1\">ami-9d2439f1</a>","hvm"],
["eu-central-1","vivid","15.04L","amd64","hvm:ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-432b362f\">ami-432b362f</a>","hvm"],
["eu-central-1","vivid","15.04L","amd64","hvm:instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-792a3715\">ami-792a3715</a>","hvm"],
["eu-central-1","vivid","15.04L","amd64","ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-802538ec\">ami-802538ec</a>","aki-184c7a05"],
["eu-central-1","vivid","15.04L","amd64","ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-15273a79\">ami-15273a79</a>","aki-184c7a05"],
["eu-central-1","vivid","15.04L","amd64","ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-a82538c4\">ami-a82538c4</a>","aki-184c7a05"],
["eu-central-1","vivid","15.04L","amd64","instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-a72b36cb\">ami-a72b36cb</a>","aki-184c7a05"],
["eu-west-1","vivid","15.04L","amd64","hvm:ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-8618bff5\">ami-8618bff5</a>","hvm"],
["eu-west-1","vivid","15.04L","amd64","hvm:ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-7be24408\">ami-7be24408</a>","hvm"],
["eu-west-1","vivid","15.04L","amd64","hvm:ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-b0e543c3\">ami-b0e543c3</a>","hvm"],
["eu-west-1","vivid","15.04L","amd64","hvm:instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-f81abd8b\">ami-f81abd8b</a>","hvm"],
["eu-west-1","vivid","15.04L","amd64","ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-25e44256\">ami-25e44256</a>","aki-52a34525"],
["eu-west-1","vivid","15.04L","amd64","ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-4118bf32\">ami-4118bf32</a>","aki-52a34525"],
["eu-west-1","vivid","15.04L","amd64","ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-76e54305\">ami-76e54305</a>","aki-52a34525"],
["eu-west-1","vivid","15.04L","amd64","instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-391cbb4a\">ami-391cbb4a</a>","aki-52a34525"],
["sa-east-1","vivid","15.04L","amd64","hvm:ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-ff018493\">ami-ff018493</a>","hvm"],
["sa-east-1","vivid","15.04L","amd64","hvm:ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-5f0c8933\">ami-5f0c8933</a>","hvm"],
["sa-east-1","vivid","15.04L","amd64","hvm:ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-580c8934\">ami-580c8934</a>","hvm"],
["sa-east-1","vivid","15.04L","amd64","hvm:instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-0b0f8a67\">ami-0b0f8a67</a>","hvm"],
["sa-east-1","vivid","15.04L","amd64","ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-af0085c3\">ami-af0085c3</a>","aki-5553f448"],
["sa-east-1","vivid","15.04L","amd64","ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-fe018492\">ami-fe018492</a>","aki-5553f448"],
["sa-east-1","vivid","15.04L","amd64","ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-c00085ac\">ami-c00085ac</a>","aki-5553f448"],
["sa-east-1","vivid","15.04L","amd64","instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-840184e8\">ami-840184e8</a>","aki-5553f448"],
["us-east-1","vivid","15.04L","amd64","hvm:ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-32b5f758\">ami-32b5f758</a>","hvm"],
["us-east-1","vivid","15.04L","amd64","hvm:ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-f2bbf998\">ami-f2bbf998</a>","hvm"],
["us-east-1","vivid","15.04L","amd64","hvm:ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-e6b8fa8c\">ami-e6b8fa8c</a>","hvm"],
["us-east-1","vivid","15.04L","amd64","hvm:instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-79b4f613\">ami-79b4f613</a>","hvm"],
["us-east-1","vivid","15.04L","amd64","ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-b0b5f7da\">ami-b0b5f7da</a>","aki-919dcaf8"],
["us-east-1","vivid","15.04L","amd64","ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-b1baf8db\">ami-b1baf8db</a>","aki-919dcaf8"],
["us-east-1","vivid","15.04L","amd64","ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-33b5f759\">ami-33b5f759</a>","aki-919dcaf8"],
["us-east-1","vivid","15.04L","amd64","instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-a0aceeca\">ami-a0aceeca</a>","aki-919dcaf8"],
["us-west-1","vivid","15.04L","amd64","hvm:ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-89deb7e9\">ami-89deb7e9</a>","hvm"],
["us-west-1","vivid","15.04L","amd64","hvm:ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-70dcb510\">ami-70dcb510</a>","hvm"],
["us-west-1","vivid","15.04L","amd64","hvm:ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-42deb722\">ami-42deb722</a>","hvm"],
["us-west-1","vivid","15.04L","amd64","hvm:instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-44deb724\">ami-44deb724</a>","hvm"],
["us-west-1","vivid","15.04L","amd64","ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-e3d1b883\">ami-e3d1b883</a>","aki-880531cd"],
["us-west-1","vivid","15.04L","amd64","ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-02dcb562\">ami-02dcb562</a>","aki-880531cd"],
["us-west-1","vivid","15.04L","amd64","ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-c3deb7a3\">ami-c3deb7a3</a>","aki-880531cd"],
["us-west-1","vivid","15.04L","amd64","instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-f6dfb696\">ami-f6dfb696</a>","aki-880531cd"],
["us-west-2","vivid","15.04L","amd64","hvm:ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-d82d3fb9\">ami-d82d3fb9</a>","hvm"],
["us-west-2","vivid","15.04L","amd64","hvm:ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-fdd3c19c\">ami-fdd3c19c</a>","hvm"],
["us-west-2","vivid","15.04L","amd64","hvm:ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-84d3c1e5\">ami-84d3c1e5</a>","hvm"],
["us-west-2","vivid","15.04L","amd64","hvm:instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-d5d2c0b4\">ami-d5d2c0b4</a>","hvm"],
["us-west-2","vivid","15.04L","amd64","ebs","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-9ed0c2ff\">ami-9ed0c2ff</a>","aki-fc8f11cc"],
["us-west-2","vivid","15.04L","amd64","ebs-io1","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-0fd0c26e\">ami-0fd0c26e</a>","aki-fc8f11cc"],
["us-west-2","vivid","15.04L","amd64","ebs-ssd","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-412c3e20\">ami-412c3e20</a>","aki-fc8f11cc"],
["us-west-2","vivid","15.04L","amd64","instance-store","20151201","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-e02e3c81\">ami-e02e3c81</a>","aki-fc8f11cc"],
["ap-northeast-1","wily","15.10","amd64","hvm:ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-87f7d9e9\">ami-87f7d9e9</a>","hvm"],
["ap-northeast-1","wily","15.10","amd64","hvm:ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-6ef8d600\">ami-6ef8d600</a>","hvm"],
["ap-northeast-1","wily","15.10","amd64","hvm:ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-53f9d73d\">ami-53f9d73d</a>","hvm"],
["ap-northeast-1","wily","15.10","amd64","hvm:instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-caf6d8a4\">ami-caf6d8a4</a>","hvm"],
["ap-northeast-1","wily","15.10","amd64","ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-78f9d716\">ami-78f9d716</a>","aki-176bf516"],
["ap-northeast-1","wily","15.10","amd64","ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-6ff7d901\">ami-6ff7d901</a>","aki-176bf516"],
["ap-northeast-1","wily","15.10","amd64","ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-f2f9d79c\">ami-f2f9d79c</a>","aki-176bf516"],
["ap-northeast-1","wily","15.10","amd64","instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-60f8d60e\">ami-60f8d60e</a>","aki-176bf516"],
["ap-southeast-1","wily","15.10","amd64","hvm:ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-781ada1b\">ami-781ada1b</a>","hvm"],
["ap-southeast-1","wily","15.10","amd64","hvm:ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-d11adab2\">ami-d11adab2</a>","hvm"],
["ap-southeast-1","wily","15.10","amd64","hvm:ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-791ada1a\">ami-791ada1a</a>","hvm"],
["ap-southeast-1","wily","15.10","amd64","hvm:instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-d01adab3\">ami-d01adab3</a>","hvm"],
["ap-southeast-1","wily","15.10","amd64","ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-691cdc0a\">ami-691cdc0a</a>","aki-503e7402"],
["ap-southeast-1","wily","15.10","amd64","ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-7b1ada18\">ami-7b1ada18</a>","aki-503e7402"],
["ap-southeast-1","wily","15.10","amd64","ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-ce1bdbad\">ami-ce1bdbad</a>","aki-503e7402"],
["ap-southeast-1","wily","15.10","amd64","instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-2f18d84c\">ami-2f18d84c</a>","aki-503e7402"],
["ap-southeast-2","wily","15.10","amd64","hvm:ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-49673f2a\">ami-49673f2a</a>","hvm"],
["ap-southeast-2","wily","15.10","amd64","hvm:ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-30643c53\">ami-30643c53</a>","hvm"],
["ap-southeast-2","wily","15.10","amd64","hvm:ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-87673fe4\">ami-87673fe4</a>","hvm"],
["ap-southeast-2","wily","15.10","amd64","hvm:instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-89673fea\">ami-89673fea</a>","hvm"],
["ap-southeast-2","wily","15.10","amd64","ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-199bc37a\">ami-199bc37a</a>","aki-c362fff9"],
["ap-southeast-2","wily","15.10","amd64","ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-0198c062\">ami-0198c062</a>","aki-c362fff9"],
["ap-southeast-2","wily","15.10","amd64","ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-86673fe5\">ami-86673fe5</a>","aki-c362fff9"],
["ap-southeast-2","wily","15.10","amd64","instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-3a663e59\">ami-3a663e59</a>","aki-c362fff9"],
["eu-central-1","wily","15.10","amd64","hvm:ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-2f978a43\">ami-2f978a43</a>","hvm"],
["eu-central-1","wily","15.10","amd64","hvm:ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-84978ae8\">ami-84978ae8</a>","hvm"],
["eu-central-1","wily","15.10","amd64","hvm:ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-7d948911\">ami-7d948911</a>","hvm"],
["eu-central-1","wily","15.10","amd64","hvm:instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-6195880d\">ami-6195880d</a>","hvm"],
["eu-central-1","wily","15.10","amd64","ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-b4968bd8\">ami-b4968bd8</a>","aki-184c7a05"],
["eu-central-1","wily","15.10","amd64","ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-7c948910\">ami-7c948910</a>","aki-184c7a05"],
["eu-central-1","wily","15.10","amd64","ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-e8968b84\">ami-e8968b84</a>","aki-184c7a05"],
["eu-central-1","wily","15.10","amd64","instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-ba9a87d6\">ami-ba9a87d6</a>","aki-184c7a05"],
["eu-west-1","wily","15.10","amd64","hvm:ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-4934923a\">ami-4934923a</a>","hvm"],
["eu-west-1","wily","15.10","amd64","hvm:ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-c73791b4\">ami-c73791b4</a>","hvm"],
["eu-west-1","wily","15.10","amd64","hvm:ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-fe35938d\">ami-fe35938d</a>","hvm"],
["eu-west-1","wily","15.10","amd64","hvm:instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-ba3492c9\">ami-ba3492c9</a>","hvm"],
["eu-west-1","wily","15.10","amd64","ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-54309627\">ami-54309627</a>","aki-52a34525"],
["eu-west-1","wily","15.10","amd64","ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-823395f1\">ami-823395f1</a>","aki-52a34525"],
["eu-west-1","wily","15.10","amd64","ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-9a3294e9\">ami-9a3294e9</a>","aki-52a34525"],
["eu-west-1","wily","15.10","amd64","instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-57228424\">ami-57228424</a>","aki-52a34525"],
["sa-east-1","wily","15.10","amd64","hvm:ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-33d85c5f\">ami-33d85c5f</a>","hvm"],
["sa-east-1","wily","15.10","amd64","hvm:ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-ddd95db1\">ami-ddd95db1</a>","hvm"],
["sa-east-1","wily","15.10","amd64","hvm:ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-abd357c7\">ami-abd357c7</a>","hvm"],
["sa-east-1","wily","15.10","amd64","hvm:instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-60dd590c\">ami-60dd590c</a>","hvm"],
["sa-east-1","wily","15.10","amd64","ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-26d85c4a\">ami-26d85c4a</a>","aki-5553f448"],
["sa-east-1","wily","15.10","amd64","ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-b0df5bdc\">ami-b0df5bdc</a>","aki-5553f448"],
["sa-east-1","wily","15.10","amd64","ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-28df5b44\">ami-28df5b44</a>","aki-5553f448"],
["sa-east-1","wily","15.10","amd64","instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-4bd05427\">ami-4bd05427</a>","aki-5553f448"],
["us-east-1","wily","15.10","amd64","hvm:ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-a75e12cd\">ami-a75e12cd</a>","hvm"],
["us-east-1","wily","15.10","amd64","hvm:ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-cc5e12a6\">ami-cc5e12a6</a>","hvm"],
["us-east-1","wily","15.10","amd64","hvm:ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-305d115a\">ami-305d115a</a>","hvm"],
["us-east-1","wily","15.10","amd64","hvm:instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-304d015a\">ami-304d015a</a>","hvm"],
["us-east-1","wily","15.10","amd64","ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-135c1079\">ami-135c1079</a>","aki-919dcaf8"],
["us-east-1","wily","15.10","amd64","ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-9b5f13f1\">ami-9b5f13f1</a>","aki-919dcaf8"],
["us-east-1","wily","15.10","amd64","ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-9a5f13f0\">ami-9a5f13f0</a>","aki-919dcaf8"],
["us-east-1","wily","15.10","amd64","instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-42377b28\">ami-42377b28</a>","aki-919dcaf8"],
["us-west-1","wily","15.10","amd64","hvm:ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-586f0738\">ami-586f0738</a>","hvm"],
["us-west-1","wily","15.10","amd64","hvm:ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-756e0615\">ami-756e0615</a>","hvm"],
["us-west-1","wily","15.10","amd64","hvm:ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-b26e06d2\">ami-b26e06d2</a>","hvm"],
["us-west-1","wily","15.10","amd64","hvm:instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-076d0567\">ami-076d0567</a>","hvm"],
["us-west-1","wily","15.10","amd64","ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-ab640ccb\">ami-ab640ccb</a>","aki-880531cd"],
["us-west-1","wily","15.10","amd64","ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-596f0739\">ami-596f0739</a>","aki-880531cd"],
["us-west-1","wily","15.10","amd64","ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-b36e06d3\">ami-b36e06d3</a>","aki-880531cd"],
["us-west-1","wily","15.10","amd64","instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-d96d05b9\">ami-d96d05b9</a>","aki-880531cd"],
["us-west-2","wily","15.10","amd64","hvm:ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-14415c75\">ami-14415c75</a>","hvm"],
["us-west-2","wily","15.10","amd64","hvm:ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-8a465beb\">ami-8a465beb</a>","hvm"],
["us-west-2","wily","15.10","amd64","hvm:ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-31475a50\">ami-31475a50</a>","hvm"],
["us-west-2","wily","15.10","amd64","hvm:instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-4c4a572d\">ami-4c4a572d</a>","hvm"],
["us-west-2","wily","15.10","amd64","ebs","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-a9435ec8\">ami-a9435ec8</a>","aki-fc8f11cc"],
["us-west-2","wily","15.10","amd64","ebs-io1","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-a9415cc8\">ami-a9415cc8</a>","aki-fc8f11cc"],
["us-west-2","wily","15.10","amd64","ebs-ssd","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-8f475aee\">ami-8f475aee</a>","aki-fc8f11cc"],
["us-west-2","wily","15.10","amd64","instance-store","20151203","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-804855e1\">ami-804855e1</a>","aki-fc8f11cc"],
["ap-northeast-1","saucy","13.10 EOL","amd64","hvm:ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-31e2b430\">ami-31e2b430</a>","hvm"],
["ap-northeast-1","saucy","13.10 EOL","amd64","hvm:ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-33e2b432\">ami-33e2b432</a>","hvm"],
["ap-northeast-1","saucy","13.10 EOL","amd64","hvm:ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-35e2b434\">ami-35e2b434</a>","hvm"],
["ap-northeast-1","saucy","13.10 EOL","amd64","hvm:instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-9de4b29c\">ami-9de4b29c</a>","hvm"],
["ap-northeast-1","saucy","13.10 EOL","amd64","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-1fe2b41e\">ami-1fe2b41e</a>","aki-176bf516"],
["ap-northeast-1","saucy","13.10 EOL","i386","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-1de2b41c\">ami-1de2b41c</a>","aki-136bf512"],
["ap-northeast-1","saucy","13.10 EOL","amd64","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-29e2b428\">ami-29e2b428</a>","aki-176bf516"],
["ap-northeast-1","saucy","13.10 EOL","i386","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-23e2b422\">ami-23e2b422</a>","aki-136bf512"],
["ap-northeast-1","saucy","13.10 EOL","amd64","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-2fe2b42e\">ami-2fe2b42e</a>","aki-176bf516"],
["ap-northeast-1","saucy","13.10 EOL","i386","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-2de2b42c\">ami-2de2b42c</a>","aki-136bf512"],
["ap-northeast-1","saucy","13.10 EOL","amd64","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-45f1a744\">ami-45f1a744</a>","aki-176bf516"],
["ap-northeast-1","saucy","13.10 EOL","i386","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-a9cb9da8\">ami-a9cb9da8</a>","aki-136bf512"],
["ap-southeast-1","saucy","13.10 EOL","amd64","hvm:ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-e4e4bab6\">ami-e4e4bab6</a>","hvm"],
["ap-southeast-1","saucy","13.10 EOL","amd64","hvm:ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-eae4bab8\">ami-eae4bab8</a>","hvm"],
["ap-southeast-1","saucy","13.10 EOL","amd64","hvm:ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-90e4bac2\">ami-90e4bac2</a>","hvm"],
["ap-southeast-1","saucy","13.10 EOL","amd64","hvm:instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-bee7b9ec\">ami-bee7b9ec</a>","hvm"],
["ap-southeast-1","saucy","13.10 EOL","amd64","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-f8e4baaa\">ami-f8e4baaa</a>","aki-503e7402"],
["ap-southeast-1","saucy","13.10 EOL","i386","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-f4e4baa6\">ami-f4e4baa6</a>","aki-ae3973fc"],
["ap-southeast-1","saucy","13.10 EOL","amd64","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-e2e4bab0\">ami-e2e4bab0</a>","aki-503e7402"],
["ap-southeast-1","saucy","13.10 EOL","i386","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-fce4baae\">ami-fce4baae</a>","aki-ae3973fc"],
["ap-southeast-1","saucy","13.10 EOL","amd64","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-e6e4bab4\">ami-e6e4bab4</a>","aki-503e7402"],
["ap-southeast-1","saucy","13.10 EOL","i386","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-e0e4bab2\">ami-e0e4bab2</a>","aki-ae3973fc"],
["ap-southeast-1","saucy","13.10 EOL","amd64","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-02e6b850\">ami-02e6b850</a>","aki-503e7402"],
["ap-southeast-1","saucy","13.10 EOL","i386","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-b0e8b6e2\">ami-b0e8b6e2</a>","aki-ae3973fc"],
["ap-southeast-2","saucy","13.10 EOL","amd64","hvm:ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a143249b\">ami-a143249b</a>","hvm"],
["ap-southeast-2","saucy","13.10 EOL","amd64","hvm:ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a743249d\">ami-a743249d</a>","hvm"],
["ap-southeast-2","saucy","13.10 EOL","amd64","hvm:ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a543249f\">ami-a543249f</a>","hvm"],
["ap-southeast-2","saucy","13.10 EOL","amd64","hvm:instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-bb432481\">ami-bb432481</a>","hvm"],
["ap-southeast-2","saucy","13.10 EOL","amd64","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-b543248f\">ami-b543248f</a>","aki-c362fff9"],
["ap-southeast-2","saucy","13.10 EOL","i386","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-b743248d\">ami-b743248d</a>","aki-cd62fff7"],
["ap-southeast-2","saucy","13.10 EOL","amd64","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a9432493\">ami-a9432493</a>","aki-c362fff9"],
["ap-southeast-2","saucy","13.10 EOL","i386","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-ab432491\">ami-ab432491</a>","aki-cd62fff7"],
["ap-southeast-2","saucy","13.10 EOL","amd64","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-ad432497\">ami-ad432497</a>","aki-c362fff9"],
["ap-southeast-2","saucy","13.10 EOL","i386","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-af432495\">ami-af432495</a>","aki-cd62fff7"],
["ap-southeast-2","saucy","13.10 EOL","amd64","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-e54423df\">ami-e54423df</a>","aki-c362fff9"],
["ap-southeast-2","saucy","13.10 EOL","i386","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-ff4522c5\">ami-ff4522c5</a>","aki-cd62fff7"],
["eu-west-1","saucy","13.10 EOL","amd64","hvm:ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-3910c44e\">ami-3910c44e</a>","hvm"],
["eu-west-1","saucy","13.10 EOL","amd64","hvm:ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-2710c450\">ami-2710c450</a>","hvm"],
["eu-west-1","saucy","13.10 EOL","amd64","hvm:ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-2110c456\">ami-2110c456</a>","hvm"],
["eu-west-1","saucy","13.10 EOL","amd64","hvm:instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-1316c264\">ami-1316c264</a>","hvm"],
["eu-west-1","saucy","13.10 EOL","amd64","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-3310c444\">ami-3310c444</a>","aki-52a34525"],
["eu-west-1","saucy","13.10 EOL","i386","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-3510c442\">ami-3510c442</a>","aki-68a3451f"],
["eu-west-1","saucy","13.10 EOL","amd64","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-3f10c448\">ami-3f10c448</a>","aki-52a34525"],
["eu-west-1","saucy","13.10 EOL","i386","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-3110c446\">ami-3110c446</a>","aki-68a3451f"],
["eu-west-1","saucy","13.10 EOL","amd64","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-3b10c44c\">ami-3b10c44c</a>","aki-52a34525"],
["eu-west-1","saucy","13.10 EOL","i386","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-3d10c44a\">ami-3d10c44a</a>","aki-68a3451f"],
["eu-west-1","saucy","13.10 EOL","amd64","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-39eb3f4e\">ami-39eb3f4e</a>","aki-52a34525"],
["eu-west-1","saucy","13.10 EOL","i386","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-f9e93d8e\">ami-f9e93d8e</a>","aki-68a3451f"],
["sa-east-1","saucy","13.10 EOL","amd64","hvm:ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-316dc32c\">ami-316dc32c</a>","hvm"],
["sa-east-1","saucy","13.10 EOL","amd64","hvm:ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-336dc32e\">ami-336dc32e</a>","hvm"],
["sa-east-1","saucy","13.10 EOL","amd64","hvm:ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-2d6dc330\">ami-2d6dc330</a>","hvm"],
["sa-east-1","saucy","13.10 EOL","amd64","hvm:instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-a16cc2bc\">ami-a16cc2bc</a>","hvm"],
["sa-east-1","saucy","13.10 EOL","amd64","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-036dc31e\">ami-036dc31e</a>","aki-5553f448"],
["sa-east-1","saucy","13.10 EOL","i386","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-016dc31c\">ami-016dc31c</a>","aki-5b53f446"],
["sa-east-1","saucy","13.10 EOL","amd64","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-396dc324\">ami-396dc324</a>","aki-5553f448"],
["sa-east-1","saucy","13.10 EOL","i386","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-3f6dc322\">ami-3f6dc322</a>","aki-5b53f446"],
["sa-east-1","saucy","13.10 EOL","amd64","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-376dc32a\">ami-376dc32a</a>","aki-5553f448"],
["sa-east-1","saucy","13.10 EOL","i386","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-356dc328\">ami-356dc328</a>","aki-5b53f446"],
["sa-east-1","saucy","13.10 EOL","amd64","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-076cc21a\">ami-076cc21a</a>","aki-5553f448"],
["sa-east-1","saucy","13.10 EOL","i386","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-716fc16c\">ami-716fc16c</a>","aki-5b53f446"],
["us-east-1","saucy","13.10 EOL","amd64","hvm:ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-5661a13e\">ami-5661a13e</a>","hvm"],
["us-east-1","saucy","13.10 EOL","amd64","hvm:ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3c61a154\">ami-3c61a154</a>","hvm"],
["us-east-1","saucy","13.10 EOL","amd64","hvm:ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3661a15e\">ami-3661a15e</a>","hvm"],
["us-east-1","saucy","13.10 EOL","amd64","hvm:instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-145b9b7c\">ami-145b9b7c</a>","hvm"],
["us-east-1","saucy","13.10 EOL","amd64","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-7461a11c\">ami-7461a11c</a>","aki-919dcaf8"],
["us-east-1","saucy","13.10 EOL","i386","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-7261a11a\">ami-7261a11a</a>","aki-8f9dcae6"],
["us-east-1","saucy","13.10 EOL","amd64","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-4061a128\">ami-4061a128</a>","aki-919dcaf8"],
["us-east-1","saucy","13.10 EOL","i386","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-4861a120\">ami-4861a120</a>","aki-8f9dcae6"],
["us-east-1","saucy","13.10 EOL","amd64","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-5a61a132\">ami-5a61a132</a>","aki-919dcaf8"],
["us-east-1","saucy","13.10 EOL","i386","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-5861a130\">ami-5861a130</a>","aki-8f9dcae6"],
["us-east-1","saucy","13.10 EOL","amd64","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-a65393ce\">ami-a65393ce</a>","aki-919dcaf8"],
["us-east-1","saucy","13.10 EOL","i386","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-d24c8cba\">ami-d24c8cba</a>","aki-8f9dcae6"],
["us-west-1","saucy","13.10 EOL","amd64","hvm:ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-812d2dc4\">ami-812d2dc4</a>","hvm"],
["us-west-1","saucy","13.10 EOL","amd64","hvm:ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-832d2dc6\">ami-832d2dc6</a>","hvm"],
["us-west-1","saucy","13.10 EOL","amd64","hvm:ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-8d2d2dc8\">ami-8d2d2dc8</a>","hvm"],
["us-west-1","saucy","13.10 EOL","amd64","hvm:instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-c32c2c86\">ami-c32c2c86</a>","hvm"],
["us-west-1","saucy","13.10 EOL","amd64","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-fd2d2db8\">ami-fd2d2db8</a>","aki-880531cd"],
["us-west-1","saucy","13.10 EOL","i386","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-f12d2db4\">ami-f12d2db4</a>","aki-8e0531cb"],
["us-west-1","saucy","13.10 EOL","amd64","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-f92d2dbc\">ami-f92d2dbc</a>","aki-880531cd"],
["us-west-1","saucy","13.10 EOL","i386","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-ff2d2dba\">ami-ff2d2dba</a>","aki-8e0531cb"],
["us-west-1","saucy","13.10 EOL","amd64","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-872d2dc2\">ami-872d2dc2</a>","aki-880531cd"],
["us-west-1","saucy","13.10 EOL","i386","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-fb2d2dbe\">ami-fb2d2dbe</a>","aki-8e0531cb"],
["us-west-1","saucy","13.10 EOL","amd64","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-bb2a2afe\">ami-bb2a2afe</a>","aki-880531cd"],
["us-west-1","saucy","13.10 EOL","i386","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-1b29295e\">ami-1b29295e</a>","aki-8e0531cb"],
["us-west-2","saucy","13.10 EOL","amd64","hvm:ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-8b88f6bb\">ami-8b88f6bb</a>","hvm"],
["us-west-2","saucy","13.10 EOL","amd64","hvm:ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-8d88f6bd\">ami-8d88f6bd</a>","hvm"],
["us-west-2","saucy","13.10 EOL","amd64","hvm:ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-8f88f6bf\">ami-8f88f6bf</a>","hvm"],
["us-west-2","saucy","13.10 EOL","amd64","hvm:instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-138bf523\">ami-138bf523</a>","hvm"],
["us-west-2","saucy","13.10 EOL","amd64","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-9f88f6af\">ami-9f88f6af</a>","aki-fc8f11cc"],
["us-west-2","saucy","13.10 EOL","i386","ebs","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-9988f6a9\">ami-9988f6a9</a>","aki-f08f11c0"],
["us-west-2","saucy","13.10 EOL","amd64","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-8388f6b3\">ami-8388f6b3</a>","aki-fc8f11cc"],
["us-west-2","saucy","13.10 EOL","i386","ebs-io1","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-8188f6b1\">ami-8188f6b1</a>","aki-f08f11c0"],
["us-west-2","saucy","13.10 EOL","amd64","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-8988f6b9\">ami-8988f6b9</a>","aki-fc8f11cc"],
["us-west-2","saucy","13.10 EOL","i386","ebs-ssd","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-8588f6b5\">ami-8588f6b5</a>","aki-f08f11c0"],
["us-west-2","saucy","13.10 EOL","amd64","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-c18ff1f1\">ami-c18ff1f1</a>","aki-fc8f11cc"],
["us-west-2","saucy","13.10 EOL","i386","instance-store","20140709","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-9f91efaf\">ami-9f91efaf</a>","aki-f08f11c0"],
["ap-northeast-1","raring","13.04 EOL","amd64","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-bfc0afbe\">ami-bfc0afbe</a>","aki-44992845"],
["ap-northeast-1","raring","13.04 EOL","i386","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-bdc0afbc\">ami-bdc0afbc</a>","aki-42992843"],
["ap-northeast-1","raring","13.04 EOL","amd64","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-31c1ae30\">ami-31c1ae30</a>","aki-44992845"],
["ap-northeast-1","raring","13.04 EOL","i386","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-37c2ad36\">ami-37c2ad36</a>","aki-42992843"],
["ap-southeast-1","raring","13.04 EOL","amd64","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-92aef9c0\">ami-92aef9c0</a>","aki-fe1354ac"],
["ap-southeast-1","raring","13.04 EOL","i386","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-ecaef9be\">ami-ecaef9be</a>","aki-f81354aa"],
["ap-southeast-1","raring","13.04 EOL","amd64","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-c6aef994\">ami-c6aef994</a>","aki-fe1354ac"],
["ap-southeast-1","raring","13.04 EOL","i386","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-0caef95e\">ami-0caef95e</a>","aki-f81354aa"],
["ap-southeast-2","raring","13.04 EOL","amd64","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-57f16f6d\">ami-57f16f6d</a>","aki-31990e0b"],
["ap-southeast-2","raring","13.04 EOL","i386","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-51f16f6b\">ami-51f16f6b</a>","aki-33990e09"],
["ap-southeast-2","raring","13.04 EOL","amd64","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-53f16f69\">ami-53f16f69</a>","aki-31990e0b"],
["ap-southeast-2","raring","13.04 EOL","i386","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-adf06e97\">ami-adf06e97</a>","aki-33990e09"],
["eu-west-1","raring","13.04 EOL","amd64","hvm:ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-dca653ab\">ami-dca653ab</a>","hvm"],
["eu-west-1","raring","13.04 EOL","amd64","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-dea653a9\">ami-dea653a9</a>","aki-71665e05"],
["eu-west-1","raring","13.04 EOL","i386","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-d2a653a5\">ami-d2a653a5</a>","aki-75665e01"],
["eu-west-1","raring","13.04 EOL","amd64","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-1aa7526d\">ami-1aa7526d</a>","aki-71665e05"],
["eu-west-1","raring","13.04 EOL","i386","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-b2a451c5\">ami-b2a451c5</a>","aki-75665e01"],
["sa-east-1","raring","13.04 EOL","amd64","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-4da10150\">ami-4da10150</a>","aki-c48f51d9"],
["sa-east-1","raring","13.04 EOL","i386","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-53a1014e\">ami-53a1014e</a>","aki-ca8f51d7"],
["sa-east-1","raring","13.04 EOL","amd64","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-29a10134\">ami-29a10134</a>","aki-c48f51d9"],
["sa-east-1","raring","13.04 EOL","i386","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-0fa10112\">ami-0fa10112</a>","aki-ca8f51d7"],
["us-east-1","raring","13.04 EOL","amd64","hvm:ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-971524fe\">ami-971524fe</a>","hvm"],
["us-east-1","raring","13.04 EOL","amd64","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-951524fc\">ami-951524fc</a>","aki-88aa75e1"],
["us-east-1","raring","13.04 EOL","i386","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-931524fa\">ami-931524fa</a>","aki-b6aa75df"],
["us-east-1","raring","13.04 EOL","amd64","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-1d132274\">ami-1d132274</a>","aki-88aa75e1"],
["us-east-1","raring","13.04 EOL","i386","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-3d112054\">ami-3d112054</a>","aki-b6aa75df"],
["us-west-1","raring","13.04 EOL","amd64","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-b0784af5\">ami-b0784af5</a>","aki-f77e26b2"],
["us-west-1","raring","13.04 EOL","i386","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-b6784af3\">ami-b6784af3</a>","aki-f57e26b0"],
["us-west-1","raring","13.04 EOL","amd64","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-e4784aa1\">ami-e4784aa1</a>","aki-f77e26b2"],
["us-west-1","raring","13.04 EOL","i386","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-4c784a09\">ami-4c784a09</a>","aki-f57e26b0"],
["us-west-2","raring","13.04 EOL","amd64","hvm:ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-38d6b008\">ami-38d6b008</a>","hvm"],
["us-west-2","raring","13.04 EOL","amd64","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-36d6b006\">ami-36d6b006</a>","aki-fc37bacc"],
["us-west-2","raring","13.04 EOL","i386","ebs","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-34d6b004\">ami-34d6b004</a>","aki-fa37baca"],
["us-west-2","raring","13.04 EOL","amd64","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-7ac9af4a\">ami-7ac9af4a</a>","aki-fc37bacc"],
["us-west-2","raring","13.04 EOL","i386","instance-store","20140111","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-40c8ae70\">ami-40c8ae70</a>","aki-fa37baca"],
["ap-northeast-1","trusty","14.04 LTS","amd64","hvm:ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-37092a59\">ami-37092a59</a>","hvm"],
["ap-northeast-1","trusty","14.04 LTS","amd64","hvm:ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-08092a66\">ami-08092a66</a>","hvm"],
["ap-northeast-1","trusty","14.04 LTS","amd64","hvm:ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-eb0a2985\">ami-eb0a2985</a>","hvm"],
["ap-northeast-1","trusty","14.04 LTS","amd64","hvm:instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-37042759\">ami-37042759</a>","hvm"],
["ap-northeast-1","trusty","14.04 LTS","amd64","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-69052607\">ami-69052607</a>","aki-176bf516"],
["ap-northeast-1","trusty","14.04 LTS","i386","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-68052606\">ami-68052606</a>","aki-136bf512"],
["ap-northeast-1","trusty","14.04 LTS","amd64","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-6a052604\">ami-6a052604</a>","aki-176bf516"],
["ap-northeast-1","trusty","14.04 LTS","i386","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-08042766\">ami-08042766</a>","aki-136bf512"],
["ap-northeast-1","trusty","14.04 LTS","amd64","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-ae0a29c0\">ami-ae0a29c0</a>","aki-176bf516"],
["ap-northeast-1","trusty","14.04 LTS","i386","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-46042728\">ami-46042728</a>","aki-136bf512"],
["ap-northeast-1","trusty","14.04 LTS","amd64","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-960526f8\">ami-960526f8</a>","aki-176bf516"],
["ap-northeast-1","trusty","14.04 LTS","i386","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-northeast-1#launchAmi=ami-4102212f\">ami-4102212f</a>","aki-136bf512"],
["ap-southeast-1","trusty","14.04 LTS","amd64","hvm:ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-788e4f1b\">ami-788e4f1b</a>","hvm"],
["ap-southeast-1","trusty","14.04 LTS","amd64","hvm:ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-1e8c4d7d\">ami-1e8c4d7d</a>","hvm"],
["ap-southeast-1","trusty","14.04 LTS","amd64","hvm:ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-f78c4d94\">ami-f78c4d94</a>","hvm"],
["ap-southeast-1","trusty","14.04 LTS","amd64","hvm:instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-798e4f1a\">ami-798e4f1a</a>","hvm"],
["ap-southeast-1","trusty","14.04 LTS","amd64","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-e88c4d8b\">ami-e88c4d8b</a>","aki-503e7402"],
["ap-southeast-1","trusty","14.04 LTS","i386","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-778f4e14\">ami-778f4e14</a>","aki-ae3973fc"],
["ap-southeast-1","trusty","14.04 LTS","amd64","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-b48d4cd7\">ami-b48d4cd7</a>","aki-503e7402"],
["ap-southeast-1","trusty","14.04 LTS","i386","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-4b8e4f28\">ami-4b8e4f28</a>","aki-ae3973fc"],
["ap-southeast-1","trusty","14.04 LTS","amd64","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-3a8f4e59\">ami-3a8f4e59</a>","aki-503e7402"],
["ap-southeast-1","trusty","14.04 LTS","i386","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-4e91502d\">ami-4e91502d</a>","aki-ae3973fc"],
["ap-southeast-1","trusty","14.04 LTS","amd64","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-488f4e2b\">ami-488f4e2b</a>","aki-503e7402"],
["ap-southeast-1","trusty","14.04 LTS","i386","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-1#launchAmi=ami-7a8c4d19\">ami-7a8c4d19</a>","aki-ae3973fc"],
["ap-southeast-2","trusty","14.04 LTS","amd64","hvm:ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-b95d04da\">ami-b95d04da</a>","hvm"],
["ap-southeast-2","trusty","14.04 LTS","amd64","hvm:ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-ba5f06d9\">ami-ba5f06d9</a>","hvm"],
["ap-southeast-2","trusty","14.04 LTS","amd64","hvm:ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-a25a03c1\">ami-a25a03c1</a>","hvm"],
["ap-southeast-2","trusty","14.04 LTS","amd64","hvm:instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-025c0561\">ami-025c0561</a>","hvm"],
["ap-southeast-2","trusty","14.04 LTS","amd64","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-f05e0793\">ami-f05e0793</a>","aki-c362fff9"],
["ap-southeast-2","trusty","14.04 LTS","i386","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-015c0562\">ami-015c0562</a>","aki-cd62fff7"],
["ap-southeast-2","trusty","14.04 LTS","amd64","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-bb5f06d8\">ami-bb5f06d8</a>","aki-c362fff9"],
["ap-southeast-2","trusty","14.04 LTS","i386","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-945c05f7\">ami-945c05f7</a>","aki-cd62fff7"],
["ap-southeast-2","trusty","14.04 LTS","amd64","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-425c0521\">ami-425c0521</a>","aki-c362fff9"],
["ap-southeast-2","trusty","14.04 LTS","i386","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-ba5d04d9\">ami-ba5d04d9</a>","aki-cd62fff7"],
["ap-southeast-2","trusty","14.04 LTS","amd64","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-4e5f062d\">ami-4e5f062d</a>","aki-c362fff9"],
["ap-southeast-2","trusty","14.04 LTS","i386","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=ap-southeast-2#launchAmi=ami-995d04fa\">ami-995d04fa</a>","aki-cd62fff7"],
["eu-central-1","trusty","14.04 LTS","amd64","hvm:ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-ba2230d6\">ami-ba2230d6</a>","hvm"],
["eu-central-1","trusty","14.04 LTS","amd64","hvm:ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-e5223089\">ami-e5223089</a>","hvm"],
["eu-central-1","trusty","14.04 LTS","amd64","hvm:ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-02392b6e\">ami-02392b6e</a>","hvm"],
["eu-central-1","trusty","14.04 LTS","amd64","hvm:instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-433c2e2f\">ami-433c2e2f</a>","hvm"],
["eu-central-1","trusty","14.04 LTS","amd64","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-bb2230d7\">ami-bb2230d7</a>","aki-184c7a05"],
["eu-central-1","trusty","14.04 LTS","i386","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-842230e8\">ami-842230e8</a>","aki-3e4c7a23"],
["eu-central-1","trusty","14.04 LTS","amd64","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-643c2e08\">ami-643c2e08</a>","aki-184c7a05"],
["eu-central-1","trusty","14.04 LTS","i386","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-a53c2ec9\">ami-a53c2ec9</a>","aki-3e4c7a23"],
["eu-central-1","trusty","14.04 LTS","amd64","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-a43c2ec8\">ami-a43c2ec8</a>","aki-184c7a05"],
["eu-central-1","trusty","14.04 LTS","i386","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-03392b6f\">ami-03392b6f</a>","aki-3e4c7a23"],
["eu-central-1","trusty","14.04 LTS","amd64","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-613e2c0d\">ami-613e2c0d</a>","aki-184c7a05"],
["eu-central-1","trusty","14.04 LTS","i386","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-central-1#launchAmi=ami-4a3c2e26\">ami-4a3c2e26</a>","aki-3e4c7a23"],
["eu-west-1","trusty","14.04 LTS","amd64","hvm:ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-8d16ccfe\">ami-8d16ccfe</a>","hvm"],
["eu-west-1","trusty","14.04 LTS","amd64","hvm:ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-be10cacd\">ami-be10cacd</a>","hvm"],
["eu-west-1","trusty","14.04 LTS","amd64","hvm:ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-6514ce16\">ami-6514ce16</a>","hvm"],
["eu-west-1","trusty","14.04 LTS","amd64","hvm:instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-a113c9d2\">ami-a113c9d2</a>","hvm"],
["eu-west-1","trusty","14.04 LTS","amd64","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-9513c9e6\">ami-9513c9e6</a>","aki-52a34525"],
["eu-west-1","trusty","14.04 LTS","i386","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-0014ce73\">ami-0014ce73</a>","aki-68a3451f"],
["eu-west-1","trusty","14.04 LTS","amd64","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-d714cea4\">ami-d714cea4</a>","aki-52a34525"],
["eu-west-1","trusty","14.04 LTS","i386","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-5415cf27\">ami-5415cf27</a>","aki-68a3451f"],
["eu-west-1","trusty","14.04 LTS","amd64","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-9613c9e5\">ami-9613c9e5</a>","aki-52a34525"],
["eu-west-1","trusty","14.04 LTS","i386","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-f311cb80\">ami-f311cb80</a>","aki-68a3451f"],
["eu-west-1","trusty","14.04 LTS","amd64","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-5910ca2a\">ami-5910ca2a</a>","aki-52a34525"],
["eu-west-1","trusty","14.04 LTS","i386","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=eu-west-1#launchAmi=ami-601cc613\">ami-601cc613</a>","aki-68a3451f"],
["sa-east-1","trusty","14.04 LTS","amd64","hvm:ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-6645ff0a\">ami-6645ff0a</a>","hvm"],
["sa-east-1","trusty","14.04 LTS","amd64","hvm:ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-7a47fd16\">ami-7a47fd16</a>","hvm"],
["sa-east-1","trusty","14.04 LTS","amd64","hvm:ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-9f4cf6f3\">ami-9f4cf6f3</a>","hvm"],
["sa-east-1","trusty","14.04 LTS","amd64","hvm:instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-5f4df733\">ami-5f4df733</a>","hvm"],
["sa-east-1","trusty","14.04 LTS","amd64","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-9d43f9f1\">ami-9d43f9f1</a>","aki-5553f448"],
["sa-east-1","trusty","14.04 LTS","i386","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-de4cf6b2\">ami-de4cf6b2</a>","aki-5b53f446"],
["sa-east-1","trusty","14.04 LTS","amd64","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-894df7e5\">ami-894df7e5</a>","aki-5553f448"],
["sa-east-1","trusty","14.04 LTS","i386","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-1c45ff70\">ami-1c45ff70</a>","aki-5b53f446"],
["sa-east-1","trusty","14.04 LTS","amd64","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-f840fa94\">ami-f840fa94</a>","aki-5553f448"],
["sa-east-1","trusty","14.04 LTS","i386","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-6745ff0b\">ami-6745ff0b</a>","aki-5b53f446"],
["sa-east-1","trusty","14.04 LTS","amd64","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-444cf628\">ami-444cf628</a>","aki-5553f448"],
["sa-east-1","trusty","14.04 LTS","i386","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=sa-east-1#launchAmi=ami-cc4bf1a0\">ami-cc4bf1a0</a>","aki-5b53f446"],
["us-east-1","trusty","14.04 LTS","amd64","hvm:ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-0f8bce65\">ami-0f8bce65</a>","hvm"],
["us-east-1","trusty","14.04 LTS","amd64","hvm:ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-b988cdd3\">ami-b988cdd3</a>","hvm"],
["us-east-1","trusty","14.04 LTS","amd64","hvm:ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-7b89cc11\">ami-7b89cc11</a>","hvm"],
["us-east-1","trusty","14.04 LTS","amd64","hvm:instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-9883c6f2\">ami-9883c6f2</a>","hvm"],
["us-east-1","trusty","14.04 LTS","amd64","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-7388cd19\">ami-7388cd19</a>","aki-919dcaf8"],
["us-east-1","trusty","14.04 LTS","i386","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-988bcef2\">ami-988bcef2</a>","aki-8f9dcae6"],
["us-east-1","trusty","14.04 LTS","amd64","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-548acf3e\">ami-548acf3e</a>","aki-919dcaf8"],
["us-east-1","trusty","14.04 LTS","i386","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-578acf3d\">ami-578acf3d</a>","aki-8f9dcae6"],
["us-east-1","trusty","14.04 LTS","amd64","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-0a8acf60\">ami-0a8acf60</a>","aki-919dcaf8"],
["us-east-1","trusty","14.04 LTS","i386","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-9295d0f8\">ami-9295d0f8</a>","aki-8f9dcae6"],
["us-east-1","trusty","14.04 LTS","amd64","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-0a7a3f60\">ami-0a7a3f60</a>","aki-919dcaf8"],
["us-east-1","trusty","14.04 LTS","i386","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-east-1#launchAmi=ami-2a6a2f40\">ami-2a6a2f40</a>","aki-8f9dcae6"],
["us-west-1","trusty","14.04 LTS","amd64","hvm:ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-f898f698\">ami-f898f698</a>","hvm"],
["us-west-1","trusty","14.04 LTS","amd64","hvm:ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-c59bf5a5\">ami-c59bf5a5</a>","hvm"],
["us-west-1","trusty","14.04 LTS","amd64","hvm:ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-809df3e0\">ami-809df3e0</a>","hvm"],
["us-west-1","trusty","14.04 LTS","amd64","hvm:instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-769af416\">ami-769af416</a>","hvm"],
["us-west-1","trusty","14.04 LTS","amd64","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-5f9af43f\">ami-5f9af43f</a>","aki-880531cd"],
["us-west-1","trusty","14.04 LTS","i386","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-839df3e3\">ami-839df3e3</a>","aki-8e0531cb"],
["us-west-1","trusty","14.04 LTS","amd64","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-829df3e2\">ami-829df3e2</a>","aki-880531cd"],
["us-west-1","trusty","14.04 LTS","i386","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-289bf548\">ami-289bf548</a>","aki-8e0531cb"],
["us-west-1","trusty","14.04 LTS","amd64","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-4d99f72d\">ami-4d99f72d</a>","aki-880531cd"],
["us-west-1","trusty","14.04 LTS","i386","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-059af465\">ami-059af465</a>","aki-8e0531cb"],
["us-west-1","trusty","14.04 LTS","amd64","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-139ef073\">ami-139ef073</a>","aki-880531cd"],
["us-west-1","trusty","14.04 LTS","i386","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-1#launchAmi=ami-cf9cf2af\">ami-cf9cf2af</a>","aki-8e0531cb"],
["us-west-2","trusty","14.04 LTS","amd64","hvm:ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-534d5d32\">ami-534d5d32</a>","hvm"],
["us-west-2","trusty","14.04 LTS","amd64","hvm:ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-9d4f5ffc\">ami-9d4f5ffc</a>","hvm"],
["us-west-2","trusty","14.04 LTS","amd64","hvm:ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-d24c5cb3\">ami-d24c5cb3</a>","hvm"],
["us-west-2","trusty","14.04 LTS","amd64","hvm:instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-874a5ae6\">ami-874a5ae6</a>","hvm"],
["us-west-2","trusty","14.04 LTS","amd64","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-e54f5f84\">ami-e54f5f84</a>","aki-fc8f11cc"],
["us-west-2","trusty","14.04 LTS","i386","ebs","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-9c4f5ffd\">ami-9c4f5ffd</a>","aki-f08f11c0"],
["us-west-2","trusty","14.04 LTS","amd64","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-2b4e5e4a\">ami-2b4e5e4a</a>","aki-fc8f11cc"],
["us-west-2","trusty","14.04 LTS","i386","ebs-io1","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-a74b5bc6\">ami-a74b5bc6</a>","aki-f08f11c0"],
["us-west-2","trusty","14.04 LTS","amd64","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-d04c5cb1\">ami-d04c5cb1</a>","aki-fc8f11cc"],
["us-west-2","trusty","14.04 LTS","i386","ebs-ssd","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-06706067\">ami-06706067</a>","aki-f08f11c0"],
["us-west-2","trusty","14.04 LTS","amd64","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-b04959d1\">ami-b04959d1</a>","aki-fc8f11cc"],
["us-west-2","trusty","14.04 LTS","i386","instance-store","20151117","<a href=\"https://console.aws.amazon.com/ec2/home?region=us-west-2#launchAmi=ami-ce4454af\">ami-ce4454af</a>","aki-f08f11c0"],
["cn-north-1","utopic","14.10 EOL","amd64","hvm:ebs","20150708","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-9871eca1\">ami-9871eca1</a>","hvm"],
["cn-north-1","utopic","14.10 EOL","amd64","hvm:ebs-io1","20150708","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-9071eca9\">ami-9071eca9</a>","hvm"],
["cn-north-1","utopic","14.10 EOL","amd64","hvm:ebs-ssd","20150708","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-9671ecaf\">ami-9671ecaf</a>","hvm"],
["cn-north-1","utopic","14.10 EOL","amd64","hvm:instance-store","20150708","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-3671ec0f\">ami-3671ec0f</a>","hvm"],
["cn-north-1","utopic","14.10 EOL","amd64","ebs","20150708","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-7a71ec43\">ami-7a71ec43</a>","aki-9e8f1da7"],
["cn-north-1","utopic","14.10 EOL","i386","ebs","20150708","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-1a71ec23\">ami-1a71ec23</a>","aki-908f1da9"],
["cn-north-1","utopic","14.10 EOL","amd64","ebs-io1","20150708","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-4c71ec75\">ami-4c71ec75</a>","aki-9e8f1da7"],
["cn-north-1","utopic","14.10 EOL","i386","ebs-io1","20150708","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-5871ec61\">ami-5871ec61</a>","aki-908f1da9"],
["cn-north-1","utopic","14.10 EOL","amd64","ebs-ssd","20150708","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-b671ec8f\">ami-b671ec8f</a>","aki-9e8f1da7"],
["cn-north-1","utopic","14.10 EOL","i386","ebs-ssd","20150708","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-bc71ec85\">ami-bc71ec85</a>","aki-908f1da9"],
["cn-north-1","utopic","14.10 EOL","amd64","instance-store","20150708","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-8c76ebb5\">ami-8c76ebb5</a>","aki-9e8f1da7"],
["cn-north-1","utopic","14.10 EOL","i386","instance-store","20150708","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-6876eb51\">ami-6876eb51</a>","aki-908f1da9"],
["cn-north-1","lucid","10.04 LTS","amd64","ebs","20150427","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-8ccd50b5\">ami-8ccd50b5</a>","aki-9e8f1da7"],
["cn-north-1","lucid","10.04 LTS","i386","ebs","20150427","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-8acd50b3\">ami-8acd50b3</a>","aki-908f1da9"],
["cn-north-1","lucid","10.04 LTS","amd64","ebs-io1","20150427","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-80cd50b9\">ami-80cd50b9</a>","aki-9e8f1da7"],
["cn-north-1","lucid","10.04 LTS","i386","ebs-io1","20150427","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-8ecd50b7\">ami-8ecd50b7</a>","aki-908f1da9"],
["cn-north-1","lucid","10.04 LTS","amd64","ebs-ssd","20150427","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-86cd50bf\">ami-86cd50bf</a>","aki-9e8f1da7"],
["cn-north-1","lucid","10.04 LTS","i386","ebs-ssd","20150427","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-84cd50bd\">ami-84cd50bd</a>","aki-908f1da9"],
["cn-north-1","lucid","10.04 LTS","amd64","instance-store","20150427","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-88cd50b1\">ami-88cd50b1</a>","aki-9e8f1da7"],
["cn-north-1","lucid","10.04 LTS","i386","instance-store","20150427","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-96cd50af\">ami-96cd50af</a>","aki-908f1da9"],
["cn-north-1","precise","12.04 LTS","amd64","hvm:ebs","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-a3ed24ce\">ami-a3ed24ce</a>","hvm"],
["cn-north-1","precise","12.04 LTS","amd64","hvm:ebs-io1","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-a2ed24cf\">ami-a2ed24cf</a>","hvm"],
["cn-north-1","precise","12.04 LTS","amd64","hvm:ebs-ssd","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-cceb22a1\">ami-cceb22a1</a>","hvm"],
["cn-north-1","precise","12.04 LTS","amd64","hvm:instance-store","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-17ef267a\">ami-17ef267a</a>","hvm"],
["cn-north-1","precise","12.04 LTS","amd64","ebs","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-5be12836\">ami-5be12836</a>","aki-9e8f1da7"],
["cn-north-1","precise","12.04 LTS","i386","ebs","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-73ee271e\">ami-73ee271e</a>","aki-908f1da9"],
["cn-north-1","precise","12.04 LTS","amd64","ebs-io1","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-01ee276c\">ami-01ee276c</a>","aki-9e8f1da7"],
["cn-north-1","precise","12.04 LTS","i386","ebs-io1","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-9ded24f0\">ami-9ded24f0</a>","aki-908f1da9"],
["cn-north-1","precise","12.04 LTS","amd64","ebs-ssd","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-67e32a0a\">ami-67e32a0a</a>","aki-9e8f1da7"],
["cn-north-1","precise","12.04 LTS","i386","ebs-ssd","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-19ef2674\">ami-19ef2674</a>","aki-908f1da9"],
["cn-north-1","precise","12.04 LTS","amd64","instance-store","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-5eee2733\">ami-5eee2733</a>","aki-9e8f1da7"],
["cn-north-1","precise","12.04 LTS","i386","instance-store","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-89e128e4\">ami-89e128e4</a>","aki-908f1da9"],
["cn-north-1","vivid","15.04L","amd64","hvm:ebs","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-4ce12821\">ami-4ce12821</a>","hvm"],
["cn-north-1","vivid","15.04L","amd64","hvm:ebs-io1","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-0fea2362\">ami-0fea2362</a>","hvm"],
["cn-north-1","vivid","15.04L","amd64","hvm:ebs-ssd","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-95ed24f8\">ami-95ed24f8</a>","hvm"],
["cn-north-1","vivid","15.04L","amd64","hvm:instance-store","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-14eb2279\">ami-14eb2279</a>","hvm"],
["cn-north-1","vivid","15.04L","amd64","ebs","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-47ee272a\">ami-47ee272a</a>","aki-9e8f1da7"],
["cn-north-1","vivid","15.04L","amd64","ebs-io1","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-4aed2427\">ami-4aed2427</a>","aki-9e8f1da7"],
["cn-north-1","vivid","15.04L","amd64","ebs-ssd","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-0aef2667\">ami-0aef2667</a>","aki-9e8f1da7"],
["cn-north-1","vivid","15.04L","amd64","instance-store","20151117","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-48ed2425\">ami-48ed2425</a>","aki-9e8f1da7"],
["cn-north-1","wily","15.10","amd64","hvm:ebs","20151116.1","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-cfd41da2\">ami-cfd41da2</a>","hvm"],
["cn-north-1","wily","15.10","amd64","hvm:ebs-io1","20151116.1","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-74eb2219\">ami-74eb2219</a>","hvm"],
["cn-north-1","wily","15.10","amd64","hvm:ebs-ssd","20151116.1","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-79eb2214\">ami-79eb2214</a>","hvm"],
["cn-north-1","wily","15.10","amd64","hvm:instance-store","20151116.1","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-87d51cea\">ami-87d51cea</a>","hvm"],
["cn-north-1","wily","15.10","amd64","ebs","20151116.1","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-8bd019e6\">ami-8bd019e6</a>","aki-9e8f1da7"],
["cn-north-1","wily","15.10","amd64","ebs-io1","20151116.1","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-91de17fc\">ami-91de17fc</a>","aki-9e8f1da7"],
["cn-north-1","wily","15.10","amd64","ebs-ssd","20151116.1","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-a1d21bcc\">ami-a1d21bcc</a>","aki-9e8f1da7"],
["cn-north-1","wily","15.10","amd64","instance-store","20151116.1","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-e1d0198c\">ami-e1d0198c</a>","aki-9e8f1da7"],
["cn-north-1","saucy","13.10 EOL","amd64","hvm:ebs","20140709","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-86a331bf\">ami-86a331bf</a>","hvm"],
["cn-north-1","saucy","13.10 EOL","amd64","hvm:ebs-io1","20140709","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-f8a331c1\">ami-f8a331c1</a>","hvm"],
["cn-north-1","saucy","13.10 EOL","amd64","hvm:ebs-ssd","20140709","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-faa331c3\">ami-faa331c3</a>","hvm"],
["cn-north-1","saucy","13.10 EOL","amd64","hvm:instance-store","20140709","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-88a331b1\">ami-88a331b1</a>","hvm"],
["cn-north-1","saucy","13.10 EOL","amd64","ebs","20140709","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-8ca331b5\">ami-8ca331b5</a>","aki-9e8f1da7"],
["cn-north-1","saucy","13.10 EOL","i386","ebs","20140709","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-8aa331b3\">ami-8aa331b3</a>","aki-908f1da9"],
["cn-north-1","saucy","13.10 EOL","amd64","ebs-io1","20140709","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-80a331b9\">ami-80a331b9</a>","aki-9e8f1da7"],
["cn-north-1","saucy","13.10 EOL","i386","ebs-io1","20140709","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-8ea331b7\">ami-8ea331b7</a>","aki-908f1da9"],
["cn-north-1","saucy","13.10 EOL","amd64","ebs-ssd","20140709","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-84a331bd\">ami-84a331bd</a>","aki-9e8f1da7"],
["cn-north-1","saucy","13.10 EOL","i386","ebs-ssd","20140709","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-82a331bb\">ami-82a331bb</a>","aki-908f1da9"],
["cn-north-1","saucy","13.10 EOL","amd64","instance-store","20140709","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-96a331af\">ami-96a331af</a>","aki-9e8f1da7"],
["cn-north-1","saucy","13.10 EOL","i386","instance-store","20140709","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-94a331ad\">ami-94a331ad</a>","aki-908f1da9"],
["cn-north-1","trusty","14.04 LTS","amd64","hvm:ebs","20151015","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-4264f87b\">ami-4264f87b</a>","hvm"],
["cn-north-1","trusty","14.04 LTS","amd64","hvm:ebs-io1","20151015","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-aa64f893\">ami-aa64f893</a>","hvm"],
["cn-north-1","trusty","14.04 LTS","amd64","hvm:ebs-ssd","20151015","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-a664f89f\">ami-a664f89f</a>","hvm"],
["cn-north-1","trusty","14.04 LTS","amd64","hvm:instance-store","20151015","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-e66bf7df\">ami-e66bf7df</a>","hvm"],
["cn-north-1","trusty","14.04 LTS","amd64","ebs","20151015","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-d66bf7ef\">ami-d66bf7ef</a>","aki-9e8f1da7"],
["cn-north-1","trusty","14.04 LTS","i386","ebs","20151015","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-da6bf7e3\">ami-da6bf7e3</a>","aki-908f1da9"],
["cn-north-1","trusty","14.04 LTS","amd64","ebs-io1","20151015","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-0664f83f\">ami-0664f83f</a>","aki-9e8f1da7"],
["cn-north-1","trusty","14.04 LTS","i386","ebs-io1","20151015","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-2264f81b\">ami-2264f81b</a>","aki-908f1da9"],
["cn-north-1","trusty","14.04 LTS","amd64","ebs-ssd","20151015","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-5864f861\">ami-5864f861</a>","aki-9e8f1da7"],
["cn-north-1","trusty","14.04 LTS","i386","ebs-ssd","20151015","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-7264f84b\">ami-7264f84b</a>","aki-908f1da9"],
["cn-north-1","trusty","14.04 LTS","amd64","instance-store","20151015","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-f46bf7cd\">ami-f46bf7cd</a>","aki-9e8f1da7"],
["cn-north-1","trusty","14.04 LTS","i386","instance-store","20151015","<a href=\"https://console.amazonaws.cn/ec2/home?region=cn-north-1#launchAmi=ami-906bf7a9\">ami-906bf7a9</a>","aki-908f1da9"],
["us-gov-west-1","utopic","14.10 EOL","amd64","hvm:ebs","20150620","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-25fc9c06\">ami-25fc9c06</a>","hvm"],
["us-gov-west-1","utopic","14.10 EOL","amd64","hvm:ebs-io1","20150620","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-2bfc9c08\">ami-2bfc9c08</a>","hvm"],
["us-gov-west-1","utopic","14.10 EOL","amd64","hvm:ebs-ssd","20150620","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-33fc9c10\">ami-33fc9c10</a>","hvm"],
["us-gov-west-1","utopic","14.10 EOL","amd64","hvm:instance-store","20150620","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-cdfb9bee\">ami-cdfb9bee</a>","hvm"],
["us-gov-west-1","utopic","14.10 EOL","amd64","ebs","20150620","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-dbfb9bf8\">ami-dbfb9bf8</a>","aki-1de98d3e"],
["us-gov-west-1","utopic","14.10 EOL","i386","ebs","20150620","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-d7fb9bf4\">ami-d7fb9bf4</a>","aki-1fe98d3c"],
["us-gov-west-1","utopic","14.10 EOL","amd64","ebs-io1","20150620","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-dffb9bfc\">ami-dffb9bfc</a>","aki-1de98d3e"],
["us-gov-west-1","utopic","14.10 EOL","i386","ebs-io1","20150620","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-d9fb9bfa\">ami-d9fb9bfa</a>","aki-1fe98d3c"],
["us-gov-west-1","utopic","14.10 EOL","amd64","ebs-ssd","20150620","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-27fc9c04\">ami-27fc9c04</a>","aki-1de98d3e"],
["us-gov-west-1","utopic","14.10 EOL","i386","ebs-ssd","20150620","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-21fc9c02\">ami-21fc9c02</a>","aki-1fe98d3c"],
["us-gov-west-1","utopic","14.10 EOL","amd64","instance-store","20150620","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-cbfb9be8\">ami-cbfb9be8</a>","aki-1de98d3e"],
["us-gov-west-1","utopic","14.10 EOL","i386","instance-store","20150620","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-fdfb9bde\">ami-fdfb9bde</a>","aki-1fe98d3c"],
["us-gov-west-1","lucid","10.04 LTS","amd64","ebs","20150127","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-61375642\">ami-61375642</a>","aki-1de98d3e"],
["us-gov-west-1","lucid","10.04 LTS","i386","ebs","20150127","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-63375640\">ami-63375640</a>","aki-1fe98d3c"],
["us-gov-west-1","lucid","10.04 LTS","amd64","ebs-io1","20150127","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-65375646\">ami-65375646</a>","aki-1de98d3e"],
["us-gov-west-1","lucid","10.04 LTS","i386","ebs-io1","20150127","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-67375644\">ami-67375644</a>","aki-1fe98d3c"],
["us-gov-west-1","lucid","10.04 LTS","amd64","ebs-ssd","20150127","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-6937564a\">ami-6937564a</a>","aki-1de98d3e"],
["us-gov-west-1","lucid","10.04 LTS","i386","ebs-ssd","20150127","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-6b375648\">ami-6b375648</a>","aki-1fe98d3c"],
["us-gov-west-1","lucid","10.04 LTS","amd64","instance-store","20150127","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-973253b4\">ami-973253b4</a>","aki-1de98d3e"],
["us-gov-west-1","lucid","10.04 LTS","i386","instance-store","20150127","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-3f32531c\">ami-3f32531c</a>","aki-1fe98d3c"],
["us-gov-west-1","precise","12.04 LTS","amd64","hvm:ebs","20150930","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-6f70124c\">ami-6f70124c</a>","hvm"],
["us-gov-west-1","precise","12.04 LTS","amd64","hvm:ebs-io1","20150930","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-6d70124e\">ami-6d70124e</a>","hvm"],
["us-gov-west-1","precise","12.04 LTS","amd64","hvm:ebs-ssd","20150930","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-71701252\">ami-71701252</a>","hvm"],
["us-gov-west-1","precise","12.04 LTS","amd64","hvm:instance-store","20150930","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-17701234\">ami-17701234</a>","hvm"],
["us-gov-west-1","precise","12.04 LTS","amd64","ebs","20150930","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-1f70123c\">ami-1f70123c</a>","aki-1de98d3e"],
["us-gov-west-1","precise","12.04 LTS","i386","ebs","20150930","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-1b701238\">ami-1b701238</a>","aki-1fe98d3c"],
["us-gov-west-1","precise","12.04 LTS","amd64","ebs-io1","20150930","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-63701240\">ami-63701240</a>","aki-1de98d3e"],
["us-gov-west-1","precise","12.04 LTS","i386","ebs-io1","20150930","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-1d70123e\">ami-1d70123e</a>","aki-1fe98d3c"],
["us-gov-west-1","precise","12.04 LTS","amd64","ebs-ssd","20150930","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-67701244\">ami-67701244</a>","aki-1de98d3e"],
["us-gov-west-1","precise","12.04 LTS","i386","ebs-ssd","20150930","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-61701242\">ami-61701242</a>","aki-1fe98d3c"],
["us-gov-west-1","precise","12.04 LTS","amd64","instance-store","20150930","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-11701232\">ami-11701232</a>","aki-1de98d3e"],
["us-gov-west-1","precise","12.04 LTS","i386","instance-store","20150930","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-13701230\">ami-13701230</a>","aki-1fe98d3c"],
["us-gov-west-1","wily","15.10","amd64","hvm:ebs","20151029","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-aebad88d\">ami-aebad88d</a>","hvm"],
["us-gov-west-1","wily","15.10","amd64","hvm:ebs-io1","20151029","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-acbad88f\">ami-acbad88f</a>","hvm"],
["us-gov-west-1","wily","15.10","amd64","hvm:ebs-ssd","20151029","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-b0bad893\">ami-b0bad893</a>","hvm"],
["us-gov-west-1","wily","15.10","amd64","hvm:instance-store","20151029","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-1cbad83f\">ami-1cbad83f</a>","hvm"],
["us-gov-west-1","wily","15.10","amd64","ebs","20151029","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-60bad843\">ami-60bad843</a>","aki-1de98d3e"],
["us-gov-west-1","wily","15.10","amd64","ebs-io1","20151029","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-66bad845\">ami-66bad845</a>","aki-1de98d3e"],
["us-gov-west-1","wily","15.10","amd64","ebs-ssd","20151029","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-a8bad88b\">ami-a8bad88b</a>","aki-1de98d3e"],
["us-gov-west-1","wily","15.10","amd64","instance-store","20151029","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-0cbad82f\">ami-0cbad82f</a>","aki-1de98d3e"],
["us-gov-west-1","saucy","13.10 EOL","amd64","hvm:ebs","20140608","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-034c2b20\">ami-034c2b20</a>","hvm"],
["us-gov-west-1","saucy","13.10 EOL","amd64","hvm:ebs-io1","20140608","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-6f5a3d4c\">ami-6f5a3d4c</a>","hvm"],
["us-gov-west-1","saucy","13.10 EOL","amd64","hvm:ebs-ssd","20140608","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-73563150\">ami-73563150</a>","hvm"],
["us-gov-west-1","saucy","13.10 EOL","amd64","hvm:instance-store","20140608","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-374c2b14\">ami-374c2b14</a>","hvm"],
["us-gov-west-1","saucy","13.10 EOL","amd64","ebs","20140608","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-3d4c2b1e\">ami-3d4c2b1e</a>","aki-1de98d3e"],
["us-gov-west-1","saucy","13.10 EOL","i386","ebs","20140608","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-3f4c2b1c\">ami-3f4c2b1c</a>","aki-1fe98d3c"],
["us-gov-west-1","saucy","13.10 EOL","amd64","ebs-io1","20140608","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-655a3d46\">ami-655a3d46</a>","aki-1de98d3e"],
["us-gov-west-1","saucy","13.10 EOL","i386","ebs-io1","20140608","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-635a3d40\">ami-635a3d40</a>","aki-1fe98d3c"],
["us-gov-west-1","saucy","13.10 EOL","amd64","ebs-ssd","20140608","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-6b563148\">ami-6b563148</a>","aki-1de98d3e"],
["us-gov-west-1","saucy","13.10 EOL","i386","ebs-ssd","20140608","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-61563142\">ami-61563142</a>","aki-1fe98d3c"],
["us-gov-west-1","saucy","13.10 EOL","amd64","instance-store","20140608","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-314c2b12\">ami-314c2b12</a>","aki-1de98d3e"],
["us-gov-west-1","saucy","13.10 EOL","i386","instance-store","20140608","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-334c2b10\">ami-334c2b10</a>","aki-1fe98d3c"],
["us-gov-west-1","trusty","14.04 LTS","amd64","hvm:ebs","20151019","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-d6bbd9f5\">ami-d6bbd9f5</a>","hvm"],
["us-gov-west-1","trusty","14.04 LTS","amd64","hvm:ebs-io1","20151019","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-22b8da01\">ami-22b8da01</a>","hvm"],
["us-gov-west-1","trusty","14.04 LTS","amd64","hvm:ebs-ssd","20151019","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-30b8da13\">ami-30b8da13</a>","hvm"],
["us-gov-west-1","trusty","14.04 LTS","amd64","hvm:instance-store","20151019","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-e2bbd9c1\">ami-e2bbd9c1</a>","hvm"],
["us-gov-west-1","trusty","14.04 LTS","amd64","ebs","20151019","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-ecbbd9cf\">ami-ecbbd9cf</a>","aki-1de98d3e"],
["us-gov-west-1","trusty","14.04 LTS","i386","ebs","20151019","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-e6bbd9c5\">ami-e6bbd9c5</a>","aki-1fe98d3c"],
["us-gov-west-1","trusty","14.04 LTS","amd64","ebs-io1","20151019","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-f6bbd9d5\">ami-f6bbd9d5</a>","aki-1de98d3e"],
["us-gov-west-1","trusty","14.04 LTS","i386","ebs-io1","20151019","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-f0bbd9d3\">ami-f0bbd9d3</a>","aki-1fe98d3c"],
["us-gov-west-1","trusty","14.04 LTS","amd64","ebs-ssd","20151019","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-f8bbd9db\">ami-f8bbd9db</a>","aki-1de98d3e"],
["us-gov-west-1","trusty","14.04 LTS","i386","ebs-ssd","20151019","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-fabbd9d9\">ami-fabbd9d9</a>","aki-1fe98d3c"],
["us-gov-west-1","trusty","14.04 LTS","amd64","instance-store","20151019","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-5cbbd97f\">ami-5cbbd97f</a>","aki-1de98d3e"],
["us-gov-west-1","trusty","14.04 LTS","i386","instance-store","20151019","<a href=\"https://console.amazonaws-us-gov.com/ec2/home?region=us-gov-west-1#launchAmi=ami-58bbd97b\">ami-58bbd97b</a>","aki-1fe98d3c"],
]
}
---
Doc/ Config.Yml (doc/_config.yml)
destination: production
markdown: kramdown
highlighter: pygments
exclude: ['_stdlib_gen']
---
Doc/Ref/Language.Html (doc/ref/language.html.md)
---
layout: markdown
title: Language Reference
---
Language Reference
This page explains Jsonnet in detail. We assume basic familiarity with the language, so if you are just starting out, please go through the tutorial first. On the other hand, we do not try to cover 100% of the language here. If you need a more complete and precise description, please refer to the specification and the standard library documentation.
The Scope of the Jsonnet Project
Jsonnet is designed primarily for configuring complex systems. The standard use case is integrating multiple services which do not know about each other. Writing the configuration for each independently would result in massive duplication and most likely would be difficult to maintain. Jsonnet allows you to specify the configuration on your terms and programmatically set up all individual services.
If you are an application author, Jsonnet may free you from having to design your custom configuration format. The applications can simply consume JSON or other structured format and the users can specify their configuration in Jsonnet – a generic configuration language.
Jsonnet is a full programming language, so it can be used to implement arbitrary logic. However, it does not allow unrestricted IO (see Independence from the Environment), so it is practical for cases where precise control over input and output is a good thing. There are a couple of potential applications, other than configuration:
* Static site generation
* Embedded expression language
* Ad hoc JSON transformations – it makes sense to use Jsonnet for that if you already know it. Otherwise jq is arguably a better option (Jsonnet prioritizes clarity over terseness and convenience, which can be a disadvantage for one-off usage).
* Teaching – due to simplicity and principled approach.
What It Is, Not What It Does
Jsonnet is a purely functional language (with OO features). Programmers accustomed to mostly imperative languages such as Python, C++, Java or Go will need to change their mindset a bit.
One important difference is that you define things in terms of what they are rather than what they do. Consider a simple implementation of a map function:
local map(func, arr) =
if std.length(arr) == 0 then
[]
else
[func(arr[0])] + map(func, arr[1:])
;
// Example usage:
map(function(i) i * 2, [1, 2, 3, 4, 5])If you try to read it out loud, you get something like:
The result of mapping functionfuncover arrayarris either
1. an empty array, if array arr is empty2. the result of applying functionfuncto the first element ofarrfollowed by the mapping of the remaining elements, ifarris not empty.
Compare it to a traditional, imperative implementation which would read more like:
In order to map a functionfuncover arrayarr:
1. Create a copy of an arrayarr, callednewArr.
2. For each indexiin arraynewArr
* ReplacenewArr[i]withfuncapplied tonewArr[i].
3. Return newArr as the result.Jsonnet definitions are similar to definitions in mathematics. A great advantage of such style is that it frees you from constantly thinking about the state and the order of operations.
Expressions
Jsonnet programs are composed entirely out of expressions). There are no statements or special top-level declarations present in most other languages. For instance, imports, conditionals, functions, objects, and locals are all expressions.
Any kind of expression can be a Jsonnet program, it is not necessary to have a top-level object. For example 2+2, "foo" or local bar = 21; bar * 2 are all valid Jsonnet programs.
Expressions can be evaluated to produce a value. The evaluation does not have any side effects.
The value to which an expression evaluates depends on its environment – values of variables, to which the expression refers. For example expression x x depends on the value of x. Such expression is only valid in contexts where variable x is available, e.g. local x = 2; x x or function(x); x * x.
Jsonnet variables follow the rules of lexical scoping. The environment and consequently the meaning of variables in a given expression is statically determined:
local a = local x = 'a'; x;
local foo = local x = 'b'; a;
fooA special case of that is creating closures), such as the following:
local addNumber(number) = function(x) number + x;
local add2 = addNumber(2);
local add3 = addNumber(3);
[
add2(2),
add3(5)
]Values
Jsonnet has only seven types of values:
* null – only one value, namely null.
* boolean – two values, true and false.
* string – Unicode strings (sequences of Unicode codepoints).
* number – IEEE754 64-bit floating point number.
* function, pure functions which take values as arguments and return a value.
* array, a finite-length array of values.
* object, a superset of JSON objects with support for inheritance.
All Jsonnet values are immutable. It is not possible to change a value of a field of an object or an element of an array – you can only create a new one with the desired change applied.
You can check the type of any value using std.type.
Equivalence and Equality
We say that values a and b are equal if a == b evaluates to true and that they are unequal if a == b evaluates to false. Some pairs of values are neither equal or unequal, because functions cannot be checked for equality (and consequently some arrays and objects containing functions).
Values of different types are never considered equal – there is no implicit casting (unlike, for example, in JavaScript).
We say that values a and b are the same value, or equivalent if it is impossible to tell these values apart in any way in Jsonnet. More formally a and b are equivalent if there does not exist a Jsonnet function f such that exactly one of f(a) and f(b) results in an error.
In general, equivalent values may have different representations, and that may have performance implications, but does not affect the result.
Equivalent values of course cannot be unequal, but equal values may not be equivalent (e.g. { a: 1, b: 1} and {a: 1, b: self.a}).
Null
Null is the simplest type in Jsonnet. It has only one value – null.
There is no special handling of null, it is a value like any other.
In particular arrays can have null elements and objects can have null fields. The null value is equal only to the null value.
Boolean
Boolean has two values: true and false. They are the only values which can be used in if conditions.
String
Strings in Jsonnet are sequences of Unicode codepoints.
In most contexts a string can be treated as an array of one codepoint strings (e.g. std.length and the [] operator work like that). Comparisons (<, <=, >, >=) and equality checks (==, !=) also follow this pattern – in both cases codepoints will be compared lexicographically.
While similar, strings are not actually equivalent to arrays of codepoints. For example std.type("foo") != std.type(["f", "o", "o"]) and "foo" != ["f", "o", "o"]).
Unlike arrays, strings are strict, meaning that evaluating a string requires calculating all its contents.
Strings can be constructed as literals, slices of existing strings, concatenations of existing strings or converted from an array of Unicode codepoint numbers.
Number
Jsonnet numbers are 64-bit floating point numbers as defined in IEEE754 excluding nan and inf values. Operations resulting in infinity or not a number are errors.
Integers can be safely represented as a Jsonnet number in the range [-2^53 + 1,2^53 - 1]. This is a direct consequence of IEEE754 spec, with the requirements that a safe integer is representable exactly, and cannot be produced by rounding any other integer to fit the IEEE-754 representation. See also, the JavaScript Number.MAX_SAFE_INTEGER, Number.MIN_SAFE_INTEGER, and Number.isSafeInteger definitions.
Currently, the C++ and Go Jsonnet implementations restrict the arguments (inputs) to binary bitwise operations (the operators <<, >>, &, |, and ^) to the safe integer range.
Function
Functions in Jsonnet are functions in the mathematical sense. Each function has parameters and a body expression. The result of calling a function is equivalent to the result of evaluating its body with arguments introduced to the environment.
You can define a function with a function literal:
local func = function(x) x * 2;
func(21)Jsonnet has syntax sugar which allows a shorter, equivalent variant:
local func(x) = x * 2;
func(21)The arguments are not evaluated when a function is called. They are passed lazily and evaluated only when used. This allows expressing things which in other languages require built-in functionality or macros, such as short-circuit boolean operations:
local and3(a, b, c) = a && b && c;
and3(true, false, error "this one is never evaluated")The expression
error "message" raises an error with the provided message string. Thus, in this example, the values for a and b are evaluated because they are required to compute a && b. However, since a && b is false - there is no need to evaluate the value for c and the error is never thrown.
Functions in Jsonnet are referentially transparent, meaning that any function call can be replaced with its definition, without changing the meaning of the program. For example consider the following snippet:
local pow2(n) = if n == 0 then 1 else 2 * pow2(n - 1);
pow2(17)The call to function pow2 can be replaced with its definition as follows:
local pow2(n) = if n == 0 then 1 else 2 * pow2(n - 1);
local n = 17;
if n == 0 then 1 else 2 * pow2(n - 1)#### Function Parameters
The parameters can be either required or optional. In the definition, required and optional parameters can be mixed in any order. Optional parameters require specifying the default argument.
When calling a function, each argument can be passed either as named or as positional, but all positional arguments need to go before the named arguments.
For example the following program is valid:
local foo(x, y=1) = x + y;
[
foo(1),
foo(1, 1),
foo(x=1, y=1),
foo(y=1, x=1),
foo(x=1),
]It is recommended to always pass optional arguments as named (for readability). We also recommend to pass arguments as positional when all parameters are required, because the function author probably did not consider the parameter names as part of the stable interface.
(Sidenote: We are looking for a way to have explicit named-only or positional-only parameters in function signatures, without breaking backwards compatibility.)
Array
Arrays in Jsonnet are finite-length sequences of arbitrary values.
Values of different types can be mixed in an array. Individual array elements are lazy, meaning that evaluating an array does not cause evaluation of all arguments.
local arr = [error "a", 2+2, error "b"];
arr[1]In the example above 2+2 is evaluated, but the expressions for the other array elements are not. See: Rationale for Lazy Semantics.
There is no separate tuple type in Jsonnet. Arrays are used in contexts where tuples would be natural in other languages, for example for returning multiple values from a function.
The simplest way of creating an array is an array literal. It is simply a comma separated list of elements, such as [1, 2, "foo", 2 + 2].
The most flexible way of creating an array is std.makeArray(sz, func). It takes the size of the array to construct and a function which takes an index i and returns the i-th element. It is possible to build all other array functionality using this function. In practice, using more specialized functions is usually (but not always) more handy and results in a more efficient program.
Arrays can be concatenated using the operator +.
Arrays a and b are equal if they have equal length and for all indexes i, a[i] == b[i].
The comparison of arrays is lexicographic, so array a is smaller than b if a[i] < b[i] for some i and for all j < i, a[j] == b[j] or if a is a (shorter) prefix of b.
#### Array Comprehensions
Jsonnet offers array comprehensions which provide an elegant and easy to use syntax for mapping, filtering and taking Cartesian products of arrays.
In the simplest case a comprehension generates one element for each element of the source array. This is similar to using std.map.
[x * x for x in std.range(1, 10)]It is possible to add a filtering condition – an if component. Array elements are generated only when the condition is met.
[x for x in std.range(1, 10) if x % 3 == 0]If you add more than one for, an element will be generated for each combination of values from each loop. This corresponds to taking a Cartesian product of source arrays.
The first for is the outermost one and the last is the innermost one. In the following example for each value of x, all values of y are generated before proceeding to the next value of x.
[
[x, y]
for x in std.range(1, 3)
for y in std.range(1, 3)
]The domains for the subsequent for components can depend on the earlier ones:
[
[x, y]
for x in std.range(1, 3)
for y in std.range(x, 3)
]The variables introduced in the subsequent for components may shadow variables introduced in the earlier ones.
[
x
for x in std.range(1, 3)
for x in std.range(1, 3)
]The if and for components can be freely mixed. It almost always makes sense to put conditions as early as possible – this way unnecessary iterations of subsequent for components will be avoided.
[
[x, y]
for x in std.range(1, 10)
if x % 3 == 0
for y in std.range(1, 10)
if y % 2 == 0
]There is nothing "magical" about array comprehensions. They provide a more convenient syntax for what can be achieved using regular functions. In particular, they can always be "mechanically" translated to a series of std.flatMap calls and simple conditionals. For example, the following programs are equivalent:
[
[x * 2, y]
for x in [1, 2, 3, 4, 5]
for y in [1, 2, 3]
if x % 2 == 0
]std.flatMap(
function(x) std.flatMap(
function(y) if x % 2 == 0 then [[x * 2, y]] else [],
[1, 2, 3]
),
[1, 2, 3, 4, 5]
)Object
In the simplest case a Jsonnet object is a mapping from string keys to arbitrary values.
{
"foo": 1,
"bar": {
"arr": [1, 2, 3],
"number": 10 + 7,
}
}Jsonnet objects can be indexed either using . with an identifier or [] with an arbitrary expression.
local obj = {
"foo": 1,
"bar": {
"arr": [1, 2, 3],
"number": 10 + 7,
}
};
[
obj.foo,
obj["foo"],
obj["f" + "oo"]
]#### Inheritance
Jsonnet objects allow inheritance in the OOP sense, even though there are no classes or declarations. The inheritance is realized as an operation + which can be applied to any two objects. This might be surprising, because in mainstream languages the inheritance hierarchy is static.
For objects which are simple key-value mappings, inheritance is the same as replacing the respective fields from the first object with fields from the second object.
{
a: 1,
b: 2,
}
+
{
a: 3
}It is possible for one field to refer to other fields of the same object using self. When combining objects, it is possible to refer to the inherited fields using super.
local obj = {
name: "Alice",
greeting: "Hello, " + self.name,
};
[
obj,
obj + { name: "Bob" },
obj + { greeting: super.greeting + "!"},
obj + { name: "Bob", greeting: super.greeting + "!"},
]In general, it is useful to think about a Jsonnet object as a stack of layers. A layer consists of fields. An object literal or an object comprehension is a single-layer object. Object inheritance A + B creates a new object with B layers on top of A layers.
Reference to a field through self corresponds to looking for the field starting from the top of the stack and going towards the bottom until the field is found. Reference through super searches for the field starting from the layer below the current one.
Because the layers can be added to other objects using inheritance, each field can be a part of multiple objects and have a different value in each of them. Therefore, fields can only be evaluated in the context of the "current object". This context is determined when an object is indexed from outside – then a field from a specific object is requested and all its transitive self and super references can be resolved in this particular stack of layers.
#### Emulating Functions
It is easy to emulate functions using objects. While it is bad style, it illustrates the power of dynamic inheritance.
local add = {
params: {
a: error "please provide argument a",
b: error "please provide argument b",
},
result: self.params.a + self.params.b
};
(add + { params: { a: 1, b: 2} }).result#### Properties
Let D, E, F range over arbitrary objects. Let ≡ mean equivalence.
* Associativity always holds:
(D + E) + F ≡ D + (E + F)* Identity always holds:
D + { } ≡ D
{ } + D ≡ D* Idempotence holds when
D does not contain super:D + D ≡ D* Commutativity holds when
D and E do not contain super and have no common fields:D + E ≡ E + D#### Self-Referencing Objects
Objects can be self-referencing even without OOP features, simply because variable definitions can be recursive:
local obj = {
name: "Alice",
greeting: "Hello, " + obj.name,
}; objReferencing obj like that is different from using self. Here obj is a specific object with a fixed set of fields and their values, and consequently obj.name is a fixed value. On the other hand, self is not a value, but a reference to the "current" object and self.name can be overridden.
[
local obj = {
name: "Alice",
greeting: "Hello, " + obj.name + "!",
}; obj + {name: "Bob"},
{
name: "Alice",
greeting: "Hello, " + self.name + "!",
} + {name: "Bob"},
]Going back to the stack of layers analogy, self does not know the stack – it will perform the lookup in the "current object". On the other hand obj is a specific stack of layers – a reference from outside.
Both kinds of behavior are useful. You need to make a decision whether to refer to the fields of the objects as they are currently defined or to allow overriding.
#### Visibilities
Jsonnet objects have a concept of visibility which affects manifestation (printing out objects) and equality checks. This concept has nothing to do with the notion of private/public fields from other languages.
There are three kinds of visibility that an object field may have:
* : – Default, visible unless parent's field with the same name is hidden.
* :: – Hidden.
* ::: – Forced Visible.
Example:
{
default: "foo",
default_then_hidden: "foo",
hidden:: "foo",
hidden_then_default:: "foo",
hidden_then_visible:: "foo",
visible::: "foo",
visible_then_hidden::: "foo",
}
+
{
default_then_hidden:: "foo",
hidden_then_default: "foo",
hidden_then_visible::: "foo",
visible_then_hidden:: "foo",
}The value of a field is irrelevant for determining its visibility.
It is possible to check field's visibility using std.objectHas and std.objectHasAll standard library functions. The first checks if an object has a visible field with a specified name and the second checks if an object has a field regardless of its visibility.
#### Nested Field Inheritance
By default nested objects are completely replaced when overriden. For example:
{
nested_object: {
field_of_the_nested_object: "will disappear"
},
not_touched: "still there",
}
+
{
nested_object: {
new_field: "will be there"
}
}results in:
{
"nested_object": {
"new_field": "will be there"
},
"not_touched": "still there"
}It is possible to explicitly make the new field inherit from the old field instead by using +:, +:: or +::: as the field separator in the right-hand side object.
Example:
{
a: ['a'],
b: ['c'],
c: { a: 'a', c: 'c' },
} +
{
a: ['a2'],
b+: ['c2'],
c+: { a: 'a2', b: 'b2' },
d+: { d: 'd' },
}resulting in:
{
"a": [
"a2"
],
"b": [
"c",
"c2"
],
"c": {
"a": "a2",
"b": "b2",
"c": "c"
},
"d": {
"d": "d"
}
}The field separators +:, +::, +::: are relevant for nested objects (which will be inherited) and arrays (which will be concatenated). The number of colons determines the visibility of the field.
It is not an error to have +: without a matching field on the left hand side. In such cases the right hand side field is used directly. E.g. both { foo +: { bar: "baz" } } and {} + { foo +: { bar: "baz" } } evaluate to { foo: { bar: "baz" } }.
In all cases, these field separators are just syntax sugar and the same results can be achieved with super. More precisely { a +: b } is equivalent to { a: if "a" in super then super.a + b else b } (and similarly +:: and +:::).
#### Object Equality
Two objects are equal when their respective visible fields are equal. Hidden fields are ignored, which allows ignoring the "helper" parts of the object when evaluating equality.
Checking equality of some objects is not allowed when the objects contain visible fields that cannot be checked for equality. For example:
{
a: function() 42
} == {
a: function() 42
}Usually, fields which cannot be checked for equality (e.g. functions) should be hidden, because they cannot be manifested, unless a custom manifestation method is used.
#### Object Locals
It is possible to declare a local inside an object, which will be available to all fields.
{
local foo = 1,
aaa: foo,
bbb: foo,
}Object locals end with a comma, instead of semicolon (like fields). They are not independent expressions, but parts of an object literal expression. Formally, they are equivalent to declaring the locals in each field separately, but interpreters are likely to implement this more efficiently.
Object locals can access self and super – they are "inside the object". As a consequence of this, object locals are not available in Field Name Expressions, because (in general) they depend on the object being already created, which requires the field names to be already known.
#### Object Assertions
Objects may contain assertions, which are boolean expressions that are checked when any of the object's fields are evaluated.
local base = {
assert self.a > 0 : "a must be positive",
a: self.x * self.y,
};base + { x: 5, y: -5 }
When this expression is manifested, the assertion will be checked, and in this case fail (since a evaluates to -25), producing an error with the provided message.
Note that object assertions are only checked if one or more of an object's fields are evaluated. Since Jsonnet is a lazy language (see Rationale for Lazy Semantics), an object might be defined but never evaluated if none of its fields are needed to produce the final output, and in this case the object's assertions are not checked. Listing an object's field names (for example, using the std.objectFields or std.objectFieldsAll standard library functions) does not evaluate the field values.
#### Field Name Expressions
Field names of Jsonnet objects can be arbitrary strings and can be calculated dynamically when the object is created.
{
a: 1,
"a a": 2,
"ąę": 3,
["aaa" + "bbb"]: 4,
}When an object is evaluated, all the field names are evaluated. This means they cannot refer to object locals, self, or super. In other words, their scope is "outside of the object".
#### Conditional Fields
If a field name evaluates to null, that field value is discarded and not included in the resulting object. The following code will evaluate to the empty object:
{
[if 1 == 2 then "foo"]: "bar",
}Independence from the Environment (Hermeticity)
Jsonnet programs are pure computations, which have no side-effects and which depend only on the values which were explicitly passed.
In particular, the behavior is independent from the setup of the system on which it runs (operating system, environment variables, filesystem, ...).
The semantics are defined almost entirely in mathematical terms, with a few exceptions, where Jsonnet depends on well-established portable standards (such as IEEE754 and Unicode).
It is possible to pass data from the environment, but only explicitly, by using abstractions provided by Jsonnet. This has multiple benefits:
* Fewer surprises – The behavior will not change when you change something about your system. In other languages any part of the program can depend on anything. In Jsonnet you need to worry only about what is explicitly passed.
* Easier to run on other machines (e.g. development or CI) – You can pass any values to the program, which allows generating any configuration on any system.
* Longevity – Jsonnet programs don't need to change as other technologies go out of date.
* Portability – it is reasonably easy to create an implementation of Jsonnet for any platform.
Passing Data to Jsonnet
Consider Self-Contained Programs
Before using any of the methods described below, it is worth considering if a fully self-contained setup is viable.
In this style, the configuration is a set of .jsonnet and .libsonnet files. Every output file corresponds to a .jsonnet file and all shared setup is in .libsonnet files. Any raw data can be placed in additional files and imported using importstr or importbin. Usually, all code and data is committed to a repository.
Sometimes the generated configuration is also checked in, which makes it easy to spot unintended changes.
Sometimes it is not practical, though. For example if the produced configuration needs to contain secrets, which you do not want to commit alongside code, it is necessary to pass them from outside.
Top-Level Arguments (TLAs)
The preferred way of passing data to Jsonnet is through Top-level Arguments. This mechanism allows calling a Jsonnet program like a function.
Consider the following simple program add.jsonnet:
function(a, b) a + bIt can be called jsonnet add.jsonnet --tla-code a=1 --tla-code b=2. The result of the evaluation will be 3.
Any program evaluating to a function can be called with TLAs.
jsonnet -e 'std.map' --tla-code 'func=function(x) x * x' --tla-code arr='[1, 2, 3]'Functions are the canonical way of parameterizing values, so this method of passing values to programs fits well with the rest of the language. For example, the programs intended for use with TLAs can also be imported from other Jsonnet files and called as normal functions:
local add = import 'add.jsonnet';
add(1, 2)External Variables (ExtVars)
Alternatively, you can use ExtVars. ExtVars are available globally in the program, including in any imported library. Contrary to their name, they are not variables in the same sense as variables introduced by local. They have a separate namespace and can be accessed through std.extVar function.
Consider the following program foo.jsonnet:
std.extVar("foo")It can be called with
jsonnet foo.jsonnet --ext-str foo=bar.Referring to an undeclared External Variable is an error. There is no way to check if an ExtVar exists dynamically. There is no way to set External Variables from within a Jsonnet program – they need to be set before execution.
Since ExtVars are global, they create composability problems. It is easy to imagine two libraries depending on the same ExtVar, but with a different meaning. For this reason we strongly discourage authors of generic libraries from using ExtVars. If a global configuration for a library is desired, you can make your library a function which has parameter for any necessary configuration. This is less of a problem in "final" setups – in individual configuration or in opinionated frameworks, which enforce the structure anyway.
---
Doc/Third Party/CodeMirror/README (doc/third_party/CodeMirror/README.md)
CodeMirror
[](https://travis-ci.org/codemirror/CodeMirror)
[](https://www.npmjs.org/package/codemirror)
[](https://gitter.im/codemirror/CodeMirror)
Funding status:
CodeMirror is a versatile text editor implemented in JavaScript for
the browser. It is specialized for editing code, and comes with over
100 language modes and various addons that implement more advanced
editing functionality. Every language comes with fully-featured code
and syntax highlighting to help with reading and editing complex code.
A rich programming API and a CSS theming system are available for
customizing CodeMirror to fit your application, and extending it with
new functionality.
You can find more information (and the
manual) on the project
page. For questions and discussion, use the
discussion forum.
See
CONTRIBUTING.md
for contributing guidelines.
The CodeMirror community aims to be welcoming to everybody. We use the
Contributor Covenant
(1.1) as our code of
conduct.
Quickstart
To build the project, make sure you have Node.js installed (at least version 6)
and then npm install. To run, just open index.html in your
browser (you don't need to run a webserver). Run the tests with npm test.
---
Doc/Third Party/Js Yaml/README (doc/third_party/js-yaml/README.md)
JS-YAML - YAML 1.2 parser / writer for JavaScript
=================================================
[](https://travis-ci.org/nodeca/js-yaml)
[](https://www.npmjs.org/package/js-yaml)
__Online Demo__
This is an implementation of YAML, a human-friendly data
serialization language. Started as PyYAML port, it was
completely rewritten from scratch. Now it's very fast, and supports 1.2 spec.
Installation
------------
YAML module for node.js
npm install js-yamlCLI executable
If you want to inspect your YAML files from CLI, install js-yaml globally:
npm install js-yaml#### Usage
usage: js-yaml [-h] [-v] [-c] [-t] filePositional arguments:
file File with YAML document(s)
Optional arguments:
-h, --help Show this help message and exit.
-v, --version Show program's version number and exit.
-c, --compact Display errors in compact mode
-t, --trace Show stack trace on error
Bundled YAML library for browsers
`` html
<script src="esprima.js"></script>
<script src="js-yaml.min.js"></script>
<script type="text/javascript">
var doc = jsyaml.load('greeting: hello\nname: world');
</script>
Browser support was done mostly for the online demo. If you find any errors - feel!!js/function
free to send pull requests with fixes. Also note, that IE and other old browsers
needs es5-shims to operate.Notes:
1. We have no resources to support browserified version. Don't expect it to be
well tested. Don't expect fast fixes if something goes wrong there.
2.in browser bundle will not work by default. If you really needesprima
it - loadparser first (via amd or directly).!!bin
3.in browser will returnArray, because browsers do not supportBuffer
node.jsand adding Buffer shims is completely useless on practice.
API
---Here we cover the most 'useful' methods. If you need advanced details (creating
your own tags), see wiki and
examples for more
info.
yaml = require('js-yaml');
fs = require('fs');
// Get document, or throw exception on error
try {
var doc = yaml.safeLoad(fs.readFileSync('/home/ixti/example.yml', 'utf8'));
console.log(doc);
} catch (e) {
console.log(e);
}
stringsafeLoad (string [ , options ])
Recommended loading way. Parses
as single YAML document. Returns a JavaScriptYAMLException
object or throwson error. By default, does not support regexps,filename
functions and undefined. This method is safe for untrusted data.options:
-
_(default: null)_ - string to be used as a file path inonWarning
error/warning messages.
-_(default: null)_ - function to call on warning messages.schema
Loader will throw on warnings if this function is not provided.
-_(default:DEFAULT_SAFE_SCHEMA)_ - specifies a schema to use.FAILSAFE_SCHEMA
-- only strings, arrays and plain objects:JSON_SCHEMA
http://www.yaml.org/spec/1.2/spec.html#id2802346
-- all JSON-supported types:CORE_SCHEMA
http://www.yaml.org/spec/1.2/spec.html#id2803231
-- same asJSON_SCHEMA:DEFAULT_SAFE_SCHEMA
http://www.yaml.org/spec/1.2/spec.html#id2804923
-- all supported YAML types, without unsafe ones!!js/undefined
(,!!js/regexpand!!js/function):DEFAULT_FULL_SCHEMA
http://yaml.org/type/
-- all supported YAML types.json
-_(default: false)_ - compatibility with JSON.parse behaviour. If true, then duplicate keys in a mapping will override values rather than throwing an error.NullNOTE: This function does not understand multi-document sources, it throws
exception on those.NOTE: JS-YAML does not support schema-specific tag resolution restrictions.
So, the JSON schema is not as strictly defined in the YAML specification.
It allows numbers in any notation, useandNULLasnull, etc.safeLoad()
The core schema also has no such restrictions. It allows binary notation for integers.
load (string [ , options ])
Use with care with untrusted sources. The same as
but usesDEFAULT_FULL_SCHEMAby default - adds some JavaScript-specific types:!!js/function,!!js/regexpand!!js/undefined. For untrusted sources, you
must additionally validate object structure to avoid injections:
var untrusted_code = '"toString": !<tag:yaml.org,2002:js/function> "function (){very_evil_thing();}"';
// I'm just converting that string, what could possibly go wrong?
require('js-yaml').load(untrusted_code) + ''
safeLoad()safeLoadAll (string [, iterator] [, options ])
Same as
, but understands multi-document sources. Appliesiteratorto each document if specified, or returns array of documents.
var yaml = require('js-yaml');
yaml.safeLoadAll(data, function (doc) {
console.log(doc);
});
safeLoadAll()loadAll (string [, iterator] [ , options ])
Same as
but usesDEFAULT_FULL_SCHEMAby default.object
safeDump (object [ , options ])
Serializes
as a YAML document. UsesDEFAULT_SAFE_SCHEMA, so it willskipInvalid
throw an exception if you try to dump regexps or functions. However, you can
disable exceptions by setting theoption totrue.indentoptions:
-
_(default: 2)_ - indentation width to use (in spaces).skipInvalid
-_(default: false)_ - do not throw on invalid types (like functionflowLevel
in the safe schema) and skip pairs and single values with such types.
-(default: -1) - specifies level of nesting, when to switch fromstyles
block to flow style for collections. -1 means block style everwhere
-- "tag" => "style" map. Each tag may have own set of styles.schema
-_(default:DEFAULT_SAFE_SCHEMA)_ specifies a schema to use.sortKeys
-_(default:false)_ - iftrue, sort keys when dumping YAML. If alineWidth
function, use the function to sort the keys.
-_(default:80)_ - set max line width.noRefs
-_(default:false)_ - iftrue, don't convert duplicate objects into referencesnoCompatMode
-_(default:false)_ - iftruedon't try to be compatible with oldercondenseFlow
yaml versions. Currently: don't quote "yes", "no" and so on, as required for YAML 1.1
-_(default:false)_ - iftrueflow sequences will be condensed, omitting the space betweena, b. Eg.'[a,b]', and omitting the space betweenkey: valueand quoting the key. Eg.'{"a":b}'Can be useful when using yaml for pretty URL query params as spaces are %-encoded.=>The following table show availlable styles (e.g. "canonical",
"binary"...) available for each tag (.e.g. !!null, !!int ...). Yaml
output is shown on the right side after(default setting) or->:
!!null
"canonical" -> "~"
"lowercase" => "null"
"uppercase" -> "NULL"
"camelcase" -> "Null"
!!int
"binary" -> "0b1", "0b101010", "0b1110001111010"
"octal" -> "01", "052", "016172"
"decimal" => "1", "42", "7290"
"hexadecimal" -> "0x1", "0x2A", "0x1C7A"
!!bool
"lowercase" => "true", "false"
"uppercase" -> "TRUE", "FALSE"
"camelcase" -> "True", "False"
!!float
"lowercase" => ".nan", '.inf'
"uppercase" -> ".NAN", '.INF'
"camelcase" -> ".NaN", '.Inf'
Example:safeDump (object, {
'styles': {
'!!null': 'canonical' // dump null as ~
},
'sortKeys': true // sort object keys
});
safeDump()dump (object [ , options ])
Same as
but without limits (usesDEFAULT_FULL_SCHEMAby default).
Supported YAML types
--------------------The list of standard YAML tags and corresponding JavaScipt types. See also
YAML tag discussion and
YAML types repository.
!!null '' # null
!!bool 'yes' # bool
!!int '3...' # number
!!float '3.14...' # number
!!binary '...base64...' # buffer
!!timestamp 'YYYY-...' # date
!!omap [ ... ] # array of key-value pairs
!!pairs [ ... ] # array or array pairs
!!set { ... } # array of objects with given keys and null values
!!str '...' # string
!!seq [ ... ] # array
!!map { ... } # object
JavaScript-specific tags!!js/regexp /pattern/gim # RegExp
!!js/undefined '' # Undefined
!!js/function 'function () {...}' # Function
CaveatstoString()
-------Note, that you use arrays or objects as key in JS-YAML. JS does not allow objects
or arrays as keys, and stringifies (by callingmethod) them at the
moment of adding them.
---
? [ foo, bar ]
: - baz
? { foo: bar }
: - baz
- baz
{ "foo,bar": ["baz"], "[object Object]": ["baz", "baz"] }
Also, reading of properties on implicit block mapping keys is not supported yet.
So, the following YAML document cannot be loaded.&anchor foo:
foo: bar
*anchor: duplicate key
baz: bat
*anchor: duplicate key
Breaking changes in 2.x.x -> 3.x.xrequire()
----------------------------------If you have not used __custom__ tags or loader classes and not loaded yaml
files via, no changes are needed. Just upgrade the library.require('xxxx.yml')Otherwise, you should:
1. Replace all occurrences of
byfs.readFileSync()+yaml.safeLoad()
.develop
2. rewrite your custom tags constructors and custom loader
classes, to conform the new API. See
examples and
wiki for details.
License
-------View the LICENSE file
(MIT).---
Doc/Third Party/MathJax 2.7.2/README (doc/third_party/MathJax-2.7.2/README.md)
MathJax
Beautiful math in all browsers
MathJax is an open-source JavaScript display engine for LaTeX, MathML, and
AsciiMath notation that works in all modern browsers. It was designed with
the goal of consolidating the recent advances in web technologies into a
single, definitive, math-on-the-web platform supporting the major browsers
and operating systems. It requires no setup on the part of the user (no
plugins to download or software to install), so the page author can write
web documents that include mathematics and be confident that users will be
able to view it naturally and easily. Simply include MathJax and some
mathematics in a web page, and MathJax does the rest.Some of the main features of MathJax include:
- High-quality display of LaTeX, MathML, and AsciiMath notation in HTML pages
- Supported in most browsers with no plug-ins, extra fonts, or special
setup for the reader- Easy for authors, flexible for publishers, extensible for developers
- Supports math accessibility, cut-and-paste interoperability, and other
advanced functionality- Powerful API for integration with other web applications
See <http://www.mathjax.org/> for additional details.
Installation and Usage
The MathJax installation and usage documentation is available in a
separate GitHub repository athttps://github.com/mathjax/mathjax-docs
The HTML versions are now available at
http://docs.mathjax.org/
where it is possible for you to submit corrections and modifications
directly to the documentation on line.
Community
The main MathJax website is <http://www.mathjax.org>, and it includes
announcements and other important information. MathJax is maintained and
distributed on GitHub at <http://github.com/mathjax/MathJax>. A user forum
for asking questions and getting assistance is hosted at Google, and the
bug tracker is hosted at GitHub:Bug tracker: <https://github.com/mathjax/MathJax/issues>
MathJax-Users Group: <http://groups.google.com/group/mathjax-users>Before reporting a bug, please check that it has not already been reported.
Also, please use the bug tracker for reporting bugs rather than the help forum.---
Doc/Third Party/MathJax 2.7.2/Bower.Json (doc/third_party/MathJax-2.7.2/bower.json)
{
"name": "MathJax",
"main": "./MathJax.js",
"homepage": "http://www.mathjax.org/",
"ignore": [
"/.*",
"node_modules",
"components"
],
"keywords": ["math", "js", "LaTeX", "MathML", "AsciiMath"]
}---
Doc/Third Party/MathJax 2.7.2/Composer.Json (doc/third_party/MathJax-2.7.2/composer.json)
{
"name": "mathjax/mathjax",
"type": "library",
"description": "MathJax is an open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all modern browsers.",
"keywords": ["math", "js", "LaTeX", "MathML", "AsciiMath"],
"homepage": "http://www.mathjax.org/",
"license": "Apache-2.0",
"authors": [
{
"name": "MathJax Consortium",
"homepage": "https://github.com/mathjax"
}
]
}---
Doc/Third Party/MathJax 2.7.2/CONTRIBUTING (doc/third_party/MathJax-2.7.2/CONTRIBUTING.md)
Contributing to MathJax
You are interested in giving us a hand? That's awesome! We've put together some brief guidelines that should help you get started quickly and easily.
There are lots and lots of ways to get involved, this document covers:
* reporting an issue
* bug reports
* feature requests
* change requests
* working on MathJax core
* key branches and tags
* submitting pull requests
* testing and quality assurance
* writing documentation
* translation
* Conduct
Reporting An Issue
If you're about to raise an issue because you think you've found a
problem with MathJax, or you'd like to make a request for a new
feature in the codebase, or any other reason… please read this first.The GitHub issue tracker is the preferred channel for bug reports,
feature requests, change requests and submitting pull
requests, but please respect the following restrictions:* Please search for existing issues. Help us keep duplicate issues
to a minimum by checking to see if someone has already reported your
problem or requested your idea.* Please do not use the issue tracker for personal support
requests (use the MathJax User Group).* Please be civil. Keep the discussion on topic and respect the
opinions of others. See also our Conduct GuidelinesBug Reports
A bug is a _demonstrable problem_ that is caused by the code in the repository.
Good bug reports are extremely helpful - thank you!Guidelines for bug reports:
1. Use the GitHub issue search — check if the issue has already been
reported.2. Check if the issue has been fixed — look for closed issues in the
current milestone or try to reproduce it
using the latestbranch. Please note that we only pack MathJax for releases, so on thedevelopbranch you have to use/unpacked/MathJax.jsetc. to test.[...]/unpacked/MathJax.js3. Share a live sample of the problem — without a live page it is usually impossible to debug problems; see also the Bug Report Template below.
4. Isolate the problem — a live sample is a starting point but if you want to speed things up create a reduced test
case. Be specific about your setup (browser, OS versions etc). Use services like jsbin, CodePen, JSfiddle to make collaboration on minimal test cases easier for everyone. Use the unpacked copy of MathJax (etc.) for better debugging.5. Include a screenshot/cast as a last resort — Is your issue about a layout
or design feature / bug but hard to reproduce or isolate? Then please provide a screenshot or screencast. Tools like LICEcap or SauceLabs allow you to quickly and easily record a screencasts. Make it an animated gif, embed it directly into your GitHub issue -- kapow!6. Use the Bug Report template below or click this
link
to start creating a bug report with the template automatically.A good bug report shouldn't leave others needing to chase you up for
more information. Be sure to include the details of your environment.Here is a real example
Template Example (click to use):
Short and descriptive example bug report title
Issue Summary
A summary of the issue and the browser/OS environment in which it occurs. If
suitable, include the steps required to reproduce the bug.
Steps to Reproduce
1. This is the first step
2. This is the second step
3. Further steps, etc.
Any other information you want to share that is relevant to the issue
being reported. Especially, why do you consider this to be a bug? What
do you expect to happen instead?
Technical details:
* MathJax Version: 2.3 (latest commit: f3aaf3a2a3e964df2770dc4aaaa9c87ce5f47e2c)
* Client OS: Mac OS X 10.8.4
* Browser: Chrome 29.0.1547.57
developFeature Requests
Feature requests are welcome. Before you submit one be sure to have:
1. Read the
Roadmaps,
use the GitHub search and check the feature hasn't already been
requested.
2. Take a moment to think about whether your idea fits with the scope
and aims of the project, or if it might better fit being a custom
extension.
3. Remember, it's up to you to make a strong case to convince the
project's leaders of the merits of this feature. Please provide as
much detail and context as possible, this means explaining the use
case and why it is likely to be common.
4. Clearly indicate whether this is a feature request for MathJax
core, input & output jax, or extensions.
Change Requests
Change requests cover both architectural and functional changes to how
MathJax works. If you have an idea for a new or different dependency,
a refactor, or an improvement to a feature, etc - please be sure to:1. Use the GitHub search and check someone else didn't get there first
2. Take a moment to think about the best way to make a case for, and
explain what you're thinking. Are you sure this shouldn't really be
a bug report or a feature
request? Is it really one idea or is it many?
What's the context? What problem are you solving? Why is what you
are suggesting better than what's already there? Does it fit with
the Roadmap?Working on MathJax core
You want to contribute code? Fantastic! Let's get you started.
Key Branches & Tags
To get it out of the way:
- develop is
the development branch. All work on the next release happens here so
you should generally branch off. Do NOT use this branch
for a production site.
- master contains the latest
release of MathJax. This branch may be used in production. Do
NOT use this branch to work on MathJax's source.Submitting Pull Requests
Pull requests are awesome. If you're looking to raise a PR for
something which doesn't have an open issue, please think carefully
about raising an issue which your PR can close,
especially if you're fixing a bug. This makes it more likely that
there will be enough information available for your PR to be properly
tested and merged.##### Need Help?
If you're not completely clear on how to submit / update / do Pull
Requests, please check out our source control
policies. For
more insights, chech the excellent in depth Git Workflow
guide from
Ghost, in particular* Ghost Workflow guide: commit messages
Testing and Quality Assurance
Never underestimate just how useful quality assurance is. If you're
looking to get involved with the code base and don't know where to
start, checking out and testing a pull request is one of the most
useful things you could do.If you want to get involved with testing MathJax, there is a set of QA
Documentation in our testing
framework.Essentially though, check out the latest develop
branch, take it for a spin, and if you find
anything odd, please follow the bug report guidelines
and let us know!#### Checking out a Pull Request
These are some excellent
instructions on
configuring your GitHub repository to allow you to checkout pull
requests in the same way as branches:
<https://gist.github.com/piscisaureus/3342247>.
Writing documentation
MathJax's main documentation can be found at docs.mathjax.org.
The source of the docs is hosted in the
mathjax/mathjax-docs repo here on GitHub.The documentation is generated using Sphinx-doc and hosted on
Read the docs.
You can clone the repo and submit pull requests following the
pull-request guidelines.
Translation
If you wish to add or update translations of MathJax, please do it on
TranslateWiki.net
(and while you're there you can help other open source projects,
too, because you're awesome!).For bug reports and other questions that don't fit on
TranslateWiki.net, head over to the
mathjax/mathjax-i18n
repository.Conduct
We are committed to providing a friendly, safe and welcoming environment for
all, regardless of gender, sexual orientation, disability, ethnicity, religion,
or similar personal characteristic.Please be kind and courteous. There's no need to be mean or rude.
Respect that people have differences of opinion and that every design or
implementation choice carries a trade-off and numerous costs. There is seldom
a right answer, merely an optimal answer given a set of values and
circumstances.Please keep unstructured critique to a minimum. If you have solid ideas you
want to experiment with, make a fork and see how it works.We will exclude you from interaction if you insult, demean or harass anyone.
That is not welcome behaviour. We interpret the term "harassment" as
including the definition in the
Citizen Code of Conduct;
if you have any lack of clarity about what might be included in that concept,
please read their definition. In particular, we don't tolerate behavior that
excludes people in socially marginalized groups.Private harassment is also unacceptable. No matter who you are, if you feel
you have been or are being harassed or made uncomfortable by a community
member, please contact one of the channel ops or any of the
MathJax core team
immediately. Whether you're a regular contributor or a newcomer, we care about
making this community a safe place for you and we've got your back.Likewise any spamming, trolling, flaming, baiting or other attention-stealing
behaviour is not welcome.We also suggest to read discourse's
rulesReferences
* We heavily borrowed from Mozilla and Ghost -- thank you!
* https://github.com/TryGhost/Ghost/blob/master/CONTRIBUTING.md
* https://github.com/mozilla/rust/wiki/Note-development-policy
* https://github.com/jden/CONTRIBUTING.md/blob/master/CONTRIBUTING.md
* http://blog.discourse.org/2013/03/the-universal-rules-of-civilized-discourse/---
Doc/Third Party/MathJax 2.7.2/Package.Json (doc/third_party/MathJax-2.7.2/package.json)
{
"name": "mathjax",
"version": "2.7.2",
"description": "Beautiful math in all browsers. MathJax is an open-source JavaScript display engine for LaTeX, MathML, and AsciiMath notation that works in all browsers.",
"keywords": [
"math",
"svg",
"mathml",
"tex",
"latex",
"asciimath",
"browser",
"browser-only"
],
"maintainers": [
"MathJax Consortium <[email protected]> (http://www.mathjax.org)"
],
"bugs": {
"url": "http://github.com/mathjax/MathJax/issues"
},
"license": "Apache-2.0",
"repository": {
"type": "git",
"url": "git://github.com/mathjax/MathJax.git"
},
"main": "./unpacked/MathJax.js",
"scripts": {
"test": "echo 'No tests here!'"
}
}---
Doc/Third Party/MathJax 2.7.2/.Travis.Yml (doc/third_party/MathJax-2.7.2/.travis.yml)
language: node_js
node_js:
- stable
sudo: false
script:
- npm install
- npm test
branches:
only:
- "/^\\d+\\.\\d+/"
deploy:
provider: npm
email: [email protected]
api_key:
secure: inYGps+hr2lFFtZ93ee0InerDO+ljwsHM7qBGUCwTfEZyvAbaZ8Xa/tkLc/s/IdhzEW79ZTTL/kd/r+SIoTAYqsSOCYtN+lvcK0fLxfzSaTVmr9E44UStz63Yl5wDPD8iq4ultQVLDp3Rbdo5KL9aMWKawA/pNV+QPpawXuUfkk=
on:
tags: true---
Doc/Third Party/MathJax 2.7.2/Docs/README (doc/third_party/MathJax-2.7.2/docs/README.txt)
The source files for the documentation are now kept in a separate
GitHub repository athttps://github.com/mathjax/mathjax-docs
The HTML versions are now available at
http://docs.mathjax.org/
where it is possible for you to submit corrections and modifications
directly to the documentation on line.---
Doc/Third Party/MathJax 2.7.2/Docs/Source/README (doc/third_party/MathJax-2.7.2/docs/source/README.txt)
The source files for the documentation are now kept in a separate
GitHub repository athttps://github.com/mathjax/mathjax-docs
The HTML versions are now available at
http://docs.mathjax.org/
where it is possible for you to submit corrections and modifications
directly to the documentation on line.---
Doc/Third Party/MathJax 2.7.2/Fonts/HTML CSS/Asana Math/OFL (doc/third_party/MathJax-2.7.2/fonts/HTML-CSS/Asana-Math/OFL.txt)
Copyright (c) 2007, Apostolos Syropoulos (<[email protected]),
with Reserved Font Name Asana Math.Copyright (c) 2013, The MathJax Consortium,
with Reserved Font Name Asana MathJax.This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation."Reserved Font Name" refers to any names specified as such after the
copyright statement(s)."Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s)."Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment."Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.TERMINATION
This license becomes null and void if any of the above conditions are
not met.DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.---
Doc/Third Party/MathJax 2.7.2/Fonts/HTML CSS/Gyre Pagella/GUST FONT LICENSE (doc/third_party/MathJax-2.7.2/fonts/HTML-CSS/Gyre-Pagella/GUST-FONT-LICENSE.txt)
% This is a preliminary version (2006-09-30), barring acceptance from
% the LaTeX Project Team and other feedback, of the GUST Font License.
% (GUST is the Polish TeX Users Group, http://www.gust.org.pl)
%
% For the most recent version of this license see
% http://www.gust.org.pl/fonts/licenses/GUST-FONT-LICENSE.txt
% or
% http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt
%
% This work may be distributed and/or modified under the conditions
% of the LaTeX Project Public License, either version 1.3c of this
% license or (at your option) any later version.
%
% Please also observe the following clause:
% 1) it is requested, but not legally required, that derived works be
% distributed only after changing the names of the fonts comprising this
% work and given in an accompanying "manifest", and that the
% files comprising the Work, as listed in the manifest, also be given
% new names. Any exceptions to this request are also given in the
% manifest.
%
% We recommend the manifest be given in a separate file named
% MANIFEST-<fontid>.txt, where <fontid> is some unique identification
% of the font family. If a separate "readme" file accompanies the Work,
% we recommend a name of the form README-<fontid>.txt.
%
% The latest version of the LaTeX Project Public License is in
% http://www.latex-project.org/lppl.txt and version 1.3c or later
% is part of all distributions of LaTeX version 2006/05/20 or later.---
Doc/Third Party/MathJax 2.7.2/Fonts/HTML CSS/Gyre Pagella/MANIFEST GyrePagellaMathJax (doc/third_party/MathJax-2.7.2/fonts/HTML-CSS/Gyre-Pagella/MANIFEST-GyrePagellaMathJax.txt)
Font: Gyre Pagella MathJax
Copyright 2012--2013 for TeX Gyre math extensions by B. Jackowski,
P. Strzelczyk and P. Pianowski (on behalf of TeX Users Groups).Copyright 2013 The MathJax Consortium
This work can be freely used and distributed under
the GUST Font License (GFL -- see GUST-FONT-LICENSE.txt)
which is actually an instance of the LaTeX Project Public License
(LPPL -- see http://www.latex-project.org/lppl.txt).Below, in three sections required by the GUST Font License,
font names and file names specific for the Gyre Pagella MathJax
font are listed.NOTE: the names of the directories are not subject to the renaming
restrictions.1. Fonts whose names should be changed in derived works as requested
by clause 1 of GUST-FONT-LICENSE.txtGyre Pagella MathJax
GyrePagellaMathJax-*2. Files whose names should be changed in derived works as requested
by clause 1 of GUST-FONT-LICENSE.txt/GyrePagellaMathJax-.otf
3. Files whose names need not be changed in derived works as requested
by clause 1 of GUST-FONT-LICENSE.txtAll the other files not mentioned above.
---
Doc/Third Party/MathJax 2.7.2/Fonts/HTML CSS/Gyre Termes/GUST FONT LICENSE (doc/third_party/MathJax-2.7.2/fonts/HTML-CSS/Gyre-Termes/GUST-FONT-LICENSE.txt)
% This is a preliminary version (2006-09-30), barring acceptance from
% the LaTeX Project Team and other feedback, of the GUST Font License.
% (GUST is the Polish TeX Users Group, http://www.gust.org.pl)
%
% For the most recent version of this license see
% http://www.gust.org.pl/fonts/licenses/GUST-FONT-LICENSE.txt
% or
% http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt
%
% This work may be distributed and/or modified under the conditions
% of the LaTeX Project Public License, either version 1.3c of this
% license or (at your option) any later version.
%
% Please also observe the following clause:
% 1) it is requested, but not legally required, that derived works be
% distributed only after changing the names of the fonts comprising this
% work and given in an accompanying "manifest", and that the
% files comprising the Work, as listed in the manifest, also be given
% new names. Any exceptions to this request are also given in the
% manifest.
%
% We recommend the manifest be given in a separate file named
% MANIFEST-<fontid>.txt, where <fontid> is some unique identification
% of the font family. If a separate "readme" file accompanies the Work,
% we recommend a name of the form README-<fontid>.txt.
%
% The latest version of the LaTeX Project Public License is in
% http://www.latex-project.org/lppl.txt and version 1.3c or later
% is part of all distributions of LaTeX version 2006/05/20 or later.---
Doc/Third Party/MathJax 2.7.2/Fonts/HTML CSS/Gyre Termes/MANIFEST GyreTermesMathJax (doc/third_party/MathJax-2.7.2/fonts/HTML-CSS/Gyre-Termes/MANIFEST-GyreTermesMathJax.txt)
Font: Gyre Termes MathJax
Copyright 2012--2013 for TeX Gyre math extensions by B. Jackowski,
P. Strzelczyk and P. Pianowski (on behalf of TeX Users Groups).Copyright 2013 The MathJax Consortium
This work can be freely used and distributed under
the GUST Font License (GFL -- see GUST-FONT-LICENSE.txt)
which is actually an instance of the LaTeX Project Public License
(LPPL -- see http://www.latex-project.org/lppl.txt).Below, in three sections required by the GUST Font License,
font names and file names specific for the Gyre Termes MathJax
font are listed.NOTE: the names of the directories are not subject to the renaming
restrictions.1. Fonts whose names should be changed in derived works as requested
by clause 1 of GUST-FONT-LICENSE.txtGyre Termes MathJax
GyreTermesMathJax-*2. Files whose names should be changed in derived works as requested
by clause 1 of GUST-FONT-LICENSE.txt/GyreTermesMathJax-.otf
3. Files whose names need not be changed in derived works as requested
by clause 1 of GUST-FONT-LICENSE.txtAll the other files not mentioned above.
---
Doc/Third Party/MathJax 2.7.2/Fonts/HTML CSS/Latin Modern/GUST FONT LICENSE (doc/third_party/MathJax-2.7.2/fonts/HTML-CSS/Latin-Modern/GUST-FONT-LICENSE.txt)
% This is a preliminary version (2006-09-30), barring acceptance from
% the LaTeX Project Team and other feedback, of the GUST Font License.
% (GUST is the Polish TeX Users Group, http://www.gust.org.pl)
%
% For the most recent version of this license see
% http://www.gust.org.pl/fonts/licenses/GUST-FONT-LICENSE.txt
% or
% http://tug.org/fonts/licenses/GUST-FONT-LICENSE.txt
%
% This work may be distributed and/or modified under the conditions
% of the LaTeX Project Public License, either version 1.3c of this
% license or (at your option) any later version.
%
% Please also observe the following clause:
% 1) it is requested, but not legally required, that derived works be
% distributed only after changing the names of the fonts comprising this
% work and given in an accompanying "manifest", and that the
% files comprising the Work, as listed in the manifest, also be given
% new names. Any exceptions to this request are also given in the
% manifest.
%
% We recommend the manifest be given in a separate file named
% MANIFEST-<fontid>.txt, where <fontid> is some unique identification
% of the font family. If a separate "readme" file accompanies the Work,
% we recommend a name of the form README-<fontid>.txt.
%
% The latest version of the LaTeX Project Public License is in
% http://www.latex-project.org/lppl.txt and version 1.3c or later
% is part of all distributions of LaTeX version 2006/05/20 or later.---
Doc/Third Party/MathJax 2.7.2/Fonts/HTML CSS/Latin Modern/MANIFEST LatinModernMathJax (doc/third_party/MathJax-2.7.2/fonts/HTML-CSS/Latin-Modern/MANIFEST-LatinModernMathJax.txt)
Font: Latin Modern MathJax
Copyright 2012--2013 for TeX Gyre math extensions by B. Jackowski,
P. Strzelczyk and P. Pianowski (on behalf of TeX Users Groups).Copyright 2013 The MathJax Consortium
This work can be freely used and distributed under
the GUST Font License (GFL -- see GUST-FONT-LICENSE.txt)
which is actually an instance of the LaTeX Project Public License
(LPPL -- see http://www.latex-project.org/lppl.txt).Below, in three sections required by the GUST Font License,
font names and file names specific for the Latin Modern MathJax
font are listed.NOTE: the names of the directories are not subject to the renaming
restrictions.1. Fonts whose names should be changed in derived works as requested
by clause 1 of GUST-FONT-LICENSE.txtLatin Modern MathJax
LatinModernMathJax-*2. Files whose names should be changed in derived works as requested
by clause 1 of GUST-FONT-LICENSE.txt/LatinModernMathJax-.otf
3. Files whose names need not be changed in derived works as requested
by clause 1 of GUST-FONT-LICENSE.txtAll the other files not mentioned above.
---
Doc/Third Party/MathJax 2.7.2/Fonts/HTML CSS/Neo Euler/OFL (doc/third_party/MathJax-2.7.2/fonts/HTML-CSS/Neo-Euler/OFL.txt)
Copyright (c) 1997, 2009 American Mathematical Society (http://www.ams.org),
with Reserved Font Names EUEX10, EUEX7, EUEX8, EUEX9, EUFB10, EUFB5, EUFB7,
EUFM10, EUFM5, EUFM7, EURB10, EURB5, EURB7, EURM10, EURM5, EURM7, EUSB10,
EUSB5, EUSB7, EUSM10, EUSM5, EUSM7, CMEX10, CMSY5, CMSY7.Copyright (c) 2009, 2010 Khaled Hosny ([email protected]).
Copyright (c) 2013 The MathJax Consortium,
with Reserved Font Name Neo Euler MathJax.This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation."Reserved Font Name" refers to any names specified as such after the
copyright statement(s)."Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s)."Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment."Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.TERMINATION
This license becomes null and void if any of the above conditions are
not met.DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.---
Doc/Third Party/MathJax 2.7.2/Fonts/HTML CSS/STIX Web/OFL (doc/third_party/MathJax-2.7.2/fonts/HTML-CSS/STIX-Web/OFL.txt)
Copyright (c) 2001-2010 by the STI Pub Companies, consisting of the American
Institute of Physics, the American Chemical Society, the American Mathematical
Society, the American Physical Society, Elsevier, Inc., and The Institute of
Electrical and Electronic Engineers, Inc. (www.stixfonts.org), with Reserved
Font Name STIX Fonts, STIX FontsTM is a trademark of The Institute of
Electrical and Electronics Engineers, Inc.Portions copyright (c) 1998-2003 by MicroPress, Inc. (www.micropress-inc.com),
with Reserved Font Name TM Math. To obtain additional mathematical fonts,
please contact MicroPress, Inc., 68-30 Harrow Street, Forest Hills, NY 11375,
USA – Phone: (718) 575-1816.Portions copyright (c) 1990 by Elsevier, Inc.
Copyright (c) 2013 by The MathJax Consortium,
with Reserved Font Name STIX MathJaxThis Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation."Reserved Font Name" refers to any names specified as such after the
copyright statement(s)."Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s)."Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment."Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.TERMINATION
This license becomes null and void if any of the above conditions are
not met.DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.---
Editors/Atom/README (editors/atom/README.md)
Please find atom support in https://github.com/google/language-jsonnet
---
Editors/Vim/README (editors/vim/README.md)
Please find the Vim filetype plugin in https://github.com/google/vim-jsonnet
---
Examples/Cmake/CMakeLists (examples/cmake/CMakeLists.txt)
cmake_minimum_required(VERSION 3.15...4.1)
project(jsonnet_cmake_example VERSION 1.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)Can use add_subdirectory to point to the jsonnet source.
Disable tests (force BUILD_TEST OFF) so that jsonnet doesn't pull in GoogleTest.
Use EXCLUDE_FROM_ALL so that targets won't be built if nothing depends on them.
set(BUILD_TESTS OFF CACHE BOOL "" FORCE)
add_subdirectory(
${CMAKE_CURRENT_SOURCE_DIR}/../..
${CMAKE_CURRENT_BINARY_DIR}/jsonnet
EXCLUDE_FROM_ALL
)add_executable(jsonnet_cmake_example main.cpp)
target_link_libraries(jsonnet_cmake_example PRIVATE jsonnet_cpp_static)---
Include/CMakeLists (include/CMakeLists.txt)
set(LIB_HEADER
${LIB_HEADER}
${CMAKE_CURRENT_SOURCE_DIR}/libjsonnet.h
${CMAKE_CURRENT_SOURCE_DIR}/libjsonnet++.h
${CMAKE_CURRENT_SOURCE_DIR}/libjsonnet_fmt.h
PARENT_SCOPE)---
Java Comparison/README (java_comparison/README.md)
Jsonnet to Java
---------------This little code example shows how a Jsonnet config using object-oriented features can be
transliterated (in a structure-preserving manner) to use the object-oriented features of Java. Not
all Jsonnet programs can be converted to Java because Jsonnet has mixins and virtual inner classes.
Execution order is also different, as Jsonnet is lazy and Java is eager. Likewise, Java programs
cannot all be converted to Jsonnet because they have mutable state and I/O.However said all this, there is a significant overlap between the two languages. This example fits
within that overlap.
Execute Jsonnet code
--------------------
jsonnet sub-template.jsonnet
Execute Java code
-----------------We pipe into jsonnet - to pretty-print the output JSON.
javac *.java && java Test | jsonnet -
`
Structure of Java code
----------------------
The translation is as as follows:
* Everything is typed as Object, as Jsonnet is dynamically typed. Everything is public, as is implicit in Jsonnet.
* Jsonnet arrays are Object[], and primitives are Boolean / Double / String.
* Jsonnet objects are singleton instances of named Java classes that extend JsonnetObject.
* Jsonnet fields become Java methods with no parameters (fields are virtual in Jsonnet).
* Jsonnet hidden field status is represented with a method nonHiddenFields which returns a set of
field names. Other fields are considered hidden.
* There are 2 liberties taken -- output strings are not escaped properly, and the JSON is printed on
a single line instead of pretty-printed with indenting.
The Java code has a number of auxiliary framework functions to provide Jsonnet functionality that is
implicit in the Jsonnet language.
* The Test class chooses an object and manifests it to stdout.
* The JsonnetValue class implements manifestation, as a visitor over possible JSON values that
builds JSON strings. For objects, it iterates over the non-hidden fields and manifests each value
by reflectively calling that function.
Reference JSON
--------------
For reference, the JSON that should be output is given in sub-template.json
---
Java Comparison/Sub Template.Json (java_comparison/sub-template.json)
{
"apiVersion": "v1",
"kind": "ReplicationController",
"spec": {
"replicas": 2,
"spec": {
"containers": [
{
"env": [
{
"name": "ACCESSTOKEN",
"value": "xxxxx"
}
],
"image": "gcr.io/cooltool-1009/pipeline_image@sha256:....",
"name": "twitter-to-redis"
}
]
}
}
}
---
Stdlib/CMakeLists (stdlib/CMakeLists.txt)
add_executable(to_c_array EXCLUDE_FROM_ALL to_c_array.cpp)
configure_target_cc_props(to_c_array)
add_custom_command(
COMMENT "Packing std.jsonnet into std.jsonnet.h"
COMMAND
to_c_array
"${CMAKE_CURRENT_SOURCE_DIR}/std.jsonnet"
"${CMAKE_CURRENT_BINARY_DIR}/std.jsonnet.h"
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/std.jsonnet.h"
MAIN_DEPENDENCY std.jsonnet
DEPENDS to_c_array)
add_library(stdlib_h INTERFACE "${CMAKE_CURRENT_BINARY_DIR}/std.jsonnet.h")
target_include_directories(stdlib_h INTERFACE "${CMAKE_CURRENT_BINARY_DIR}")
---
Test Suite/README (test_suite/README.md)
Test programs
Run
./run_tests.sh to run the full suite and report results.The tests are executed with very aggressive garbage collection parameters. A full garbage
collection cycle is run on every allocation. This means if an object is freed by the GC but still
referenced (because the reference was not from the stack / heap) then the error can be caught in
valgrind.
The output of each test (merging
stdout and stderr with 2>&1) should match its .golden file. If a
test has no .golden file, the test should return "true". If a test's name begins with "error." then
its exit code is expected to be 1, otherwise it should be 0.If a test is changed, and its golden output needs to be updated (e.g. line numbers in stack traces
no-longer match up) then run
./refresh_golden.sh <thetest.jsonnet>---
Test Suite/CMakeLists (test_suite/CMakeLists.txt)
find_program(BASH bash)
if (BASH STREQUAL "BASH-NOTFOUND")
message(WARNING "Bash not found, can't run regression tests.")
else()
add_test(
NAME regression_test
COMMAND ${BASH} ${CMAKE_CURRENT_SOURCE_DIR}/run_tests.sh
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
set_tests_properties(
regression_test
PROPERTIES
ENVIRONMENT JSONNET_BIN=$<TARGET_FILE:jsonnet>)
endif()
---
Third Party/Rapidyaml/README (third_party/rapidyaml/README.md)
Vendoring
This uses the 'single header' release of Rapid YAML.
Download from: https://github.com/biojppm/rapidyaml/releases/tag/v0.10.0
rapidyaml-0.10.0.hpprapidyaml.cpp instantiates the library as a single translation unit.
---
.Github/Workflows/Build And Test.Yml (.github/workflows/build_and_test.yml)
name: Build and Test
on:
pull_request:
types: [opened, reopened, synchronize, ready_for_review, review_requested]
branches-ignore:
- "gh-pages"
push:
branches:
- "master"
- "prepare-release"
tags:
- v*
workflow_dispatch:
permissions:
contents: read
jobs:
check_code_format:
name: Check code formatting
runs-on: "ubuntu-22.04"
# The code currently doesn't pass formatting.
# Enable this workflow job once it does, to detect regressions.
if: false
steps:
- uses: actions/checkout@v4
- name: Check clang-format (make test-formatting)
run: |
make test-formatting
plain_makefile:
name: Build and test using plain Makefile
runs-on: "ubuntu-22.04"
steps:
- uses: actions/checkout@v4
- name: Add system tools
run: |
sudo apt-get update && sudo apt-get install libgtest-dev help2man
- name: Build (make all)
run: |
make all
- name: Test (make test)
run: |
make test
python_module:
name: Build and test Python module
runs-on: "ubuntu-22.04"
strategy:
fail-fast: false
matrix:
# Python 3.6 isn't available on the ubuntu-22.04 GitHub runner
# (which is the oldest Ubuntu runner still available)
# Python 3.7 is too old for the version of setuptools that we request.
# (and we want that setuptools to be able to set certain compiler options correctly)
# Python 3.8 is the oldest we can easily support, I think.
# Note Python 3.8 and 3.9 are already _past_ end of life: https://devguide.python.org/versions/
# 3.8 EOL was 07 Oct 2024
# 3.9 EOL was 31 Oct 2025
python_version: ["3.8", "3.10", "3.14"]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "${{ matrix.python_version }}"
- name: Build
run: |
pip install build
python -m build --sdist --wheel
- name: Test
run: |
python -m venv --clear trial &&
cd trial &&
source bin/activate &&
pip install ../dist/jsonnet-*.whl &&
python3 ../python/_jsonnet_test.py
cmake_build:
name: Build and test using CMake
runs-on: "ubuntu-22.04"
steps:
- uses: actions/checkout@v4
- name: Configure (cmake)
run: |
cmake -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -B "${{github.workspace}}/build"
- name: Build (cmake --build)
working-directory: ${{github.workspace}}/build
run: |
cmake --build .
- name: Test (ctest))
working-directory: ${{github.workspace}}/build
run: |
ctest --output-on-failure
bazel_build:
name: Build and test using Bazel
runs-on: "ubuntu-22.04"
steps:
- uses: actions/checkout@v4
- name: Build
run: |
bazelisk build --lockfile_mode=error -c opt //cmd:all
- name: Test
run: |
bazelisk test --lockfile_mode=error //...
bazel_use_module:
name: Build Bazel example
runs-on: "ubuntu-22.04"
strategy:
fail-fast: false
matrix:
bazel_version: ["7.", "8.", "9.*"]
steps:
- uses: actions/checkout@v4
- name: Build
env:
USE_BAZEL_VERSION: ${{ matrix.bazel_version }}
run: |
cd examples/bazel
bazelisk build --lockfile_mode=off //...
cmake_example:
name: Build CMake example
runs-on: "ubuntu-22.04"
steps:
- uses: actions/checkout@v4
- name: Build
run: |
cd examples/cmake
BUILD_DIR="$(mktemp -d)"
cmake -GNinja -DCMAKE_BUILD_TYPE=Debug -S . -B "${BUILD_DIR}" && \
cmake --build "${BUILD_DIR}" -- -v && \
${BUILD_DIR}/jsonnet_cmake_example
---
.Github/Workflows/Doc Update.Yml (.github/workflows/doc_update.yml)
name: Rebuild Docs
on:
pull_request:
types: [opened, reopened, synchronize, ready_for_review, review_requested]
branches-ignore:
- "gh-pages"
push:
branches:
- "master"
workflow_dispatch:
inputs:
build_wasm:
description: "Rebuild libjsonnet.wasm from source"
default: false
type: boolean
required: false
build_wasm_from_branch:
description: "go-jsonnet branch, tag or SHA to build from"
default: "master"
type: string
required: false
permissions:
contents: read
jobs:
build_libjsonnet_wasm:
name: Build libjsonnet.wasm for website
if: ${{ inputs.build_wasm }}
runs-on: "ubuntu-24.04"
outputs:
libjsonnet_wasm_sha256: ${{ steps.build.outputs.libjsonnet_wasm_sha256 }}
libjsonnet_wasm_artifact_id: ${{ steps.upload-wasm.outputs.artifact_id }}
steps:
- uses: actions/checkout@v6
with:
repository: google/go-jsonnet
ref: ${{ inputs.build_wasm_from_branch }}
submodules: false
- uses: actions/cache@v5
with:
path: |
~/.cache/bazel
~/.cache/bazelisk
key: ${{ runner.os }}-bazel-cache
- id: build
run: |
bazelisk test --lockfile_mode=error //...
bazelisk build --lockfile_mode=error //cmd/wasm:libjsonnet.wasm
WHERE="$(bazelisk cquery //cmd/wasm:libjsonnet.wasm --output files)"
cp "${WHERE}" ./
{ printf 'libjsonnet_wasm_sha256='; sha256sum --binary ./libjsonnet.wasm; } >> "$GITHUB_OUTPUT"
- name: Upload libjsonnet.wasm
id: upload-wasm
uses: actions/upload-artifact@v4
with:
path: ./libjsonnet.wasm
name: libjsonnet-wasm
if-no-files-found: "error"
retention-days: 4
include-hidden-files: false
build_website:
name: Build website
# Ordering dependency - this must run after building libjsonnet.wasm.
needs: build_libjsonnet_wasm
# Don't run if libjsonnet.wasm build _failed_ or the workflow cancelled, but run if it was skipped.
if: always() && !failure() && !cancelled()
runs-on: "ubuntu-24.04"
outputs:
diff_status: ${{ steps.diff-generated.outputs.diff_status }}
# Note upload-pages-artifact output name is artifact_id (with underscore).
pages_artifact_id: ${{ steps.upload-pages-package.outputs.artifact_id }}
# Note upload-artifact output name is artifact-id (with dash).
branch_content_artifact_id: ${{ steps.upload-full-archive.outputs.artifact-id }}
git_tree_hash: ${{ steps.diff-generated.outputs.git_tree_hash }}
steps:
- uses: actions/checkout@v6
- name: Setup Pages
if: ${{ github.repository == 'google/jsonnet' }}
uses: actions/configure-pages@v5
- name: Create Gemfile
run: |
echo $'source "https://rubygems.org"\n\ngem "jekyll"\n' > Gemfile
- name: Setup Ruby and Jekyll
uses: ruby/setup-ruby@8d27f39a5e7ad39aebbcbd1324f7af020229645c # v1.287.0
with:
ruby-version: "4.0.1"
bundler-cache: true
- name: Cache jsonnet binary
id: cache-jsonnet-binary
uses: actions/cache@v5
with:
key: jsonnet-bin-${{ hashFiles('include/', 'core/', 'cmd/', 'cpp/', 'third_party//*', 'stdlib/std.jsonnet') }}
path: ./jsonnet
- name: Build jsonnet binary
if: ${{ steps.cache-jsonnet-binary.outputs.cache-hit != 'true' }}
run: |
make jsonnet
- id: get_built_libjsonnet_wasm
continue-on-error: true
uses: actions/download-artifact@v7
with:
artifact-ids: ${{ needs.build_libjsonnet_wasm.outputs.libjsonnet_wasm_artifact_id }}
path: built_libjsonnet_wasm
- name: Set up output dir
id: make-output-dir
run: |
WORKDIR="$(mktemp -d)"
# If the workflow runs on a fork that doesn't have a gh-pages branch
# (which should be most forks) then we still want to be able to build
# the docs (so the repo owner can examine them), but we have no baseline.
# So we just build as though this is the first time.
if git fetch origin gh-pages; then
git worktree add --no-checkout --detach "$WORKDIR"/work FETCH_HEAD
else
echo "Repo has no gh-pages! Creating new orphan branch instead."
git worktree add --orphan -b gh-pages "$WORKDIR"/work
fi
echo "doc_output_dir=$WORKDIR" >> "$GITHUB_OUTPUT"
- name: Build website
env:
WORKDIR: ${{ steps.make-output-dir.outputs.doc_output_dir }}
WANT_BUILT_LIBJSONNET_WASM_PATH: ${{ steps.get_built_libjsonnet_wasm.outputs.download-path }}
WANT_BUILT_LIBJSONNET_WASM_SHA256: ${{ needs.build_libjsonnet_wasm.outputs.libjsonnet_wasm_sha256 }}
run: |
tools/scripts/update_web_content.sh
bundler exec jekyll build -s doc -d "$WORKDIR"/work
cd "$WORKDIR"/work
if [[ -z "${WANT_BUILT_LIBJSONNET_WASM_SHA256}" ]]; then
# Keep existing libjsonnet.wasm.
git checkout HEAD -- js/libjsonnet.wasm || echo "Could not find existing js/libjsonnet.wasm"
else
# Use a newly build libjsonnet.wasm.
cp "${WANT_BUILT_LIBJSONNET_WASM_PATH}"/libjsonnet.wasm ./js/libjsonnet.wasm
# Safety check - check that we transferred the file correctly.
echo "${WANT_BUILT_LIBJSONNET_WASM_SHA256}" | (cd ./js && sha256sum --check --strict)
fi
# Want a .nojekyll file while we're still publishing by pushing to gh-pages branch.
touch .nojekyll
git add .
- name: Diff docs
id: diff-generated
env:
WORKDIR: ${{ steps.make-output-dir.outputs.doc_output_dir }}
run: |
cd "$WORKDIR"/work
if git rev-parse --quiet --verify HEAD > /dev/null; then
git diff --cached --stat
# Only show the first 5000 lines of the diff output, for sanity.
git diff --cached | head -n5000
if git diff-index --quiet HEAD; then
echo "Generated docs are identical to existing gh-pages branch."
echo "diff_status=clean" >> "$GITHUB_OUTPUT"
else
echo "Generated docs differ from existing gh-pages branch."
echo "diff_status=changed" >> "$GITHUB_OUTPUT"
fi
else
echo "No HEAD revision; probably on an orphan branch. Skipping diff step."
echo "diff_status=changed" >> "$GITHUB_OUTPUT"
fi
TREE_SHA1=$(git write-tree)
echo "Computed sha1 for new gh-pages tree: $TREE_SHA1"
echo "git_tree_hash=$TREE_SHA1" >> "$GITHUB_OUTPUT"
git archive --format=tar -o ../gh-pages-content.tar "$TREE_SHA1"
- name: Upload full archive
id: upload-full-archive
if: ${{ steps.diff-generated.outputs.diff_status == 'changed' }}
uses: actions/upload-artifact@v4
with:
path: ${{ steps.make-output-dir.outputs.doc_output_dir }}/gh-pages-content.tar
name: full-gh-pages-content
if-no-files-found: "error"
retention-days: 4
include-hidden-files: true
- name: Upload Pages package
id: upload-pages-package
if: ${{ github.repository == 'google/jsonnet' && steps.diff-generated.outputs.diff_status == 'changed' }}
uses: actions/upload-pages-artifact@v4
with:
path: ${{ steps.make-output-dir.outputs.doc_output_dir }}/work/
push_pages_branch:
name: Update gh-pages branch
needs: build_website
if: always() && github.repository == 'google/jsonnet' && contains(fromJSON('["push", "workflow_dispatch"]'), github.event_name) && needs.build_website.result == 'success' && needs.build_website.outputs.diff_status == 'changed'
permissions:
contents: write
environment:
name: pages-via-branch-push
runs-on: "ubuntu-24.04"
steps:
- uses: actions/checkout@v6
with:
ref: gh-pages
path: repo
- uses: actions/download-artifact@v7
with:
artifact-ids: ${{ needs.build_website.outputs.branch_content_artifact_id }}
path: built
- name: Extract and push
env:
WANT_TREE_SHA1: ${{ needs.build_website.outputs.git_tree_hash }}
GIT_AUTHOR_NAME: "github-actions[bot]"
GIT_AUTHOR_EMAIL: "41898282+github-actions[bot]@users.noreply.github.com"
GIT_COMMITTER_NAME: "github-actions[bot]"
GIT_COMMITTER_EMAIL: "41898282+github-actions[bot]@users.noreply.github.com"
run: |
[[ ! -z "$WANT_TREE_SHA1" ]] || {
>&2 echo "did not get valid sha1 hash for expected git tree from builder job"
exit 1
}
cd repo
rm --one-file-system -r -- $(git ls-tree --name-only HEAD)
echo "Cleared working dir. Content is now:"
ls -R "$GITHUB_WORKSPACE"
echo "Unpacking artifact from builder job."
tar -xf ../built/gh-pages-content.tar
git add .
git diff --cached --stat
UNPACKED_TREE_SHA1=$(git write-tree)
echo "Expect tree SHA1: $WANT_TREE_SHA1 (computed in build step)"
echo "Unpacked tree SHA1: $UNPACKED_TREE_SHA1"
[[ "$WANT_TREE_SHA1" = "$UNPACKED_TREE_SHA1" ]] || {
>&2 echo "builder-produced tree differs from extracted tree"
exit 1
}
git commit -m 'Update docs.'
git log -n1
git push
publish_pages:
name: Direct publish pages
needs: build_website
if: false && github.repository == 'google/jsonnet' && contains(fromJSON('["push", "workflow_dispatch"]'), github.event_name) && needs.build_website.result == 'success' && needs.build_website.outputs.diff_status == 'changed'
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: "ubuntu-24.04"
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
---
.Github/Workflows/Publish Python.Yml (.github/workflows/publish-python.yml)
name: Build and Publish Python Package
Be very careful granting extra permissions here, as this workflow uses third party actions.
Prefer to pin to exact commits for third-party actions. I'm making an exception for actions
maintained by GitHub itself.
For now, just trigger this workflow manually.
on:
workflow_dispatch:
inputs:
upload_to_pypi:
description: "Upload generate package files to PyPI"
required: true
type: boolean
pypi_environment:
description: "Which PyPI instance to publish to"
required: true
type: choice
options:
- testpypi
- pypi
jobs:
build_sdist:
name: Build Python sdist
runs-on: ubuntu-24.04
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.8"
cache: "pip"
- run: pip install 'build==1.2.2'
- name: Build sdist
run: python3 -m build --sdist
- uses: actions/upload-artifact@v4
with:
name: sdist
path: ./dist/*.gz
if-no-files-found: error
build_wheels:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, windows-latest, macos-14, macos-latest]
permissions:
contents: read
steps:
- uses: actions/checkout@v4
- name: Build wheels
uses: pypa/cibuildwheel@298ed2fb2c105540f5ed055e8a6ad78d82dd3a7e # v3.3.1
env:
# CIBuildWheel itself no longer supports earlier than Python 3.8, which is
# the earliest we try to support here. Also likely cibuildwheel will soon
# drop support for 3.8, see https://github.com/pypa/cibuildwheel/issues/2685
CIBW_SKIP: "-win32 -manylinux_i686 *-musllinux_i686"
CIBW_TEST_COMMAND: >
python {package}/python/_jsonnet_test.py
- uses: actions/upload-artifact@v4
with:
name: cibw-wheels-${{ matrix.os }}
path: ./wheelhouse/*.whl
if-no-files-found: error
upload_to_pypi:
name: "Upload packages to PyPI"
needs: [build_sdist, build_wheels]
runs-on: ubuntu-24.04
if: "${{ inputs.upload_to_pypi }}"
permissions:
contents: read
id-token: write # Needed for PyPI Trusted Publishing
environment:
name: "${{ inputs.pypi_environment }}"
url: "${{ inputs.pypi_environment == 'pypi' && 'https://pypi.org/p/jsonnet' || 'https://test.pypi.org/p/jsonnet' }}"
steps:
- uses: actions/download-artifact@v4
with:
path: cibw-wheels
pattern: cibw-wheels-*
- uses: actions/download-artifact@v4
with:
path: sdist
name: sdist
- name: Flatten wheels to one directory
run: |
mkdir dist
find cibw-wheels/ -type f -name '*.whl' -exec mv '{}' ./dist/ ';'
find sdist/ -type f -name '*.gz' -exec mv '{}' ./dist/ ';'
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@ed0c53931b1dc9bd32cbe73a98c7f6766f8a527e # v1.13.0
with:
verbose: true
print-hash: true
repository-url: "${{ inputs.pypi_environment == 'testpypi' && 'https://test.pypi.org/legacy/' || '' }}"
---
.Github/Workflows/Release.Yml (.github/workflows/release.yml)
Copyright 2023 The Bazel Authors. All rights reserved.
#
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
#
http://www.apache.org/licenses/LICENSE-2.0
#
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Cut a release whenever a new tag is pushed to the repo.
name: Release
on:
workflow_dispatch:
inputs:
prerelease:
description: If set, publish this as a release candidate / prerelease version.
type: boolean
required: true
jobs:
build:
permissions:
contents: write
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Create release archive
id: create_archive
run: .github/workflows/create_archive.sh
- name: Release
uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2.2.1
with:
name: ${{ steps.create_archive.outputs.jsonnet_version }}
tag_name: ${{ steps.create_archive.outputs.jsonnet_version }}
prerelease: ${{ inputs.prerelease }}
draft: true
fail_on_unmatched_files: true
files: jsonnet-*.tar.gz
---